I2C 主机最大接收长度限制说明
未解决
YT SDK
-
1. 问题背景
- 软件:MD24 SDK 1_4_0_HF001 I2c_Master_Demo
- 硬件:MD24 EVB
- 背景描述:
- 客户反馈 MD24 I2C1 Master 接收超过 256 Byte 数据后出现接收异常的情况
- 实际测试最大只能接收 256 Byte,如果设置 rxSize 是 259 Byte,理论上 i2c master SCL 应该发送 259 Byte 的时钟波形,但实际只发送 3 byte 就结束了,259 Byte - 256 Byte = 3 Byte
- I2C_DRV_MasterReceiveData 断言判断对 rxSize 要求不大于 256 Byte

2. 原因分析
- 关于 I2C Master、Slave 一次性可以收发多少 Data 取决于 MDATA、SDATA 和 Functional Description。


- I2C Master Receive 的命令需要告知接收数据长度,即 I2C_DRV_MasterReceiveData API 的第三个参数 rxSize
- Receive(DATA + 1) 对应的就是 MDATA 寄存器的 RXDATA 位(7bit,最大值为 255),所以 I2C Master Receive 最大一次只能接收 256 Byte。
3. 结论
- I2C 的操作命令只有对 Master Receive 的命令需要提前传入 MDATA.RXDATA
- Master Transfer、Slave Receive 和 Slave Transfer 都对 MDATA.TXDATA、SDATA.TXDATA 和 SDATA.RXDATA 无要求
- 综上所述,I2C Master Receive 一次性最大接收长度为 256 Byte。属于 IP 硬件限制,若需要 I2C Master Receive 超过 256 Byte,可以使用 GPIO 软解模拟 I2C 实现。
/* rxSize 的值,最大不能超过 256 */ I2C_DRV_MasterReceiveData(INST_I2C, rxBuff, rxSize, true);
快速上手云途开发生态
发帖前请查看
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...