• Menu
  • Product
  • Email
  • PDF
  • Order now
  • CAN 转 UART 桥接器

    • ZHCADK0 December   2023 MSPM0G3507

       

  • CONTENTS
  • SEARCH
  • CAN 转 UART 桥接器
  1.   1
  2.   2
  3. 重要声明
search No matches found.
  • Full reading width
    • Full reading width
    • Comfortable reading width
    • Expanded reading width
  • Card for each section
  • Card with all content
Subsystem Design

CAN 转 UART 桥接器

本资源的原文使用英文撰写。 为方便起见,TI 提供了译文;由于翻译过程中可能使用了自动化工具,TI 不保证译文的准确性。 为确认准确性,请务必访问 ti.com 参考最新的英文版本(控制文档)。

设计说明

该子系统演示了如何构建 CAN-UART 桥接器。CAN-UART 桥接器使器件能够在一个接口上发送或接收信息,并在另一个接口上接收或发送信息 下载此示例的代码。

图 1-1 显示了该子系统的功能图。

GUID-E8755F0C-AB07-44E8-8879-49BE40EBFCEE-low.svg图 1-1 子系统功能方框图

所需外设

此应用需要 CANFD 和 UART。

表 1-1 所需外设
子块功能 外设使用 说明
CAN 接口 (1x) CANFD 在代码中称为 MCAN0_INST
UART 接口 (1x) UART 在代码中称为 UART_0_INST

兼容器件

根据表 1-1 中的要求,该示例与表 1-2 中的器件兼容。相应的 EVM 可用于原型设计。

表 1-2 兼容器件
兼容器件 EVM
MSPM0G35xx、 LP-MSPM0G3507

设计步骤

  1. 确定 CAN 接口的基本设置,包括 CAN 模式、位时序、消息 RAM 配置等。考虑应用中哪些设置是固定的,哪些设置已更改。在示例代码中,CANFD 的仲裁速率为 250kbit/s,数据速率为 2Mbit/s。
    1. CAN-FD 外设的主要特性包括:
      1. 具有 ECC 的专用 1KB 消息 SRAM
      2. 可配置的发送 FIFO、发送队列和事件 FIFO(最多 32 个元素)
      3. 多达 32 个专用发送缓冲器和 64 个专用接收缓冲器。两个可配置的接收 FIFO(每个 FIFO 最多 64 个元素)
      4. 多达 128 个滤波器元素
    2. 如果启用 CANFD 模式:
      1. 完全支持 64 字节 CAN-FD 帧
      2. 高达 8Mbit/s 比特率
    3. 如果禁用 CANFD 模式:
      1. 完全支持 8 字节传统 CAN 帧
      2. 高达 1Mbit/s 比特率
  2. 确定 CAN 帧,包括数据长度、比特率切换、标识符和数据等。考虑应用中哪些部分是固定的,哪些部分需要更改。在示例代码中,标识符、数据长度和数据在不同帧中可能会发生变化,而其他项则固定不变。请注意,如果需要协议通信,用户需要修改代码。
    /**
     *  @brief  Structure for MCAN Rx Buffer element.
     */
    typedef struct {
        /*! Identifier */
        uint32_t id;
        /*! Remote Transmission Request
         *   0 = Received frame is a data frame
         *   1 = Received frame is a remote frame
         */
        uint32_t rtr;
        /*! Extended Identifier
         *   0 = 11-bit standard identifier
         *   1 = 29-bit extended identifier
         */
        uint32_t xtd;
        /*! Error State Indicator
         *   0 = Transmitting node is error active
         *   1 = Transmitting node is error passive
         */
        uint32_t esi;
        /*! Rx Timestamp */
        uint32_t rxts;
        /*! Data Length Code
         *   0-8  = CAN + CAN FD: received frame has 0-8 data bytes
         *   9-15 = CAN: received frame has 8 data bytes
         *   9-15 = CAN FD: received frame has 12/16/20/24/32/48/64 data bytes
         */
        uint32_t dlc;
        /*! Bit Rat Switching
         *   0 = Frame received without bit rate switching
         *   1 = Frame received with bit rate switching
         */
        uint32_t brs;
        /*! FD Format
         *   0 = Standard frame format
         *   1 = CAN FD frame format (new DLC-coding and CRC)
         */
        uint32_t fdf;
        /*! Filter Index */
        uint32_t fidx;
        /*! Accepted Non-matching Frame
         *   0 = Received frame matching filter index FIDX
         *   1 = Received frame did not match any Rx filter element
         */
        uint32_t anmf;
        /*! Data bytes.
         *   Only first dlc number of bytes are valid.
         */
        uint16_t data[DL_MCAN_MAX_PAYLOAD_BYTES];
    } DL_MCAN_RxBufElement;
  3. 确定 UART 接口的基本设置,包括 UART 模式、波特率、字长和 FIFO 等。考虑应用中哪些设置是固定的,哪些设置已更改。在示例代码中,UART 使用 9600 波特率。
    1. UART 外设的主要特性包括:
      1. 标准的异步通讯位:起始位、停止位、奇偶校验位;
      2. 完全可编程串行接口
      3. 独立的发送和接收 FIFO 支持 DAM 数据传输
      4. 支持发送和接收环回模式操作
  4. 确定 UART 帧。通常,UART 以字节为单位传输。为了实现高级别通信,用户可以通过软件实现帧通信。用户还可以根据需要引入特定的通信协议。在示例代码中,消息格式为 < 55 AA ID1 ID2 ID3 ID4 Length Data1 Data2 ...>。用户可以通过输入相同格式的数据,将数据从终端发送到 CAN 总线。55 AA 是标头。ID 区域为 4 字节。长度区域为 1 字节,表示数据长度。请注意,如果用户需要修改 UART 帧,还需要修改帧采集和解析代码。
    表 1-3 UART 帧形式
    标头 地址 数据长度 数据
    0x55 0xAA 4 字节 1 字节 (数据长度)字节
  5. 确定桥接器结构,包括需要转换哪些消息,如何转换消息等。
    1. 考虑桥接器是单向还是双向。通常每个接口都有两个功能:接收和发送。考虑是否只需要包含部分功能(如 UART 接收、CAN 发送)。在示例代码中,CAN-UART 桥接器是双向结构。
    2. 考虑要转换哪些信息以及相应的载体(变量、FIFO)。在示例代码中,标识符、数据和数据长度从一个接口转换到另一接口。代码中定义了两个 FIFO,如下所示。
      GUID-E5F146ED-303C-40E7-99B6-7601D125F2E1-low.svg 图 1-2 桥接器结构
  6. (可选)考虑优先级设计、拥塞情况、错误处理等。

