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参考资料

自定义元件的结构

Custom_Element 是在 user_define.h 中定义的结构。Custom_Element 也显示在 图 2-6 中。

来源标识符用于指示消息的来源。以下是来源标识符示例(CAN_ID_LENGTH =0,SPI_ID_LENGTH =4)。

  • 示例 1:CAN 接口接收和传输
    1. 当 CAN-SPI 桥接器接收到 CAN 消息时,来自 CAN 帧的 ID 是来源标识符,指示消息来自何处。
    2. 当 CAN-SPI 桥接器传输 CAN 消息时,来源标识符被忽略(CAN_ID_LENGTH 默认设置为 0)。
  • 示例 2:SPI 接口接收和传输(SPI 协议传输)
    1. 当 CAN-SPI 桥接器接收到 SPI 消息(SPI 协议传输)时,DEFAULT_SPI_ORIGIN_ID 是来源标识符,因为 SPI 没有 ID。
    2. 当 CAN-SPI 桥接器传输 SPI 消息(SPI 协议传输)时,来源标识符是 SPI 数据中的 4 字节 ID (SPI_ID_LENGTH 默认设置为 4),指示消息来自何处。
  • 示例 3 - SPI 接口接收和传输(SPI 透明传输)
    1. 当 CAN-SPI 桥接器接收到 SPI 消息(SPI 透明传输)时,DEFAULT_SPI_ORIGIN_ID 是来源标识符,因为 SPI 没有 ID。
    2. 当 CAN-SPI 桥接器传输 SPI 消息(SPI 透明传输)时,来源标识符会被忽略。(透明传输没有 ID 区域)。

目标标识符用于指示消息的目标。

  • 示例 1 - CAN 接口接收和传输
    1. 当 CAN-SPI 桥接器接收 CAN 消息时,DEFAULT_CAN_DESTINATION_ID 是目标标识符,因为 CAN_ID_LENGTH 默认设置为 0。SPI 传输不需要 ID。
    2. 当 CAN-SPI 桥接器传输 CAN 消息时,目标标识符是 CAN 帧中的 CAN ID。在此示例中,11 位或 29 位均得到支持。
  • 示例 2 - SPI 接口接收和传输(SPI 协议传输)
    1. 当 CAN-SPI 桥接器接收到 SPI 消息(SPI 协议传输)时,来自 SPI 数据的 4 字节 ID 是目标标识符(SPI _ID_LENGTH 默认设置为 4)。CAN 传输需要 ID 信息。
    2. 当 CAN-SPI 桥接器传输 SPI 消息(SPI 协议传输)时,目标标识符将被忽略,因为 SPI 传输不需要 ID。
  • 示例 3 - SPI 接口接收和传输(SPI 透明传输)
    1. 当 CAN-SPI 桥接器接收到 SPI 消息(SPI 透明传输)时,DEFAULT_SPI_DESTINATION_ID 是目标标识符(透明传输没有 ID 区域)。CAN 传输需要 ID 信息。
    2. 当 CAN-SPI 桥接器传输 SPI 消息(SPI 透明传输)时,目标标识符将被忽略,因为 SPI 传输不需要 ID。
/*user-defined information storage structure */
typedef struct {
    /*! Origin Identifier, indicating the origin of the message */
    uint32_t origin_id;
    /*! Destination Identifier, indicating the destination of the message */
    uint32_t destination_id;
    /*! Data Length Code */
    uint8_t dlc;
    /*! Data bytes */
    uint8_t data[TRANSMIT_DATA_LENGTH];
} Custom_Element;