532791928@qq 发表于 2018-3-16 20:09:46

关于RT1050操作外部QSPIFlash疑问

各位大神,请教个问题:
      RT1050如果配置从外部QSPI Flash启动,根据其启动方式,会在QSPI Flash的前几k空间读取配置数据(boot data ,ivt数据等),根据配置数据配置和外部QSPI Flash通信速率,操作序列等。
       然后就有个疑问,因为有些数据要求掉电不丢失,且板上并未配备其他存储设备,所以数据就得保存在QSPI Flash中(存放位置肯定不能在代码存储位置上),这就涉及了要初始化FlexSPI,才能使用FlexSPI的读写擦除功能,但是RT1050在上电的时候已经配置了FlexSPI,如果我此时在配置FlexSPI(或者说配置和启动时配置的方式,频率等有很大差异),岂不是会影响mcu从QSPI Flash中读取程序指令等?求指教?
       肯定是可以配置FlexSPI来操作Flash的,是否上电启动时配置的模式和程序运行时配置FlexSPI的模式不同,可以让他们共存操作QSPI Flash?
       是否有相关文档说明此问题的?求大神指教,谢谢!

zjsxfkf 发表于 2018-3-16 20:22:58

程序能放内部RAM跑就放内部ram,不行放SDRAM.我觉得QSPI上电加载下程序就OK了,还可以存下数据

unknownuser 发表于 2018-3-16 21:41:37

市面上大多数QSPI FLASH都不支持RWW(写时读)功能,这就意味着你不能边从FLASH上执行代码边操作FLASH。这个时候一般通用的做法是把FLASH操作的函数都搬到RAM里执行,在擦写FLASH的时候关系统全局中断,擦写操作完成后,恢复FLEXSPI的寄存器设置(主要是CLOCK 等,如果没有修改过,几乎不用做什么额外的操作),清除FLEXSPI内部cache(如果L1-DCache开了,建议也清除擦写区域的缓存)然后开中断,大数情况下应该就可以工作了。

东风永_NQ8b0 发表于 2018-3-16 22:47:41

楼主的意思是flexspi xip执行的时候还想保存数据在flash上是不?如果这样做的话,我已经实现,提供一个思路,可以将flash的IP Commander读、擦除、编程等操作单独做一个小固件,启动时加载到内存中,XIP执行时需要保存数据到flash时 ,跳转到内存中的小固件去执行。

eric2013 发表于 2018-3-16 22:54:14

这么搞太劳民伤财了,严重增加操作难度。
其实就是STM32将内部Flash来模拟EEPROM的坑X做法,到了i.MX RT竟然还这么干,太影响系统执行了,这种做法都不知道当年谁提出来的,好坑。
LPSPI挂载个flash多好。

unknownuser 发表于 2018-3-17 08:22:11

eric2013 发表于 2018-3-16 22:54
这么搞太劳民伤财了,严重增加操作难度。
其实就是STM32将内部Flash来模拟EEPROM的坑X做法,到了i.MX RT竟 ...

这个怎么说呢,如果项目对成本不敏感,而且LPSPI的引脚很富余,那无疑这样会更省心省力,软件也好做。但是如果项目对成本非常敏感,可能用RAM function这种方式是唯一的选择了。实际上,代码在程序里执行里,频繁擦写FLASH的用法应该不常见,加上现在的FLASH普遍page program的时间都能在1MS内完成,对代码执行的效率影响可能比较有限。如果真的是对执行效率特别敏感的,估计代码都是搬到RAM里跑的,那其实也不存在问题了。

byccc 发表于 2018-3-17 10:34:43

这种操作显然是不安全的,即使加载到内部SRAM,因为掉电保护都没有,你的程序又在QSPI里面存着,很容易导致整个系统崩溃。

用程序Flash充当EEPROM的做法适合非安全关键项目。

unknownuser 发表于 2018-3-17 10:58:37

byccc 发表于 2018-3-17 10:34
这种操作显然是不安全的,即使加载到内部SRAM,因为掉电保护都没有,你的程序又在QSPI里面存着,很容易导致 ...
这个似乎是分情况的,安全不安全要看具体的用例,我想了一下,似乎还是可以在安全上有一定的保障

1. 为了防止在FLASH里运行的程序被意外擦除,可以把运行代码用FLASH自带的BLOCK protection之类的命令保护起来

2. 如果要更新应用程序,那显然要做备份升级的,每次要升级的升序写在非执行代码区域,然后FLASH的开头存放bootloader,写完升级程序后,重启系统,由bootloader来进行可靠升级。这种情况下,似乎不会引起什么崩溃的问题。

3.如果只是要存一些运行的参数,合理划分好FLASH的空间,应该还是安全的。


byccc 发表于 2018-3-17 11:02:29

unknownuser 发表于 2018-3-17 10:58
这个似乎是分情况的,安全不安全要看具体的用例,我想了一下,似乎还是可以在安全上有一定的保障

1....

理论上是的,实际效果不行,我们的控制板经常莫名其妙出问题,后来果断外置EEPROM了。

unknownuser 发表于 2018-3-17 11:09:11

byccc 发表于 2018-3-17 11:02
理论上是的,实际效果不行,我们的控制板经常莫名其妙出问题,后来果断外置EEPROM了。

这样的确最省事,工业控制的时候,似乎现场环境比较复杂,那些消费电子的似乎这样干的不在少数

eric2013 发表于 2018-3-17 11:34:21

如果是固件更新的话,推荐Apache Mynewt的MCUboot

http://www.armbbs.cn/forum.php?mod=viewthread&tid=29999

532791928@qq 发表于 2018-3-25 15:44:23

unknownuser 发表于 2018-3-17 10:58
这个似乎是分情况的,安全不安全要看具体的用例,我想了一下,似乎还是可以在安全上有一定的保障

1....

感谢你的回复,就现在项目而言只能是使用这样的方式的,但是我目前暂未实现成功,请问楼主有如此做过么?
目前我的做法就是将包含操作flash函数的文件,都指定存放在ram中,但是运行时发现读写失败,函数应该是没问题的,因为将整个测试成功配置在ram中运行时,flash操作运行正常
我是IAR平台下,参照https://blog.csdn.net/leumber/article/details/53257072进行配置,就是不知道那部分配置有问题,请指教,特别是这个文章后说到调用__iar_data_init3();,这个不理解,这个函数是需要自己调用?

532791928@qq 发表于 2018-3-25 15:46:01

感谢各位的回复,目前而言只能是存放在flash中,所以请问将指定函数存在ram中,该如何配置,我按照https://blog.csdn.net/leumber/article/details/53257072进行配置,不成功

532791928@qq 发表于 2018-4-23 22:04:14

东风永_NQ8b0 发表于 2018-3-16 22:47
楼主的意思是flexspi xip执行的时候还想保存数据在flash上是不?如果这样做的话,我已经实现,提供一个思路 ...

大神,你说的单独做成一个小固件,意思是flash上保存两个程序,一个应用程序,一个你说的小固件程序?请问如何操作实现?如何跳转?

alexyzhov 发表于 2018-4-28 18:29:14

可以参考这篇文章:http://blog.chinaaet.com/jihceng0622/p/5100053391

alexyzhov 发表于 2018-4-28 18:29:17

可以参考这篇文章:http://blog.chinaaet.com/jihceng0622/p/5100053391
页: [1]
查看完整版本: 关于RT1050操作外部QSPIFlash疑问