ZHCAF59 March   2025 MSPM0G3507

 

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

结构

可以在 图 2-3 中看到具有协议传输功能的 CAN-UART 桥接器的结构。CAN-UART 桥接器可以分为四个独立的任务:从 UART 接收、从 CAN 接收、通过 CAN 传输、通过 UART 传输。两个 FIFO 实现双向消息传输和消息缓存。

图 2-4 展示了具有透明传输功能的 CAN-UART 桥接器的结构。添加了计时器中断,用于在一个数据包结束时检测超时。

UART 和 CAN 接收均设置为中断触发,以便能及时接收消息。进入中断时,首先通过 getXXXRxMsg() 提取消息。

对于 CAN,CAN 帧是固定格式。MSPM0 支持传统 CAN 或 CANFD。CANFD 的帧如 图 2-2 所示。本文中的示例可以在数据区域中为协议传输定义零、一和四个字节的附加 ID。

 CAN FD 帧图 2-2 CAN FD 帧
表 2-1 CAN 数据包格式
ID 区域 数据
协议传输 4/1/0 字节 (数据长度)字节

对于 UART 协议传输,根据串行帧信息来识别消息。UART 消息格式在 UART 数据包格式中列出。

表 2-2 UART 数据包格式
报头 ID 区域 数据长度 数据
协议传输 0×55 0×AA 4/1/0 字节 1 字节 (数据长度)字节
透明传输 (数据长度)字节

报头是一个固定的十六进制数字,组合为 0x55 0xAA,表示组的开头。ID 区域默认占用四个字节以匹配 CAN ID,可配置为一个字节,或者 ID 区域不存在。数据长度区域占用一个字节。数据长度区域之后是特定长度的数据。此格式作为示例提供。用户可以根据应用的要求修改格式。

对于 UART 透明传输,发生超时时会识别消息。所有字节都被视为纯数据。默认值是数据包信息的装载。(例如 ID)。

收到消息后,processXXXRxMsg() 转换消息的格式,并将消息作为新元素存储在 FIFO 中。FIFO 元素的格式如 图 2-5 所示。在 FIFO 元素的格式中,FIFO 元素中有四个类别:来源 ID、目标 ID、数据长度数据。用户还可以根据应用的要求更改消息项目。此外,该方案还会检查 FIFO 是否已满以进行过载控制。用户可以根据应用要求添加过载控制操作。

CAN 和 UART 传输均在主函数中执行。当检测到 FIFO 非空时,将提取 FIFO 元素。消息将被格式化并发送。对于 CAN,CAN 帧是固定格式。对于 UART,消息以 CAN 数据包格式中所述的格式发送。在本文的设计中,使用 UART TX 中断将数据填充到 UART TX 缓冲区中。

 CAN-UART 桥接器的结构:协议图 2-3 CAN-UART 桥接器的结构:协议
 CAN-UART 桥接器的结构:透明图 2-4 CAN-UART 桥接器的结构:透明

FIFO 结构如 图 2-5 所示。每个 FIFO 使用三个全局变量来指示 FIFO 状态。gUart2Can_FIFO, gUart2Can_FIFO.fifo_in 指示写入位置,gUart2Can_FIFO.fifo_out 指示读取位置,gUart2Can_FIFO.fifo_Count 指示 gUart2Can_FIFO 中的元素数量。

如果 gUart2Can_FIFO 为空,gUart2Can_FIFO.fifo_in 等于 gUart2Can_FIFO.fifo_out,并且 gUart2Can_FIFO.fifo_count 为零。

执行 processUartRxMsg() 时,来自 UART 的新消息将存储到 gUart2Can_FIFO 中。因此,gUart2Can_FIFO.fifo_in 会移动到下一个位置,并且 gUart2Can_FIFO.fifo_count 会递增 1。

将消息从 gUart2Can_FIFO 传输到 CAN 时,gUart2Can_FIFO.fifo_out 会移动到下一个位置,而 gUart2Can_FIFO.fifo_count 会减去 1。gCan2Uart_FIFOgUart2Can_FIFO 类似。

 FIFO 的结构图 2-5 FIFO 的结构