Forum: Mikrocontroller und Digitale Elektronik Protokollverarbeitung des SJA1000


von Falk S. (Gast)


Lesenswert?

Hallo zusammen!

meine Frage:

Wieviel Arbeit nimmt einem der SJA1000 bei der Kommunikation über den
CAN Bus ab?
Also ich meine: Muß man nach der Initialisierung mehr machen als den
Sendepuffer füllen und die Empfangspuffer auslesen?
Falls nein:Gibt es CAN-controller, die einem mehr Arbeit abnehmen?

Viele Grüße,
Falk S.

von Rahul (Gast)


Lesenswert?

manchmal muss man wohl auch auf Interrupts reagieren...

von Falk S. (Gast)


Lesenswert?

Schon klar ;o)

Aber muß man auch so Dinge tun wie CRC berechnen, Acknowledge
Nachrichten verschicken, etc

von Peter Mahler (Gast)


Lesenswert?

Hallo,

eigentlich musst du nichts tun. Die Frage ist eher was du dabei tun
kannst.

Der SJA1000 kan in 2 unterschiedlichen  Modis betrieben werden.

1. PeliCAN-Modus für erweiterte (29-Bit) CAN-ID. Dort hast du die
Möglichkeit über Register die verschiedene Fehlerzustände abzufragen.

2. BasicCAN Modus als Kompatibilitäts-Modus für den das CAN Urgestein
82C200. Ausser dem globalen Error-Flag hast du dort kaum eine
Möglichkeit irgendwelche Fehler genauer nachzuvollziehen.

Interessant sind zum Beispiel solche Zustände wie ein Bus-OFF, z.B wenn
sich kein Empfänger die versendete Nachricht versteht. Man sieht dann
zwar, dass die Kommunikation nicht funktioniert, kann aber meist nicht
beurteilen an was es liegt.

Ansonsten gilt : Nach Initialisierung nur noch die RX-/TX-/Error-Flags
überprüfen (bzw. ISR), Daten reinschreiben und rauslesen.
CRC, Arbitirierung, Framing, usw. übernimmt der SJA1000



Gruss,

Peter

von Falk S. (Gast)


Lesenswert?

vielen Dank
Falk S.

von Toxic (Gast)


Lesenswert?

Hallo!

Ich habe einen SJA1000 zusammen mit einem AVR ohne Interrupts am
laufen.
Interrupts muss man nicht verwenden.
Was mich jetzt nur noch Interressiert ist, wie muss ich das mit
BUS-OFF, AKTIV bzw. PASSIV realisieren? Wie muss man dies
programmieren?

von Peter Mahler (Gast)


Lesenswert?

Herzlichen Glückwunsch ;-)

1. Einstellen der Baudrate über die Bittiming-Register.
Online-Berechnung unter :
www.port.de/deutsch/canprod/content/sv_req_form.html

1a. Eventuelles Einstellen der Akzeptanz-Register

2. Du bringst den CAN-Controller über das Control-Register in Operating
Mode

3. Zyklisches Senden und Empfangen von CAN-Daten über Status- und
Command-Register, dabei zyklisch das Error- und Bus-Status -Flag
überprüfen.
Der SJA1000 verfügt über ein internes FiFo(64 Bytes), welches mehrere
CAN-Pakete enthalten kann. Beim Lesen, insbesondere ohne ISR, sollten
wenn möglich alle Pakete abgeholt werden, bis der Receive-Buffer-Status
'empty' meldet




Gruss,

Peter

peter(punkt)mahler(ät)web(punkt)de

von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Peter!

Danke für die Info!
Ok ich habe mal versucht die ganze Geschicht mit dem ISR zu
realisieren. Leider klappt es nicht. Kannst du mir ein Beispiel Code in
C geben? Das würde mir sehr weiterhelfen.

In der Sende und Empfansroutine verwende ich den
"Receive-Buffer-Status" nicht.

Wie muss ich dies implementieren?

von Toxic (Gast)


Lesenswert?

Ich habe den Interrupt vom SJA1000 auf den Externen-Interrupt vom
ATMEAG8535 gelegt. Ist dies so richtig?

von Toxic (Gast)


Lesenswert?

Hallo!

Wie muss ich das Error- und Bus-Status -Flag per Software überprüfen
überprüfen?

von Toxic (Gast)


Lesenswert?

Hallo Peter....

von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Und zwar möchte ich meine Anwendung so ähnlich wie von Vector
gestalten. Die Software soll die Errorframes, Chip state sowie Std.
Data [fr/s] anzeigen.
Wie könnte ich dies realisieren?
Welche Register vom SJA1000 sind dafür zuständig?

von Florian (Gast)


Lesenswert?

Pull-Up-Widerstand bei der Interruptleitung nicht vergessen!!

von Toxic (Gast)


Lesenswert?

Hallo Florian!

Was soll jetzt dieser Posting genau?
Da ist keine Antwort auf meine Fragen.

von Florian (Gast)


Lesenswert?

@Toxic

Du hast geschrieben:
Ich habe den Interrupt vom SJA1000 auf den Externen-Interrupt vom
ATMEAG8535 gelegt. Ist dies so richtig?

Und ich habe geschrieben:
Pull-Up-Widerstand bei der Interruptleitung nicht vergessen!!

Im Klartext heißt das, daß Du eben nicht nur den Interrupt vom SJA1000
an eine externen Interruptport des AVRs anschließen mußt, sondern diese
Leitung zusätzlich mit einem Widerstand (z.B. 10k) gegen 5V schalten
mußt. Ansonsten wird das mit der Auslösung des Interrupts nicht
funktionieren.

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.