triplebit
11.03.2007, 02:25
Hallo zusammen,
ich habe schon mittlerweile ne ganze Zeit dieses MM-Problem(immer wieder gegogelt und wieder neu probiert).
Mittlerweile bin ich auf den Fehler schon relativ nahe gekommen, und hoffe das etz endgültig lösen zu können ;-((((
Ich habe eine mini MM-Umgebung mit 2AVR M16 und einem Dragon zum debuggen.
Beide M16 können als Slave empfangen und als Master senden(MT und SR).....MR und ST sind nicht implementiert.
Das ganze basiert auf der Bibl. von Atmel, also in C. Den Code poste ich natürlich bei Bedarf, aber ich denke das das ganze nicht am Code direkt sondern eher an der Vorgehensweise liegt.
Zunächst init. ich beide MCs als Slave, setzte die Register
TWEN, TWIE (TWSR wird mit ISR abgefragt), für den Slave-Mode TWEA damit ein MT weiss, das der Slave erfolgreich empfangen hat, und cleare noch mit TWINT!
somit sind beide MCs im Slave-Mode.
wenn nun ein MC sendet, setzt er das StartBit und es wird zum testen genau ein Byte übertragen(plus Slave-Adresse und Write natürlich)
das ganze funzt auch in beide Richtung(nach einem Reset ohne Prg-Änderung oder HW-Änderung), soll heissen beide MCs können von Slave auf Master umschalten das Byte senden, und quitieren dann mit dem Stop-Bit(welches auch vom Slave empfangen wird)
Der Fehler tritt nun auf, wenn nachdem ein Slave vom Master adressiert wurde, mit ACK bestätigt hat und der Master sein Stop-Bit gesendet hat. Jetzt müsste der Ursprüngliche Slave, Master werden und ebenfalls das StartBit senden(was genau auf dem Bus los ist kann ich nicht sagen, da mir die HW fehlt, der Bus ist aber High, also kein MC nuckelt dran). Nun die Fehler die laut Dragon auftreten:
Entweder das StartBit wird gesetzt, die ISR für TWSTART wird aber nicht aufgerufen. Soll heissen, der Master merkt anscheinend nicht das er das Start-Signal gesendet hat.
Oder das StartBit wird gesetzt die ISR wird aufgerufen läuft dann aber auf Bus-Fehler.
Manchmal, wenn ich mit dem Dragon debugge funzt es sogar, so wie es sollte.
Ich habe mittlerweile auch schon schleifen eingebaut die bei Master-Slave Umschaltung eine gewisse Anzahl am Cycles warten (10, 20 und 200 schon probiert). Der Fehler tritt zu 100% auf wenn ich nicht mit dem Dragon debugge, aber mit dem Dragon funzt es eben AbundZu mal ?-)))))
hoffe es kann jemand helfen
Cu
Martin
ich habe schon mittlerweile ne ganze Zeit dieses MM-Problem(immer wieder gegogelt und wieder neu probiert).
Mittlerweile bin ich auf den Fehler schon relativ nahe gekommen, und hoffe das etz endgültig lösen zu können ;-((((
Ich habe eine mini MM-Umgebung mit 2AVR M16 und einem Dragon zum debuggen.
Beide M16 können als Slave empfangen und als Master senden(MT und SR).....MR und ST sind nicht implementiert.
Das ganze basiert auf der Bibl. von Atmel, also in C. Den Code poste ich natürlich bei Bedarf, aber ich denke das das ganze nicht am Code direkt sondern eher an der Vorgehensweise liegt.
Zunächst init. ich beide MCs als Slave, setzte die Register
TWEN, TWIE (TWSR wird mit ISR abgefragt), für den Slave-Mode TWEA damit ein MT weiss, das der Slave erfolgreich empfangen hat, und cleare noch mit TWINT!
somit sind beide MCs im Slave-Mode.
wenn nun ein MC sendet, setzt er das StartBit und es wird zum testen genau ein Byte übertragen(plus Slave-Adresse und Write natürlich)
das ganze funzt auch in beide Richtung(nach einem Reset ohne Prg-Änderung oder HW-Änderung), soll heissen beide MCs können von Slave auf Master umschalten das Byte senden, und quitieren dann mit dem Stop-Bit(welches auch vom Slave empfangen wird)
Der Fehler tritt nun auf, wenn nachdem ein Slave vom Master adressiert wurde, mit ACK bestätigt hat und der Master sein Stop-Bit gesendet hat. Jetzt müsste der Ursprüngliche Slave, Master werden und ebenfalls das StartBit senden(was genau auf dem Bus los ist kann ich nicht sagen, da mir die HW fehlt, der Bus ist aber High, also kein MC nuckelt dran). Nun die Fehler die laut Dragon auftreten:
Entweder das StartBit wird gesetzt, die ISR für TWSTART wird aber nicht aufgerufen. Soll heissen, der Master merkt anscheinend nicht das er das Start-Signal gesendet hat.
Oder das StartBit wird gesetzt die ISR wird aufgerufen läuft dann aber auf Bus-Fehler.
Manchmal, wenn ich mit dem Dragon debugge funzt es sogar, so wie es sollte.
Ich habe mittlerweile auch schon schleifen eingebaut die bei Master-Slave Umschaltung eine gewisse Anzahl am Cycles warten (10, 20 und 200 schon probiert). Der Fehler tritt zu 100% auf wenn ich nicht mit dem Dragon debugge, aber mit dem Dragon funzt es eben AbundZu mal ?-)))))
hoffe es kann jemand helfen
Cu
Martin