STM32 Flash

EEPROM Introduction and Comparative

前言 EEPROM是一種可以通過電子方式多次複寫的半導體儲存裝置。相比EPROM,EEPROM不需要用紫外線照射,也不需取下,就可以用特定的電壓,來抹除晶片上的資訊,以便寫入新的數據這邊會介紹各廠牌優劣勢,與I2C寫入方法 EEPROM 種類說明 I2C 優點:只要2條線就可以傳輸,能夠減少微控制器的連接埠數量,能將多個EEPROM連接在同一個匯流排上 缺點:傳輸速率慢。傳輸速率為400K~1Mbit/s SPI 優點:運轉頻率高,傳輸速度快 缺點:介面數量偏多 Microwire 與SPI相比傳輸速度慢 ,只有低容量的產品 各廠牌比較 目前ATMEL已慢慢較無人使用市占率如下如,右邊為粗略比較,可以看到目前ST為主要大宗,而ST的EEPROM目前有M25(SPI)與M24(I2C)為主要產品 EEPROM 讀寫控制(I2C通訊) 第一步要先確認需先確認預計使用的頻率(這部分與控制的電壓有關) 第二步務必遵照IC Datasheet的時序規範((這點非常重要) 會有可靠度問題) 第三步確認adress(以下圖M24256-BRMN6TP為例)可以看到有3支硬體腳位需要設定去定義(M24256E-F設一款特別的EEPROM把硬體腳位都拔除需要用軟體寫入) EEPROM 寫入流程 發送存取adress。24C02 一共256bit存取空間,adress從 0x00~0xFF,看需求在哪個位置就寫在哪個adress。 發送要存儲的數據的第一字節………..注意在寫數據的過程中,EEPROM 每個字節都回應”0”,來確認 EEPROM 數據成功,如果没有回應,說明寫入不成功 參考 [程式筆記] EEPROM 讀寫控制(I2C通訊) EEPROM芯片选型对比表 单片机:EEPROM介绍与操作 第23章     I2C—读写EEPROM

EEPROM Introduction and Comparative Read More »

Flash Operating on STM32 And HardFault Check

前言 近期客戶開始研究STM32G031 Flash讀寫,因客戶在寫入Flash使用官網給的Sample code然後再加入Timer 中斷後會持續跑入HardFault_Handler(),我開始研究Flash狀態與HardFault_Handler檢查程序 HardFault_Handler檢查程序 首先這邊和網路上不同使用的是STM32cudeIDE非MDK,因此網站上所建立的偵錯方法可能不完全適用。這邊先介紹會進入HardFault原因 記憶體溢位或則訪問越界。 堆疊溢位。 檢查方法 使用STM32內建檢查 單步執行尋找 使用內建檢查如下圖可以直接初步檢查問題所在,結果如下方所顯示 第二種方法是使用單步執行或設定斷點(最原始方法) Flash Operating Flash Write HAL_FLASH_Unlock() 檢查FLASH_SR 中的 BSY 位 FLASH_CR 寄存器中的 PG 位置 1 寫入 HAL_FLASH_Lock(); 官方的宣告涵式 下方是官方給的sample code Flash Read 演示結果 這邊使用STM32CubeProgrammer 去看內部Flash的數值可以看到全部寫入了12345678 注意事項 由上面演示結果來看Flash可以在指定位置寫入你要的數值,但這邊要注意可以看一下,下面圖程式執行前後內部Flash結果可以看到在一開始程式執行時候就有固定區域存有資料,因此如果把固定區域覆寫其他資料就會造成執行錯誤進入HardFault_Handler(下圖程式裡面加入Timer中斷程式因此紀錄的原始位置比起純粹的寫入還要多)這邊請參考stm32g0 reference manual P70 來把起始寫入位置做改動才能正常運行如果要單純在指定位置寫入資料請參考STM32GO中Flash充当EEPROM的操作 參考 怎么查找STM32的硬件错误HardFault_Handler? 手把手教你查詢stm32 HardFault_Handler除錯及問題方法 STM32GO中Flash充当EEPROM的操作 FLASH Programming in STM32 STM32 Flash

Flash Operating on STM32 And HardFault Check Read More »

Dual Bank Flash功能實現 ON STM32L4

前言 因Firmwave更新時我們期望原先運行的程式不會因此停止,所以這邊就要開創Dual Bank Flash的功能,一邊再下載更新Firmwave另一邊執行原先運行程式,最後再比對F/W version選擇最新的,就跳到該Bank開機 Flash 快閃記憶體,係一種EEPROM嘅形式,可以喺操作中多次擦寫嘅記憶體。呢種科技主要用喺一般性資料儲存,同埋喺電腦同其他數碼產品之間交換傳輸資料,例如記憶卡同USB手指。快閃記憶體係一種特殊嘅、以大區塊抹寫嘅EEPROM。早期嘅快閃記憶體進行一次抹除,就會清嗮全部喺晶片上嘅資料。 快閃記憶體嘅成本遠比可以位元組為單位寫入嘅EEPROM低[1],亦因為咁成為咗非揮發性固態儲存最重要亦最廣為採納嘅技術。PDA、手提電腦、數碼隨身聽、數碼相機同埋手機上都有用到快閃記憶體。另外,快閃記憶體喺遊戲主機上嘅採用亦都越嚟越多,取代咗儲存遊戲資料用嘅EEPROM或者帶有電池嘅SRAM。 雙bank IAP原理 STM32部分型號有提供雙BANK功能,簡單說就是把Flash切割成2區塊BANK1與BANK2。。當在bank1中運行app時就可以把新更新的固件寫入到bank2,寫完以後就切換到從bank2啟動運行新的app。如果當前在bank2運行就把新固件寫入bank1,寫完以後切換從bank1啟動。 如何判別與開啟Dual Bank Flash 首先在Datasheet裡面查看第一頁Memories是否存在2 bank(這邊以STM32L476/STM32L073為例),如果沒有會寫single bank Flash 開啟2 bank首先開啟STM32CubeProgrammer把下圖BFB2打勾(L476為例,L073基本上就是daul bank不用特別開啟) STM32F4 / G4 / G0 / L4 / L0  在SystemInit() 沒有重設Vector table , 當你使用Dual bank ,  並轉跳Bank之後,   產生中斷會導致系統異常 . 建議要將” USER_VECT_TAB_ADDRESS” 打開  (default 是disable) , 如此進到SystemInit()之後才會重置Vector table . what is UFB? 這是存在於SYSCFG寄存器中的一個位,它有兩個值:0或者1,功能是 0:FLASH bank1

Dual Bank Flash功能實現 ON STM32L4 Read More »

Shopping Cart