OBD Schnittstelle in C - KW1281



  • Hallo,

    ich habe ein kleines Projekt vor. Ich möchte in C das KW1281 Protokoll realisieren. Das KW1281 Protokoll wird für Fahrzeugdiagnosen genutzt und über eine serielle COM-Schnittstelle am Rechner und der OBD-Buchse am Auto kommuniziert.

    Informatoinen zum KW1281 Protokoll: http://www.blafusel.de/obd/obd2_kw1281.html

    Zunächst möchte ich eine einfache Verbindung herstellen und die Bezeichnung des Motorsteuergeräts auslesen.

    Daher fasse ich kurz die Informationen zum KW-Protokoll zusammen...

    1. KW1281-Initialisierung (blafusel.de):
    Um mit dem Controller zu kommunizieren muss dieser aufgeweckt werden,
    sodass er weiß man will mit ihm kommunizieren (Niedrige Baudrate 5Bd, 7O1).

    Auszug aus Portmon (blafusel.de):

    IOCTL_SERIAL_SET_BREAK_ON
    IOCTL_SERIAL_SET_RTS
    IOCTL_SERIAL_CLR_DTR
    IOCTL_SERIAL_SET_BREAK_OFF   -> Start-Bit?
    IOCTL_SERIAL_CLR_RTS
    IOCTL_SERIAL_SET_BREAK_ON    -> 0
    IOCTL_SERIAL_SET_RTS
    IOCTL_SERIAL_SET_BREAK_ON    -> 0
    IOCTL_SERIAL_SET_RTS
    IOCTL_SERIAL_SET_BREAK_ON    -> 0
    IOCTL_SERIAL_SET_RTS
    IOCTL_SERIAL_SET_BREAK_ON    -> 0
    IOCTL_SERIAL_SET_RTS
    IOCTL_SERIAL_SET_BREAK_ON    -> 0
    IOCTL_SERIAL_SET_RTS
    IOCTL_SERIAL_SET_BREAK_ON    -> 0
    IOCTL_SERIAL_SET_RTS
    IOCTL_SERIAL_SET_BREAK_ON    -> 0
    IOCTL_SERIAL_SET_RTS
    IOCTL_SERIAL_SET_BREAK_OFF   -> 1
    IOCTL_SERIAL_CLR_RTS
    IOCTL_SERIAL_SET_DTR
    

    Die Kommunikation zur Initialisierung sieht folgendermaßen aus:

    vom µC 	von ECU 	Beschreibung
    0x01 	  	5 Baud Adresse des Steuergerätes
      	0x55 	Sync Byte zum festlegen der Baudrate
      	0x01 	key word LSB (low significant byte)
      	0x8A 	key word HSB (high significant byte)
    0x75 	  	Komplement zur 0x8A
    

    2. Kommunikation (blafusel.de):
    Die eigentliche Kommunikation erfolgt mit üblicherweise 4800, 9600 oder 10400 Baud, 8N1.

    3. Übertragung der Gerätedaten (blafusel.de):
    Nach dem das Steuergerät bereit ist, startet die Übertragung der
    Gerätespezifikation. Hierbei meldet sich das Steuergerät folgendermaßen.

    vom µC 	von ECU 	Beschreibung
      	0x0F 	block length (s. u.); ECU ist Master
    0xF0 	  	Komplement
      	0x01 	block counter (s. u.)
    0xFE 	  	 
      	0xF6 	block title (s. u.)
    0x09 	  	 
      	0x30 	ASCII Wert für "0"
    0xCF 	  	 
      	0x33 	"3"
    0xCC 	  	 
      	0x30 	"0"
    ...
    0xBA 	  	 
      	0x20 	" " (Leerzeichen)
    0xDF 	  	 
      	0x20 	" "
    0xDF 	  	 
      	0x03 	block end (s. u.)
    

    Jetzt zu meinen Fragen:
    Wie kann ich diese Initialisierung in C realisieren?
    Wie kann ich das Timing einhalten?
    Was bedeutet 7O1 bzw. 8N1? - 7 Bits mit Stoppbit und Parität, 8 Bits ohne Parität und mit Stoppbit?

    Mein Code bisher:
    http://pastebin.com/6DZRjWKn

    PS: Das Kabel zur Kommunikation zwischen COM-Port und OBD ist ein USB-Kabel und als lokaler COM-Port gemappt.

    Falls jemand diesen Halbroman bis hierher gelesen haben sollte: Danke!

    Gruß
    COMedy



  • Achso, hab ich fast vergessen...
    OS: WinXP 32bit



  • http://www.teuniz.net/RS-232/

    währe eine möglichkeit... schon mal in irgend einer form rs232 gemacht ? so aufm avr oder so ? in linux iss das easy... quasie wie ne textdatei....

    Mfg McMorf



  • welchen compiler benutzt du ? visualc++ ?


Anmelden zum Antworten