Forum: Mikrocontroller und Digitale Elektronik CAN-Treiber für MC9S12DG128


von Stephan (Gast)


Lesenswert?

Hallo!

Ich suche einen CAN-Treiber für den MC9S12DG128. Kann mir da eventuell 
jemand weiterhelfen?

Vielen Dank im Voraus und viele Grüße

von Otto (Gast)


Lesenswert?

Hallo Stefan,

meinst Du Hard- (=Transceiver) oder Software (da wirst Du wohl etwas von 
Vector kaufen müssen....)

Gruss Otto

von Peter (Gast)


Lesenswert?

Hardware: Geht fast jeder Transceiver-Chip, der aus 3.3V RXD/TXD CANL 
und CANH machen kann.
Software: Ist leicht selbst gemacht. Nur die Filtereinstellungen sind 
etwas gewöhnungsbedürftig.

von Otto (Gast)


Lesenswert?

> der aus 3.3V RXD/TXD CANL

weshalb - der MC9S12DG128 arbeitet mit 5V

Otto

von Martin L. (melvin_the_moose)


Lesenswert?

> Software: Ist leicht selbst gemacht.
Respekt ;-)

> Nur die Filtereinstellungen sind etwas gewöhnungsbedürftig.
Ich habe für den MC9S12DJ64 und MC9S12xDT384 SW mit der Vector 
CAN-Toolchain entwickelt. Wenn ich mir die Treibersourcen ansehe, steckt 
da einiges an Gehirnschmalz drin. Allein für die Filteroptimierung 
rechnet der CAN-Konfigurator (Vector GENy) ca. 30 Minuten auf dem PC 
(Pentium M...), bis er meint, die optimale Verteilung der 
CAN-Botschaften auf die Filter gefunden zu haben (für meine spezielle 
Anwendung).

Wenn Du nur eine Botschaft senden und eine Empfangen willst, stimme ich 
Peter zu.
Falls aber

- die Anzahl der Rx-Botschaften die Anzahl der Filter übersteigt (dann 
muß ein effizienter Algorithmus zur Softwarefilterung her) und/oder

- verschiedene Applikationen z.B. Diagnose, NM, Applikation, XCP, 
Dienstenachrichten... (dann muß die entsprechende Applikation 
benachrichtigt werden) hinzukommen,

dann wird der Treiber schon aufwendiger.
Außerdem ist eine mögliche Fehler-/Wakeupbehandlung zu berücksichtigen.


Gruß

Martin

von JL (Gast)


Lesenswert?

Ich finde den Vector Treiber schon fast etwas übertrieben. Es kommt 
immer darauf an was entwickelt werden soll. Klar, mit automatischer 
Signalverteilung aus den 8byte Datenblock, Leseflags für jedes Signal 
usw. erspart diese Kauftreiber einiges an Arbeit. Diagnose, 
Netzwerkmanagement ist eigentlich eine höhere Schicht als ein CAN 
Treiber alleine.

Wenn es eine eigene Busstruktur werden soll, so kann man von Anfang an 
Nachrichten sauber strukturieren und die Messagefilter definieren. 
Ausserdem ist es auch möglich den Messagefilter in der Software 
abzuhandeln.

Fang doch mal an die nötigen Register zu selektieren und alle Messages 
zum Empfang freizugeben. Jetzt mit einem CAN-Port Messages senden und 
mit dem anderen Port wieder empfangen. Am Anfang im polling Verfahren, 
vereinfacht das testen. Ich habe mir mal ein ARM7 CANOpen 
einfachsprogramm angeschaut.
Das schreiben ist fast genauso einfach wie eine UART.


Habe es lange nicht mehr weiterverfolgt. Deshalb kann ich dir die 
Quellen auch nicht mehr sagen.



JL

von Peter (Gast)


Lesenswert?

Ist schon etwas länger her, daß ich den Treiber geschrieben habe, aber 
der funktioniert immer noch recht zuverlässig.

> Allein für die Filteroptimierung
> rechnet der CAN-Konfigurator (Vector GENy) ca. 30 Minuten auf dem PC
> (Pentium M...), bis er meint, die optimale Verteilung der
> CAN-Botschaften auf die Filter gefunden zu haben (für meine spezielle
> Anwendung).
30 Minuten??! Da stimmt aber was nicht. Ich kann mich dunkel daran 
erinnern, daß der Filter auf dem Controller ähnlich arbeitet, wie eine 
Subnet-Mask für IP-Netze, d.h. man kann gewisse Bereiche durchlassen. 
Das war schon etwas seltsam, aber soooo kompliziert auch wieder nicht.

