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 主机重启信号

Guru**** 2589245 points
Other Parts Discussed in Thread: CC2541

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/601330/i2c-master-restart-signal

器件型号:CC2541

您好、先生、

 我们正在开发基于 CC2541的产品、该产品具有通过 I2C 总线连接的多个传感器(例如 sensorTag 参考设计)。  CC2541 I2C 充当主器件、而传感器充当 I2C 从器件。  BLE Stack 版本是 BLE-CC254x-1.4.1.43908、我们使用 hal_sensor 驱动程序代码。 问题是外设传感器的寄存器读取需要一个 I2C 重新启动信号 、但是  在 HalSensorReadReg 中调用的 HalI2CWrite 会在末尾生成一个 I2C 停止、从而完全清除传感器 SoC 的状态。 我们已经尝试在  HalI2CWrite 末尾注释 I2C_STOP。 但这会导致 HalI2CRead 中的下一个状态(I2C_Start)错误。  

 尝试进行低级调试,在 HalI2CWrite (不带 I2C_STOP )之后,I2C (I2CSTAT)处于0x28 (mstDataAckW)状态。 根据 CC254X 用户指南的表20-3、在0x28状态下 、下一状态可以重复启动。 但我们发送 I2C_START 无法驱动状态机进入0x10 (mstRepStart)状态。 它保持在0x28状态下。 如果我们在总线上捕获信号、则会发出另一个具有读取标志的从器件地址、而不是启动信号。

  那么,您能帮助解释一下吗?

 通过  逻辑分析仪在 I2C 上添加 i2c 消息格式和信号:

    

  以上是 根据器件规格读取寄存器所需的 I2C 消息格式。 我们可以发现需要 I2C 重新启动信号。

    

  上面是来自另一个基于 cortex-M3的 MCU i2c 的 I2C 信号、用于读取器件。 器件从地址为0x4c,寄存器地址为0x18。 结果值为0x71。

  上面是带有 HalSensorReadReg 的信号、它将在寄存器地址 ACK 后生成一个停止信号、然后在 I2C 地址后生成另一个开始信号进行读取。 STOP 会导致寄存器值读出为0x00。

 上面是  带有 HalSensorReadReg 的信号,但是 HalI2CWrite()中的 I2C_Stop()被禁用。 确认寄存器地址后 ,不会生成下一个开始。 而是发送从机写入地址和读取地址。  

  

   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Daniel su:
    您是否在逻辑分析仪上发送了 I2C 上的波形图?