硬汉嵌入式论坛

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

[SPI控制器] H7-TOOL的SPI控制器主从机操作说明,20cm杜邦线接线方式,SPI全双工25MHz通信速度(2022-04-10)

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115456
QQ
发表于 2022-4-10 11:58:01 | 显示全部楼层 |阅读模式
H7-TOOL做主机,STM32H7做从机。

V7开发板SPI从机程序下载,这个是专门为TOOL测试做的一个从机程序:

SPI从机测试例子.7z (7.64MB)

1、硬件接线方式如下:
image.png

[C] 纯文本查看 复制代码
_________________________                        _____________________________
|           ______________|                      |______________________       |
|          |     SPI1     |                      |        SPI1          |      |
|          |              |                      |                      |      |
|          |      CLK(D5) |______________________|(PB3)CLK              |      |
|          |              |                      |                      |      |
|          |     MISO(D3) |______________________|(PB4)MISO             |      |
|          |              |                      |                      |      |
|          |     MOSI(D2) |______________________|(PB5)MOSI             |      |
|          |              |                      |                      |      |
|          |______________|                      |______________________|      |
|      __                 |                      |                             |
|     |__|                |                      |                             |
|     USER                |                      |                             |
|                      GND|______________________|GND                          |
|                         |                      |                             |
|_H7-TOOL Master _________|                      |_STM32H7 Slave ______________|

程序里面默认做的是4字节全双工处理,大家可以根据自己的需求修改。

2、TOOL上位机配置如下,每次点击执行都可以看到效果:


大家自己修改使用,不需要每次都执行初始化,初始化仅需执行一次即可,即LUA函数SPI_Init仅执行一次即可。

image.png
大家将TOOL的串口线也和板子接上,可以看到TOOL的SPI控制器发给板子的数据:

image.png

3、这里注意一点即可,下面三个的实现本质是一样的,都是基于SPI全双工方式:

(1)仅写数据:实际上也有返回的全双工方式,只是程序没有使用。
(2)仅读取数据:也是全双工方式。
(3)读写数据:这里实际上同样是全双工方式,比如下面的配置同样是4次全双工通信,只是前两次用于写入,后两次用于读取,总共也是4次。

image.png

大家可以根据需要,配合延迟和循环之类的函数做其他操作。


下面是测试仅写效果:

image.png
image.png


下面是测试仅读效果:
image.png

image.png




回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115456
QQ
 楼主| 发表于 2022-4-11 03:41:51 | 显示全部楼层
更新完毕,更多的SPI主从机相关知识可以看V7开发板的SPI主从机双机通信教程:

教程第94章:https://www.armbbs.cn/forum.php?mod=viewthread&tid=86980
回复

使用道具 举报

8

主题

44

回帖

68

积分

初级会员

积分
68
发表于 2022-11-14 09:40:11 | 显示全部楼层
image.png image.png   这个接受或者发送必须要指定长度,如果不知道要接受多少长度,这个值赋多少呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115456
QQ
 楼主| 发表于 2022-11-14 11:04:49 | 显示全部楼层
luis_13 发表于 2022-11-14 09:40
这个接受或者发送必须要指定长度,如果不知道要接受多少长度,这个值赋多少呢?

不定长不用管这个,当然,越大越好。越大,每个缓存可以处理的时间就越长。

SPI DMA不定长的本质是双缓冲机制,一直开着接收就行。
回复

使用道具 举报

8

主题

44

回帖

68

积分

初级会员

积分
68
发表于 2022-11-14 18:30:19 | 显示全部楼层
eric2013 发表于 2022-11-14 11:04
不定长不用管这个,当然,越大越好。越大,每个缓存可以处理的时间就越长。

SPI DMA不定长的本质是双 ...

ok谢谢硬汉各。 明白了。
回复

使用道具 举报

1

主题

22

回帖

25

积分

新手上路

886064641534128530

积分
25
发表于 2023-9-19 16:20:33 | 显示全部楼层
可以h7-tools作为从机,单片机作为主机吗?在SPI不变差分驱动的情况下,降低总线塑料到2MHZ,中间线束能达到40cm吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115456
QQ
 楼主| 发表于 2023-9-20 09:10:52 | 显示全部楼层
