ZHCADJ8 December 2023
图 1-1 展示了如何使用 MSPM0 作为 I2C 控制器,从 UART 接口向多个目标 I2C 外设传输数据或命令。传入的 UART 数据包经过专门格式化,便于过渡到 I2C 通信。图 1-1 可将通信中的错误传回主机设备。此示例的代码可在 UART 转 I2C 桥接器子系统代码中找到。
应用此设计需要 UART 和 I2C 外设。
子块功能 | 外设使用 | 说明 |
---|---|---|
UART TX/RX 接口 | UART | 在代码中称为 UART_Bridge_INST。默认波特率 9600。 |
I2C 控制器 | I2C | 在代码中称为 I2C_Bridge_INST。默认传输速率 100kHz。 |
表 1-2 根据表 1-1 中的要求列出了兼容器件和相应的 EVM。如果符合表 1-1 中的要求,也可以使用其他 MSPM0 器件和相应的 EVM。
兼容器件 | EVM |
---|---|
MSPM0Lxxxx | LP-MSPM0L1306 |
MSPM0Gxxxx | LP-MSPM0G3507 |
图 1-2、图 1-3 和图 1-4 分别针对图 1-1 展示了 UART 桥接器主要功能、Main() 和 UART ISR 和 I2C ISR 的代码流程图。
图 1-5 展示了正确桥接至 I2C 接口所需的 UART 数据包。显示的值是图 1-1 中定义的默认标头值。
图 1-1 应用利用 TI 系统配置工具 (SysConfig) 图形界面来生成器件外设的配置代码。使用图形界面配置器件外设可简化应用原型设计过程。
要更改 UART 数据包使用的特定值或最大 I2C 数据包大小,请修改文档开头的 #defines,如以下代码块所示:
/* Define UART Header and Start Byte*/
#define UART_HEADER_LENGTH 0x03
#define UART_START_BYTE 0xF8
#define UART_READ_I2C_BYTE 0xFA
#define UART_WRITE_I2C_BYTE 0xFB
#define ADDRESS_INDEX 0x00
#define RW_INDEX 0x01
#define LENGTH_INDEX 0x02
/*Define max packet sizes*/
#define I2C_MAX_PACKET_SIZE 16
#define UART_MAX_PACKET_SIZE (I2C_MAX_PACKET_SIZE + UART_HEADER_LENGTH)
代码中有几点是关于错误检测的注释。用户可以在代码中的这些点添加自定义错误处理和额外的错误报告。为简洁起见,此处并未包含所有错误处理代码交叉点。在实际操作中,请搜索代码中的注释,类似于下面代码块中的演示:
while (DL_I2C_isControllerRXFIFOEmpty(I2C_BRIDGE_INST) != true) {
if (gI2C_Count < gI2C_Length) {
gI2C_Data[gI2C_Count++] =
DL_I2C_receiveControllerData(I2C_BRIDGE_INST);
} else {
/*
* Ignore and remove from FIFO if the buffer is full
* Optionally add error flag update
*/
DL_I2C_receiveControllerData(I2C_BRIDGE_INST);
gError = ERROR_I2C_OVERUN;
}
}