簡體   English   中英

寫入 STM32L4R5 的 Flash 時出現問題

[英]Issue with Writing to the Flash of STM32L4R5

我正在使用 S-record 文件通過引導加載程序更新 STM32L4R5 的 MCU 固件應用程序。 文件中 S 記錄的大多數行地址位於 flash 行的 16 字節偏移處(例如 0x08010010、0x08010020、0x08010030),但也有一些位於 8 字節和 12 位偏移處,如下所示:

S3150808F7200000000000000000000000000000000000000DCCFD135FE S30D080808F730E416F87F87F0100000000000049 S309080808F738E508E50108C8 S30908080808080808000080000800008000080000800008000

引導加載程序正在按照接收 S 記錄的順序將 16 字節 flash 行作為雙字寫入,用 0xFF 填充空白空間以保持它們不被編程。 在這種情況下,寫入地址 0x0808F730 處的 flash 行發生 3 次,如下所示:

0808F730 E416F87F01000000FFFFFFFFFFFFFFFF 0808F730 FFFFFFFFFFFFFFFFE5010108FFFFFFFF 0808F730 FFFFFFFFFFFFFFFFFFFFFFFFC1010108

但是,地址 0x0808F730 回讀為:

0808F730 E416F87F01000000FFFFFFFFFFFFFFFF

結果,應用程序沒有啟動,而是進入了錯誤處理程序。 我將 flash 用於使用調試器編程的操作應用程序和由引導加載程序編程的應用程序。 這一行顯示了唯一的區別。

有人知道 Flash 行是否只接受對 flash 行的單次寫入? 這應該如何工作,我錯過了什么嗎?

更新 S-records 文件以僅使用 16 字節對齊的寫入

在寫入 flash 以降低引導加載程序的復雜性時,引導加載程序僅接受對16 字節對齊地址的寫入並不少見。 解決方案是對 S 記錄進行后處理,以將所有未對齊的寫入合並到每個對齊地址的單個寫入中。

將 3 個寫入合並為 1

因此對於地址0x0808F730將 3 個 S-record 合並為 1 個 S-record

0808F730 E416F87F01000000FFFFFFFFFFFFFFFF 
0808F730 FFFFFFFFFFFFFFFFE5010108FFFFFFFF 
0808F730 FFFFFFFFFFFFFFFFFFFFFFFFC1010108
----------------------------------------- merge
0808F730 E416F87F01000000E5010108C1010108

引導加載程序正在按照接收 S 記錄的順序將 16 字節 flash 行作為雙字寫入,用 0xFF 填充空白空間以保持它們不被編程。 In this case writing to the flash row at address 0x0808F730 takes place three times, like this: 0808F730 E416F87F01000000FFFFFFFFFFFFFFFF 0808F730 FFFFFFFFFFFFFFFFE5010108FFFFFFFF 0808F730 FFFFFFFFFFFFFFFFFFFFFFFFC1010108

如果您在編程一次后請求寫入地址 0x0808F730,則雙字區域需要在再次編程之前處於擦除狀態(0xFFFFFFFF FFFFFFFF)。 只需將數據打包到緩沖區中並以雙字增量寫入。

我發現了這個問題的原因。 看起來 Flash 行只能寫入一次。 這可能與 ECC 有關。 我所做的是將 S-record 中的三個短字組合成一個 16 字節的字,然后立即寫入該行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM