1. 程式人生 > 其它 >如何載入資料檔案到擴充套件Flash上

如何載入資料檔案到擴充套件Flash上

通常通過Jlink可以將系統檔案和資料檔案載入到On-Chip的Flash上。通過JLink怎麼將資料檔案載入到擴充套件的Flash上就比較麻煩了。

方法一:直連

就是將擴充套件Flash的管腳直接連線到JLink裝置上,通過JLink直接將資料檔案下載到擴充套件的Flash上。

但是這種方法通常不可行,擴充套件Flash已經在板子上了,需要特製的夾具才能進行燒寫。

方法二:非直連法 Host->MCU->External Flash

  Seeger給出了非直連的解決方案,並且已經對應了幾種型別的MCU+External Flash.如果你的MCU不在支援列表中,就需要編寫程式來解決問題了。

可以參考Seeger的官方文件進行操作:https://wiki.segger.com/Open_Flashloader

  官方文件中給了幾個例子都是對On-chip的Flash進行操作的,對於使用SPI的External Flash的來說寫的就很含糊了。

  找到一箇中文的關於SPI External Flash的步驟說明。https://www.eet-china.com/mp/a79590.html

文章中沒有寫SPI相關的東西,看著有點不太明白。自己嘗試了一下。主要是有下面的問題需要解決:

  • base address的問題.
    • 其實Base address就是SPI External Flash的地址,如果你實現了XIP,就是你XIP的起始地址。如果沒有實現XIP,而是通過SPI的Read, Write來實現的話,Base Address通常是從0x00000000開始,當然你也可以寫到External Flash的非0起始地址。
  • Page Size 和Sector Size的問題
    • External Flash每次Erase的最小單位是Sector單位,寫資料的最小單位Page Size. 對於Nor Flash來說,每次寫操作之前,寫的地址必須被Erase一次,才能正常寫。我的裝置Page Size = 256 Byte, Sector Size = 4096 Byte
  • Erase & Program操作
    • 看到的例子程式碼中,都是直接操作Register進行相關操作的。對於SPI External Flash來說就不能直接操作Register了,需要通過SPI傳送命令進行Exernal FLash的相關操作。也就是將SPI相關的Erase和Program操作搬到對應的函式中就可以了。