硬件支持
- 如果 SPI 使用 DMA 传输,必须保证以下限制:
- 传输长度需要保证8字节对齐,否则会出现数据越界的问题;
- 发送和接收数据的 buffer 地址必须对齐为64字节;
- Channel 单次传输数据量不 能超过4096字节;
- 支持 SPI 作为 Slave 功能;
- Mcu 侧 SPI 做 Slave 时,速率大于9M,只能采用 DMA 模式;
- 当 MCU 作为 SPI 从设备时,其通信时钟由主设备提供。因此,从设备必须对主设备的每一次数据传输请求做出即时响应。若采用中断处理模式,需确保 SPI 中断服务程序的执行时间足够短。若中断被阻塞过久,未能及时处理数据寄存器,将导致接收缓冲区溢出。为此,强烈推荐使用 DMA 传输模式,以硬件方式自动完成数据搬运,从而保障通信的实时性与可靠性。
- Mcu 侧 SPI 在8位模式下工作时,具有以下限制:
- 1个 SPI 并行收发最大速度: 50M;
- 2个 SPI 并行收发最大速度: 33.3M;
- 3个 SPI 并行收发最大速度: 25M;
- 4个 SPI 并行收发最大速度: 20M;
- 5个 SPI 并行收发最大速度: 15.6M;
- 6个 SPI 并行收发最大速度: 12.5M;
- SPI 外设只支持 MSB;
- SPI SpiCsPolarity 和 spitimeclk2c 都不支持配置,SpiCsPolarity 默认为低电平有效。
- SPI SpiCsToggleEnable 配置使能后,Spi 传输完一个 frame 后,会拉高 CS 引脚,仅支持 TRAILING 模式,LEADING 模式不支持。
- SPI DMA 模式相对于非 DMA 模式,消耗 CPU 负载更低。
- 当 SPI 采用非 DMA 方式发送数据时,若系统负载比较大,会因为 SPI 中断响应不及时导致 SPI FIFO 未能及时写入,从而导致 CS 引脚短暂拉高,此时推荐采用 DMA 模式。
- 如果使用场景是多个 Sequence 使用同一个 SPI IP 进行异步传输,且 Sequence 之间并没有传输完成先后顺序,则会存在 Sequence 传输排队的现象,此时需要在 SchM_Spi.c 文件中实现关中断临界区保护。
代码路径