疑问1:1st Option里一共有4根片选信号(SSx)和2根DQS信号,而Flash只需要一个片选和一个DQS,是不是所有片选+DQS组合都可以?在后面的内容里,痞子衡会逐一为大家解析这些疑问。
疑问2:1st Option里一共8根数据线,除了连接八线Octal/Hyper Flash之外,是否可以单连四线QSPI Flash?PortA和PortB是不是都可以连QSPI Flash?
疑问3:是否可以从1st和2nd Option里分别挑选信号线和数据线来连接Flash?比如1st Option里的PortA_DATA[1:0]和2nd Option里的PORTA_DATA[3:2]组成四线。
疑问4:那根FlexSPI Reset信号对于1st和2nd Option是不是都适用?
疑问5:是否可以挂两片QSPI Flash启动?具体怎么挂?两片Flash能否实现在一片Flash中执行代码去擦写另一片Flash?
疑问6:2nd Option里只有PortA和一根片选,但RT1050 Pinmux表里其也支持PortB和其他片选,那些信号线后续是否可以利用?
解答1:1st Option里一共4根片选信号(SSx)和2根DQS信号并不是随意组合都可以,无论是四线还是八线单Flash连接方案,均只有PORTA_SS0、PORTA_DQS这一种组合可用。其他组合主要用在双Flash连接方案中。三、双Flash连接方式(18种)
解答2:1st Option中仅PORTA可以单独接四线QSPI Flash,不支持PORTB单独接四线QSPI Flash。
解答3:不支持从1st和2nd Option里分别挑选数据线来连接Flash(不过就FlexSPI模块本身而言,理论上是支持的,但这么用的话需要解决数据线信号等长问题,因为这两个Option的走线长度在芯片内部不一样,总之不推荐这么用)。但是支持1st Option里取信号线,2nd Option里取数据线类似这种组合方式来连接Flash。
解答4:FlexSPI Reset信号是与1st、2nd Option无关的,所以两个Option下均可以用,不过Reset信号常用于八线Flash。
Note1:如果两个Flash挂在同一类型PORT上(都是PORTA或都是PORTB),即下面的第1、2、3、10、11、12种组合时,这两片Flash最好是同一个型号,这样电气特性容易保持一致。[tr]NumFlexSPI 1st OptionFlexSPI 2nd Option[/tr][tr]BootROM指定BootROM未指定BootROM指定BootROM未指定[/tr][tr]不适用LQFP100不适用LQFP100不适用LQFP144/100[/tr][tr]A_SS0A_DATA[3:0]
Note2:如果组合中所有引脚选择全部在BootROM指定范围里,那么BootROM直接支持Data Flash的配置。如果有引脚不在BootROM指定范围,那么需要用户在Code Flash用代码去实现Data Flash配置。
1 | ✔ Code | ✔ | ✔ Data | ||||||||||
2 | ✔ Code | ✔ | ✔ Data | ||||||||||
3 | ✔ Code | ✔ | ✔ Data | ||||||||||
4 | ✔ Code | ✔ | ✔ | ✔ | ✔ Data | ||||||||
5 | ✔ Code | ✔ | ✔ | ✔ Data | ✔ | ||||||||
6 | ✔ Code | ✔ | ✔ | ✔ | ✔ Data | ||||||||
7 | ✔ Code | ✔ | ✔ | ✔ Data | ✔ | ||||||||
8 | ✔ Code | ✔ | ✔ | ✔ | ✔ Data | ||||||||
9 | ✔ Code | ✔ | ✔ | ✔ Data | ✔ | ||||||||
10 | ✔ Data | ✔ Code | ✔ | ||||||||||
11 | ✔ Data | ✔ Code | ✔ | ||||||||||
12 | ✔ Code | ✔ | ✔ Data | ||||||||||
13 | ✔ | ✔ | ✔ Data | ✔ Code | ✔ | ||||||||
14 | ✔ | ✔ Data | ✔ Code | ✔ | ✔ | ||||||||
15 | ✔ | ✔ | ✔ Data | ✔ Code | ✔ | ||||||||
16 | ✔ | ✔ Data | ✔ Code | ✔ | ✔ | ||||||||
17 | ✔ | ✔ | ✔ Data | ✔ Code | ✔ | ||||||||
18 | ✔ | ✔ Data | ✔ Code | ✔ | ✔ |
解答5:可以挂两片QSPI Flash启动,一共有18种连接方式。两片Flash的方案还是不可以实现在Code Flash里原地执行代码去擦写Data Flash这种用法,但可以实现RWW的核心意义,下一节会单独展开讲这个。四、关于RWW的注意事项
解答6:不在BootROM指定的2nd Option PortB信号可以用于连接Data Flash,但是Data Flash的配置需要由Code Flash里的用户应用程序代码来完成,BootROM无法直接配置Data Flash。
方法1:在MPU里设置Code Flash对应的映射地址区域,使能Cache,并且保证应用程序代码里调用FlexSPI驱动去擦写Data Flash的关键部分(触发IP CMD执行)始终缓存在Cache里。这四种方法里首推方法4,既能实现需求,又能省Code Flash空间(FlexSPI驱动代码说小不小)。方法1其实是不推荐的,毕竟Cache是种玄学,岂是你想控制就控制的。
方法2:将应用程序代码里调用FlexSPI驱动去擦写Data Flash的关键部分搬运到RAM空间去运行,可以直接借助IDE特性去完成(比如IAR,可以用__ramfunc去修饰关键函数)。
方法3:在写Data Flash的时候借助DMA来搬运数据,不让CPU干预,具体可以参考官方《AN12564 Implement RWW on i.MX RT Series》
方法4:应用程序代码里的FlexSPI驱动直接使用BootROM API(代码是在ROM空间运行的)。
更多回帖