mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik fehler: externen flash ansprechen


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab einen - für mich - merkwürdigen Fehler, bei dem ich nicht genau weiß 
wo die Ursache dafür liegt (Prozessor AT91SAM9260).

Es geht um einen externen Nor Flash AT49BV322DT. Wenn ich z.B. den CFI 
Command schicke, bekomme ich lediglich die Hälfte der richtigen Antwort 
zurück. Sprich manche Speicherstellen beinhalten den richtigen Wert und 
manche nicht. Hab max. Wait-States eingefügt und es gibt auch keine 
Sleep-Time etc. beim Flash. Auch wenn ich die Setup-Zeiten etc. etwas 
verändere - wird stets das gleiche angezeigt.

Einen ähnlichen Flash von Atmel kann ich mit den gleichen Setup, Pulse 
und Hold Zeiten richtig ansprechen. Auf den Leitungen ist auch nichts 
festzustellen... sieht alles gut aus / andere ICs funktionieren auch.

Gruß
Bernd

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab mir grad noch das muster (von den richtigen Werten) angeschaut...

ankommende Werte:
0x 00 00 52 00 00 00 02 00 00 00 41 00 00 00...27 00 00 00 90 00

normale Werte:
0x 51 00 52 00 59 00 02 00 00 00 41 00 00 00...27 00 36 00 90 00


-> d.h. es sind immer zwei 0x-Werte richtig und die nächsten sind 
falsch. Dieses Muster zieht sich komplett durch.-...


Hat jmd eine Ahnung, wo der Fehler legen könnte?

Bernd

Autor: Physiker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie ist dein Flash an deinen uC angeschlossen?

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
via 16Bit Datenbus und Adressbus, CS0, NRD, WE

Bernd

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat keiner für mich einen Tipp (oder sind es noch zu wenig 
Informationen)? Könnte beim Flash eine AdressLine defekt sein?

Bernd

Autor: Physiker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal dein Schaltplan.

- Wie ist der /Byte Eingang des 49BV322 beschaltet?
- Häufig wird das mit I/O15(A1) falsch verstanden

Autor: Bernd Schuster (mms)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier mal meine Anschlussbelegung

R53 ist nicht angeschlossen. Somit ist bei mir BYTE auf high gezogen


Bernd

Autor: Physiker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenn deinen ARM nicht, aber vermutlich liegts noch am "umrechnen" 
der Adressen. Die Addr (zb 0x555) in der Command Tabelle beziehen sich 
auf A11-A00 des FLASH. Da du aber im Word Mode bist hast du A1 des ARM 
an A0 angeschlossen. Dies ist für das Auslesen des FLASH im Run-Mode 
auch i.O.

Beim Lesen/Schreiben von Befehlen auf CFI muss die aber die Adressen 
entsprechend umwandeln.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Beim Lesen/Schreiben von Befehlen auf CFI muss die aber die Adressen
>entsprechend umwandeln.

wie meinst du das genau? Hab es mal mit 0xAA beim CFI Command versucht - 
leider ebenfalls ohne Erfolg.

Bernd

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habs geändert und jetzt schreib ich zwar was ins flash, allerdings nicht 
das richtige.... es wird immer 0xE59F reingeschrieben (egal was ich 
hinschicke)
#define M16(adr) (*((volatile unsigned short *) (adr)))

M16(0x10000000 + 0x0AAA) = 0xAA;
M16(0x10000000 + 0x1554) = 0x55;
M16(0x10000000 + 0x0AAA) = 0xA0;
M16(0x10000004) = *((unsigned short *) 0xEE);


Als Flash-Init hab ich
AT91C_BASE_SMC->SMC_SETUP0 = 0x00000001;
AT91C_BASE_SMC->SMC_PULSE0 = 0x08080804;
AT91C_BASE_SMC->SMC_CYCLE0 = 0x00080008; 
AT91C_BASE_SMC->SMC_CTRL0 =  0x000B1003;  

