几周前的项目到了, 现在不记录补上。。。。。
1、项目需求 由于我们使用的rt1050 程序时在外部flash 中跑的, 现在又想保存一些数据, 坑的1050 没有内部eeprom 。在者我们保存的数据量比较大, 所有想办法同时去操作外部flash 保存数据。
网络摘抄原文参考——http://blog.chinaaet.com/jihceng0622/p/5100053391 (感谢网络大神)
我们的代码以XIP的方式在QSPI Flash上执行的同时还要能擦写自己,首先想到的就是冲突,QSPI Flash只接了一块(RT1050可以接两块独立的QSPI Flash,这种情况不提)而且QSPI Flash又不是双端口的,这样擦写QSPI flash相关的函数就务必要保证运行在SRAM里才行,是不能边执行边擦写自己的,这逻辑上肯定是不对的,所以需要把Flash操作相关操作的API分配到了SRAM里执行(代码基于Keil工程,为了尽量兼容且减少改动工程配置,我直接把相关函数分配到了SRAM的NoCacheable数据段,实际上分配到任意一个SRAM区都行,只是需要手动在.scf文件里RAM区新添加个地址段),然后将需要分配到SRAM区的Flash相关操作函数通过添加__attribute__((section("NonCacheable")))编译属性即可实现,如下图所示,我将flash擦除的操作放到RAM里了;
2、总体的理解大概就是把操作flsh 的代码放在内部RAM 中,当需要操作外部flash 作为保存数据的时候