Martin N/a schrieb:
> TWEA stelle ich doch einmal an und lasse es an. Also wird generell mit
> ACK gearbeitet. Wie soll ich damit was signalisieren?
Falschrum gedacht. Wenn der Slave ein Transmitter ist, dann kommt das
ACK vom Master. TWEA beeinflusst also nicht das ACK, wohl aber die State
Machine vom TWI. Und wenn du der sagst, dann noch ein Byte folgt
(TWEA=1), der Master aber statt dessen eine STOP Condition bringt, dann
ist das TWI vom Slave beleidigt und schmollt.
Korrekt ist es nur, wenn du mit dem letzten Byte TWEA auf 0 setzt. Was
nicht zwingend ist, aber andernfalls musst du eben mit dem Bus Error am
Ende vom Transfer leben.
> wenn ein Stop kommt, dann ist der Bus halt wiedern frei
Falsch gedacht. Der Slave erwartet eine weitere Datenanfrage, kriegt
statt dessen ein STOP und die State Machine läuft auf State=00 aka "bus
error".
Und wie man damit umgeht steht unter "Miscellaneous States" im
Datasheet: STO setzen. Solltest du auch dann handhaben können, wenn TWEA
korrekt ist, weils immer mal passieren kann und du sonst nicht raus
kommst.