打印
[DemoCode下载]

高级技术-M031 的一个SPI和4个UART之间的数据传输

[复制链接]
760|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
EC_M031_SPI_TO_4_UART_V1.00.zip (1.74 MB)
本范例代码主要演示 M031 实现 1 个 SPI 和 4 个 UART 之间进行数据交换。
范例里有两个工程。Master 文件夹下是主机程序,它通过 SPI 和从机通讯,设置 SPI 总线时钟为 16MHZ,定时给从机发送数据、检测到从机请求后读取和解析从机数据、记录并打印传输数据的长度。Slave 文件夹下是从机程序,它收到主机的 SPI 数据后,解析并通过 UART 发送给其他设备;收到其他设备的 UART 数据后,对数据进行编码并通知主机来读取数据。本文介绍了 SPI 速率和角色的设置、PDMA 基本操作模式和 Scatter-Gather 操作模式的配置、SPI+PDMA 的传输和传完判断。


主机和从机通过 SPI 通讯
帧头(1 字节)+ 帧长度(2 字节)+ 通道(1 字节)+ 数据(128 字节)+ CRC(1 字节) + 帧尾(1 字节)

从机和其他设备通过 UART 通讯,采用数据透传。当主机空闲时定时给从机发送数据,发送间隔受到从机接收 buffer 长度、数据解析和转发速度的影响。如果主机发送速度比从机转发速度快,会导致从机接收 buffer 溢出。本范例设置主机发送的间隔是 15 ms,那么主机 SPI 向 4 个 UART 都发送一帧(128 字节)数据需要 15*4=60 ms。从机 UART 以 115200 bps 波特率再将数据转发出去需要 128*4*10/115200=44 ms。因此从机转发速度比主机发送速度快,不会发生从机接收 buffer 溢出。当检查到从机请求后,读取从机 数据,读取的帧长度固定。主机的 SPI TX 和 RX 都使用 PDMA 基本操作模式搬运数据,完成搬运任务后 PDMA 会回到空闲状态,下一次搬运需要重新启动 PDMA。当从机收到主机(SPI)数据,解析后通过 UART 主动发送给其他设备。但当从机收到其他设备(UART)数据,不能主动发送给主机(SPI),需要通过 GPIO 通知主机,等待主机来读取。主机读数据的帧长度固定,如果从机数据不足,帧结尾会用 0 补齐。为了避免 UART 收到少量数据就触发一次 SPI 传输,从机每隔 2 ms 检查是否有数据需要发送给主机。从机的 SPI TX 和 RX也使用 PDMA 搬运数据。SPI TX 使用 PDMA 的基本操作模式,完成搬运任务后回到空闲状态;SPI RX 使用 PDMA 的 Scatter-Gather 操作模式,采用两张描述符表轮流将数据搬运到指定内存。作为从机,为了保证不丢失数据,需要设置较大的数据接收 buffer,收到的数据尽快发送给对应的设备。buffer 的大小跟接收速度、数据量以及转发速度都有关系。从机 SPI 需要接收主机发送给 4 个串口的数据,并且 SPI 传输速度比 UART 快,所以 SPI 的 buffer 需要比 UART的 buffer 大。

更多详情下载附件,内有源码工程可供使用

使用特权

评论回复
沙发
heisexingqisi| | 2022-12-20 17:31 | 只看该作者
这个比较好,方便扩展从机使用。

使用特权

评论回复
板凳
tpgf| | 2023-1-4 08:45 | 只看该作者
spi和4个uart之间是如何进行硬件连接的呢

使用特权

评论回复
地板
nawu| | 2023-1-4 09:35 | 只看该作者
这四个串口是同时进行通讯?挂在一个总线上?

使用特权

评论回复
5
drer| | 2023-1-4 09:50 | 只看该作者
哦 我明白了 楼主是使用spi接收 然后使用uart进行发送数据是吗

使用特权

评论回复
6
zljiu| | 2023-1-4 10:06 | 只看该作者
这么多串口同时操作 会不会导致数据阻塞呢

使用特权

评论回复
7
kxsi| | 2023-1-4 10:18 | 只看该作者
四个串口是硬件上独立的吗 这种发送需要跑系统吗

使用特权

评论回复
8
tfqi| | 2023-1-4 10:31 | 只看该作者
流程图很清晰 但是需要判定的逻辑也是非常多的

使用特权

评论回复
9
中国龙芯CDX| | 2023-1-5 12:21 | 只看该作者
四个串口同时操作嘛?

使用特权

评论回复
10
xinpian101| | 2023-1-8 21:46 | 只看该作者
实现了串口转发的功能,方便用于串口服务器这种设备上

使用特权

评论回复
11
多串口好操作吗?

使用特权

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

本版积分规则

206

主题

3358

帖子

10

粉丝