首页 > 技术文章 > 如何加载数据文件到扩展Flash上

magicduan 2021-10-11 23:34 原文

通常通过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操作搬到对应的函数中就可以了。

推荐阅读