yxydoctor 发表于 2021-12-31 16:54:29

RT1052外置flash复合使用方法

RT1052外置flash一般用于程序存储器。支持XIP模式在线运行代码。但这颗flash也是可以当作普通闪存来使用的。可以存储一些图片文件或者是现场记录的数据。
一般情况下代码尺寸不会很大。比如一颗8MB的flash,可以安排2M存储代码,剩余的6M开辟为文件系统,存储配套文件。移植流程如下:
1 - 根据官方SDK移植flash驱动,这个环节很重要。主要是flash的字节读,页写,块擦除这几个接口函数。读数据地址已经映射为内存地址很方便。写,擦除操作需要关闭全局中断,意味着os会暂停。
2 - LittleFs文件系统移植,文件系统shell控制台移植。在此处可安排文件系统具体占用的flash空间。通过shell做一些交互操作(因为实际系统总会有第一次运行的时候,不建议实时格式化)。
3 - usbX移植,方便通过U盘自动把文件拷贝到flash文件系统(levelX没有移植成功,否则也可考虑用levelx代替lfs)。

以上这些移植过程,官方SDK都有相关例程,自己做点简单搬运调试即可。测试步骤:
1 - 通过ide将flash全部擦除包括文件系统。
2 - 下载代码(此时无文件系统)。
3 - 通过shell对文件系统格式化,创建所需文件夹。
4 - 插上U盘,系统自动会把U盘内容拷贝到flash。
5 - 实测稳定性很好。写过程因为关闭了全局中断,所以os应该是会暂停。但因为实时写频率不会很高,比如只是保存一些设置参数的话,写时间不会很长。
   对于50K的jpg文件,写时间约为50ms。连续下载160个jpg文件,大约5.5M,实测写时间90s,基本可接受。

    需要注意的是,文件转存可以采用多次写方式,这样缓冲区可以小一点。并且这个缓冲区还只能放在nocache里面,测试过clean cache方式和动态内存方式都不成功,也可能是方法不大对。

yxydoctor 发表于 2021-12-31 17:00:15

补充一点:U盘读写文件线程的优先级可考虑设为最低比如跟运行LED一个优先级。这是因为批量写时间会很长。
另外就是对flash写,一定要加把互斥锁。lfs不像filex是threadx亲儿子。不确定其内部有没有互斥处理。

vwsncr 发表于 2022-6-23 16:54:20

大佬可以发一下源码吗

ccc_clive 发表于 2023-6-15 17:45:13

是把程序搬运到sdram运行的吗?
页: [1]
查看完整版本: RT1052外置flash复合使用方法