Blue Flower

STM32-CAN-Busadapter

Einleitung

Da ich mich in letzter Zeit vermehrt mit den Cortex-Arm-Prozessoren von ST  befasse, musste nun wieder mein Lieblingsprojekt - ein CAN-Bus Interface - herhalten.
Als Ziel habe ich mir ein CAN-Bus Inerface vorgenommen, welches sich vor komerrzielle Interfaces nicht verstecken muss, und mit der CANHacker Software von der Seite: http://www.canhack.net laufen soll.


Und das ist es nun, mein aktuelles Projekt: STM32-CAN

Anforderungen:

  • High-Speed und Low-Speed CAN-Bussystem sollen untertützt werden. Konfiguration mittels DIP-Schalter oder Jumper auf dem Interface.
  • Abschlußwiderstand über DIP-Schalter zu schaltbar
  • CAN-Anschlussstecker erfolgt über ein 9-poliger SUB-D-Stecker (CIA Belegung)
  • USB-Schnittstelle incl. USB-Bootloader
  • Lawicel-Protokoll damit es mit der CANHacker Software läuft.
  • Status LED für die Anzeige von Tx und Rx auf dem CAN-Bus
  • STM32F105-RB Prozessor
  • STM-JTAG -  Schnittstelle (ST-Link und U-Link kompatible mit eigenen Programmierstecker)
  • Spannungsversorgung über den USB-Anschlussstecker

Realisierung:

Für die CAN-Schnittstelle werden folgende CAN-Treiber verwendet:

  • LOW-Speed CAN-Treiber: TJA1055
    Unterstützte Baudraten von 10 kBaud - 125 kBaud
    Im Fehlerfall ist Eindraht betrieb möglich
  • HIGH-Speed CAN-Treiber: PC82C250
    Unterstützte Baudraten von 10 kBaud- 1 MBaud

Schaltplan:
Schaltplan STM32-CAN  - Version 1.1

Abb. 1.1 Schaltplan STM32-CAN Version V1.1

 

CAN-Anschlussstecker Belegung (SUB-D 9polig männlich):

Pin-Nr. Beschreibung
1 nicht verwendet
2 CAN-LOW -Signal
3 GND (optional)
4 nicht verwendet
5 nicht verwendet
6 GND
7 CAN-HIGH Signal
8 nicht verwendet
9 nicht verwendet

Die Anbindung an den PC erfolgt mittels einer USB-Mini Buchse über die Hardware auch mit Spannung versorgt wird (+5 V).
Für die Umsetzung des Virtuellen Com Ports (VCP) werden die ST-Firmwaretreibern (OTG-Device-Host Firmware für STM32F105/F107) verwendet. Dies Paket beinhalte auch die Standard Peripherie Library in einer etwas aktuellern Version als die V3.5.0.

