我们使用的是爱特梅尔公司的SAM4S2C 32位ARM微处理器和一个由bq20z45控制器控制的智能电池。电池向SMBus上的(不存在的)智能电池充电器发送消息。似乎在24 - 72小时内,微控制器和智能电池尝试同时在总线上发送数据。这通常不会是一个大问题,但有时在那次事件之后,SAM4S会将TWI-Lines (SDA,SCL)拉低。我们正在重置总线来解决这个问题,但如果能理解这里发生了什么,那就太好了。
我们可以通过在总线上放置一个100 the方形信号的函数发生器来重现这个问题。在微处理器中设置ARBLST (仲裁丢失)标志,两条线路都被拉低。
在电池断开的情况下使用总线(+函数发生器连接)也可以,但更健壮。这可能是因为没有与电池的实际通信,只有地址字节在总线上。因此,需要冲突的通信要少得多。
有没有人也遇到过与此相关的问题?有什么经验吗?一遍又一遍地阅读数据表并没有带来任何有用的结果。
SAM4S处于主模式。
发布于 2016-08-03 17:14:29
这就是我的看法:
SAM4S2C是主机,它发送起始信号+地址,并且在此阶段的某个时刻,线路为低电平,而不是预期的高电平。这意味着仲裁失败,就像在线上有另一个主机一样。在某些系统中允许使用多主机模式。让我们称这个虚拟第二主服务器为Virtual-Master。
此时SAM4S2C不再是主机,它想要告诉您它已经失去了仲裁,因此出现了ARBLST标志。
既然虚拟主机是主服务器,那么SAM4S2C就像是一个从服务器。从机被允许进行所谓的时钟伸展,这就是让时钟线保持低电平,只要它愿意,它就会这样做,以便您在恢复之前有时间进行处理。现在你需要停止时钟在固件中伸展,我不记得是怎么做的,对不起。然后可能会在显示错误之前重试几次相同的传输。
https://stackoverflow.com/questions/38716633
复制相似问题