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
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.
Könntest du das vielleicht genauer erklären? Ich habe das Erratasheet schon gelesen. Habe ich da was falsch verstanden?
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?
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
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
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.
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
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"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.