1.有个下电保存参数的需求,采用的是PVD+W25Q256,使用SPI,正常情况下SPI速率配的分频是四分配,未在下电的时候测试,可以正常读写。
当在PVD中断中保存时,分频必须是8才能写入。
换成 QSPI+W25Q512,以为速度可以更快,但是一旦分频低于8依旧无法写入。查找后发现QSPI和SPI在STM32中时钟速度差不多,但是可以一次性写入多个bit,所以写入数据量应该是更大的。(未经测试,理论上来说是这样的)
-
并行性:
- SPI:每个时钟周期传输一个比特,是单工或者半双工通信。
- QSPI:通过使用多个数据线,可以在每个时钟周期传输多个比特,从而提高数据传输速率。它是全双工通信。
-
时钟速率:
- SPI:由于是串行通信,其时钟速率受到一些物理因素的限制,例如线路长度和电磁干扰等。在传统的SPI中,速度可能受到一些限制。
- QSPI:通过使用多个数据线,可以实现更高的时钟速率,提供更快的数据传输。
-
数据缓存:
- SPI:传输的数据可能需要在接收端进行缓存,以便处理。在高速传输时,缓存可能成为性能瓶颈。
- QSPI:由于有多个数据线,数据可以更快地传输,减少了对缓存的依赖,提高了整体性能。
-
支持的模式:
- SPI:通常支持多种模式,如主从模式、CPOL(时钟极性)、CPHA(时钟相位)等。
- QSPI:除了支持 SPI 的模式外,还可以支持更复杂的模式,例如通过使用多个数据线来实现 Quad 模式等。
2.使用W25Q512保存日志的时候发现,上电全部擦除以后第一次写入无法正常写入,第二次可以正常写入,查找以为是默认低电平的原因,改正后依旧不行。
检查当前驱动,并没有擦除逻辑,不擦直接写虽然可以写入数据,但是有部分数据会乱,换成了先读取进行擦除判断再写入,测试成功。
使用FreeRtos操作系统时,对于初始化有从外部flash读取数据的需求时,如果外部flash存储的有不同任务使用的数据时,正常的想法是放在不同的任务里读取外部flash中的数据,为了确保读取数据确实读取到时正常的想法是使用while(!=OK);
如果在多个任务调用这种函数,有可能会导致死机,解决这种死机的办法就是把这个while给去掉,改用if判断是否读取成功,经过测试,绝大多数情况下都是不成功的。
但是当把这个读取操作放在同一个任务中时就能够保证每次读取都成功并且不会导致死机