您好!
我使用 Tiva 驱动程序库来工作 TM4C1292NCPDT 微控制器。
I2C 主机与温度传感器通信,温度传感器有会话时间约8ms。 如果我在温度传感器的转换时间(8ms)中按 RESET 键,如果主器件尝试与温度传感器通信,则在重置后按 RESET 键,它将给出仲裁丢失错误 。 我如何处理从主器件端到从器件端的这种类型的
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.
您好!
我使用 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
我刚才在答复中也作了回答。 请重新阅读。 我将再次在此处粘贴。
如果之前的事务成功完成、主器件会将其状态机移动到 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 的答复。