Hallo! Ich suche einen CAN-Treiber für den MC9S12DG128. Kann mir da eventuell jemand weiterhelfen? Vielen Dank im Voraus und viele Grüße
Hallo Stefan, meinst Du Hard- (=Transceiver) oder Software (da wirst Du wohl etwas von Vector kaufen müssen....) Gruss Otto
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.
> der aus 3.3V RXD/TXD CANL
weshalb - der MC9S12DG128 arbeitet mit 5V
Otto
> 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
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
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.
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...)
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
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.