ZHCAF63 June   2024 MSPM0G3507

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
    1. 1.1 连接 CAN 和 I2C 的桥接器
  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 I2C 接收和传输(透明传输)
    6. 3.6 I2C 接收和传输(协议传输)
    7. 3.7 CAN 接收和传输
    8. 3.8 应用集成
  7. 4硬件
  8. 5应用程序方面
    1. 5.1 结构灵活
    2. 5.2 I2C 的可选配置
    3. 5.3 可选的 CAN 配置
    4. 5.4 CAN 总线多节点通信示例
  9. 6总结
  10. 7参考资料

自定义元件的结构

Custom_Element 结构在 user_define.h 中定义,图 2-5 所示就是此结构。

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

  • 示例 1 - CAN 接口接收和传输
    1. 当 CAN-I2C 桥接器接收到 CAN 消息时,来自 CAN 帧的 ID 是源标识符,指示消息来自何处。
    2. 当 CAN-I2C 桥接器传输 CAN 消息时,源标识符是 CAN 中的 1 字节 ID(CAN_ID_LENGTH 默认设置为 1),指示消息来自何处。
  • 示例 2 - I2C 接口接收和传输(I2C 协议传输)
    1. 当 CAN-I2C 桥接器接收到 I2C 消息(I2C 协议传输)时,如果 I2C 用作主机,则 I2C_TARGET_ADDRESS 是源标识符,指示消息来自何处。如果 I2C 用作从机,而 I2C 主机没有地址,则 DEFAULT_I2C_ORIGIN_ID 为源标识符
    2. 当 CAN-I2C 桥接器传输 I2C 消息(I2C 协议传输)时,源标识符是 I2C 数据中的 4 字节 ID(I2C _ID_LENGTH 默认设置为 4),指示消息来自何处。
  • 示例 3 - I2C 接口接收和传输(I2C 透明传输)
    1. 当 CAN-I2C 桥接器接收到 I2C 消息(I2C 透明传输)时,如果 I2C 用作主机,则 I2C_TARGET_ADDRESS 是源标识符,指示消息来自何处。如果 I2C 用作从机,并且 I2C 主机没有地址,则 DEFAULT_I2C_ORIGIN_ID 为源标识符
    2. 当 CAN-I2C 桥接器传输 I2C 消息(I2C 透明传输)时,源标识符将被忽略(透明传输没有 ID 区域)。

目标标识符指示消息的目标地址。以下是示例 (CAN_ID_LENGTH =1, I2C_ID_LENGTH =4)。

  • 示例 1 - CAN 接口接收和传输
    1. 当 CAN-I2C 桥接器接收到 CAN 消息时,来自 CAN 数据区域的 1 字节 ID(CAN_ID_LENGTH 默认设置为 1)是目标标识符,指示消息的目标地址(I2C 地址)。
    2. 当 CAN-I2C 桥接器传输 CAN 消息时,目标标识符是 CAN 帧中的 CAN ID。在此示例中,11 位和 29 位均受支持。
  • 示例 2 - I2C 接口接收和传输(I2C 协议传输)
    1. 当 CAN-I2C 桥接器接收到 I2C 消息(I2C 协议传输)时,来自 I2C 数据的 4 字节 ID 是目标标识符(I2C_ID_LENGTH 默认设置为 4)。CAN 传输需要 ID 信息。
    2. 当 CAN-I2C 桥接器传输 I2C 消息(I2C 协议传输)时,如果 I2C 用作主机,则目标标识符是 I2C 地址。如果 I2C 用作从机,则目标标识符将被忽略。(使用 IO 触发主机来生成消息。)
  • 示例 3 - I2C 接口接收和传输(I2C 透明传输)
    1. 当 CAN-I2C 桥接器接收到 I2C 消息(I2C 透明传输)时,DEFAULT_I2C_DESTINATION_ID 是目标标识符。(透明传输没有 ID 区域)。CAN 传输需要 ID 信息。
    2. 当 CAN-I2C 桥接器传输 I2C 消息(I2C 透明传输)时,如果 I2C 用作主机,则目标标识符是 I2C 地址。如果 I2C 用作从机,则目标标识符将被忽略(使用 IO 触发主机来传输消息)。
/*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;