Atmel SAM4S将TWI /I²C线拉低

时间:2016-08-02 09:28:15

标签: arm i2c atmel

我们正在使用Atmel SAM4S2C 32位ARM微处理器以及智能电池,由bq20z45控制器控制。 电池向SMBus上的(不存在的)智能电池充电器发送消息。似乎在24-72小时内,微控制器和智能电池试图同时在总线上发送数据。这通常不是一个如此大的问题,但有时在事件发生后,SAM4S将TWI-Lines(SDA,SCL)拉低。我们正在重置总线以克服这个问题,但是理解这里发生的事情会很棒。

我们可以通过在100kHz方波信号的总线上放置一个函数发生器来重现这个问题。 ARBLST(Arbitration Lost)标志位于微处理器中,两条线都被拉低。

使用断开电池的总线(+功能发生器已连接)也可以工作,但往往更加强大。这可能是因为没有与电池实际通信,并且总线上只有地址字节。因此,与之碰撞的沟通要少得多。

有没有人有任何与此相关的问题?有经验吗? 一遍又一遍地阅读数据表并没有带来任何有用的结果。

SAM4S处于主模式。

1 个答案:

答案 0 :(得分:0)

我就是这样看的:
SAM4S2C是主机,它发送一个启动信号+地址,在此阶段的某个时刻线路为低电平而不是预期的高电平。这意味着仲裁丢失,就像是否有另一个主人在线。某些系统允许使用多主机模式。让我们称之为虚拟第二大师Virtual-Master 此时SAM4S2C不再是主设备,它想告诉你它已经失去仲裁因此ARBLST标志。
现在Virtual-Master是Master,SAM4S2C就像一个奴隶。 允许从器件执行所谓的时钟延长,它将时钟线保持为低电平,只要它需要,它将为您在恢复之前有时间进行处理。现在你需要在固件中停止时钟拉伸,我不记得怎么样,对不起。然后可能会在显示错误之前重试相同的传输几次。