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

可配置参数

所有可配置参数都在 user_define.h 中定义,如 表 3-3 中所列。

对于 I2C,此示例中同时支持透明传输和协议传输,通过定义 I2C_TRANSPARENT 或 I2C_PROTOCOL 进行切换。

在透明传输中,用户可以为从 I2C 从机传输到 I2C 主机的消息配置默认数据长度 (I2C_TRANSPARENT_LENGTH)。表 3-2 列出了在不同模式下接收或发送的字节数。

在协议传输中,用户可以为不同格式配置 ID 长度。请注意,有一个固定的 2 字节标头 (0x55 0xAA) 和 1 个字节的数据长度。若要更详细地修改格式,用户可以直接修改代码。

#define I2C_TRANSPARENT
#ifdef I2C_TRANSPARENT
/* The format of I2C:
     * Transparent transmission - Data1 Data2 ...*/
/* data length for I2C master receiving or I2C slave transmitting*/
#define I2C_TRANSPARENT_LENGTH  (8)
#else
/* The format of I2C:
     * if I2C_ID_LENGTH = 4, format is 55 AA ID1 ID2 ID3 ID4 Length Data1 Data2 ...
     * if I2C_ID_LENGTH = 1, format is 55 AA ID Length Data1 Data2 ...
     * if I2C_ID_LENGTH = 0, format is 55 AA Length Data1 Data2 ...*/
//#define I2C_ID_LENGTH  (0)
//#define I2C_ID_LENGTH  (1)
#define I2C_ID_LENGTH  (4)
#endif

/* default address for I2C master receiving */
#define I2C_TARGET_ADDRESS (0x48)
表 3-2 在不同 I2C 模式下接收或发送消息的字节数
参数 I2C 接口:主机 I2C 接口:从器件
接收到多少字节? 发送了多少字节? 接收到多少字节? 发送了多少字节?
协议传输 (2+I2C_ID_LENGT+1+Length) 字节 (2+I2C_ID_LENGT+1+Length) 字节 (2+I2C_ID_LENGT+1+Length) 字节 (2+I2C_ID_LENGT+1+Length) 字节
透明传输 (I2C_TRANSPARENT_LENGTH) 字节 (Length) 字节 I2C 停止中断标识消息结束 (I2C_TRANSPARENT_LENGTH) 字节

对于 CAN,CAN 帧中包含 ID 或数据长度。用户可以通过更改 CAN_ID_LENGTH(默认值为 1)来在数据区域中添加另一个 ID。在本示例中,我们为 I2C 地址添加了一个单字节 ID。

/* The format of CAN:
     * if CAN_ID_LENGTH = 4, format is ID1 ID2 ID3 ID4 Data1 Data2 ...
     * if CAN_ID_LENGTH = 1, format is ID Data1 Data2 ...
     * if CAN_ID_LENGTH = 0, format is Data1 Data2 ...*/
//#define CAN_ID_LENGTH  (0)
#define CAN_ID_LENGTH  (1)
//#define CAN_ID_LENGTH  (4)

表 3-3 可配置参数
参数 可选值 说明
#define I2C_TRANSPARENT 定义/未定义 启用 I2C 透明传输。
#define I2C_PROTOCOL 定义/未定义 启用 I2C 协议传输。
#defineI2C_TRANSPARENT_LENGTH (8) 从 I2C 从机传输到 I2C 主机之消息的默认数据长度。仅在定义了 I2C_TRANSPARENT 时可用。在本例中,默认值为八个字节。
#define I2C_TARGET_ADDRESS (0x48) 从 I2C 从机传输到 I2C 主机之消息的默认 I2C 从机地址。在本例中,默认值为 0x48
#define I2C_ID_LENGTH (4) 0/1/4 可选 I2C ID 长度,与协议中的 ID 区域相关。仅在定义了 I2C_PROTOCOL 时可用。在本例中,默认值为四个字节。
#define CAN_ID_LENGTH (0) 0/1/4 可选 CAN ID 长度,与协议中的 ID 区域相关。在本例中,默认值为一个字节
#define TRANSMIT_DATA_LENGTH (12) <=64 数据区域的大小。如果接收到的消息包含的数据多于此值,会导致数据丢失
#define C2I_FIFO_SIZE (8) CAN 到 I2C FIFO 的大小。请注意 SRAM 的使用量。
#define ItoC_FIFO_SIZE (8) I2C 到 CAN FIFO 的大小。请注意 SRAM 的使用量。
#define DEFAULT_I2C_ORIGIN_ID (0x00) I2C 源 ID 的默认值
#define DEFAULT_I2C_DESTINATION_ID (0x00) I2C 目标 ID 的默认值
#define DEFAULT_CAN_ORIGIN_ID (0x00) CAN 源 ID 的默认值
#define DEFAULT_CAN_DESTINATION_ID (0x48) CAN 目标 ID 的默认值