AT91F_SMC_CfgPIO();
AT91F_EBI_CfgPIO();

Bernd

Autor: Physiker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vor dem Schreiben kommt das lesen. Poste mal was du aus deinem Baustein 
lesen kannst.

Autor: Physiker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vor dem Programieren kommt das lesen.. so ist klarer.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
0x FF FF E5 9F E5 9F E5 9F FF FF FF 00 
   FF FF FF FF FF FF 00 FF 
   FF FF FF FF FF FF 00 FF 
   FF FF FF FF FF FF 00 FF usw.  


die E5 9F entstanden, als ich versucht hab etwas in den Flash zu 
schreiben.

Hab auch einige andere Setup-, Pulse- Kombinationen ausprobiert.
AT91C_BASE_SMC->SMC_SETUP0 = 0x00030003;
AT91C_BASE_SMC->SMC_PULSE0 = 0x08080804;
AT91C_BASE_SMC->SMC_CYCLE0 = 0x000A000A; 
AT91C_BASE_SMC->SMC_CTRL0 =  0x000B1003;  

AT91F_SMC_CfgPIO();
AT91F_EBI_CfgPIO();

Bei dieser werden neben 0x E5 9F lediglich 0xFF angezeigt. Allerdings 
werden beim Versuch etwas zu schreiben lediglich einige Nullen 
hinzugefügt (ebenfalls im Abstand wie oben). Der Flash benötigt keine 
Setup-Time für die Adresslines aber eine Hold-Time. Laut Datenblatt des 
Prozessors muss diese Cycle = Pulse + Setup + Hold sein (für die 
Hold-Time gibt es kein extra-Register).

>Vor dem Programieren kommt das lesen.. so ist klarer.
für diesen Flash benötigt man ja keinen Command um den Inhalt angezeigt 
zu bekommen. In der Keil Umgebung mit der ich arbeite, gibt es ein 
"Memory-Window" welches immer den aktuellen Inhalt ausliest (wenn der 
Debugger angehalten wurde)

Bernd

Autor: Physiker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ahnung was Keil macht..

Versuch nochmals die Daten des CFI zu lesen. Und bevor das nicht stabil 
geht würd ich nicht ins FLASH programieren. Sonst hast du 2 Baustellen 
gleichzeitig was die Fehlersuche deutlich erhöht.

Poste male wie du das CFI ausliest und was dabei rauskommt.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das CFI lese ich mit diesem Command aus:
M16(0x10000000 + 0xAA) = 0x98;

und erhalten tue ich:
0x 00 00 01 00 98 00 01 00 FF 00 FF 00 FF FF FF FF FF 00 FF 00 FF FF FF 
   FF FF 00 FF 00 FF FF FF FF 00 00 00 59 00 02 00 00 00 00 00 00 00 00 
   00 00 00 00 00 00 00 00 00 27 00 00 00 00 00 A0 00 04 00 00 00 00 0F

ein paar Zahlen stimmen überein; wie die erste 0x01 oder 0x59 0x02 oder 
die 0x27

Bernd

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zuvor hab ich es mit 0x55 versucht (wie im Datenblatt angegeben), dann 
kommt

0x 00 00 01 C9 00 00 00 01 FF 00 FF FF FF 00 FF FF FF 00 FF FF FF 00 
   FF FF FF 00 FF FF FF 00 FF FF 00 00 52 00 00 00 02 00 00 00 41 00 
   00 00 00 00 00 00 00 00 00 00 27 00 00 00 90 00 00 00 04 00 00 00


Autor: Physiker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Product ID Entry Cmd vorher ausgeführt?

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Product ID Entry Cmd vorher ausgeführt?

ja hab ich zuvor ausgeführt (allerdings kommt das gleiche Result mit und 
ohne Product ID Entry raus).
M16(0x10000000 + 0xAAA) = 0xAA;
M16(0x10000000 + 0x1554) = 0x55;
M16(0x10000000 + 0xAAA) = 0x90;

Bernd

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.