Hallo!
Bei meinen "Entwicklungsbord" tauschen 2 ATMega8 (3.68 MHz) per SPI Daten aus - der Master gepollt, der Slave per SPI-Interrupt.
Es werden jeweils 8 Byte gesendet und empfangen (Master sendet und empfängt 8 Byte, der Slave dito).
Der Master schreibt erst dann neue Daten ins SPDR (= wartet), wenn er vom Slave eine Freigabe erhält (wenn Slave seinerseits das SPDR gefüllt hat)
Gibt es einen (sinnvollen) Algorithmus, mit dem man feststellen kann, dass die empfangenen Daten wirklich den gesendeten entsprechen?
Es kann - manchmal, wenn der Slave oder der Master neu geflasht wurden - vorkommen, dass die Daten, die beim Master (oder Slave) im "Empfangsbuffer" stehen nicht denen entsprechen, die im "Sendebuffer" des Slaves (oder Master) stehen (sollten) => der Master und der Slave senden derzeit immer die gleichen Daten (Master und Slave natürlich unterschiedliche), damit ich per USART checken kann, ob die Daten korrekt übertragen wurden - und diesen Check soll der Controller selbst machen (können).
Nach einem Neustart bzw wenn ich die Spannungsversorgung (eine für beide ATMega8) abziehe und wieder aufstecke ist die Übertragung aber immer korrekt.
Ich könnte natürlich die Summe aus den übertragenen Bytes errechnen und mit einem Wert vergleichen um bei Unterschied LEDs anzusteuern (mache ich derzeit auch), das ist aber nur bei sich nicht ändernden Daten sinnvoll - wenn ich die Werte eines ADC / Motordrehzahl übertragen ändern die sich zwangsläufig...
mfg
Hero_123
Bei meinen "Entwicklungsbord" tauschen 2 ATMega8 (3.68 MHz) per SPI Daten aus - der Master gepollt, der Slave per SPI-Interrupt.
Es werden jeweils 8 Byte gesendet und empfangen (Master sendet und empfängt 8 Byte, der Slave dito).
Der Master schreibt erst dann neue Daten ins SPDR (= wartet), wenn er vom Slave eine Freigabe erhält (wenn Slave seinerseits das SPDR gefüllt hat)
Gibt es einen (sinnvollen) Algorithmus, mit dem man feststellen kann, dass die empfangenen Daten wirklich den gesendeten entsprechen?
Es kann - manchmal, wenn der Slave oder der Master neu geflasht wurden - vorkommen, dass die Daten, die beim Master (oder Slave) im "Empfangsbuffer" stehen nicht denen entsprechen, die im "Sendebuffer" des Slaves (oder Master) stehen (sollten) => der Master und der Slave senden derzeit immer die gleichen Daten (Master und Slave natürlich unterschiedliche), damit ich per USART checken kann, ob die Daten korrekt übertragen wurden - und diesen Check soll der Controller selbst machen (können).
Nach einem Neustart bzw wenn ich die Spannungsversorgung (eine für beide ATMega8) abziehe und wieder aufstecke ist die Übertragung aber immer korrekt.
Ich könnte natürlich die Summe aus den übertragenen Bytes errechnen und mit einem Wert vergleichen um bei Unterschied LEDs anzusteuern (mache ich derzeit auch), das ist aber nur bei sich nicht ändernden Daten sinnvoll - wenn ich die Werte eines ADC / Motordrehzahl übertragen ändern die sich zwangsläufig...
mfg
Hero_123