PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum NVM Controller im XMega



Kampi
03.05.2012, 15:32
Hallo Forum,

ich beschäftige mich im Moment mit dem NVM Controller vom XMega und hab da gleich mal ne kleine Frage.....
Der NVM Controller "steuert" ja den Zugriff auf den Flashspeicher und die Kalibrationsbytes.
Jetzt habe ich im Internet diesen Code gefunden um ein Signaturbyte auszulesen:



NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc;
result = pgm_read_byte(3);
NVM_CMD = NVM_CMD_NO_OPERATION_gc;


Mit der ersten Zeile schreibt man ins Befehlsregister des NVM Controllers einen Befehl damit er Kalibrationsbytes ausließt.
Die zweite Zeile leuchtet mir aber noch nicht ganz ein. Ich weiß das der Befehl pgm_read_byte() dafür da ist um was aus dem Flashspeicher auszulesen. Das heißt mit dem Befehl wird die Adresse 3 ausgelesen. Wenn ich jetzt aber im Datenblatt des Controllers schaue,

http://www.atmel.com/Images/doc8077.pdf

ist bei Adresse 3 aber nicht das Kalibrationsbyte für den 32MHz Oszillator sondern die GPIO (Seite 386). Oder ist das die falsche Adresse? Muss man das dann im Zusammenhang mit dem Lesebefehl für das Kalibrationsregister sehen? Weil auf Seite 47 stehen "Production Signature Row" und da ist bei Adresse 3 der Kalibrationswert für den Oszillator und die Adressen fangen ja dann auch wieder bei 0 an, sprich für den NVM-Controller müsste dann die Adresse 0x00 die Adresse sein wo das 2MHz Oszillatorbyte steckt und dieses Byte befindet sich (wenn man den ganzen Flashspeicher betrachtet) an einer anderen Adresse als 0. Ist das vom Grundgedanken her so korrekt? Kann mir da jemand genauere Infos zu geben?
Der verwendete Code funktioniert zwar, aber ich würde gerne diese Unklarheit beseitigen :)

Danke schonmal!

askazo
03.05.2012, 19:21
Der Flash-Bereich, in dem die Calibration-Bytes stehen, ist vom Adressbereich des "normalen" Programm-Flash bzw. von den Peripherie-Modul-Adressen völlig unabhängig.
Über den NVM_CMD-Befehl wird dem Memory-Controller mitgeteilt, dass der nächste Lesezugriff (Assembler-Befehl: LPM) nicht auf den Programm-Flash zugreifen soll, sondern auf den Kalibrier-Bereich.
In der Tabelle auf Seite 47 stehen ja auch keine absoluten Adressen, sondern Address-Offsets (+0x03).

Gruß,askazo

Kampi
03.05.2012, 19:38
Danke für die Antwort. Wo sehe ich den das der Calibrationbereich ein externer Bereich ist? Ich hab da nichts im Datenblatt gefunden (oder übersehen?)

askazo
03.05.2012, 19:53
Datenblatt Seite 20, Abschnitt 4.3.4. ;)

Gruß,
askazo

Kampi
03.05.2012, 20:34
Ah dank dir :D