硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5942|回复: 25
收起左侧

[SPI/QSPI] 使用SPI硬件片选NSS,完美解决SPI DMA双机通信第1次数据传输的错误问题

  [复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2022-4-9 02:41:28 | 显示全部楼层 |阅读模式
ST官方提供的例子是这样的:
[C] 纯文本查看 复制代码
_________________________                        _____________________________
|           ______________|                      |______________________       |
|          |     SPI1     |                      |        SPI1          |      |
|          |              |                      |                      |      |
|          |     CLK(PB3) |______________________|(PB3)CLK              |      |
|          |              |                      |                      |      |
|          |    MISO(PB4) |______________________|(PB4)MISO             |      |
|          |              |                      |                      |      |
|          |    MOSI(PB5) |______________________|(PB5)MOSI             |      |
|          |              |                      |                      |      |
|          |______________|                      |______________________|      |
|      __                 |                      |                             |
|     |__|                |                      |                             |
|     USER                |                      |                             |
|                      GND|______________________|GND                          |
|                         |                      |                             |
|_STM32H7 Master _________|                      |_STM32H7 Slave ______________|


这种方式有个比较明显的缺点,主从机上电次序不同,很容易造成从机CLK识别错误,即高低电平变化导致数据传输错位。

改成加入硬件SPI片选NSS引脚后,完美解决了这个问题。即如下接线方式:

[C] 纯文本查看 复制代码
 _________________________                        _____________________________
|           ______________|                      |______________________       |
|          |     SPI1     |                      |        SPI1          |      |
|          |              |                      |                      |      |
|          |     CLK(PB3) |______________________|(PB3)CLK              |      |
|          |              |                      |                      |      |
|          |    MISO(PB4) |______________________|(PB4)MISO             |      |
|          |              |                      |                      |      |
|          |    MOSI(PB5) |______________________|(PB5)MOSI             |      |
|          |              |                      |                      |      |
|          |    NSS(PG10) |______________________|(PG10)NSS             |      |
|          |______________|                      |______________________|      |
|                         |                      |                             |
|                         |                      |                             |
|                         |                      |                             |
|                      GND|______________________|GND                          |
|                         |                      |                             |
|_STM32H7 Master _________|                      |_STM32H7 Slave ______________|


主机:
image.png

从机:
image.png



回复

使用道具 举报

4

主题

180

回帖

192

积分

初级会员

积分
192
发表于 2022-4-9 09:33:36 | 显示全部楼层
老大,可以参考下你的H7的SPI主从机DMA代码吗,昨天调了一天从机要不就报错,要不就收不到数据
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 2022-4-9 09:53:33 | 显示全部楼层
浴火重生 发表于 2022-4-9 09:33
老大,可以参考下你的H7的SPI主从机DMA代码吗,昨天调了一天从机要不就报错,要不就收不到数据

本周发布教程。
回复

使用道具 举报

19

主题

337

回帖

394

积分

高级会员

积分
394
发表于 2022-4-9 12:34:49 | 显示全部楼层
浴火重生 发表于 2022-4-9 09:33
老大,可以参考下你的H7的SPI主从机DMA代码吗,昨天调了一天从机要不就报错,要不就收不到数据

SPI 主从双机通讯的实现

这是我之前做的实验,非常简单的实现,可以参考一下
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 2022-4-9 15:32:52 | 显示全部楼层
继续更新,下午焊接了好点的线,看看是不是能再提提速。
回复

使用道具 举报

4

主题

180

回帖

192

积分

初级会员

积分
192
发表于 2022-4-12 14:36:22 | 显示全部楼层
王海靖 发表于 2022-4-9 12:34
SPI 主从双机通讯的实现

这是我之前做的实验,非常简单的实现,可以参考一下

谢谢分享,已调通
回复

使用道具 举报

4

主题

180

回帖

192

积分

初级会员

积分
192
发表于 2022-4-20 10:58:55 | 显示全部楼层
偶尔从机SPI DMA会出现无法进入完成中断的情况,可能会是哪方便原因,主spi每次都可以正常进入完成中断
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 2022-4-20 11:17:37 | 显示全部楼层
浴火重生 发表于 2022-4-20 10:58
偶尔从机SPI DMA会出现无法进入完成中断的情况,可能会是哪方便原因,主spi每次都可以正常进入完成中断

是不是杜邦线飞线的,可以降低主机速度试试
回复

使用道具 举报

4

主题

25

回帖

37

积分

新手上路

积分
37
发表于 2024-7-2 13:30:54 | 显示全部楼层
请教下 我现在都是主从都是硬件片选NSS   主机是一直发送的3M的频率每次发送10个字节 间隔4us,   我从机点复位还是会出现错位的情况,  是不是哪里配置不对
12.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 2024-7-3 10:21:57 | 显示全部楼层
面包人 发表于 2024-7-2 13:30
请教下 我现在都是主从都是硬件片选NSS   主机是一直发送的3M的频率每次发送10个字节 间隔4us,   我从机点 ...

3M应该完全没问题的,你调节下极性相位试试。
回复

使用道具 举报

4

主题

25

回帖

37

积分

新手上路

积分
37
发表于 2024-9-15 12:07:27 | 显示全部楼层
eric2013 发表于 2024-7-3 10:21
3M应该完全没问题的,你调节下极性相位试试。

现在25M没问题了,能通信, 但是收发很久后 会突然出现从机接收到某个字节为00  其它数据都是对的 这是为啥  比如开头是0xA1A2A3A4    偶尔某次接收到的为0xA100A3A4
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 2024-9-16 02:37:34 | 显示全部楼层
面包人 发表于 2024-9-15 12:07
现在25M没问题了,能通信, 但是收发很久后 会突然出现从机接收到某个字节为00  其它数据都是对的 这是为 ...

这种是数据出错了。
回复

使用道具 举报

4

主题

25

回帖

37

积分

新手上路

积分
37
发表于 2024-9-16 10:54:06 | 显示全部楼层
eric2013 发表于 2024-9-16 02:37
这种是数据出错了。

但是我在逻辑分析仪看 那一帧数据是对的 就是从机接收到的某个字节为00 其他也是对的数据
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 2024-9-17 01:34:30 | 显示全部楼层
面包人 发表于 2024-9-16 10:54
但是我在逻辑分析仪看 那一帧数据是对的 就是从机接收到的某个字节为00 其他也是对的数据

SPI的内部上拉使能没,使能下,看看是不是好点。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-10-24 09:57:52 | 显示全部楼层
你好,我调试spi2的主从机通信时从机返回给主机的数据出现第一位移位的问题,请问能不能看一下你之前关于spi主从机通信的程序
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 2024-10-25 09:09:48 | 显示全部楼层
poco 发表于 2024-10-24 09:57
你好,我调试spi2的主从机通信时从机返回给主机的数据出现第一位移位的问题,请问能不能看一下你之前关于sp ...

这个帖子里面下载
https://forum.anfulai.cn/forum.p ... &extra=page%3D1

V7-070和V7-071
回复

使用道具 举报

7

主题

53

回帖

74

积分

初级会员

积分
74
发表于 2025-1-2 11:26:43 | 显示全部楼层
一种情况,如果从机想主动往从机上报数据,这种情况如何处理?此时的spi时钟如何来
回复

使用道具 举报

102

主题

573

回帖

894

积分

金牌会员

积分
894
QQ
发表于 2025-1-2 13:50:26 | 显示全部楼层
dc7170 发表于 2025-1-2 11:26
一种情况,如果从机想主动往从机上报数据,这种情况如何处理?此时的spi时钟如何来

SPI应该不能从机主动上报吧?要么搞个中断引脚,告诉主机你这里有数据需要被读取。
然后主机读取后,把中断清除。
回复

使用道具 举报

7

主题

53

回帖

74

积分

初级会员

积分
74
发表于 2025-1-2 14:17:01 | 显示全部楼层
会飞的猪_2020 发表于 2025-1-2 13:50
SPI应该不能从机主动上报吧?要么搞个中断引脚,告诉主机你这里有数据需要被读取。
然后主机读取后,把 ...

当前用的也是这种思路。不过可能存在一些时序问题。例如此时主机还未准备好
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-1-7 10:29:47 | 显示全部楼层
我现在也在调试SPI的主从机通信,也遇到了第一帧数据不正确的情况,但是主机连续发数据就不会出现问题。 这里我对“主从机上电次序不同,很容易造成从机CLK识别错误,即高低电平变化导致数据传输错位”,这句话不是特别能理解。可以再详细讲解一下吗,感谢
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-1-7 11:40:39 | 显示全部楼层
继续测试,发现主机的请求数据频率比较低的情况,从机收到的数据就会出现错误。但是主机的请求频率提高后,从机的接收数据就正常了。测试了从机配置Hardware-NSS,和不配置。从机用IT,和DMA 。结果都一样。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 2025-1-8 07:33:43 | 显示全部楼层
Duan_0712 发表于 2025-1-7 11:40
继续测试,发现主机的请求数据频率比较低的情况,从机收到的数据就会出现错误。但是主机的请求频率提高后, ...

将主机和从机GPIO配置的上拉电阻都使能了,看看是不是好点。
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
发表于 2025-5-9 10:38:01 | 显示全部楼层
Duan_0712 发表于 2025-1-7 11:40
继续测试,发现主机的请求数据频率比较低的情况,从机收到的数据就会出现错误。但是主机的请求频率提高后, ...

我遇到的问题和你相反,我的是主机请求频率高的情况下会出错
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
发表于 2025-5-9 10:38:33 | 显示全部楼层
Duan_0712 发表于 2025-1-7 11:40
继续测试,发现主机的请求数据频率比较低的情况,从机收到的数据就会出现错误。但是主机的请求频率提高后, ...

我遇到的问题和你相反,我的是主机请求频率高的情况下会出错
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
发表于 2025-5-9 10:38:58 | 显示全部楼层
Duan_0712 发表于 2025-1-7 11:40
继续测试,发现主机的请求数据频率比较低的情况,从机收到的数据就会出现错误。但是主机的请求频率提高后, ...

我遇到的问题和你相反,我的是主机请求频率高的情况下会出错
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
 楼主| 发表于 2025-5-10 10:21:03 | 显示全部楼层
zhujiale 发表于 2025-5-9 10:38
我遇到的问题和你相反,我的是主机请求频率高的情况下会出错

注意一点。你看你是不是超了

STM32H7主频400M时,配置为硬件SPI从机模式,主机对其写操作可以支持50MHz(50MHz-60MHz),主机对其读操作可以支持12.5MHz(12.5-20MHz)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 03:48 , Processed in 0.059957 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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