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

I2C 接收和传输(协议传输)

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

对于 I2C 接收,bridge_i2c.c 中定义了两个全局变量。

uint8_t gI2CReceiveGroup[I2C_RX_SIZE];
Custom_Element gI2C_RX_Element;

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

  1. 在 IO 中断中,调用 readI2CRxMsg_controller() 向 I2C 从机发送读取请求。
  2. 调用 getI2CRxMsg_controller() 以检测标头,从而将完整消息存储在 gI2cReceiveGroup 中。
  3. 调用 processI2CRxMsg_controller(),从 gI2cReceiveGroup 中提取数据,并将数据存储在 gI2C_RX_Element
  4. gI2C_RX_Element 放入 gI2c2Can_FIFO 中。

下面是 I2C 从机接收的过程。

  1. 调用 getI2CRxMsg_target(),将消息存储到 gI2cReceiveGroup 中。
  2. 调用 processI2CRxMsg_target(),从 gI2cReceiveGroup 中提取数据,并将数据存储到 gI2C_RX_Element 中。
  3. gI2C_RX_Element 放入 gI2c2Can_FIFO 中。

对于 I2C 传输,bridge_i2c.c 中定义了四个全局变量。

uint8_t gI2cTransmitGroup[I2C_TX_SIZE];
Custom_Element gI2C_TX_Element;
uint32_t gTxLen, gTxCount;

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

  1. gCan2I2c_FIFO 获取 gI2C_TX_Element
  2. 调用 processI2CTxMsg_controller()/processI2CTxMsg_target(),从 gI2C_TX_Element 获取数据、并将消息存储到 gI2cTransmitGroup 中。
  3. 调用 sendI2CTxMsg_controller()sendI2CTxMsg_target(),通过 I2C 传输 gI2cTransmitGroup。对于 I2C 从机,使用 IO 触发主机以读取从机中的数据。

主机模式和从机模式的函数都包含在 bridge_i2c.c 中。