硬汉嵌入式论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: eric2013
收起左侧

加快SPI连续读写速度的配置方式

  [复制链接]

7

主题

36

回帖

57

积分

初级会员

积分
57
发表于 2022-8-4 13:28:35 | 显示全部楼层
硬汉哥,我发现你这个读写还是分开的,读数据的时候还需要发送一个dumy数据0xFF。能不能用下面这种方式实现读写同步:void SPI_Sync_Read_Write(uint8_t *pReadbuf, uint8_t *pWritebuf, uint8_t len)
{
    uint8_t i = 0;
    SPI_CS_LOW();
    for (i = 0; i < len; i++)
    {
        USER_SPI->DR = pReadbuf[i];

        /* 等待接收完成 */
        while (!(USER_SPI->SR & RXNE));
        pWritebuf[i] = USER_SPI->DR;
    }
    SPI_CS_HIGH();
}



不过这种方式有个疑问就是会存在延迟一个周期,就是你读的这次的数据可能是上次一的数据。。

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116747
QQ
 楼主| 发表于 2022-8-4 16:11:54 | 显示全部楼层
xdh873939316 发表于 2022-8-4 13:28
硬汉哥,我发现你这个读写还是分开的,读数据的时候还需要发送一个dumy数据0xFF。能不能用下面这种方式实现 ...

SPI是全双工的,每次读写都要执行,这个没办法。

另外硬件SPI有个read only或者write only配置选项,如果你的设备仅仅是需要读取或者写入,可以使用这种玩法。

追求更好的效果,就用SPI DMA吧。
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2025-1-2 10:57:36 | 显示全部楼层
这个技巧频率高了稳定吗?毕竟芯片说明书里连续传输的时序图里要求每发送一个这字节都要判断是否接收完毕,才能继续
JPEG2.jpg
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116747
QQ
 楼主| 发表于 2025-1-3 07:30:14 | 显示全部楼层
maidilong 发表于 2025-1-2 10:57
这个技巧频率高了稳定吗?毕竟芯片说明书里连续传输的时序图里要求每发送一个这字节都要判断是否接收完毕, ...

稳定,实际上操作SPI Flash这种读写控制就是单向。发送命令+地址+数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-7-4 21:26 , Processed in 0.278029 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表