Forum: Mikrocontroller und Digitale Elektronik Probleme mit CAN-Controller


von Norman M. (norman)


Lesenswert?

Hallo,

ich habe ein Problem mit dem Versenden von CAN-Nachrichten.

Ich nutze das Olimex Board LPC-L2294 mit dem Controller LPC2294.

Ich habe ein Programm geschrieben welches CAN-Nachrichten in TCP-Paketen 
bekommt, diese im ext. Ram ablegt und der Reihe nach auf den CAN-Bus 
rausschickt.

Jetzt habe ich das ganze mal getestet. Ich sende immer wieder eine 
CAN-Nachricht mit gleicher ID und einem Datenbyte auf CAN-Kanal 2 raus. 
Das funktioniert soweit ganz gut, bis irgendwann am Empfänger (Laptop 
mit CAN-Card) eine CAN-Nachricht mit ID 0 und DLC 0 ankommt. Wie die 
entsteht kann ich nicht nachvollziehen.
Nun werden keine CAN-Nachrichten mehr gesendet. Beim debuggen habe ich 
festgestellt, dass der Tx-Buffer des Kanal 2 (ich nutze nur Tx-Buffer 1) 
nicht mehr als frei markiert wird. D.h. die Bits TBS1 und TCS1 im CANSR 
Register bleiben 0.

Hat jemand eine Idee, was der Grund dafür sein könnte? Das Problem tritt 
ganz sporadisch aus. Mal nach wenigen 100 Nachrichten, mal erst nach 
2500 Nachrichten.

Danke!

Gruß,

Norman

von Andreas K. (a-k)


Lesenswert?

Deine Bemerkung über die TX Buffer lässt mich vermuten, dass du das 
Erratasheet des LPC nicht gelesen hast.

Das ist bei 32bit Controllern schon generell sträflicher Leichtsinn. 
Ganz besonders aber beim CAN Controller der LP2100/2200.

von Norman M. (norman)


Lesenswert?

Könntest du das vielleicht genauer erklären? Ich habe das Erratasheet 
schon gelesen. Habe ich da was falsch verstanden?

von Andreas K. (a-k)


Lesenswert?

Da steht drin, dass man nur einen der 3 TX-Buffer verwenden möge. Weil's 
sonst nicht sauber funktioniert. Du hast zwar nur einen verwendet, dich 
aber über das Verhalten eines der anderen Buffer gewundert.

Hast du die notwendigen Workarounds berücksichtigt?

von Norman M. (norman)


Lesenswert?

Oh ich sehe,

da habe ich tatsächlich etwas falsch verstanden. Ich dachte wenn ich nur 
einen Tx-Buffer verwende bin ich fein raus, aber die Bits TBS und TCS 
sind ja von allen Tx-Buffern abhängig, oder?

Ich schau mir die Workarrounds gleich nochmal an.

Ich würde mich aber auch freuen, wenn du mir erklären könntest was ich 
tun muss.

Danke!

Norman

von Norman M. (norman)


Lesenswert?

Also ich stehe immernoch aufm Schlauch.

Im Erratasheet finde ich folgendes:

CAN.4 Triple Transmit Buffer function not working correctly

Introduction: The CAN block provides three transmit buffers. Each of 
them has a length of four 32-bit words and is able to store one complete 
CAN message

Problem:The Triple Transmit Buffer function cannot be used.

Work-around:Use any one Transmit buffer only (Use either Transmit Buffer 
1, Transmit Buffer 2 or Transmit Buffer 3 exclusively). The buffer you 
decided to use should be loaded only when there is no pending 
transmission.

Deswegen dachte ich, es reicht nur einen Tx-Buffer zu verweden.

Oder ist dieser Punkt der Grund des Übels:

CAN.5 Handling Reset Mode and Abort Transmission

Introduction:In Reset Mode, the CAN operations are disabled and writable 
registers can be written. If an Abort Transmission command is issued 
then a pending transmission request is cancelled if not already in 
progress.

Problem:Normal operation cannot be resumed after reset or abort 
transmission without using one of the workarounds below.

Work-around:Two possible workarounds are possible.
1. After exiting the Reset Mode, before sending the first actual 
message, a dummy message should be transmitted with identifier 0x0 
(Standard Frame Format). This message should be transmitted by setting 
both the Self Reception Request bit and the Abort Transmission bit in 
the Command register simultaneously. (Note: CAN Identifier 0x0 should 
not be used in the application)

Gruß,

Norman

von Norman M. (norman)


Lesenswert?

Hallo,

könnte mir da keiner helfen?

Gruß,

Norman

von Andreas K. (a-k)


Lesenswert?

Da niemand ausser dir weiss, was du eigentlich gemacht hast, ist deine 
Aussage richtig. Ja, so kann dir niemand helfen.

Ich habe den CAN Controller des LPC2119 in einem Hausnetz mit 2 weiteren 
MCP2515/AVR Stationen bereits verwendet. Das Resultat ist seit einiger 
Zeit produktiv und bleibt auch nicht hängen.

Ich hatte dabei die Erratas und Workarounds berücksicktigt, die oben 
erwähnte Dummy-Message eingeschlossen.

von Norman M. (norman)


Lesenswert?

Hm sorry,

welche Infos bräuchtest du denn noch?

Das Erratasheet habe ich schon beachtet, aber ich habe halt nur nur den 
Punkt mit den Tx-Buffern als für mich relevant verstanden. Deswegen 
verwende ich auch nur einen.

Das mit der Dummynachricht könnte vielleicht auch noch relevant sein, 
nur verstehe ich überhaupt nicht den Sinn dahinter.
Wann genau muss diese Dummynachricht denn gesendet werden? Nur wenn ich 
nach der Konfiguration des CAN-Controllers vom Reset Mode in den z.B. 
Operating Mode wechsle? Oder wann? Und was bewirkt das?

Sag mir bitte was du wissen musst, dann poste ich die Infos.

Danke!

Norman

von Andreas K. (a-k)


Lesenswert?

Norman M. wrote:

> Das mit der Dummynachricht könnte vielleicht auch noch relevant sein,
> nur verstehe ich überhaupt nicht den Sinn dahinter.

Zitat NXP: "Normal operation cannot be resumed after reset or abort 
transmission without using one of the workarounds below."

> Wann genau muss diese Dummynachricht denn gesendet werden?

Zitat NXP: "After exiting the Reset Mode, before sending the first 
actual message"

von Andreas K. (a-k)


Lesenswert?

Verwendest du Adressfilter? Full-CAN?

von Norman M. (norman)


Lesenswert?

Das müsste Basic CAN sein, denn der SJA1000 ist ein Basic CAN 
Controller.

Adressfilter habe ich ausgeschaltet.

Also ist es so wie ich es geschrieben habe? Ich muss diese 
Dummynachricht nur einmal am Anfang als allererste Nachricht quasi 
schicken?

Kannst du auch den Sinn dahinter erklären? Mir fehlt da irgendwie der 
Zusammenhang...

Gruß,

Norman

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.