MyTetra Share
Делитесь знаниями!
EEPROM
Время создания: 09.06.2017 14:53
Раздел: Electronics - Microcontrollers - AVR8

Функции записи/чтения:


void EEPROM_write(unsigned int uiAddress, uint8_t ucData)

{

while(EECR & (1<<EEWE)) // Wait for completion of previous write

{}

EEAR = uiAddress; //Set up address register

EEDR = ucData; //Set up data register

EECR |= (1<<EEMWE); //Write logical one to EEMWE

CLI;

EECR |= (1<<EEWE); //Start eeprom write by setting EEWE

SEI;

}



uint8_t EEPROM_read(unsigned int uiAddress)

{

while(EECR & (1<<EEWE)) // Wait for completion of previous write

{}

EEAR = uiAddress; //Set up address register

CLI;

EECR |= (1<<EERE); //Start eeprom read by writing EERE

SEI;

return EEDR; //Return data from data register

}


Функции записи/чтения 16 битных переменных:


void EEPROM_write_int(uint16_t uiAddress, uint16_t ucData)

{

uint8_t temp = ucData >> 8;

EEPROM_write(uiAddress, (uint8_t) ucData); //high 8 bites will be cut

EEPROM_write(uiAddress +1, temp); //low 8 bites in next memory cell

}


uint16_t EEPROM_read_int(uint16_t uiAddress)

{

uint16_t temp = EEPROM_read(uiAddress+1);

NOP;

NOP;

temp = temp << 8;

temp += EEPROM_read(uiAddress);

return temp;

}


Адресация памяти начинается с 0. Конечный адрес можно узнать, выгрузив содержимое EEPROM из чипа или заглянув в datasheet.


По дефолту при стирании памяти RAM очищается и EEPROM. Чтобы этого не происходило, надо активировать (установить в ноль (!)) FUSE бит EESAVE.

Прочитать фьюзы из atmega8 (в файлы пишутся hex; предпочтительно):

sudo avrdude -c usbasp -p m8 -U hfuse:r:hfuse.txt:h -U lfuse:r:lfuse.txt:h


Прочитать фьюзы из atmega8 (в файл пишутся bin):

sudo avrdude -c usbasp -p m8 -U hfuse:r:hfuse.txt:b -U lfuse:r:lfuse.txt:b


Считаем новое значение на пальцах, если программируем в лесу, или через онлайн калькулятор:

http://www.engbedded.com/fusecalc/

Смотрим текущее состояние по слитым с чипа данным и рассчитываем необходимое значение. После этого прошиваем откорректированные фьюзы примерно следующей командой:

sudo avrdude -c usbasp -p m8 -U lfuse:w:0xEF:m -U lfuse:w:0xD1:m


+

 
MyTetra Share v.0.53
Яндекс индекс цитирования