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.

[参考译文] Linux/TPS40400:如何从 TPS40400上的 I2C SDA 卡在低电平中恢复?

Guru**** 2826825 points

Other Parts Discussed in Thread: TPS40400, TMS320DM8168

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/782756/linux-tps40400-how-to-recover-from-i2c-sda-stuck-low-on-tps40400

器件型号:TPS40400
主题中讨论的其他器件: TMS320DM8168

工具/软件:Linux

您好!


背景:
在我们的电路板上、我们使用 TPS40400降压控制器作为 TMS320DM8168的1.1V 源。
TMS320DM8168处理器通过 I2C 总线(PMBus 接口)控制 TPS40400。

使用专用脚本、我已在 TMS320DM8168配置 TPS40400期间安排器件复位。
这意味着、器件复位在 TMS320DM8168 (主器件)与 TPS40400 (从器件)之间的 I2C 事务期间进行。
有时(并非总是)在这个复位后、TMS320DM8168会报告描述与 TPS40400通信错误的以下错误消息:

"SCSI 子系统已初始化
omap_i2c omap_i2c.1:总线1版本4.0、100kHz
omap_i2c omap_i2c.1:等待总线就绪超时
Set_machine_constraints:无法启用 PMBus_VR
PMBus 1-0012:注册 PMBus 失败
PMBus:1-0012的探测失败,出现错误-110"

进一步研究表明、由于上述复位、TMS320DM8168至 TPS40400之间的 I2C SDA 卡在低电平上、因此会发生这种情况。
这意味着、当 SDA='0'时、当复位发生时、SDA 一直处于这个状态、TMS320DM8168将 I2C 总线识别为"未就绪"并报告错误消息。
TPS40400 I2C 发送器状态必须返回到 IDLE 状态、等待新的主器件(TMS320DM8168)命令。
(复位后 I2C SCL 按预期为高电平)。
换言之、观察到、如果在 TMS320DM8168和 TPS40400之间的 I2C 事务期间电路板被复位、SDA 线路在下电上电前保持低电平。
与 TMS320DM8168不同、TPS40400没有复位输入。
我们如何在不循环通电的情况下使 TPS40400将 SDA 线路释放为高电平?


我还在实验中做了一个简单的实验:
答:我再现了失败。
b.我(暂时)将 SCL 短接至 GND (为了生成虚拟 I2C 时钟、希望它将释放 SDA 信号)。
c.很感谢、作为一个即时响应、SDA 将极性更改为逻辑高电平(I2C 通道回到"启动条件"状态- SCL、SDA =高电平逻辑)。
d.我已再次安排器件复位。
e.不再失败了

我的问题是:
如何从 TMS320DM8168/TPS40400 (TMS320DM8168至 TPS40400之间的 PMBus 接口)上的 I2C SDA 卡在低电平中恢复、作为一种稳健且正式的解决方案、无需重启电源?
2.是否有办法将 TMS320DM8168与 TPS40400 (PMBus 接口)之间的 I2C 总线复位? 意味着、使其进入"启动条件"状态- SCL、SDA =高电平逻辑。
3.在上面提到的复位情况中,是否有办法将 TPS40400 I2C 发送器状态恢复为空闲状态,等待新的主命令?

此致、
Daniel

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

    Daniel、您好!

    根据 SMBus 规范、只要 CLK 为高电平、从器件就会将 DAT 线路保持为低电平。  当主从器件不同步时,通常会出现“DAT 低电平”,从器件比主器件提前1个 CLK,或从器件落后1个 CLK。  这会使从器件保持 DAT 为低电平、因为它认为总线位于事务的 ACK 位中。

     

    发送 单个 CLK 低电平通常会释放从器件、但也可能导致从器件执行之前发送的事务、事务中的某个位置发生1位移位、这可能会导致不良结果。  相反,更安全的解决方案是通过让主器件将 CLK 拉至低电平35mS 来发送“总线复位”。  这将重置总线上的每个设备,并指示总线上的每个设备中止一个“正在进行”事务。

     此致、

    Mathew

    这来自 SMBus 规范:

     e2e.ti.com/.../SMDAT.docx

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    代表 Daniel 和我非常感谢 Mathew。
    我们实施了您建议的解决方案、它可以解决我们的问题。
    此致、
    Eyal。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    关闭螺纹、、、