In diesem Teil beschreibe ich die CAN-Busse, wie sie im Audi A4 zu finden sind und wie die Steuergeräte untereinander
    via CAN verbunden sind.
    Weiter werde ich hier mein selbst entworfenes und gebautes CAN-Interface vorstellen, welches zusätzlich die Fähigkeit 
    hat, in Abhängigkeit von vordefinierten CAN-Botschaften bis zu drei Relais zu schalten oder zu tasten.
    
    
     
    
    
    CAN-Einleitung
    
    Der CAN-Bus (Controller Area Network) ist ein asynchrones, serielles Bussystem und gehört zu den Feldbussen. Um die 
    Kabelbäume in Fahrzeugen zu reduzieren und dadurch neben der Flexibilität insbesondere Gewicht zu sparen, wurde der 
    CAN-Bus 1983 von Bosch für die Vernetzung von Steuergeräten in Automobilen entwickelt und 1987 zusammen mit Intel 
    vorgestellt.
    
    Der CAN-Bus arbeitet nach dem CSMA/CR (Carrier Sense Multiple Access/Collision Resolution) Verfahren, einem Verfahren, 
    das der Entdeckung und Vermeidung von Kollisionen auf geteilten Medien dient. Bei CSMA/CR werden Kollisionen durch 
    Bitarbitrierung vermieden. Die Bitarbitrierunglogik stellt eine Funktionseinheit in Form einer elektrischen, digitalen 
    Schaltung oder einer Softwareroutine dar, die Zugriffskonflikte oder Zugriffskollisionen löst oder priorisiert. 
    Dadurch wird erreicht, dass am Ende einer jeden Arbitrierungsphase lediglich der Teilnehmer, der über die höchste 
    Nachrichtenpriorität verfügt, das Medium belegt.
    
    Der Bus ist entweder mit Kupferleitungen oder über Glasfaser ausgeführt. Der CAN-Bus arbeitet nach dem 
    "Multi-Master Prinzip": Mehrere gleichberechtigte Steuergeräte (bzw. Busteilnehmer) sind durch eine topologische 
    Anordnung (beim Audi und bei den meisten anderen Fahrzeugen ist dies ein linearer Bus mit kurzen Stichleitungen) 
    miteinander verbunden. Im Falle von Kupferleitungen arbeitet der CAN-Bus bei höheren Datenraten mit 
    Differenzsignalen. Die Differenzsignale werden normalerweise mit 2 oder 3 Leitungen ausgeführt: CAN_HIGH, CAN_LOW und 
    optional CAN_GND (Masse). CAN_LOW enthält den komplementären Pegel von CAN_HIGH gegen Masse. Dadurch können 
    Gleichtaktstörungen unterdrückt werden, da die Differenz gleich bleibt.
    
    Bei langsameren Bussen ('Komfort-Bus' z.B. zur Betätigung von Elementen durch den Benutzer) kann ein Eindrahtsystem mit 
    der Karosserie als Masse reichen. Praktisch wird es meistens doch als Zweidrahtsystem ausgeführt, verwendet aber beim 
    Lowspeed-CAN im Fehlerfall eines Aderbruchs den Eindrahtbetrieb als Rückfallebene, um den Betrieb weiterführen zu können. 
    Um dort Störungen zu vermeiden wird es grundsätzlich verdrillt.
    
    Die Busterminierung erfolgt beim CAN Bus mit 120 Ohm. Eine Terminierung ist auch schon bei kurzen Leitungen mit 
    niedrigen Baudraten erforderlich, da sie bei CAN gleichzeitig als kombinierter Pullup und Pulldown Widerstand für 
    alle Teilnehmer arbeitet. Ohne Terminierung gibt es nicht nur Reflexionen, sondern beide CAN Leitungen hängen in 
    der Luft. In der Praxis reicht bei kurzen Leitungen eine Terminierung an einem Ende, idealerweise wird der Bus aber 
    an beiden Enden (und nur dort) mit jeweils 120 Ohm terminiert.
    
    Die Übertragung der Daten erfolgt so, dass ein Bit, je nach Zustand, entweder dominant oder rezessiv auf den 
    Busleitungen wirkt. Ein dominantes (0) überschreibt dabei ein rezessives (1) Bit.
    Die maximale Teilnehmeranzahl auf physikalischer Ebene hängt von den verwendeten Bustreiberbausteinen 
    (Transceiver, physikalische Anschaltung an den Bus) ab. Mit gängigen Bausteinen sind 32, 64 oder bis zu 110 
    (mit Einschränkungen bis zu 128) Teilnehmer pro Leitung möglich (Erweiterungsmöglichkeit über Repeater oder Bridge).
    
    Es wird zwischen einem Highspeed- und einem Lowspeed-Bus unterschieden. Bei einem Highspeed-Bus beträgt die maximale 
    Datenübertragungsrate 1 Mbit/s, bei Lowspeed 125 kbit/s. Alle CAN-Knoten müssen die Nachricht gleichzeitig verarbeiten 
    können; damit ergeben sich die maximalen (theoretischen) Leitungslängen, wie in der nachfolgenden Tabelle:
    
    
      | Übertragungsrate | Leitungslänge | 
      | 10 kbits/s | 6,7 km | 
      | 20 kbits/s | 1,3 km | 
      | 125 kbits/s | 530 m | 
      | 250 kbits/s | 270 m | 
      | 500 kbits/s | 130 m | 
      | 1 Mbits/s | 40 m | 
    
    
    
    
    Der Objekt-Identifier kennzeichnet den Inhalt der Nachricht, nicht das Gerät. Er dient zudem auch der Priorisierung der 
    Nachrichten. Zum Beispiel kann in einem Messsystem den Parametern Temperatur, Spannung, Druck jeweils ein eigener 
    Identifier zugewiesen sein. Die Empfänger entscheiden anhand des Identifiers, ob die Nachricht für sie relevant ist 
    oder nicht.
    Die Spezifikation definiert zwei verschiedene Identifier-Formate:
    
      - 11-Bit-Identifier, auch "Base frame format" genannt (CAN 2.0A)
