Ja, Du clockst mit dem ersten Communications Register Byte aber sogar sechs, wenn ich Deine SpiMasterRxTx() richtig interpretiere:
In Zeile 5 beginnst Du die Kommunikation durch das /CS.
In Zeile 8 überträgst Du die Adresse des zu lesenden Registers ins Communication Register, was dabei empfangen wird, verwirfst Du - soweit korrekt.
In Zeile 9 überträgst Du ein Dummy-Byte an den Slave, und legst das empfangene Byte in "Result[0]" ab.
In Zeile 12 überträgst Du ein weiteres Byte, den Empfang verwirfst Du.
In 13 sendest Du einen Dummy, und empfängst.
...
In 19 beendest Du die Kommunikation durch CS.
Effektiv versuchst(!) Du also, nach dem (ersten) Communication-Byte fünf Bytes zu lesen - von denen Du das erste, dritte und letzte Deinen drei Results zuweist, das zweite und vierte verwirfst.
Nach einem Reset/PowerUp landet der erste Zugriff immer im CommRegister, das dabei/damit adressierte Register bestimmt (auch) die Anzahl der Bytes die danach übertragen werden müssen(!).
For read or write operations, after the subsequent read or write operation to the selected register is complete, the interface returns to where it expects a write operation to the communications register
Ich spekuliere mal, daß Du so das Data-Register (0x02) auslesen willst.
In Zeile 5 /CS..
In Zeile 8 teilst Du dem CommRegister mit, daß Du das Data lesen willst
In Zeile 9 läßt Du das erste Data-Byte übertragen -> Result[0]
In Zeile 12 läßt Du das zweite übertragen, und verwirfst es.
In Zeile 13 das dritte, welches Du in Result[2] ablegst. Damit hat der IC seine drei Bytes übertragen (weil Data ein Drei-Byte-Register ist), und erwartet einen neuen Zugriff auf das CommRegister (bzw interpretiert das nächste Byte als solchen ->Zitat) - dieser folgt sogar in Zeile 16 (auch wenn das so sicher nicht Deine Absicht war). Der Parameter "reg" hat sich sicher nicht geändert, Du forderst also einen weiteren Lesezugriff auf das DataRegister an.
In Zeile 14 wird also wieder das erste Data-Byte empfangen, und diesmal in Result[2] abgelegt.
Danach brichst Du die Kommunikation in Zeile 19 ab - das zweite DataByte hast Du nie gespeichert...
Ob das nächste /CS dann ein Reset der Kommunikation wäre, ist mir nicht ganz klar,
mMn ist die während CS=1 nur unterbrochen - der IC wartet auf die anderen beiden DummyBytes (bzw die nächsten beiden übertragenen Bytes sind für ihn Dummies, er sendet dann die beiden ausstehenden DataBytes)...