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.

[参考译文] TM4C1292NCPDT:I2C 状态句柄

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1270851/tm4c1292ncpdt-i2c-state-handle

器件型号:TM4C1292NCPDT

您好!

使用 Tiva 驱动程序库来工作 TM4C1292NCPDT 微控制器。

I2C 主机与温度传感器通信,温度传感器有会话时间约8ms。 如果我在温度传感器的转换时间(8ms)中按 RESET 键,如果主器件尝试与温度传感器通信,则在重置后按 RESET 键,它将给出仲裁丢失错误 。 我如何处理从主器件端到从器件端的这种类型的

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我在温度传感器的对话时间(8ms)内按重置键,如果主设备尝试与温度传感器通信,则重置后,将出现仲裁丢失错误 [/报价]

    这是复位到 MCU 还是温度传感器或两者的复位? 请澄清。  

    如果复位没有同时发送到 MCU 和温度传感器、则复位后、这些主从对将不再同步。 请记住、如果两个引脚中的一个仅复位、则两个引脚都不知道另一端是在中间复位的。  

    [quote userid="575443" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1270851/tm4c1292ncpdt-i2c-state-handle

    库。

    [/报价]

    观察此波形、似乎在主器件仍拥有总线时应用了复位。 正如您可以看到、应用复位后、SCL 时钟仍然为低电平。 如果此复位是受控的复位、我建议您首先强制主机进入空闲状态、然后再应用复位。 在 IDLE 状态中、SCL 将为高电平。  

    如果之前的事务成功完成、主器件会将其状态机移动到 IDLE 状态 并释放总线。 当您发出  I2C_MASTER_CMD_SINGLE_SEND 或 I2C_MASTER_CMD_BURST_SEND_FINISH 时通常会出现这种情况 。 如果您处于 I2C_MASTER_CMD_BURST_SEND_START 或2C_MASTER_CMD_BURST_SEND_CONT 等突发事务的中间 、SCL 总线将保持低电平。 如果出现错误、可以使用 2C_MASTER_CMD_BURST_SEND_ERROR_STOP 在主器件侧强制停止。  

    此应用手册将会有所帮助。  https://www.ti.com/lit/pdf/spma073

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

    我只转售微控制器、这就是我面临此问题的原因。 TEMP 传感器没有任何复位引脚。

     如何执行此操作"在应用复位之前强制主器件进入空闲状态"

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

    如何执行受控复位。

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

    我刚才在答复中也作了回答。 请重新阅读。 我将再次在此处粘贴。  

    如果之前的事务成功完成、主器件会将其状态机移动到 IDLE 状态 并释放总线。 当您发出  I2C_MASTER_CMD_SINGLE_SEND 或 I2C_MASTER_CMD_BURST_SEND_FINISH 时通常会出现这种情况 。 如果您处于 I2C_MASTER_CMD_BURST_SEND_START 或2C_MASTER_CMD_BURST_SEND_CONT 等突发事务的中间 、SCL 总线将保持低电平。 如果出现错误、可以使用 2C_MASTER_CMD_BURST_SEND_ERROR_STOP 在主器件侧强制停止。  

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

    需要注意的一点是、从器件不知道主器件已复位。 由于 MCU 复位、主器件和从器件都不同步。 您必须重新同步 它们。  在释放总线的情况下强制主器件进入空闲状态、并不完全意味着从器件将再次与主器件同步。   如果从器件将 SDA 保持在低电平、这在示波器捕获中很明显、则使从器件脱离此状态的唯一方法是 SCL 的边沿。 由于 I2C 模块将其视为保持总线的不同主器件、因此它不会尝试驱动 SCL。  您将需要对总线进行位冲击。 复位模块或主器件超时不会改变从器件的状态。 可能需要与从器件供应商进行核实。 某些从器件可能会通过强制总线进入特定状态一段时间来强制复位。 从设备供应商可向您提供此信息。

    见下文 Bob 的答复。  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/954162/tm4c1294ncpdt-problems-resetting-i2c-communication