
171
ATmega8515(L)
2512A–AVR–04/02
Preventing Flash Corruption During periods oflow V
CC,
the Flash program can be corruptedbecausethe supply volt-
age is too lowfor the CPU and the Flash to operate properly.Theseissues arethe same
asforboard levelsystems using the Flash, and the same design solutionsshould be
applied.
A Flash program corruption can be causedbytwo situationswhen thevoltage is too low.
First, a regularwrite sequencetothe Flash requires aminimumvoltage to operate cor-
rectly. Secondly, the CPU itself can execute instructions incorrectly, if the supply voltage
for executing instructions is too low.
Flash corruption can easily beavoidedbyfollowing these design recommendations(one
issufficient):
1. If thereis no needfor a Boot Loader updateinthe system,program the Boot
LoaderLock bits to prevent anyBoot Loadersoftwareupdates.
2. Keep theAVRRESETactive (low) during periods of insufficient powersupply
voltage. Thiscan be done by enabling theinternalBrown-out Detector(BOD)if
theoperating voltage matches the detection level. If not, an externallow V
CC
Reset Protection circuit can beused. If aReset occurs whileawrite operation is
in progress, the write operation will be completedprovided that the powersupply
voltage issufficient.
3. Keep theAVRcoreinPower-down Sleep mode during periods oflow V
CC
.This
will prevent the CPUfrom attempting to decodeand execute instructions, effec-
tively protecting the SPMCR Register and thus the Flash from unintentional
writes.
Programming Time for Flash
when using SPM
The calibrated RC oscillator is used to time Flash accesses.Table 77 shows thetypical
programming time forFlash accessesfrom the CPU.
Simple Assembly Code
Example for a Boot Loader
;-the routine writes one page of data from RAM to Flash
; the first data location in RAM is pointed to by the Y pointer
; the first data location in Flash is pointed to by the Z pointer
;-error handling is not included
;-the routine must be placed inside the boot space
; (at least the Do_spm sub routine). Only code inside NRWW section can
; be read during Self-Programming (page erase and page write).
;-registers used: r0, r1, temp1 (r16), temp2 (r17), looplo (r24),
; loophi (r25), spmcrval (r20)
; storing and restoring of registers is not included in the routine
; register usage can be optimized at the expense of code size
;-It is assumed that either the interrupt table is moved to the Boot
; loader section or that the interrupts are disabled.
.equ PAGESIZEB = PAGESIZE*2 ;PAGESIZEB is page size in BYTES, not
words
.org SMALLBOOTSTART
Write_page:
; page erase
ldi spmcrval, (1<<PGERS) | (1<<SPMEN)
rcall Do_spm
; re-enable the RWW section
ldi spmcrval, (1<<RWWSRE) | (1<<SPMEN)
rcall Do_spm
Table 77. SPM Programming Time
Symbol Min Programming Time Max Programming Time
Flash Write (Page Erase, Page
Write, andwrite Lock bitsbySPM)
3.7 ms 4.5 ms
Commentaires sur ces manuels