Forum: Mikrocontroller und Digitale Elektronik SJA1000 und AT91RM9200


von Fabian H. (flyser)


Angehängte Dateien:

Lesenswert?

Hallo,
Ich habe einen AT91RM9200 (ARM920T), der über den Platform Bus an einen 
SJA1000 (Schaltung ist im Anhang) angeschlossen ist.
Wie man der Schaltung entnehmen kann, ist der Chip-Select des SJA an CS2 
angeschlossen und damit in den Speicherbereich ab 0x30000000 
eingeblendet. Außerdem wird Daten- und Adressleitung über das Adressbit 
2 umgeschaltet (also 0x04). Ich habe nun versucht über die u-boot 
Befehle mw und md die Register des SJA1000 zu schalten, habe damit aber 
leider keinen Erfolg...

Wenn ich nach dem Starten von u-boot irgendein Register im 
Speicherbereich des SJA1000 auslesem, bekomme ich den Wert 0xd4 zurück. 
Alle weiteren Leseversuche geben 0x30 zurück, auch bei anderen 
Registern. Schreibzugriffe scheinen keinerlei Änderung zu bewirken.

Auch die Initialisierung des SJA1000 über folgende Befehle bringt keine 
Besserung:
mw.b 30000000 0x0  ; mw.b 30000004 0x1 ;
mw.b 30000000 0x1F ; mw.b 30000004 0xc7 ;
mw.b 30000000 0x8  ; mw.b 30000004 0xFA ;
mw.b 30000000 0x6  ; mw.b 30000004 0x41 ;
mw.b 30000000 0x7  ; mw.b 30000004 0x1c ;
mw.b 30000000 0x0  ; mw.b 30000004 0x0

Hier nochmal ein Beispiel um Status Register auszulesen (Nicht dass ich 
mich da schon vertan habe):
mw.b 30000000 0x2 ; md.b 30000004 1

Fällt jemandem auf wo der Fehler liegen könnte?


Grüße,
Fabian Henze

von Otto (Gast)


Lesenswert?

Wie ich das sehe, liest und schreibst Du von bzw. an immer die selbe 
Adresse. Wichtig wäre es, den SJA1000 gemäß NXP-Appnote zu 
initialisieren (BTR, MODE usw.) und anschliessend das Reset-Flag zu 
löschen - erst dann ist der SJA "in Betrieb".

Otto

von Michael K. (1am3r)


Lesenswert?

Hast du in U-Boot den entsprechenden SMC konfiguriert? Ich könnte mir 
vorstellen, dass das Standard timing ein bisschen schnell für den 
SJA1000 sein könnte (Auch wegen datenbus breite usw...). Wenn du ein 
Oszi hast würde ich mal den NCS2 Pin beobachten ob sich da überhaupt was 
tut.

Gruß,
Michael

von Fabian H. (flyser)


Lesenswert?

Otto schrieb:
> Wie ich das sehe, liest und schreibst Du von bzw. an immer die selbe
> Adresse. Wichtig wäre es, den SJA1000 gemäß NXP-Appnote zu
> initialisieren (BTR, MODE usw.) und anschliessend das Reset-Flag zu
> löschen - erst dann ist der SJA "in Betrieb".

Die Befehle die ich oben zur Initialisierung des SJA1000 geschrieben 
habe, sollten doch dem entsprechen, was Du vorschlägst? Wenn ich keinen 
Fehler gemacht habe, dann sollten diese den SJA1000 bei 16MHz auf 
250kbit im PeliCAN Modus einstellen.

Michael K. schrieb:
> Hast du in U-Boot den entsprechenden SMC konfiguriert? Ich könnte mir
> vorstellen, dass das Standard timing ein bisschen schnell für den
> SJA1000 sein könnte (Auch wegen datenbus breite usw...). Wenn du ein
> Oszi hast würde ich mal den NCS2 Pin beobachten ob sich da überhaupt was
> tut.
>
> Gruß,
> Michael

Nein, habe ich nicht. Ich bin aber gerade etwas ratlos wofür SMC stehen 
soll. Ich finde nur "Static Memory Controller". Versuche gerade mir 
einen Oszi zu organisieren, habe leider selbst keinen :-/

von Otto (Gast)


Lesenswert?

Hallo Fabian,

ich kenne weder den von Dir verwendeten Controller, noch sagt mir 
"U-Boot" in diesem Zusammenhang etwas - was mir eben auffällt ist, dass 
Du m. E. immer an die selbe Adresse schreibst bzw. von dieser liest.

Wie soll ein Zugriff in der Art:

