Kampi
03.05.2012, 16: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!
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!