打印
[其他ST产品]

STM32 非DMA快速读取SPI Flash

[复制链接]
302|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 读的参考代码如下:
for(i=0; i<recv_len;i++)
{
        SPI_I2S_SendData(SPI1, 0);
        while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);               
        *(recv_buf+i)=SPI_I2S_ReceiveData(SPI1);                  
}

使用特权

评论回复
板凳
ym0sly|  楼主 | 2023-6-29 00:06 | 只看该作者
笔者用示波器观察过SPI的读写波形,参考代码的读clock其实不是连续的(clock设置在18Mbit/s的情况下),8个clock后有一段较长的空闲。笔者通过分析,应该是代码不够精简造成的。调用子函数浪费了不少指令时间。

使用特权

评论回复
地板
ym0sly|  楼主 | 2023-6-29 00:06 | 只看该作者
最后修改代码如下:
  for(i=0; i<recv_len;i++)
        {                       
                SPI1->DR = 0;                          
                while((SPIx->SR & SPI_I2S_FLAG_RXNE)==RESET);               
                *(recv_buf+i)= SPI1->DR;                          
        }       

使用特权

评论回复
5
ym0sly|  楼主 | 2023-6-29 00:07 | 只看该作者
经过测试,此代码可以达到DMA方式的读取速度。
此小技巧**对用STM32 SPI的同学有帮助。

使用特权

评论回复
6
星辰大海不退缩| | 2023-6-30 11:46 | 只看该作者
楼主是否可以理解软件编程跟DMA一样速率?这个感觉其实不太准确

使用特权

评论回复
7
小小蚂蚁举千斤| | 2023-6-30 14:52 | 只看该作者
楼主说的是软件直接驱动SPI,应该SPI时许配置好了就可以了吧

使用特权

评论回复
8
Undshing| | 2023-7-1 22:50 | 只看该作者
软件模式会影响cpu任务吧

使用特权

评论回复
9
qiufengsd| | 2023-7-5 10:21 | 只看该作者
实际的读取速度受到芯片自身性能、SPI总线时钟频率、通信电路质量以及软件设计等多个因素的影响。

使用特权

评论回复
10
deliahouse887| | 2023-7-5 10:59 | 只看该作者
读FLASH时避免线程切换.               

使用特权

评论回复
11
maudlu| | 2023-7-5 11:26 | 只看该作者
通过配置DMA通道和相关寄存器,可以使SPI Flash的数据直接传输到存储器中,减少了STM32 的负载。

使用特权

评论回复
12
jkl21| | 2023-7-5 12:34 | 只看该作者
在STM32中,SPI的时钟频率可以通过设置预分频器和分频系数来调整。

使用特权

评论回复
13
averyleigh| | 2023-7-5 12:46 | 只看该作者
SPI 速率最快可以达到18Mbit/s.?

使用特权

评论回复
14
sanfuzi| | 2023-7-5 13:54 | 只看该作者
使用DMA 来进行SPI Flash的读取操作, 提高读取效率。

使用特权

评论回复
15
uptown| | 2023-7-5 14:38 | 只看该作者
SPI Flash通常支持多种读取命令和模式,如快速读取、双输出模式等。

使用特权

评论回复
16
everyrobin| | 2023-7-5 15:19 | 只看该作者
这个最大的传输bit是多少呢              

使用特权

评论回复
17
vivilyly| | 2023-7-5 15:51 | 只看该作者
提高SPI Flash的读取速度可能会引入一些稳定性和可靠性方面的问题

使用特权

评论回复
18
uytyu| | 2023-7-5 15:57 | 只看该作者
这个spi怎么提高速度呢              

使用特权

评论回复
19
maudlu| | 2023-7-5 16:09 | 只看该作者
如果需要连续读取大量数据,可以考虑使用批量读取功能。

使用特权

评论回复
20
AloneKaven| | 2023-7-5 18:01 | 只看该作者
最大传输速度是多少啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

161

帖子

1

粉丝