- 29-Bit-Identifier, auch "Extended frame format" genannt (CAN 2.0B).
    Ein Teilnehmer kann Empfänger und Sender von Nachrichten mit beliebig vielen Identifiern sein, aber umgekehrt darf es 
    zu einem Identifier immer nur maximal einen Sender geben, damit die Arbitrierung funktioniert.
    
    Weiterführende Details siehe Quellen bei Wikipedia: 
    
CAN-Bus, 
    
CSMA/CR,
    
Arbitrierung
    
    
    Mein CAN-Interface
    Nachdem ich mich lange Zeit nach einem geeigneten CAN-Adapter umgesehen habe und prinzipiell eine Menge guter Geräte 
    gefunden hatte, war ich am Ende dann doch zu geizig mindestens 100 Euro für einen Adapter auszugeben, auf dessen 
    Firmware ich keinen Einfluss habe und dessen Funktionsrahmen dann für zukünftige Situation zu unflexibel ist.
    
    Daraufhin habe ich mich dann entschieden, mir ein CAN-Interface zu bauen, dass ich vielseitiger nutzen kann.
    Motiviert wurde ich von den Fähigkeiten des CAN-Adapters, den "Fuchs" 2005 entworfen und gebaut hat, wie man im 
    umfangreichen 
    Can-Hack-Forum nachlesen kann.
    Er verwendet das von 
www.canusb.com bekannte              
    Lawicel-Protokoll, das ASCII-basierend ist (Download  
    
CANUSB ASCII Command Manual).
    
    Besondere Features des Adapters in Kombination mit der eigens dafür entwickelten 
    
Software Can-Hacker
    sind laut Forumsauszug:
    
      - Feste Baudraten (10/20/50/100/125/250/500/800/1000bps)