modifiziertes CANHacker Protokoll (basierend auf dem Lawicel-Protokoll)

  • Verarbeitung von 11-Bit Standard/29-Bit Extend-ID CAN-Botschaften (t/T)
  • feste Baudrate wird mit dem Sx-Befehl gesetzt (Befehl wird nur verarbeitet wenn der CAN-Kanal geschlossen ist:
    -  S0: 10 kBit
    -  S1: 20 kBit
    -  S2: 50 kBit
    -  S3: 100 kBit
    -  S4: 125 kBit
    -  S5: 250 kBit
    -  S6: 500 kBit
    -  S7: 33 kBit ==> CANHACKER verwendet hier: 800 kBit (Im CANHacker 800 kBit auswählen)
    -  S8: 95 kBit ==> CANHACKER verwendet hier: 1 MBit ( Im CANHacker 1 MBit auswähle)
    -  S9: 83 kBit ==> wird von CANHacker nicht unterstützt
    -  User Def.: Zur Zeit wird nur eine Benutzerdefinierte  Einstellung unterstützt:
    - 3333: 33,33 kBit/s
    - 8333: 83,33 kBit/s
  • Listen-Only Modus wird unterstützt.
  • Timestamps werden unterstützt (über CANHacker konfigurierbar). Die Timetamps werden bei jedem neuen Verbindungsaufbau zurückgesetzt und laufen von 0-99s. Die Auflösung beträgt 1ms


Projekt-Status:

März 2013:

  • Protoypen Software wie oben beschrieben
  • Prototypen Leiterplatten sind beim PCB-Pool bestellt

August 2014:

  • modifizierte Firmware um das Interface als Gateway zwischen dem Low-Speed  und Hight-Speed CAN in BMW-Fahrzeugen zu benutzen. Dazu wird einfach ein 2.Sub-D9 auf die LP gelötet und der Low-Speed-CAN dann direkt am DIP-Switch abgegriffen. Ausserdem werden die Botschaften die vom  CAN-Hacker gesendet werden, auf beiden CAN-Schnittstellen ausgegeben. Ansonsten werden alle Nachrichten von der einen Seite zur anderen geroutet.

    STM32-CAN modifiziert zum BMW-Gateway (High/Low-Speed) 
    Abb.1.2 STM32-CAN modifziert für BMW-CAN-Gateway High-Low-Speed

 

April 2015:

  • STM32-Bootloader - Prototyp vom STM32 Online-Flasher auf die Supportseite gestellt (JavaApplet mit dem das Interface über USB geflasht werden kann)

November 2015:

  • 2, Protoypen Version, neue Hardware V1.2:
    - Bugfix VUSB, somit
    - grüne LED hinzugefügt für den RX-Stauts  ( blau ist dann der Tx-Status)
    - Low-Speed CAN-Bus jetzt fest auf den SUB-D9 Stecker gelegt (somit entfällt obiger Umbau für ein Gateway)
  • Hier gehts  zur Beschreibung der neuen Version:  STM32-CAN neue Hardware Version V1.2

Dezember  2015:

  • STM32-CAN Flasher Tool überarbeitet und Online gestellt (s. Support)
  • CanAnalayer V24 - Online gestellt
    - Button zum Abspeichern der Trace-Liste hinzugefügt. Speichert die Traceliste im CANHacker Trace-Format ab.

April 2016:

  • CanAnalyzer V26 - Online gestellt
    - In der Trace-Liste kann jetzt im Kommentar Bereich eine ASCII-Darstellung der Datenbytes aktiviert werden.
      (Der Dank für die Anregung geht an: surfjenser )
    - Beim Abspeichern der RX-Liste / Trace Liste nun eine Warnung ausgeben, wenn die Datei schon existiert.
    - Aktuell verwendete Baudrate wird nun in den RX-Liste und Trace-Liste mit abgespeichert.
    - kleinere Bugfixes
    - neuer Start-Trace Button 
  • CanAnalayzer V27 in Vorbereitung (in Kürze im Support Bereich verfügbar)
    - aktuelle Settings beim Verlassen merken und beim Erneuten Start verwenden (Ini-File)

Support

Die Support-Seite steht nur den angemeldeten Benutzern zur Verfügung. Dort finden sich die Downloads der aktuellen Firmware und eine Installations-Anleitung für das Interface.
Link zur STM32-CAN - Download Page  

CAN-Analyzer

Zur Zeit ist ein eigener CAN-Logger in Arbeit. Das besondere wird die RX-Liste sein, bei der dann die aktuellsten Datenbytes grafisch hervorgehoben werden, und ältere Daten werden dann langsam unsichtbar. Dies vereinfacht dann ungemein das lokalisieren von bestimmten Datenbits wenn man im Auto die  CAN-Botschaften analysiert.

Besondern Dank geht an Robert G. für die zur Verfügungstellung des Lazarus-Grundgerüst von dem Projekt, somit konnte ich mich voll auf die grafische Hervorhebung der aktuellen Daten in der RX-Liste konzentrieren.

Hier mal ein Vorschaubild von der RX-Liste:

Vorschaubild von der RX-Liste
Abb.1.3 Vorschau von der RX-Liste mit grafischer Hervorhebung von aktuellen Datenbytes

Funktionsumfang:
- Es werden alle Interfaces unterstützt,  die das Lawicel-Protokoll verwenden (und die gleiche Hardware ID gesendet wird,
  siehe Support-Page). 
  (unter Beachtung, dass ich ein leicht modifiziertes Protokoll für die Baudraten verwendet habe s.o. )
- RX-Liste
- RX-Trace
- Export der Listen/Traces
- Empfangsfilter   (todo)
- eigene Botschaften senden (todo)

Es wird aber noch einige Zeit dauern, bis alles umgesetzt ist.

Die aktuellen Versionen stehen auf der STM32-Supportseite (s.o.) zum Download bereit.

Video: https://www.youtube.com/embed/uIO9P0yFNek


Vorab schon mal die Eagle-3D Bilder von der Leiterplatte:

STM32-CAN-Bus Interface
Abb. 1.3 EAGLE-3D Ansicht von STM-CAN - Inteface Version 1.0 - Prototype

 

STM32 CAN - Leiterpaltte Bestückungsseite
Abb.1.4 -  Bestückseite STM-32-CAN Interface Version 1.0 - Prototype

STM32-CAN - Bestückungsseite   STM-32-CAN - Leiterbahnseite
Abb.1.3 Darstellung ca. original Größe    

 

Fertige Leiterplatte:

Beim Layout hat sich ein kleiner Fehler eingeschlichen, der in der neuen Leiterplattenvariante behoben wird, bzw. in den Protoypenleiterplatten mit etwas Fädeldraht behoben wird :-(

STM32-CAN - Bestückte Leiterplatte
Abb.1.5 CAN-STM32  - Protoypenversion - V1.0 (manueller Umbau auf V1.1)

 

todos für die Zukunft:

    • Protokoll für die Benutzerdefinierten Baudrate erweitern
    • eigenenr CAN-Analyzer Software , quasi ein CAN-HACKER II  :-)

 

  • Hardware Filter setzen (Mxxxxxxxx Akzeptanz-Code für STM32 setzen)
  • Hardeware Mask-Filter setzen (mxxxxxxxx Akzeptanz-Mask für STM32 setzen)
  • Manuelle Baudraten Auswahl (sxxyyzz) verallgemeinern , zur Zeit werden nur die Baudraten:
    - 3333 = 33,33 kBaud
    - 8333 = 83,33 kBaud
    unterstüzt.
  • Remote Frames senden (rxxxl/Rxxxxxxxxl)
  • Listen Only Modus ( L[CR] )
  • Get Serialnumber auf CAN-Bus Interface ( N[CR])
  • Read Statusflags, dazu müsste aber erst mal ein komplettes Fehlerhandling implementiert werden ( F[CR])
  • virtuellen COM-Port durch ein HID-Device ersetzen, so das keine speziellen Treiber benötigt werden
  • Schnittstelle schreiben damit das Interface mit dem BUSMASTER läuft:
    - die prinzipielle Einbindung in den Busmaster klappt schon mal
    - jetzt muss noch eine STM32-CAN-Treiber DLL erstellt werden. Da ich kein Windows-Programmierer bin, kann das etwas dauern, bzw. ich könnte hier Unterstützung gebrauchen.

 

 

Links:

TJA1055 - Datenblatt
PCA82C250 - Datenblatt

STM32-Resourcen:
UM1021 - User manual  "USB On The Go host und device library für STM32F105/107"
STSW-STM32046 - Version 2.1.0 : stm32_f105-07_f2_f4_usb-host-device_lib.zip
STSW-STM32054 - Version 3.5.0: STM32F10x standard peripheral library

Entwicklungsumgebung: Keil Compiler - MDK-Lite Version V4.70a

www.canhack.net: - CANHacker V2.00.02 Download (direkter Link auf die Zip-Datei: CANHackerV2.00.02.zip)

BUSMASTER (BUSMASTER is an Open Source Software tool to simulate, analyze and test data bus systems such as CAN)

 

 


Produktionschritte vom PCB-Pool:

Die Protoypen LP wurden beim PCB-Pool gefertigt. Hier sind dann die einzelne Arbeitsschritte von der Leiterplattenfertigung dargestellt:

  • Auftragsvorschau

Autragsvorschau

  • Leiterplatte bohren
  • Leiterplatte belichten
Belichtete Leiterplatte - Bestückungsseite   Belichtete Leiterplatte - Leiterbahnseite
     

 

  • geätzte Leiterplatte
Geätzte Leiterplatte - Bestückungsseite   Gätzte Leiterplatte - Leiterbahnseite
     

 

....