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;
uint16_t gGetI2cRxMsg_Count;

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

  1. 在 IO 中断中,调用 readI2CRxMsg_controller() 向 I2C 从机发送 I2C_TRANSPARENT_LENGTH) 字节的读取请求。
  2. 调用 getI2CRxMsg_controller_transparent (),将消息存储到 gI2cReceiveGroup 中。当接收到 (I2C_TRANSPARENT_LENGTH) 个字节时,、消息接收完成。
  3. 调用 processI2CRxMsg_controller_transparent (),从 gI2cReceiveGroup 中提取数据,并将消息存储到 gI2C_RX_Element 中。
  4. gI2C_RX_Element 放入 gI2c2Can_FIFO 中。

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

  1. 调用 getI2CRxMsg_target_transparent () 将消息存储到 gI2cReceiveGroup 中。当 I2C 停止中断发生(I2C 停止条件)时,消息接收完成。
  2. 调用 processI2CRxMsg_target_transparent (),从 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_transparent()processI2CTxMsg_target_ transparent(),从 gI2C_TX_Element 接收数据,并将消息存储到 gI2cTransmitGroup 中。
  3. 调用 sendI2CTxMsg_controller()sendI2CTxMsg_target(),通过 I2C 传输 gI2cTransmitGroup。对于 I2C 从机,使用 IO 触发主机以读取从机中的数据,并且仅发送 (I2C_TRANSPARENT_LENGTH) 个字节。

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