Hallo aircode,

wenn du Daten vom Master zum Slave übertragen willst, muss beim Empfänger (Slave) ja klar sein, wann er die "richtigen" Daten hat.

Dazu kann man I2CTWI_writeRegisters[0] benutzen. Ist das erste gesendete Byte z.B. != 0, wird es in data1_slave übernommen und die weiteren Bytes aus I2CTWI_writeRegisters[n] (N = 1..max. Bytezahl) in die Variablen dataX_slave. Das klappt so nur, wenn I2CTWI_writeRegisters[0] sofort auf 0 gesetzt wird, wenn es als != 0 empfangen wurde.
Und man fragt dann den Wert von data1_slave ab, um zu klären, ob die Daten verwendet werden können.
Man kann z.B. als erstes 99 senden, beim Slave testet man dann im Zweig
if(I2CTWI_writeRegisters[0] && !I2CTWI_writeBusy),
ob data1_slave 99 ist.
Wenn ja, können die weiteren Daten ausgegeben werden.

Also: Bei dieser Form des Empfangs kann man das 1. Byte (bei dir data1_master) nicht als 1. Datenbyte nehmen, sondern es dient quasi als Startmarke und Erkennung, dass jetzt die Daten kommen.

Sieh dir in der Anleitung zum RP6 das Beispiel auf S. 106 noch einmal an!

Gruß Dirk