Twin-CAN-Controller SAK82C900 von Infineon

Hallo!

Wir möchten gerne bei einem Projekt von 2 Phillips SJA1000 auf einen

82C900 von Infineon umsteigen. Die Testplatine (82C900@16MHz und Atmel MEGA163,
formatting link
ist soweit fertig und die Kommunikation zwischen MEGA163 und 82C900 funktioniert auch (Register lassen sich beschreiben und lesen). Leider sehe ich im Moment noch kein Licht bei der Konfiguration des 82C900. Im Moment teste ich mit folgender Initialisierung des 82C900:

Initialisierung der Nodes A und B:

// Enter Init-State ControlRegister = C900_CCE | C900_INIT;

// Set Timing-Register (div8x=1, tseg2=2, tseg1=3, sjw=2, brp=19) BTR = (1

Reply to
Florian Schenk
Loading thread data ...

"Florian Schenk" schrieb im Newsbeitrag

Vorab, ich kenne mich mit diesem CAN-Controller nicht aus, wußte bislang gar nicht, daß es eine Art CAN-Gateway auf Hardware-Ebene gibt.

Du setzt zwar oben Deine Timing-Register, hast Du aber die Baudrate richtig eingestellt? Alleine der BRP macht das nicht, sondern die Kombination Quarz und BRP! Was für einen Restbus betreibst Du und vorallem wie?!? In Deinem gelinkten Schematic sind am RS-Pin des PCA82C250 47 kOhm Widerstände eingetragen, für High-Speed-CAN Anwendungen solltest Du dort 0 Ohm-Brücken einbauen, die Flanken sind ansonsten zu flach. Du solltest auf jeden Fall die Busphysik (Terminierung) checken, vorallem wenn man "Plug&Play-CAN" betreibt.

Das alles kann erklären wieso der Frame-Counter nicht hochzählt.

Hast Du das Errata-Sheet angeschaut? Es gibt dort einige Probleme bzgl. Nicht-Senden von Botschaften und Canceln von Sendeaufträgen, d.h. evtl. steht dann hinterher Schmarrn in den Buffern drin.

Ich bin zwar kein Experte was Platinenlayout angeht aber für CAN-Anwendungen kenne ich mich ein wenig aus. Das von Dir gelinkte Schematic sagt imho nicht viel aus, es sind zwei Transceiver eingezeichnet und der µC, die OP's etc. kann ich nicht ganz einordnen. Was soll CAN_CS denn sein?!? Von der Beschaltung der Transceiver ist - evtl. bis auf den RS-Pin - alles korrekt.

Leider nein, deswegen kann ich Dir auch keinen Tip bzgl. Initialisierung und Konfiguration des Twin-CAN-Controllers geben. Hoffe trotzdem, daß irgendein Denkanstoß dabei ist.

Gruß, Taso

Reply to
Anastasios Tsitlakidis

"Anastasios Tsitlakidis" schrieb:

Also die Frequenz ist 16MHz, wonach der Teiler:

16.000.000 / 100.000 / 8 (wg. DIVX8) - 1 (s.Datenblatt) = 19 sein müsste. Oder ist da ein grober Denkfehler eingebaut?

eingetragen,

Ich bin bisher davon ausgegangen, dass 100kBaud kein High-Speed ist :-) Nee, Spaß beiseite... die 47kOhm-Widerstände funktionieren mit dem SJA1000 einwandfrei!

Externe Beschaltung ist EXAKT gleich wie bei meiner SJA1000-Platine, d.h. so sollte das eigentlich funktionieren. Oder gibts bei den CAN-Transceivern irgendwelche Unterschiede, welche es mir u.U. verbieten den PCF82C250 mit diesem Controller zu verwenden?

Gruss, Florian Schenk

Reply to
Florian Schenk

"Florian Schenk" schrieb im Newsbeitrag:

Bei 100 kBaud ist ein BRP nominell (nicht programmiert) von 20 iO, d.h. es sind genau 8 BTL-Cycles.

eingetragen,

Hast Du ein EMV-Problem? Wenn nein, dann entfernen, der PCA macht bei großen Netzwerken (10-20 m Leitung) bei schlechter Bittiming-Programmierung Probleme, das ist so meine praktische Erfahrung.

OK, ich gehe nicht davon aus, daß das ein Problem ist. Um weiterzukommen, kannst Du über Deine Applikation die CAN-Fehlerlevels abfragen? Dann kannst Du prüfen, ob der CAN-Controller physikalische Fehler erkennt. Nur so um die Ursache auszuschließen.

Kannst Du ein paar Details über Deine Applikation geben, Netzwerkgröße, Ausdehnung und Anzahl der Knoten? Ich kann mir nichts darunter vorstellen.

Btw, kannst Du beim Twin-CAN das ACK ein- und ausschalten? Vielleicht ist es ausgeschaltet, und bei einem Netzwerk mit zwei Knoten (der andere war der Atmel) fehlt dann das ACK auf dem CAN, welches u.U. die fehlenden Botschaften erklärt.

Der Listen-Only-Mode ist generell OK, bei einem CAN-p2p muß man das ACK verwenden.

Gruß, Taso

Reply to
Anastasios Tsitlakidis

"Anastasios Tsitlakidis" schrieb:

eingetragen,

Ja, man kann Fehlerlevels abfragen, allerdings kommt dabei nichts brauchbares zurück. Wenn ich ein anderes Timing einstelle bekomme ich Fehler zurück.

Ausdehnung

Also das Netzwerk besteht jeweils aus 3 Teilnehmern, wovon zwei auch miteinander kommunizieren können, der 3. ist meine Applikation. Die Abstände zwischen den Teilnehmern sind ca. 30cm.

Gruss, Florian

Reply to
Florian Schenk

"Florian Schenk" schrieb im Newsbeitrag

kannst

prüfen,

Wieso? Wenn das Warning-Level- oder Error-Passive-Bit != 0 ist dann ist es ein physikalisches Problem.

Ausdehnung

Also, die Physik scheint nicht das Problem zu sein. Ich denke, daß Du die CANLIST konsultieren, CAN-Controller-Themen werden dort oft erörtert:

Archives and useful links:

formatting link
Subscribe and unsubscribe at
formatting link
Report any problems to

Es gibt einen Kollegen, der sich auch mit CAN-Controllern sehr gut auskennt und in comp.arch.embedded mitliest und auch in CANLIST aktiv ist.

Einfach einen Repost machen, dort wird Dich geholfen! >;)

Gruß, Taso

Reply to
Anastasios Tsitlakidis

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.