Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PIC16 XC8 запись во flash программ
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
van_de_luxe
Контроллер PIC16LF1709
Компилятор XC8

Необходимо в контроллере хранить калибровочные поправки в возможностью изменения.
Чтение и стирание памяти сделать получилось, делал как описано в даташите
Код
uint16_t ReadWordFlash(uint16_t adr){
    PMADR = adr;
    CFGS = 0;
    RD = 1;
    NOP();
    NOP();
    return PMDAT;
}


void EraseRowFlash(uint16_t adr){
    uint8_t StatusGIE = GIE;
    GIE = 0;
    PMADR = adr;
    CFGS = 0;
    FREE = 1;
    WREN = 1;
    //unlock sequense
    PMCON2 = 0x55;
    PMCON2 = 0xAA;
    //start erase
    WR = 1;
    //wait
    NOP();
    NOP();
    //wait ~2ms operation
    WREN = 0;
    GIE = StatusGIE;
}


А вот с записью проблемы. Делал по тому же даташиту, но в результате в памяти никаких изменений. (код сократил до записи в память 1 слова)
Код
void WriteRowFlash(uint16_t adr){
    uint8_t StatusGIE = GIE;
    GIE = 0;
    CFGS = 0;
    PMADR = adr;
    FREE = 0;
    LWLO = 1;
    WREN = 1;
    PMDAT = 0xaaaa;
    LWLO = 0;
    //unlock sequense
    PMCON2 = 0x55;
    PMCON2 = 0xAA;
    //wait
    NOP();
    NOP();    
    WREN = 0;
    GIE = StatusGIE;
}


Подскажите, что делаю не правильно
Voldemari4
А вы анлок и запись местами не перепутали случайно и вот еще что:
Цитата
Before writing to program memory, the word(s) to be
written must be erased or previously unwritten.
van_de_luxe
Нашел ошибку, вот правильный код, если кому понадобится

Код
void UnlockSequence() {
    PMCON2 = 0x55;
    PMCON2 = 0xAA;
    WR = 1;
    NOP();
    NOP();
}


void WriteRowFlash(uint16_t adr){
    uint8_t StatusGIE = GIE;
    GIE = 0;
    CFGS = 0;
    PMADR = adr;
    FREE = 0;
    LWLO = 1;
    WREN = 1;

    PMDAT = 0xaaaa;
    LWLO = 0;
    UnlockSequence();
    WREN = 0;
    GIE = StatusGIE;
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.