[其他ST产品] STM32 非DMA快速读取SPI Flash

[复制链接]
2046|39
 楼主| ym0sly 发表于 2023-6-29 00:06 | 显示全部楼层 |阅读模式
STM32 非DMA快速读取SPI Flash
一般的SPI Flash,如Windbond 的operation clock可以达到80MHz. STM32F10x 系列SPI 速率最快可以达到18Mbit/s. 因此想要快速读取SPI Flash,可以把SPI操作时钟设置到最大,且用DMA模式。但如果DMA已经有另外的用途,而我们又想进行SPI的快速读取,只能用软件模式了。

 楼主| ym0sly 发表于 2023-6-29 00:06 | 显示全部楼层
SPI 读的参考代码如下:
  1. for(i=0; i<recv_len;i++)
  2. {
  3.         SPI_I2S_SendData(SPI1, 0);
  4.         while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);               
  5.         *(recv_buf+i)=SPI_I2S_ReceiveData(SPI1);                  
  6. }
 楼主| ym0sly 发表于 2023-6-29 00:06 | 显示全部楼层
笔者用示波器观察过SPI的读写波形,参考代码的读clock其实不是连续的(clock设置在18Mbit/s的情况下),8个clock后有一段较长的空闲。笔者通过分析,应该是代码不够精简造成的。调用子函数浪费了不少指令时间。
 楼主| ym0sly 发表于 2023-6-29 00:06 | 显示全部楼层
最后修改代码如下:
  1.   for(i=0; i<recv_len;i++)
  2.         {                       
  3.                 SPI1->DR = 0;                          
  4.                 while((SPIx->SR & SPI_I2S_FLAG_RXNE)==RESET);               
  5.                 *(recv_buf+i)= SPI1->DR;                          
  6.         }       
 楼主| ym0sly 发表于 2023-6-29 00:07 | 显示全部楼层
经过测试,此代码可以达到DMA方式的读取速度。
此小技巧**对用STM32 SPI的同学有帮助。
星辰大海不退缩 发表于 2023-6-30 11:46 | 显示全部楼层
楼主是否可以理解软件编程跟DMA一样速率?这个感觉其实不太准确
小小蚂蚁举千斤 发表于 2023-6-30 14:52 | 显示全部楼层
楼主说的是软件直接驱动SPI,应该SPI时许配置好了就可以了吧
Undshing 发表于 2023-7-1 22:50 | 显示全部楼层
软件模式会影响cpu任务吧
qiufengsd 发表于 2023-7-5 10:21 | 显示全部楼层
实际的读取速度受到芯片自身性能、SPI总线时钟频率、通信电路质量以及软件设计等多个因素的影响。
deliahouse887 发表于 2023-7-5 10:59 | 显示全部楼层
读FLASH时避免线程切换.               
maudlu 发表于 2023-7-5 11:26 | 显示全部楼层
通过配置DMA通道和相关寄存器,可以使SPI Flash的数据直接传输到存储器中,减少了STM32 的负载。
jkl21 发表于 2023-7-5 12:34 | 显示全部楼层
在STM32中,SPI的时钟频率可以通过设置预分频器和分频系数来调整。
averyleigh 发表于 2023-7-5 12:46 | 显示全部楼层
SPI 速率最快可以达到18Mbit/s.?
sanfuzi 发表于 2023-7-5 13:54 | 显示全部楼层
使用DMA 来进行SPI Flash的读取操作, 提高读取效率。
uptown 发表于 2023-7-5 14:38 | 显示全部楼层
SPI Flash通常支持多种读取命令和模式,如快速读取、双输出模式等。
everyrobin 发表于 2023-7-5 15:19 | 显示全部楼层
这个最大的传输bit是多少呢              
vivilyly 发表于 2023-7-5 15:51 | 显示全部楼层
提高SPI Flash的读取速度可能会引入一些稳定性和可靠性方面的问题
uytyu 发表于 2023-7-5 15:57 | 显示全部楼层
这个spi怎么提高速度呢              
maudlu 发表于 2023-7-5 16:09 | 显示全部楼层
如果需要连续读取大量数据,可以考虑使用批量读取功能。
AloneKaven 发表于 2023-7-5 18:01 | 显示全部楼层
最大传输速度是多少啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

330

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部