Wir verwenden den Atmel SAM4S2C 32-Bit-ARM-Mikroprozessor zusammen mit einer intelligenten Batterie, die von einem bq20z45-Controller gesteuert wird. Die Batterie sendet eine Nachricht an ein (nicht vorhandenes) Smart-Batterieladegerät am SMBus. Es scheint, dass innerhalb von 24 - 72 Stunden der Mikrocontroller und die intelligente Batterie versuchen, Daten auf dem Bus gleichzeitig zu senden. Dies wäre normalerweise kein so großes Problem, aber manchmal zieht der SAM4S beide TWI-Linien (SDA, SCL) nach diesem Vorfall tief. Wir stellen den Bus zurück, um dieses Problem zu lösen, aber es wäre schön zu verstehen, was hier passiert.Atmel SAM4S ziehen TWI/I²C-Leitungen niedrig
Wir können dieses Problem reproduzieren, indem wir einen Funktionsgenerator mit einem 100 kHz Rechtecksignal auf den Bus setzen. Das Flag ARBLST (Arbitration Lost) wird im Mikroprozessor gesetzt, beide Leitungen werden auf Low gesetzt.
Die Verwendung eines Busses bei getrennter Batterie (+ Funktionsgenerator angeschlossen) funktioniert ebenfalls, ist jedoch tendenziell robuster. Dies liegt möglicherweise daran, dass keine Kommunikation mit der Batterie stattfindet und nur das Adressbyte auf dem Bus ist. Es gibt also viel weniger Kommunikation zu kollidieren.
Hat jemand irgendwelche Probleme im Zusammenhang damit? Irgendeine Erfahrung? Das wiederholte Lesen von Datenblättern brachte keine brauchbaren Ergebnisse.
Der SAM4S befindet sich im Master-Modus.
Sind Sie sicher, dass der SAM4S sie niedrig zieht und nicht die Batterie? Ich war mir nicht ganz klar darüber, was das Ergebnis bei nicht angeschlossener Batterie war. – rjp
Wir ziehen die Batterie heraus, wenn der Fehler auftritt. Die Zeilen bleiben niedrig - ich denke, es ist ziemlich sicher, dass der SAM4S2C sie tief zieht. –