杰瑞鼠 发表于 2023-9-19 16:20
可以h7-tools作为从机,单片机作为主机吗?在SPI不变差分驱动的情况下,降低总线塑料到2MHZ,中间线束能达到 ...

TOOL的SPI主从都已经做好了,测试两个TOOL使用50cm线可以50MHz双机通信,都是LUA API控制。API非常简单。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115456
QQ
 楼主| 发表于 2024-4-16 11:55:57 | 显示全部楼层
还是焊接上稳定牢固

SPI主从通信是全双工通信, 收发同时进行的。
主机写数据操作:比如写4个字节数据,实际也返回4个字节数据,只是我们没使用。
主机读数据操作:比如读取4个字节数据,实际我们也写入了4个数据,只是写入的什么不重要了。
主机写入后读取: 比如写入2个字节,读取2个字节,实际是连续进行了4次全双工通信,写入的2个数据使用前两次全双工,读取使用的后两个全双工。


290.jpg

29.jpg
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2024-6-4 00:33:46 | 显示全部楼层
硬汉兄,16位spi怎么处理,很奇怪的模式
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115456
QQ
 楼主| 发表于 2024-6-4 09:11:22 | 显示全部楼层
myxiaonia 发表于 2024-6-4 00:33
硬汉兄,16位spi怎么处理,很奇怪的模式

TOOL本身使用的H7芯片SPI是支持4-32bit的SPI配置,但是当前没有把这个也做成配置项弄出来。固定配置成了8bit。

得后面升级固件了,增加配置项。
回复

使用道具 举报

7

主题

33

回帖

54

积分

初级会员

积分
54
发表于 2024-8-12 11:46:16 | 显示全部楼层
eric2013 发表于 2024-4-16 11:55
还是焊接上稳定牢固

SPI主从通信是全双工通信, 收发同时进行的。

硬汉哥,现在我有一个STM32H7这边做SPI从机、FPGA那边做SPI主机的需求。
我现在对这个SPI之间的通信有点疑惑,比如FPGA那边发起读取数据的数据包过来,ARM这边可以解析完数据包后再回复给FPGA吗。我测试了感觉不太行。SPI是全双工的,ARM收到了数据的同时数据也发送出去了(我测试出来好像发的全是0?)。那如果要实现上述的需求,应该怎么做呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115456
QQ
 楼主| 发表于 2024-8-12 17:17:03 | 显示全部楼层
Yhlr 发表于 2024-8-12 11:46
硬汉哥,现在我有一个STM32H7这边做SPI从机、FPGA那边做SPI主机的需求。
我现在对这个SPI之间的通信有点 ...

分两次,一次写数据,一次读数据。

写数据的时候,不用关心全双工的返回数据。读数据的时候,FPGA随意写内容,这个不影响。
回复

使用道具 举报

7

主题

33

回帖

54

积分

初级会员

积分
54
发表于 2024-8-12 17:51:01 | 显示全部楼层
eric2013 发表于 2024-8-12 17:17
分两次,一次写数据,一次读数据。

写数据的时候,不用关心全双工的返回数据。读数据的时候,FPGA随意 ...

我今天下午的想法是,FPGA发送要读取的数据指令,然后ARM这边准备好数据,然后再次发送读取指令,此时读取的就是真正的数据。就好比第一次是预读取,第二次才是真正的读取。我这样理解应该没问题吧
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115456
QQ
 楼主| 发表于 2024-8-13 02:00:02 | 显示全部楼层
Yhlr 发表于 2024-8-12 17:51
我今天下午的想法是,FPGA发送要读取的数据指令,然后ARM这边准备好数据,然后再次发送读取指令,此时读 ...

对,可以的。
回复

使用道具 举报

7

主题

33

回帖

54

积分

初级会员

积分
54
发表于 2024-8-13 09:13:14 | 显示全部楼层

感谢硬汉解惑
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-27 02:16 , Processed in 0.365942 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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