Danke schön.
Bei BMW bewerben, naja, ich weiss nicht. Ich glaube nicht, dass ich es für Geld machen könnte. Ich mache es aus Spass und Freude etwas auf die Beine zu stellen, was noch keiner geschaft hat.
Damit man sich so vorstellen kann, was eigentlich dahinter steckt, hier npaar Infos:
Die Implementierung bei BMW sieht als Busmaster die Instumentenkombination vor. Nur wenn die IKE nichts sendet dürfen sich andere Busteilnehmer ‚unterhalten’. Dies erleichtert die Integration zusätzlicher Steuergeräte, z.B. MP3-Player und kann die Reaktionszeit verkürzen, z.B. Lenkradtasten. Auf dem I-Bus (wie auch den anderen Bussystemen) können bei hoher Buslast Kollisionen als Tribut an die Flexibilität auftreten. Daher verwendet BMW je nach Ausstattung mehrere Busse.
Folgende Mechanismen sind für die Kommunikation am I-Bus implementiert:
* der Busmaster (IKE, Kommbiinstrument) hat Priorität
* bis auf Broadcasts ist jede Botschaft (Request) zu bestätigen (Response) (dies trifft nicht für alle Botschaften zu, hier sieht der I-Bus dann eine entsprechende Kodierung vor)
* wenn der Bus eine definierte Zeit (z.B. 20-100ms, nach Request erst nach dem Timeout, z.B. 100-1000ms) nicht belegt ist, dürfen andere Teilnehmer einen Request senden
* nicht jeder Busteilnehmer wartet die gleiche Zeit (dies ist zwar nicht explizit geregelt, ergibt sich aber aus den Signallaufzeiten und Timingunterschieden in den Steuergeräten)
* nach einer gewissen Übertragungszeit muss der Bus für andere Steuergeräte ‚geöffnet’ werden
* Kollisionserkennung ist zu verwenden, insbesondere sollte das Echo überprüft werden.
* es wird eine Adress-Arbitrierung verwendet: Der Sender mit der höchsten Adresse erhält den Buszugriff, wenn 2 oder mehr Teilnehmer gleichzeitig auf den Bus zugreifen. Dies funktioniert folgendermaßen: Während die Sendeadresse Bit für Bit auf den Bus gelegt wird, wird der Zustand der Leitung überprüft. Überträgt ein Steuergerät z.B. eine 0 (High-Pegel) und die Leitung wird Low, muss es den Bus abgeben (ohne die laufende Übertragung der anderen Steuergeräte zu stören). Bei Gleichheit entscheidet das nächste Bit. Adresse binär 00100100 ist höher als 00100011.
* Kommandos/Botschaften werden im Steuergerät intern priorisiert. Entsprechend der Priorität wird eine unterschiedliche Pause zwischen den Botschaften (‚Botschaftsabhängige Wartezeit’) verwendet: Prio 1 ab 1,7ms, 2 ab 2.3ms und 3 ab 10ms. Bei Kollisionen wird eine vordefinierte ‚Konfliktwartezeit’ verwendet, die für Steuergeräte in der gleiche Domäne (gleiche Position des ersten rezessiven Bits in der Adresse) unterschiedlich ist.
* sollte auf einen Request keine Antwort kommen, wird er bis zu 5 Mal nach jeweils 300ms Wartezeit wiederholt
Da die oben genannten Mechanismen nur aufwendig zu implementieren sin reicht in der Praxis das folgendes Vorgehen zum senden von Nachrichten aus:
Bevor eine Nachricht gesendet wird muß auf auf den Ruhezustand des Busses gewartet werden. Dieser ist erreicht wenn für eine gewisse Zeit kein Datentransfehr stattfindet. Die Zeit errechnet sich aus der Datenrate des Busses und dem Datenrahmen der Seriellen Verbindung von 10Bit/Zeichen. Dieser Datenrahmen ist in der nachfolgenden Rechnung bereits berücksichtigt (0,104ms/Bit * 10Bit).
Es muss also mindestens 1,2ms Inaktivität des Busses abgewartet werden bevor davon ausgegangen werden kann das keine weiteren Bits mehr gesendet und somit die Nachricht des gerade aktiv gewesenen Steuergerätes vollständig gesendet wurde. Danach kann eine Nachricht gesendet werden.
Diese System bzw. diese Art der Kollisionsvermeidung arbeitet in der Praxis unter der Voraussetzung das sich alle Steuergeräte genau an diese Softwarelösung halten sehr zuverlässig.
'cuda