Hallo! Ich nutze die Slave Implementierung von "Martin Junghans" (danke an Martin für die Implementierung!!). Bisher habe ich immer nur ein Byte an meinen Slave geschickt - läuft prima. Lesen ebenfalls. Nun möchte ich mehrere Bytes zum Slave schicken. Jetzt stellt sich bei mir aber die Frage, wie ich das Ende der Datenübertragung im Slave erkennen kann. OK, es geht alles, wenn ich die Anzahl der zu erwartenden Bytes kenne, dann kann ich warten, bis der Pointer des Receive-Buffes (buffer_adr) den richtigen Wert hat. Aber eigentlich sollte man auch anhand der STOPP-Info des I2C Protokolls erkennen können, dass die Übertragung fertig ist und erst dann lohnt es sich für den Slave die Auswertung zu starten. Ebenfalls wäre es hilfreich festzustellen, ob die Daten vom Master abgeholt worden sind. Also: Ich habe versucht dort eine "is_transmitted" und ein "is_received" Info einzubauen. Ich bin ehrlich, so rund läuft es nicht. Wie wird so was typischerweise implementiert? Grüße Hans-Joachim
Dafür gibt es die ACK bits. Beim letzten Byte wird einfach nicht ge-ACK-ed.
Beim Atmel 8051 oder AVR: Table 18-8. Status Codes for Slave Receiver Mode A0h: A STOP condition or repeated START condition has been received while still addressed as slave
Hallo Peter, ich nutze hier gerade einen ATTINY 85 und ich war da an dieser Stelle:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
Da hatte ich extra mal meine Bits gesetzt - aber das war nicht das erwartete Ergebnis.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.