设计注意事项

  1. 考虑应用中的信息流,确定各个接口需要接收或发送的信息和需要遵循的协议,并设计合适的信息传输载体来连接不同的接口。
  2. 建议先单独测试接口,然后再实现整体桥接器功能。此外,还要考虑异常情况的处理,如通讯故障、过载、帧格式错误等。
  3. 建议通过中断来实现接口功能,以确保及时通信。在示例代码中,接口功能通常在发生中断时实现,在 main() 函数中完成信息传递。

软件流程图

下面是 CAN-UART 桥接器 的代码流程图,说明了如何在一个接口中接收消息并在另一个接口中发送消息。CAN-UART 桥接器 可以分为四个独立的任务:从 UART 接收、从 CAN 接收、通过 CAN 发送、通过 UART 发送。两个 FIFO 实现双向消息传输和消息缓存。

GUID-F59F9B78-F853-4AF4-84DA-0B0A93067AFC-low.svg图 1-3 应用软件流程图

器件配置

该应用利用 TI 系统配置工具 (SysConfig) 图形界面为 CAN 和 UART 生成配置代码。使用图形界面配置器件外设可简化应用原型设计过程。

图 1-3 中所述流程的代码可在图 1-4 所示的示例代码文件中找到。

GUID-155360E2-91DF-4CDF-B34A-E7AFC0B94356-low.png图 1-4 文件结构

应用代码

以下代码片段显示了修改接口功能的位置。表中的函数被分类到不同的文件中。UART 接收和发送函数包含在 bridge_uart.c 和 bridge_uart.h 中。CAN 接收和发送函数包含在 bridge_can.c 和 bridge_can.h 中。FIFO 元素结构在 user_define.h 中定义。

用户可以通过文件轻松分离函数。例如,如果只需要 UART 函数,用户可以保留 bridge_uart.c 和 bridge_uart.h 以调用相应函数。

有关外设的基本配置,请参阅 MSPM0 SDK 和 DriverLib 文档。

表 1-4 函数和说明
任务 函数 说明 位置
UART 接收 getUartRxMsg() 获取接收到的 UART 消息