- Benutzerdefinierte Baudraten
- Identifier Filter (Bitmaske, Bereich, einzelne ID's)
- 11 Bit Identifier
- 29 Bit Identifier
- Listen Only Modus
- Nachrichten senden (Anzahl beliebig)
- Nachrichten automatisch wiederholen
- Datalogger mit Speicher- und Abspielfunktion
- Hinzufügen von Kommentaren
- Automatisches Abspeichern der Einstellungen
- Detaillierte Darstellung als Hex und Dezimalwert + Bargraph
- Darstellung in ASCII und Dezimal
- Unterstützung vom d2xx USB Treiber für größeren Datendurchsatz
- Unterscheidung zwischen RTR und DLC=0 nachrichten
- Automatisches antworten auf RTR anfragen
- Antwort auf definierbare Nachrichten
- Windows Vista kompatibel
- Einfache Bedienung
    Alle diese Punkte haben mich schnell überzeugt, da sie genau dem entsprechen, was ich benötige und so bin ich auf das Projekt 
    von 
Mictronic
    gestoßen, dessen Projekt ich im Ansatz als Basis für meine Entwicklung genommen habe.
    
    Mictronics verwendet einen AVR ATmega162, der mit dem doch sehr beliebten Philips SJA1000 Standalone CAN-Bus Controller, 
    mit einem Philips PCA82C250 als CAN-Bustreiberbaustein (Transceiver), kommuniziert. Ein FT245BL sorgt in Kombination mit 
    einem kleinen EEPROM (zum Speichern des "Multi Device Template" für den FT245BL) für die Kommunikation via USB mit 
    dem PC.
    
    Ich habe nun diesen Ansatz weiter verfolgt und habe als erstes den ATmega162 aus dem SMD-Gehäuse in ein DIL40-Gehäuse
    gesteckt, da ich diesen gesockelt einsetzen bzw. austauschen können will und so letzlich auch einfacher verlöten kann :o). 
    Natürlich geschieht dieses auf Kosten der Platinengestaltung, insbesondere der Größe, was ich aber bereit war, in Kauf 
    zu nehmen. Meine Platine hat nun die Maße 90mm x 126mm.
    Weiter habe ich die Ausgänge des ATmega162 ein wenig optimiert, in dem ich diese umgelegt habe; zum Einen habe ich
    die JTAG-Pins mit rausgeführt, dafür die LEDs verschoben und die letzten drei freien PINs dazu verwendet drei Mini-Relais
    anzusteuern. Zum Anderen habe ich die CAN-Pins nicht nur auf einen Sub-D Stecker, sondern auch auf eine Wannenbuchse und 
    eine Schraub-Klemme geführt, dabei habe ich auch die Pin-Belegung angepasst, so dass diese dem CiA entsprechen 
    (Sub-D CAN-Stecker: CiA DS 102, RJ45 CAN-Stecker: CiA DRP 303-1, siehe z.B. auch 
    
CAN Pinbelegung).
    
    Damit sieht mein Schaltplan dann folgendermaßen aus:
    
    
     
    
    Die Bauteile habe ich auf meinem komplett umgestalteten Board, wie folgt angeordnet. Dieses hat nun somit auch 
    eigentlich nichts mehr mit der Version von Mictronics zu tun, die ich mir als Vorbild genommen hatte:
    
    
     
    
     
    Die nachfolgende Grafik zeigt meine vollstänig neu gestaltete Platine in einem ersten Eagle-Entwurf (es sind leider nicht 
    alle Bauteile zum Rendern verfügbar, weshalb z.B. die Relais fehlen, sowie der SJA1000, Transistoren, Quarze etc.): 
    
    
     
    
    Die Firmware ist komplett in C geschrieben und basiert auch auf der veröffentlichten Version von Mictronics. Sobald diese
    vollständig fertig und getestet ist, werde ich diese hier neben den Eagle-Files zum Download anbieten.
    
    Die entscheidenden Gedanken bei dem Design dieser CAN-Interface-Karte gehen über die Verwendung als einfachen CAN-Bus-Adapter
    hinaus. Über die USB-B-Buchse kann ein USB-Kabel angesteckt werden, welches das Interface dann als "normalen" CAN-Adapter
    einsetzbar macht. Es lassen sich so alle Funktionalitäten in Kombination mit dem CAN-Hacker umsetzen, wie oben von 
    "Fuchs" zitiert.
    
    Entfernt man jedoch den USB-Stecker, dann wird die USB-Peripherie stromlos gemacht und das Interface muss über die extra
    Schraubklemme mit der Fahrzeug-Boardspannung betrieben werden. Dadurch läuft die Firmware normal weiter und lauscht 
    weiterhin auf dem CAN-Bus, reicht diese jedoch nicht an den USB weiter.
    Bei bestimmten vorher definierten CAN-Identifieren mit bestimmten Daten kann dieser dann reagieren und entsprechend
    eines der drei Relais schalten oder kurz anziehen. Auf diesem Weg lässt sich beispielsweise über einen Taster des RNS-E 
    ein Car-PC auf Wunsch einschalten und booten. Es können so beliebig drei physikalische Taster verwendet werden, die
    in ihrem Wirkungskreis von bestimmten CAN-Nachrichten des aktuellen CAN-Bus, der mit dem Interface abgehört wird, 
    gesteuert werden.
    
    
    
    
                           
    
    CAN im Audi A4
    
    Im Audi A4 gibt es drei CAN-Busse, die entsprechend durch signifikante Kabelfarben markiert und so gut erkennbar sind:
    
      - CAN-Antrieb (500 kBaud) [CAN-High Kabelfarbe: orange/schwarz]
- CAN-Komfort (100 kBaud) [CAN-High Kabelfarbe: orange/grün]
- CAN-Infotainment (100 kBaud) [CAN-High Kabelfarbe: orange/violett]
    Alle CAN-Low-Leitungen sind farblich jeweils immer orange/braun markiert.
    
          
    
    
    
    
    Bekannte CAN-Identifier
    
    
    
      | Identifier | Daten | Beschreibung | Absender/Bedingungen | Takterate | 
    
      | 0x261 | 8 Byte mit FIS-Zeichen | erste Zeile FIS | rotes Display | min. jede Sekunde | 
    
      | 0x263 | 8 Byte mit FIS-Zeichen | zweite Zeile FIS | rotes Display | min. jede Sekunde | 
    
         
    TO DO!      
    
    
    
    
    
Da ich bisher noch keine Zeit hatte, dauert es hier noch ein wenig.
    Also bitte habe noch etwas Geduld!
    
    MfG. Andreas