Datenübertragung zwischen PC und dem Endgerät, das Protokoll

Hemi

Aktives Mitglied
Premium Benutzer
30. Nov. 2008
1.103
19
38
Korntal-Münchingen, Germany
Sprachen
  1. ANSI C
  2. C++
  3. PHP
  4. Java
Moin zusammen,

eigentlich betrifft es nicht nur ARM MCUs, sondern eher was Allgemeins, aber dazu haben wir irgendwie keine Rubrik, bzw. ich habe keine passende gefunden. Wenn es doch eine gibt, wo die Frage besser aufgehoben ist, dann bitte verschieben :) Danke sehr!

Nun zur eigentlichen Frage. Ich habe ein Projekt am Wickel, bei dem es sich um ein Diagnoseinterface geht, nach J2534 Standard. Bei J2534 wird die Hardware maximal von der Diagnosesoftware weggekapselt und die Kommunikation findet über eine DLL statt, die vom Hersteller des DIagnoseinterfaces zur Verfügung gestellt wird.

Man kann sich das Ganze in etwa so vorstellen:

1690533866315.png

Die Diagnosesoftware greift über die J2534-Schnittstelle (die eigentlich nur eine DLL mit ein paar Exports ist, aber dazu später mehr) auf die Hardware (VCI = Vehicle Communikation Interface) zu, die wiederrum auf das Auto zugreift. Die Software schickt ihr Zeug in die J2534 und bekommt eine Antwort, fertig.

Die Schnittstelle ist wie folgt spezifiziert:
1690534167639.png
Sprich die DLL exportiert die fettgeschriebenen Funktionen und die Diagnosesoftware ruft sie auf, mit entsprechenden Parameter.

Diese Parameter sind aber sehr unterschiedlich (Returnwert ist immer ein unsigned long, der eigentlich ein Enum ist):
  • unsigned long
  • unsigned long*
  • char*
  • void*
  • struct SBYTE_ARRAY
  • struct SCONFIG
  • struct SCONFIG_LIST
  • struct PASSTHRU_MSG


CodeBox C
typedef struct _PASSTHRU_MSG
{
    unsigned long ProtocolID;
    unsigned long RxStatus;
    unsigned long TxFlags;
    unsigned long Timestamp;
    unsigned long DataSize;
    unsigned long ExtraDataIndex;
    unsigned char Data[4128];
} PASSTHRU_MSG;

typedef struct _SCONFIG
{   
    unsigned long Parameter;        // Name of parameter
    unsigned long Value;            // Value of the parameter
} SCONFIG;

typedef struct _SCONFIG_LIST
{
    unsigned long NumOfParams;        // Number of SCONFIG elements
    SCONFIG *ConfigPtr;                // Array of SCONFIG
} SCONFIG_LIST;

typedef struct _SBYTE_ARRAY
{
    unsigned long NumOfBytes;        // Number of bytes in the array
    unsigned char *BytePtr;            // Array of bytes
} SBYTE_ARRAY;

Wie man sieht sind es keine einfachen Strings...

Hardwaremässig verwende ich USB CDC Klasse, das funktioniert auch sehr gut, ich kann die Daten (hello world) zwischen dem Nucleo32 und dem PC hin und her schicken, passt alles.

Frage:

Gibt es eine elegante Möglichkeit die Funktionsaufrufe samt Parameter hin und her zu schicken? Klar, man kann das ganze Zeug irgendwie in ein uint8_t buffer* verpacken, über USB versenden und auf der anderen Seite dann wieder auseinanderfummeln, aber das ist eher eine Holzhammermethode. GIbt es da irgendwas Eleganteres? Ich weiß leider nicht, was die großen Hersteller wie Bosch, Hella und etc an der Stelle verwenden... hatte so ein Gerät nicht wirklich in der Hand gehabt.

Danke Euch im Voraus!
 
Zuletzt bearbeitet:

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)