Twin-CAN-Controller SAK82C900 von Infineon

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
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, www.schema2000.de/can/can.pdf) 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, brp19%)
   BTR = (1 << 15) + (2 << 12) + (3<< 8) + (2 << 6) + ( 19 ), 4);

   // Framecounter aktivieren
   FCR = 0x0007000;

   // Exit Init-State
   ControlRegister = 0;

Müsste zum jetzigen Zeitpunkt nicht schon der Framecounter bei richtig
empfangenen Pakten hochzählen (tut er bei mir nicht!) ?

Danach: Initialisierung von einem Message-Objekt (31) als Shared
Gateway:

   // MSGVAL auf invalid -- Beginn der Initialisierung f. MO31
   CTR31 =  0x00005555;

   // Source auf Node A setzen ==> Destination ist dann Node B
   CFG31 = 0x00000000;

   // FGCR passend für Shared-Gateway setzen, NODEPTR = 31
   FGCR31 = 0x051F0100;

   // Message Identifier auf 0 setzen (Alle Pakete)
   AR31 =  0x0;

   // Message Acceptance Mask auf 0 setzen (Alle Pakete)
   AMR31 = 0x0;
  
   // MSGVAL auf valid -- Ende der Initialisierung f. Messageobject 30
   CTR31 = 0x00005595;

Das Problem ist, dass weder der Framecounter hochzählt noch Pakete
weitergeleitet werden. Das Statusregister und das ECNT zeigen auch
nichts besonderes. Nach ca. 30s bekomme ich aber seltsame Werte aus
diesen Registern zurück (0x20202020 oder 0x00000000).

Alles in allem suche ich nach irgendwelchen Beispielen, damit ich die
Schaltung bestätigen und prinzipiell mal die Funktionen des 82C900
testen kann!

Wenn jemand schonmal mit diesem Chip gearbeitet hat wäre ich über
Infos und Tips dankbar!

Gruss,
Florian



Re: Twin-CAN-Controller SAK82C900 von Infineon

Quoted text here. Click to load it

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.

Quoted text here. Click to load it

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.

Quoted text here. Click to load it

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.

Quoted text here. Click to load it

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.

Quoted text here. Click to load it

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




Re: Twin-CAN-Controller SAK82C900 von Infineon

Quoted text here. Click to load it

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?

Quoted text here. Click to load it
eingetragen,
Quoted text here. Click to load it

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

Quoted text here. Click to load it

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

Re: Twin-CAN-Controller SAK82C900 von Infineon

Quoted text here. Click to load it

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

Quoted text here. Click to load it
eingetragen,
Quoted text here. Click to load it

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.

Quoted text here. Click to load it

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



Re: Twin-CAN-Controller SAK82C900 von Infineon

Quoted text here. Click to load it
eingetragen,
Quoted text here. Click to load it

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

Quoted text here. Click to load it
Ausdehnung
Quoted text here. Click to load it


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.

Quoted text here. Click to load it

Gruss,
Florian

Re: Twin-CAN-Controller SAK82C900 von Infineon

Quoted text here. Click to load it
kannst
Quoted text here. Click to load it
prüfen,
Quoted text here. Click to load it

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

Quoted text here. Click to load it
Ausdehnung
Quoted text here. Click to load it

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: http://groups.yahoo.com/group/CANbus
Subscribe and unsubscribe at www.vector-informatik.com/canlist/

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


Site Timeline