Damit das Forum nicht einstaubt, hier mal ein Problem von mir:
Ich habe mehrere ICs(Atmega32) über *I²C/TWI verbunden.
Verbindung klappt, ich kann Bytes senden und Empfangen.
Jezt will ich über RS232 Daten zum Computer senden, die verbindung funktioniert bereits.
Jezt muss ich aber die Daten vom Master zu dem Slave mit der Seriellen Schnittstelle schicken.
Dabei handelt es sich um Floats. Ich muss jezt ein Protokoll aufbauen, das es mir ermöglicht die Datenintegrität sicher zu stellen und den Datentransfer zu regeln.
Bisher hatte ich es so gelöst, das bei jeder verbindung der Master ein Commando geschickt hat, dann hat der Slave auf das Kommando geantwortet, der Master hat daraufhin wieder Daten oder ein Kommando gesendet....
Mein Problem ist jezt, das ich dem Slave/Master auch mitteilen muss was er machen soll(Senden/Empfangen), um welche Daten/Datensatz es sich handelt, und dann die Daten senden.
MfG cloidnerux.
*I²C/TWI: http://de.wikipedia.org/wiki/I%C2%B2C
Protokoll für den Transfer von Daten über I²C
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Protokoll für den Transfer von Daten über I²C
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Protokoll für den Transfer von Daten über I²C
...und was genau ist das Problem bzw. die Frage?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Protokoll für den Transfer von Daten über I²C
Wie baue ich jezt geschickt das bestehende Protokoll um, bzw wie sollte ich ein neues protokoll aufsetzten, das es mir ermöglicht, Daten und Komamndos zu senden, und auch der Empfänger erkennt, um wleche Daten und Kommandos es sich handelt....und was genau ist das Problem bzw. die Frage?
Das mit den Kommandos ist ja halbwegs gelöst, aber nciht das mit den Daten.
Ich muss 8Byte floats mit erkunnung und Kommandos über eine 100Khz leitung schicken und das möglichst geschickt.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Protokoll für den Transfer von Daten über I²C
Weder kenne ich Dein bisheriges Protokoll, noch die Probleme, die sich ergeben, wenn Du Deinem Kommando ein 8 Byte Float mitschickst.cloidnerux hat geschrieben:Wie baue ich jezt geschickt das bestehende Protokoll um, bzw wie sollte ich ein neues protokoll aufsetzten, das es mir ermöglicht, Daten und Komamndos zu senden, und auch der Empfänger erkennt, um wleche Daten und Kommandos es sich handelt....und was genau ist das Problem bzw. die Frage?
Das mit den Kommandos ist ja halbwegs gelöst, aber nciht das mit den Daten.
Ich muss 8Byte floats mit erkunnung und Kommandos über eine 100Khz leitung schicken und das möglichst geschickt.
Häufig sieht man gleiche Paketgrößen, da man dann die Größe des Pakets nicht mitteilen muss. Also wäre ein einfaches Protokoll, dass Du einen Header hast, indem Du beschreibst was Du mit dem Paket erreichen willst (also der Befehl) und einen Datenbereich, in dem die Daten liegen (also die Argumente).
Eventuell Checksummen.
Ansonsten gibt es halt die Möglichkeit eine Kommunikation aufzubauen, erstmal "Hallo" zu sagen und zu gucken, ob sich wer meldet, dem man Daten schicken könnte...
Das sind die absoluten Grundlagen eines Protokolls. Ist halt die Frage, was Du überhaupt brauchst, was Dein Protkoll leisten muss.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- cloidnerux
- Moderator
- Beiträge: 3123
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Protokoll für den Transfer von Daten über I²C
Also, erstmal nochmal zur Verbindung: ich Arbeite echt Lowlevel. Es werden immer 8 Bytes geschickt, das kann belibig oft wiederholt werden und am ende der Transmission wird halt ein Bestimtes zeichen gegeben, das heißt ich habe weder Paketgrößen, noch vorgegebene Daten. Die Verbindung ist halt so konzipiert, das es belibig viele Slaves gibt und einen Master. Jeder Slave hat eine Addresse, die der Master Anpricht. Es können auch mehrere Master an dem Bus sein, das ist aber komplizierter und wird bei mir nicht verwendet.Das sind die absoluten Grundlagen eines Protokolls. Ist halt die Frage, was Du überhaupt brauchst, was Dein Protkoll leisten muss.
Der master Spricht jezt also die Addresse eines Slaves an und Authorisiert ihn zu Senden, bzw. zu Empfangen.
Das Protokoll muss also dem Slave, bzw Master, mitteilen, wie groß die Daten sind, um welche Daten es sich handelt und diese letztendes Senden. Dabei sollte
die Bezeichnung für die Daten möglichst Dynamisch sein, sodass ich nicht für jede Variable ein neues define machen muss.
Meine bisherige lösung sieht so aus, das ich ein verschiedenen Enums defines für verschiedene Kommandos und Antworten hatte, z.B Empfange Daten und Sende Daten...
Der Master beginnt also mit dem Senden eines Kommandos, wartet ab bis der Slave Antwortet, wertet dies aus, sendet wieder ein Kommando oder Daten
usw.
Also in etwa so:
M: Empfange Daten.
S: laenge
M: 1
S: Ok
M: 23
S: OK
ENDE
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Protokoll für den Transfer von Daten über I²C
Was hältst Du voncloidnerux hat geschrieben:Das Protokoll muss also dem Slave, bzw Master, mitteilen, wie groß die Daten sind, um welche Daten es sich handelt und diese letztendes Senden. Dabei sollte die Bezeichnung für die Daten möglichst Dynamisch sein, sodass ich nicht für jede Variable ein neues define machen muss.
Meine bisherige lösung sieht so aus, das ich ein verschiedenen Enums defines für verschiedene Kommandos und Antworten hatte, z.B Empfange Daten und Sende Daten...
Der Master beginnt also mit dem Senden eines Kommandos, wartet ab bis der Slave Antwortet, wertet dies aus, sendet wieder ein Kommando oder Daten usw.
Also in etwa so: ...
Code: Alles auswählen
M: |S1|PaketTyp|1|23...Leerdaten bis Paket voll|
S1: Ok
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.