您好、香榭丽舍
在我客户的用例中、当他发送 I2C 从地址并获得 NAK 时、他需要在发出停止条件之前保持 SDA 和 SCL 一段时间。
他使用函数 MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START)发出从器件地址并发现 I2C 模块将生成停止条件、这是否合理?
请提出您的想法、感谢您的帮助。
此致、
Luke
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好、香榭丽舍
在我客户的用例中、当他发送 I2C 从地址并获得 NAK 时、他需要在发出停止条件之前保持 SDA 和 SCL 一段时间。
他使用函数 MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START)发出从器件地址并发现 I2C 模块将生成停止条件、这是否合理?
请提出您的想法、感谢您的帮助。
此致、
Luke
您好、Luke、
这是标准 I2C 协议的一部分、受器件支持。 您可以在技术参考手册的 I2C 部分19.3.1 I 2C 总线功能概述(https://www.ti.com/lit/pdf/slau723)中找到该说明
Srinivas
Srinivas、
感谢您的回答。
我知道、我的问题是当使用 MAP_I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START)启动 I2C 转换时、该函数调用不应设置 I2CMCS 寄存器的停止位、I2C 模块自动发送停止条件的原因是什么? 这是因为从器件发回一个 NAK 吗? 我们是否可以避免这个问题并将 SDA 和 SCL 保持在低电平一段时间、然后设置停止位来发出 I2C 停止条件?
Luke
您好、Luke、
根据 I2CMCS 寄存器中 STOP 位的描述、如果您将其设置为0、它将不会生成 STOP。 您已经尝试过吗?
map_I2CMasterControl()支持的默认选项可在 SDK 中的 i2c.c 中找到,网址为 。 我认为您希望实现的选项今天不受该函数的支持。 在调用 MAP_I2CMasterControl()之后,必须通过将 IC2MCS 寄存器中的 STOP 位显式设置为0来添加该功能。
Srinivas
您好 Srinivas、
使用函 数 I2CMasterControl (I2C1_base、I2C_MASTER_CMD_BURST_SEND_START)发送 I2C 从地址、 I2C_MASTER_CMD_BURST_SEND_START 的定义为0x03、只需设置 I2CMCS 寄存器的开始和运行位、它不应发送停止条件、因为我们不会设置停止位。
I2C 模块似乎会自动发出 I2C 停止条件、并在检测到从器件 NACK 该地址时终止 I2C 通信、您能否帮助确认此问题?
Luke