> Außerdem ist eine mögliche Fehler-/Wakeupbehandlung zu berücksichtigen.
Ja, aber da lässt sich auch einiges vereinfachen.

Wenn ich's nicht vergesse, kann ich den Code morgen mal hier posten.

von Martin L. (melvin_the_moose)


Lesenswert?

Wie gesagt, wenn man erstmal nur das Prinzip "1 Msg senden, 1 Msg 
empfangen" umsetzen möchte oder damit beginnen möchte, daß überhaupt 
erstmal etwas auf dem CAN zu sehen ist, ist es so einfach (und die Sache 
ist erledigt).
D.h. Stephan kann das sicher für sich bewerten, was seine Anwendung 
können soll.

@Peter
> 30 Minuten??! Da stimmt aber was nicht. [...]
> Das war schon etwas seltsam, aber soooo kompliziert auch wieder nicht.

Wenn man aber (wie in einem FZG) eine Kommunikationsmatrix von >100 
Botschaften hat, von denen der eigene Knoten ~30 empfängt, dann sollte 
man den Filter so optimieren, daß man nicht soviel SW-filtern muß. Das 
Vectortool macht, glaube ich, die Holzhammermethode: Es bildet für alle 
Rx-Botschaften alle möglichen Aufteilungen auf 8 Filter (äh, 
Kombinatorik war noch nie meine Stärke...) und Gewichtet das Ergebnis 
jeweils mit der Empfangsrate der "durchgeschlüpften" Botschaften, um 
diese zu minimieren.

Leider merkt man meist nicht sofort, wenn das Steuergerät die Buslast 
nicht stemmen kann, sondern nur in Fällen hoher Buslast, in denen 
bestimmte Kombinationen von Botschaften nacheinander auftreten. Dann 
wundert man sich, daß der eigene Knoten Ereignisse verpaßt oder andere 
Aufgaben nicht mehr zeitgerecht erledigt...

@JL:
> Diagnose, Netzwerkmanagement ist eigentlich eine höhere Schicht als ein
> CAN Treiber alleine.
Yo, einverstanden. Die Funktionalität an sich gehört nicht in den 
Treiber. Aber falls es diese höheren Schichten in der konkreten 
Anwendung gibt, sollte der Treiber dafür Schnittstellen anbieten, um 
geschickt vorverarbeitete Daten zu liefern (z.B. welcher Filter hat beim 
Rx zugeschlagen...)

von Stephan (Gast)


Lesenswert?

Hallo und vielen Dank für eure Antworten,

ich bin zunächst an einem Treiber interessiert, mit dem es mir möglich 
ist einfach eine CAN-Nachricht zu senden bzw. zu empfangen. Ich möchte 
dabei mit dem CodeWarrior arbeiten. Hier im Forum wurde Anfang März 
beispielsweise bereits ein Treiber für den Cosmic-Compiler eingestellt 
mit dem Vermerk, dass eine Portierung einfach wäre. Diese ist mir 
allerdings bisher noch nicht gelungen.

Über weitere Hilfe wäre ich sehr dankbar,

viele GRüße,
Stephan

von Nikolai (Gast)


Lesenswert?

Mich interessiert das Thema auch.
In Bezug auf den Post von Otto:
Was gibt es denn für Kauflösungen und gibt es da im Web Beschreibungen 
zu?

von Otto (Gast)


Lesenswert?


von Christian G. (christiang)


Lesenswert?

Stephan wrote:
> Hallo und vielen Dank für eure Antworten,
>
> ich bin zunächst an einem Treiber interessiert, mit dem es mir möglich
> ist einfach eine CAN-Nachricht zu senden bzw. zu empfangen. Ich möchte
> dabei mit dem CodeWarrior arbeiten. Hier im Forum wurde Anfang März
> beispielsweise bereits ein Treiber für den Cosmic-Compiler eingestellt
> mit dem Vermerk, dass eine Portierung einfach wäre. Diese ist mir
> allerdings bisher noch nicht gelungen.
>
> Über weitere Hilfe wäre ich sehr dankbar,
>
> viele GRüße,
> Stephan

Hallo Stefan,

dann poste doch mal wieso und wo es bei dir mit Codewarrior klemmt, 
benutzte Codewarriorversion nicht vergessen!

Gruß,
Christian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.