Беня (02.04.2010 12:13, просмотров: 9236) blackbit
PIC24FJ64GA004 family - не получается запись во flash-память программы Безуспешно пытаюсь на PIC24F записать информацию во flash память программы.
У PIC24F нет EEPROM памяти , поэтому решил под хранение конфигурационных данных использовать flash память программы.
Пишу на Си Микрочиповском.
Объявил массив в ПЗУ, выравнял его по границе 512 на всякий случай :
int __attribute__((space(prog),aligned(512))) dat[2048];
Смотрю в отладчике - в нем содержатся нули (по умолчанию инициализируется нулями). Решил начинать с малого - написАть процедуру очистки памяти (erasing). Еще я в отладчике подсмотрел, что адрес у этого массива 0x1A00 (решил явно использовать для начала). Решил команды на ассемблере написать, чтобы уж точно не ошибиться (тупо передрал последовательность команд с примера на ассемблере с документации) :
// NVMCON = 0x4042 ; WREN=1, ERASE=1, Memory page erase operation
asm volatile ("MOV #0x4042, W0");
asm volatile ("MOV W0, NVMCON");
asm volatile ("MOV #tblpage(#0x1A00), W0");
asm volatile ("MOV W0, TBLPAG");// Initialize PM Page Boundary SFR
asm volatile ("MOV #tbloffset(#0x1A00), W0");// Initialize in-page EA
//[15:0] pointer
asm volatile ("TBLWTL W0, [W0]"); // Set base address of erase block
asm volatile ("DISI #5");// Block all interrupts for next 5
//instructions
asm volatile ("MOV #0x55, W0"); // Write the 55 key
asm volatile ("MOV W0, NVMKEY");
asm volatile ("MOV #0xAA, W1"); // Write the AA key
asm volatile ("MOV W1, NVMKEY");
asm volatile ("BSET NVMCON, #15"); // Start The erase sequence
Nop() ;
Nop() ;
do ; while( NVMCONbits.WR) ;
Затем смотрю в отладчике на свой массив dat[] (специально удаляю его из окна Watch и заново добавляю его, чтобы увидеть измененное значение) - как были там нули, так и остались, а по моему разумению после стирания там должны быть 0xFF. Вот никак не могу понять в чем же дело. Еще могла быть засада в словах конфигурации - в первом слове CW1 есть биты GCP (Code protection bit) и GWRP (Flash Write protction bit), но я объявил
_CONFIG1(GCP_OFF & GWRP_OFF & FWDTEN_OFF) ; // - это значение 0x777F и указанные биты в 1, т. е. разрешают запись.
Кто нибудь работал с PIC24FJ64GA004 family и смог записать во flash-память ?