ZHCAF60 February   2025 MSPM0G3507

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
    1. 1.1 在 CAN 与 SPI 之间建立桥接
  5. 2实施
    1. 2.1 原理
    2. 2.2 结构
  6. 3软件说明
    1. 3.1 软件功能
    2. 3.2 可配置参数
    3. 3.3 自定义元件的结构
    4. 3.4 FIFO 的结构
    5. 3.5 SPI 接收和传输(透明传输)
    6. 3.6 SPI 接收和传输(协议传输)
    7. 3.7 CAN 接收和传输
    8. 3.8 应用集成
  7. 4硬件
  8. 5应用程序方面
    1. 5.1 结构灵活
    2. 5.2 可选的 SPI 配置
    3. 5.3 可选的 CAN 配置
    4. 5.4 CAN 总线多节点通信示例
  9. 6总结
  10. 7参考资料

SPI 接收和传输(透明传输)

通常,SPI 主机控制 SPI 通信,SPI 从机无法触发从机到主机的通信。在本设计中,使用的是另一个 IO。从机的 IO 下拉会通知主机存在需要发送的信息。用户可以根据需要,修改引脚或删除 IO 功能。

对于 SPI 接收,在 bridge_spi.c 中定义了三个全局变量。

uint8_t gSpiReceiveGroup[SPI_RX_SIZE];
Custom_Element gSPI_RX_Element;
uint16_t gGetSpiRxMsg_Count;

下面是 SPI 主机接收数据的过程。IO 中断用于检测 IO 下拉。

  1. 在 IO 中断中,调用 readSpiRxMsg() 来发送 (SPI_TRANSPARENT_LENGTH) 字节,以接收来自 SPI 从机的消息(SPI 发送和接收一起进行)。
  2. 调用 getSpiRxMsg_transparent() 将消息存储到 gSpiReceiveGroup 中。当接收到 (SPI_TRANSPARENT_LENGTH) 个字节时,消息接收完成。
  3. 调用 processSpiRxMsg_transparent() gSpiReceiveGroup 中提取数据并将数据存储在 gSPI_RX_Element 中。
  4. gSPI_RX_Element 放入 gSpi2Can_FIFO

下面是 SPI 从机接收数据的过程

  1. 调用 getSpiRxMsg_transparent() 将消息存储到 gSpiReceiveGroup 中。发生超时即表示消息接收完成。
  2. 调用 processSpiRxMsg_transparent() 从 gSpiReceiveGroup 中提取数据并将数据存储在 gSPI_RX_Element 中。
  3. gSPI_RX_Element 放入 gSpi2Can_FIFO

对于 SPI 传输,在 bridge_spi.c 中定义了两个全局变量。

uint8_t gSpiTransmitGroup[SPI_TX_SIZE];
Custom_Element gSPI_TX_Element;

下面是 SPI 主机和从机传输的过程。

  1. gCan2Spi_FIFO 获取 gSPI_TX_Element
  2. 调用 processSpiTxMsg_transparent()gSPI_TX_Element 获取数据并将数据存储到 gSpiTransmitGroup 中。
  3. 调用 sendSpiTxMsg() 以通过 SPI 传输 gSpiTransmitGroup。对于 SPI 从机,仅发送 (SPI_TRANSPARENT_LENGTH) 个字节。
  4. (仅限 SPI 从机)使用 IO 触发主机,向从机读取数据。