本资源的原文使用英文撰写。 为方便起见,TI 提供了译文;由于翻译过程中可能使用了自动化工具,TI 不保证译文的准确性。 为确认准确性,请务必访问 ti.com 参考最新的英文版本(控制文档)。
该子系统演示了如何构建 CAN-I2C 桥接器。CAN-I2C 桥接器使器件能够在一个接口上发送/接收信息,并在另一个接口上接收/发送信息 下载该示例的代码。这里提供了两个示例代码,以支持 I2C 分别在控制器模式或目标模式下工作。
图 1-1 显示了该子系统的功能图。请注意,这里为 IO 中断添加了一条线路,以实现从 I2C 目标到 I2C 控制器的消息传输。
此应用需要 CANFD 和 I2C。
子块功能 | 外设使用 | 说明 |
---|---|---|
CAN 接口 | (1x) CANFD | 在代码中称为 MCAN0_INST |
I2C 接口 | (1 个)I2C | 在代码中称为 I2C_INST |
/**
* @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;
标头 | 地址 | 数据长度 | 数据 |
---|---|---|---|
0x55 0xAA | 4 字节 | 1 字节 | (数据长度)字节 |
图 1-3 所示为 CAN-I2C 桥接器 的代码流程图,其中说明了如何在一个接口中接收消息并在另一个接口中发送消息。CAN-I2C 桥接器 可以分为四个独立的任务:从 I2C 接收、从 CAN 接收、通过 CAN 发送、通过 I2C 发送。两个 FIFO 实现双向消息传输和消息缓存。
请注意,I2C 是 I2C 控制器控制发送和接收的一种通信方法。通常,I2C 目标器件无法发起通信。对于 I2C 目标到控制器通信,I2C 目标器件可以在需要发送消息时下拉 IO,如 图 1-3 中所示。当检测到 IO 为低电平时,I2C 控制器可以在 IO 中断中启动 I2C 读取命令,如图 1-4 所示。在该演示中,可以将 I2C 配置为 I2C 目标或控制器。
该应用利用 TI 系统配置工具 (SysConfig) 图形界面为 CAN 和 I2C 生成配置代码。使用图形界面配置器件外设可简化应用原型设计过程。
图 1-3 中所述流程的代码可在图 1-5 所示的示例代码文件中找到。
以下代码片段显示了修改接口功能的位置。表中的函数被分类到不同的文件中。I2C 接收和发送函数包含在 bridge_i2c.c 和 bridge_i2c.h 中。CAN 接收和发送函数包含在 bridge_can.c 和 bridge_can.h 中。FIFO 元素结构在 user_define.h 中定义。
用户可以通过文件轻松分离函数。例如,如果只需要 I2C 函数,用户可以保留 bridge_i2c.c 和 bridge_i2c.h 以调用相应函数。
有关外设的基本配置,请参阅 MSPM0 SDK 和 DriverLib 文档。
任务 | 函数 | 说明 | 位置 |
---|---|---|---|
I2C 接收 | readI2CRxMsg_controller() | 向从器件发送读取请求(仅限 I2C 主器件) | bridge_i2c.c bridge_i2c.h |
getI2CRxMsg_controller() | 获取接收到的 I2C 消息(仅限 I2C 主器件) | ||
getI2CRxMsg_target() | 获取接收到的 I2C 消息(仅限 I2C 从器件) | ||
processI2cRxMsg() | 转换接收到的 I2C 消息格式,并存储到 gI2C_RX_Element 中 | ||
I2C 发送 | processI2cTxMsg() | 转换要通过 I2C 发送的 gI2C_TX_Element 格式 | |
sendI2CTxMsg_controller() | 通过 I2C 发送消息(仅限 I2C 主器件) | ||
sendI2CTxMsg_target() | 通过 I2C 发送消息(仅限 I2C 从器件) | ||
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 元素、I2C/CAN 发送的输出元素和 I2C/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 ItoC_FIFO[ItoC_FIFO_SIZE];
Custom_Element C2I_FIFO[C2I_FIFO_SIZE];
uint16_t ItoC_in = 0;
uint16_t ItoC_out = 0;
uint16_t ItoC_count = 0;
uint16_t C2I_in = 0;
uint16_t C2I_out = 0;
uint16_t C2I_count = 0;
通过使用 CAN 分析仪,用户可以在 CAN 侧发送和接收消息。作为演示,可以将两个 LaunchPad 用作两个 CAN-I2C 桥接器(一个 I2C 主器件和一个 I2C 从器件)以形成一个环路。当 CAN 分析仪通过主器件 LaunchPad 发送 CAN 消息时,它可以从从器件 LaunchPad 接收 CAN 消息。
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 © 2024 德州仪器半导体技术(上海)有限公司