Arduino nano/uno Flash használata EEPROM helyett

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Arduino nano/uno Flash használata EEPROM helyett

Hozzászólás Szerző: csabeszq »

Sziasztok,

Alap probléma, hogy az EEPROM mérete sokkal kisebb, mint a Flash mérete. Miközben a Flash-be 32k-t lehet nyomni, addig EEPROM-ba csak 1k-t.
Kézenfekvő lenne, hogy időnként külső IC helyett a Flash-t használjuk adattárolásra. Ez gyorsabb és több adatot tudunk benne tárolni, de kevesebb felülírást él túl.

A csatolt könyvtár használatával a Flash-t is használhatjuk EEPROM helyett, de ehhez a bootloader-t módosítani kell.

Az Atmel IC-k saját magukat csak a bootloader részből tudják módosítani. Éppen ezért 6 byte-ot be kell préselni a bootloader-be:

Kód: Egész kijelölése

7FF8:  87 bf           out     0x37, r24       ; SPM REG
7FFA:  e8 95           spm
7FFC:  08 95           ret
Ezután simán hívogathatjuk ezt a 6 byte-ot, hogy módosítsuk a kívánt lapot a Flash-en.

A könyvtár tartalmazza a patkolt NANO / UNO bootloadereket is, valamit példaprogramot a Flash manipulálására.
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: Arduino nano/uno Flash használata EEPROM helyett

Hozzászólás Szerző: Robert »

Az AVR elvileg tudja írni a főprogramból is a flash területet.
Kivéve ha levédtem SPM/LPM disable at Flash fusebittel.
Nem lenne egyszerűbb a komplett Flash író/olvasó rutint kiemelni?

Pl. Így van emulálva a DUE esetén az EEPROM írás....
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Arduino nano/uno Flash használata EEPROM helyett

Hozzászólás Szerző: csabeszq »

Mindenképpen az lenne a biztonságos, emellett az interruptot is tiltani kellene.

Lehet, hogy agyalok rajta még egy kicsit.
Avatar
csabeszq
Bitfaragó
Hozzászólások: 678
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Arduino nano/uno Flash használata EEPROM helyett

Hozzászólás Szerző: csabeszq »

Utánaolvastam és a flash-t valóban teljesen a bootloader-ből kell írni. Miközben a bootloader (NRWW secion) az RWW section-t (alkalmazás terület) írja, az RWW-t teljesen lekapcsolja.
Az utolsó parancs a frissítésnél az RWW section visszakapcsolása.

Nekem éppenséggel véletlenül ment, de a specifikáció kitért arra, hogy ezzel a módszerrel nem lehet flash emulációt megoldani.

Beraktam a bootloader-be komplett page frissítő rutint, amit letiltott interrupt mellett meg lehet hívni.
Válasz küldése