基于SPI的双MCU通信

AI summary
基于SPI的双MCU通信需要设置通信帧格式以降低错误率,设计了7字节的帧结构。硬件上需确保一个MCU为主机,另一个为从机,并正确连接SPI线和地线。软件配置包括全双工模式和一致的时钟设置。使用TMS320C6713与STM32进行通信时,需配置各自的寄存器,并在发送字节间加入延时以避免通信错误。
Tags
SPI Communication
MCU Configuration
Data Frame Structure
Last edited by
Last edited time
Sep 23, 2024 02:29 PM

设置通信帧格式

SPI通信的配置那只是基本的底层,要保证通信做得漂亮,设计通信的帧格式将大大降低错误概率。比如,因为我暂时最多传输一个字(16bit)的数据,设计如下7字节的帧格式:
notion image
Frame
将帧格式对应到数据结构就是一个结构体:
然后,所有对帧的操作都归结到对上面结构体的操作,如:

SPI主从机配置注意事项

首先考虑硬件上要注意的:
  1. 必需设置1个MCU为主机,另1个为从机,两者接线是CLK、MISO、MOSI、SEL一一对应连接。注意是一一对接,也就是说主机MISO就接到从机的MISO、主机MOSI就接到从机的MOSI
  1. 除了要接SPI的4根线意外,还必须连接地线(共地),提供参考电势
软件配置上:
  1. CLK永远是由主机发出,因此必须使用全双工模式,在读数据的时候同时写一个数据提供总线时钟
  1. 时钟的空闲状态和时钟的采样沿的主从机配置要保持一致
  1. 我使用的是TMS320C6713与STM32进行SPI通信,DSP为主机,ARM为从机,则两端的配置如下:
      • ARM端
      notion image
      ARM
      其中影响通信数据的段包括:Datasize;CPOL和CPHA分别表示时钟空闲状态和时钟采样边沿,主从机必须一致;FisrtBit也很重要,否则接收到的数据是倒转的,因为我的DSP是MSB格式,所以ARM端也设成MSB。
      • DSP端
      DSP端使用McBSP模拟SPI主机功能,其寄存器配置如下:
      主要配置好时钟频率,空闲状态、采样边沿,帧长。
  1. 另外,考虑到主从机间时钟采样可能存在的问题,在使用SPI发送帧的时候,最后帧的每个发送字节间存在短暂的时延,避免通信错误的发送,如下,我Delay了5us,

    逻辑分析仪采集SPI总线数据图

    共1帧的数据:
    notion image
    img1
    前4个字节:
    notion image
    img2
    后3个字节:
    notion image
    img3
    Loading...