Forum: Mikrocontroller und Digitale Elektronik Dummy Clockout on I2C


von Lars D. (eitum)


Lesenswert?

Hallo,

Ich versuche am MSP430F2272 das EEPROM AT24C512B von Atmel anzusteuern.
Weitesgehend funktioniert das auch. Leider hängt sich das EEPROM beim 
Debuggen auf und es gibt nur 2 Möglichkeiten das System wieder in Gang 
zu bekommen.

1. Power und Debugger entfernen und damit reseten.
2. Folgende Sequenz übertragen:

Startbyte, 9! Clock cycles, Startbyte, Stopbyte

Ich hab keine Ahnung wie ich 9 clock cycles generieren kann. 8 bekomme 
ich ja noch mit Byteschreiben hin aber das 9?

Kennt einer einen Trick?

Danke :)

von Stefan H. (stefan_h16)


Lesenswert?

I2C Ausgänge zu GPIOs machen und Timer / delay gesteuert wackeln lassen 
?

von holger (Gast)


Lesenswert?

>Ich hab keine Ahnung wie ich 9 clock cycles generieren kann. 8 bekomme
>ich ja noch mit Byteschreiben hin aber das 9?

Du hast das Acknowledge vergessen. Es sind immer 9 Cycles
per Byte.

von Lars D. (eitum)


Lesenswert?

Autsch. natürlich....   muss ich mir nur noch Gedanken machen wie ich 
das NACK in dem speziellen Fall abfange :)



Danke

von Peter D. (peda)


Lesenswert?

Lars D. schrieb:
> Leider hängt sich das EEPROM beim
> Debuggen auf

Dann taugt Dein Debugger nichts, er sendet Störimpulse.

Den EEPROM kriegst Du nicht zum Absturz.
Vermutlich läßt Du ihn beim Daten lesen einfach stehen und dann läßt er 
SDA auf low (Datenbit = 0), bis wieder SCL getaktet wird.


Peter

von Klaus (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Dann taugt Dein Debugger nichts, er sendet Störimpulse.

Das ist zu kurz gedacht. Wenn ich mitten in einer Read-Sequenz die 
Software anhalte und dann die CPU resette (oder sie stürzt ab, soll beim 
Debuggen vorkommen), wartet der Slave möglicherweise ewig auf das Read 
mit NACK. Er reagiert dann nicht auf ein Adressbyte. Und das alles 
ohne einen einzigen Störimpuls.

MfG Klaus

von Peter D. (peda)


Lesenswert?

Das ist der Hauptnachteil vieler HW-I2C, sie sind auf fehlerfreien 
Transfer angewiesen. D.h. sie können Fehler nicht erkennen und nicht 
beheben.

Manche verklemmen sich sogar selber, ganz ohne Busfehler. Z.B. die AVRs 
als Multimaster, wenn sie die Arbitration verlieren.

Ich benutze das HW-I2C daher nicht für Single-Master, sondern mache 
SW-I2C. Da ist die Fehlerbehebung ein Klacks. Auch code- und zeitmäßig 
ist kaum ein Unterschied zu HW-I2C.

HW-I2C braucht man nur bei Slave, Multimaster oder im Interrupt. Dann 
aber auch ein Timeout und Bit-Banging zur Fehlerkerkennung und Behebung.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.