mw.b 30000000 0x0  auf die verschiedenen Register des SJA wirken ?

http://www.nxp.com/acrobat_download/applicationnotes/AN97076.pdf

Gruss Otto

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Du m. E. immer an die selbe Adresse schreibst bzw. von dieser liest.
Laut Schaltplan wird auf Adresse 0x30000000 das ALE angesteuert, auf 
0x30000004 werden Daten gelesen und geschrieben.

> mw.b 30000000 0x2 ; md.b 30000004 1
Erkennt das Uboot die 30000000 als Hex- oder als Dezimalzahl?

> Hier nochmal ein Beispiel um Status Register auszulesen...
Der SJA1000 hat ein Register, auf der die Chip-ID fix abgelegt ist. 
Versuch doch erst mal, die auszulesen.

von Otto (Gast)


Lesenswert?

> Laut Schaltplan wird auf Adresse 0x30000000 das ALE angesteuert, auf
> 0x30000004 werden Daten gelesen und geschrieben.

1. Wert also Adresse und der 2. die Daten

OK - dann ziehe ich meinen Einwand zurück.....

Otto

von Fabian H. (flyser)


Lesenswert?

Genau, die in Registern geschrieben wäre das dann die Initialisierung:
0x00 = 0x01
0x1F = 0xc7
0x08 = 0xFA
0x06 = 0x41
0x07 = 0x1c
0x00 = 0x00

u-boot erkennt meines Wissens die 3000000 als hex zahl, sollte also 
stimmen.
Der Versuch die chip id zu lesen bewirkt leider genau das selbe Ergebnis 
wie ich in meinem ersten Post geschrieben: erst 0xd4, danach 0x30.


Grüße,
Fabian

von Michael K. (1am3r)


Lesenswert?

Fabian Henze schrieb:

>...

> Michael K. schrieb:
>> Hast du in U-Boot den entsprechenden SMC konfiguriert? Ich könnte mir
>> vorstellen, dass das Standard timing ein bisschen schnell für den
>> SJA1000 sein könnte (Auch wegen datenbus breite usw...). Wenn du ein
>> Oszi hast würde ich mal den NCS2 Pin beobachten ob sich da überhaupt was
>> tut.
>>
>> Gruß,
>> Michael
>
> Nein, habe ich nicht. Ich bin aber gerade etwas ratlos wofür SMC stehen
> soll. Ich finde nur "Static Memory Controller". Versuche gerade mir
> einen Oszi zu organisieren, habe leider selbst keinen :-/

Ja, den "Static Memory Controller" meinte ich. Damit kannst du das 
Timing des Bus Interfaces auf den SJA anpassen.

Hmm, im DB vom SJA ist mir gerade aufgefallen, das es einen Motorola und 
einen Intel Modus gibt. Ist Pin 11 High (für Intel mode)?
Weiter ist mir in den Diagrammen ab Seite 60 aufgefallen, das dort CS 
erst dann low wird, wenn die Adresse schon übertragen ist. Das ist aber 
bei obigen Schreib / Lese - Zugriffen auf jeden Fall nicht gegeben. Evtl 
bringt das den SJA durcheinander. Hab mit dem noch nichts gemacht, kann 
da also nicht viel dazu sagen.

Gruß,
Michael

von Michael K. (1am3r)


Lesenswert?

Michael K. schrieb:
>...
>
> Hmm, im DB vom SJA ist mir gerade aufgefallen, das es einen Motorola und
> einen Intel Modus gibt. Ist Pin 11 High (für Intel mode)?
> Weiter ist mir in den Diagrammen ab Seite 60 aufgefallen, das dort CS
> erst dann low wird, wenn die Adresse schon übertragen ist. Das ist aber
> bei obigen Schreib / Lese - Zugriffen auf jeden Fall nicht gegeben. Evtl
> bringt das den SJA durcheinander. Hab mit dem noch nichts gemacht, kann
> da also nicht viel dazu sagen.

Vergiss den Teil, hab eben erst den Schaltplan entdeckt ;] Sorry

Kann es mir nun nur noch durch das Timing erklären, stell dazu mal den 
SMC2 auf viele Wait-states (kannst du ja auch über die U-boot befehle mw 
und md machen)

Gruß,
Michael

von WernerB (Gast)


Lesenswert?

Das erinnert mich an meine Anfangsprobleme mit den SJA1000...
Ziehe einmal testhalber den TX1 Pin (14) des SJA1000 mit einem 
Widerstand auf ein definiertes Potenzial. Danach hat es bei mir 
geklappt.

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.