bridge_uart.c

bridge_uart.h

processUartRxMsg() 转换接收到的 UART 消息格式,并将消息存储到 gUART_RX_Element 中
UART 发送 processUartTxMsg() 转换要通过 UART 发送的 gUART_TX_Element 格式
sendUartTxMsg() 通过 UART 发送消息
CAN 接收 getCANRxMsg() 获取接收到的 CAN 消息

bridge_can.c

bridge_can.h

processCANRxMsg() 转换接收到的 CAN 消息格式,并将消息存储到 gCAN_RX_Element 中
CAN 发送 processCANTxMsg() 转换要通过 CAN 发送的 gCAN_TX_Element 格式
sendCANTxMsg() 通过 CAN 发送消息

Custom_Element 结构在 user_define.h 中定义。Custom_Element 是 FIFO 元素、UART/CAN 发送的输出元素和 UART/CAN 接收的输入元素的结构。用户可以根据需要修改结构。

typedef struct {
    /*! Identifier */
    uint32_t id;
    /*! Data Length Code*/
    uint32_t dlc;
    /*! Data bytes*/
    uint16_t data[64];
} Custom_Element;

对于 FIFO,它有 2 个全局变量。有 6 个全局变量用于跟踪 FIFO。

Custom_Element U2C_FIFO[U2C_FIFO_SIZE];
Custom_Element C2U_FIFO[C2U_FIFO_SIZE];
uint16_t U2C_in = 0;
uint16_t U2C_out = 0;
uint16_t U2C_count = 0;
uint16_t C2U_in = 0;
uint16_t C2U_out = 0;
uint16_t C2U_count = 0;

结果

通过 LaunchPad 上的 XDS110,用户可以使用 PC 在 UART 端发送和接收消息。作为演示,可以将两个 LaunchPad 用作两个 CAN-UART 桥接器以形成一个环路。当 PC 通过其中一个 LaunchPad 发送 UART 消息时,XDS110 可以从另一个 LaunchPad 接收 UART 消息。

GUID-56A4A4A2-CCEB-45EF-BB9C-CA263678A2CE-low.png图 1-5 演示
GUID-0DFB220D-52AC-467B-82DF-3A14A17C2B75-low.png图 1-6 PC 终端程序

附加资源

  • 下载 MSPM0 SDK
  • 了解有关 SysConfig 的更多信息
  • MSPM0G 技术参考手册 (TRM)
  • MSPM0G LaunchPad 开发套件
  • MSPM0 CAN Academy
  • MSPM0 UART Academy

重要声明和免责声明

TI 均以“原样”提供技术性及可靠性数据(包括数据表)、设计资源(包括参考设计)、应用或其他设计建议、网络工具、安全信息和其他资源,不保证其中不含任何瑕疵,且不做任何明示或暗示的担保,包括但不限于对适销性、适合某特定用途或不侵犯任何第三方知识产权的暗示担保。

所述资源可供专业开发人员应用TI 产品进行设计使用。您将对以下行为独自承担全部责任:(1) 针对您的应用选择合适的TI 产品;(2) 设计、验证并测试您的应用;(3) 确保您的应用满足相应标准以及任何其他安全、安保或其他要求。所述资源如有变更,恕不另行通知。TI 对您使用所述资源的授权仅限于开发资源所涉及TI 产品的相关应用。除此之外不得复制或展示所述资源,也不提供其它TI或任何第三方的知识产权授权许可。如因使用所述资源而产生任何索赔、赔偿、成本、损失及债务等,TI对此概不负责,并且您须赔偿由此对TI 及其代表造成的损害。

TI 所提供产品均受TI 的销售条款 (http://www.ti.com.cn/zh-cn/legal/termsofsale.html) 以及ti.com.cn上或随附TI产品提供的其他可适用条款的约束。TI提供所述资源并不扩展或以其他方式更改TI 针对TI 产品所发布的可适用的担保范围或担保免责声明。IMPORTANT NOTICE

邮寄地址:上海市浦东新区世纪大道 1568 号中建大厦 32 楼,邮政编码:200122

Copyright © 2023 德州仪器半导体技术(上海)有限公司

Texas Instruments

© Copyright 1995-2025 Texas Instruments Incorporated. All rights reserved.
Submit documentation feedback | IMPORTANT NOTICE | Trademarks | Privacy policy | Cookie policy | Terms of use | Terms of sale