Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 25.10.2018, 18:20   #1
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 219
Вес репутации: 233/47
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию PIC16F15344 NVM

Всем привет!
Не могу найти, по какому адресу нужно писать.
Может кто работал, и есть пример?
Заранее благодарен.
Dima вне форума   Ответить с цитированием
Старый 25.10.2018, 18:41   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC16F15344 NVM

Dima
сформулируйте вопрос иначе - мне не совсем понятно, какие конкретно проблемы у Вас возникли.

Вы хотите жечь flash и не можете разобраться, как написать функцию для записи?
besogon вне форума   Ответить с цитированием
Старый 25.10.2018, 18:49   #3
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 219
Вес репутации: 233/47
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию Re: PIC16F15344 NVM

Мне нужна эмуляция EEPROM.
Еще обнаружил странность, когда включаю SAFEN, проц все время сбрасывается.
Dima вне форума   Ответить с цитированием
Старый 25.10.2018, 19:00   #4
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC16F15344 NVM

Dima
если Вы выбрали тот контроллер, о котором Вы пишете, то Вам придется использовать flash для хранения данных в обесточенном состоянии.

я не понимаю, что Вы понимаете под эмуляцией eeprom.
если вопрос в том, можно ли считать содержимое блока в оперативную память, модифицировать оперативную память, стереть блок памяти если это необходимо, а потом записать туда модифицированный блок, то да, так вполне можно сделать.

когда включаю SAFEN, проц все время сбрасывается - из storage area flash невозможно исполнение. может поэтому сбрасывается.

я не очень люблю малые пики. злые они как собака.
besogon вне форума   Ответить с цитированием
Старый 25.10.2018, 19:04   #5
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 219
Вес репутации: 233/47
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию Re: PIC16F15344 NVM

Нужно хранить пару переменных, которые может пользователь менять.
Пытаюсь делать так:
Код:
void WriteEEPROM(uint16_t bAdd, uint8_t bData)
{
    uint8_t GIEBitValue = INTCONbits.GIE;
    
    NVMADRH = ((bAdd >> 8) & 0xFF);
    NVMADRL = (bAdd & 0xFF);
    NVMDATL = bData;    
    NVMCON1bits.NVMREGS = 0;
    NVMCON1bits.WREN = 1;
    INTCONbits.GIE = 0;     // Disable interrupts
    NVMCON2 = 0x55;
    NVMCON2 = 0xAA;
    NVMCON1bits.WR = 1;
    // Wait for write to complete
    while (NVMCON1bits.WR)
    {
    }

    NVMCON1bits.WREN = 0;
    INTCONbits.GIE = GIEBitValue;   // restore interrupt enable
    Nop();
    Nop();
}

uint8_t ReadEEPROM(uint16_t bAdd)
{
    NVMADRH = ((bAdd >> 8) & 0xFF);
    NVMADRL = (bAdd & 0xFF);
    NVMCON1bits.NVMREGS = 0;    
    NVMCON1bits.RD = 1;
    NOP();  // NOPs may be required for latency at high frequencies
    NOP();
    return (NVMDATL);
}
Dima вне форума   Ответить с цитированием
Старый 25.10.2018, 19:18   #6
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC16F15344 NVM

Dima
я не увидел в описании Вашего устройства eeprom.
вполне может быть, что его там нет.

наверное там все-таки flash.

операции с flash сводятся к read, write и erase.

read - прочесть.
write - сделать в ячейке из единиц нули. из нулей единицы делать нельзя.
erase - сделать в блоке, который состоит и кучи ячеек из во всех ячейках единицы.

в Ваш код вникать не готов, пока Вы не сбросите ссылку на eeprom в этом чипе. страница такая-то даташита такого то.
besogon вне форума   Ответить с цитированием
Старый 25.10.2018, 19:23   #7
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 219
Вес репутации: 233/47
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию Re: PIC16F15344 NVM

EEPROM там нет. Но, как я понял, можно писать в SAF (DS40001889A - страница 33) Код выше сгенерировал Code Configurator.
Dima вне форума   Ответить с цитированием
Старый 25.10.2018, 19:31   #8
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC16F15344 NVM

Dima
у меня нет сомнений, что можно писать в saf.
считывать блок из saf в ram, модифицировать ram, если нужно очищать блок, писать блок.

у меня есть сомнения, что в saf можно писать как-то еще.

использовал code configurator только на masters.
увы, не могу детально сказать что там и как, тк. в обычных проектах не смог найти в нем для себе пользы.
besogon вне форума   Ответить с цитированием
Старый 25.10.2018, 19:55   #9
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 219
Вес репутации: 233/47
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию Re: PIC16F15344 NVM

Понятно. Я Code Configurator не использую, так, только посмотреть побыстрому конфиг какой. Может этот камень какой дохлый. Еще столкнулся, что внутренний генератор не откалиброван. При OSCTUNE = 0x37; на правильной частоте генерит. Никогда раньше с другими камнями такого небыло...
Dima вне форума   Ответить с цитированием
Старый 25.10.2018, 20:21   #10
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC16F15344 NVM

Dima
При OSCTUNE = 0x37; на правильной частоте генерит. - конкретно в Ваших условиях.
внутренний генератор в pic сделан неточно и его частота зависит от условий.
besogon вне форума   Ответить с цитированием
Старый 29.10.2018, 10:27   #11
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 219
Вес репутации: 233/47
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию Re: PIC16F15344 NVM

В общем решил задачу, немного "сбоку", но все работает.
Есть такая область User IDs. Размерность - 40 бит.
Единственный ньюанс - стирает все, писать можно в 4-е ячейки по 10 бит назависимо.

Адреса: 0x8000...0x8003

Код:
void ErraseEEPROM(void)
{uint8_t GIEBitValue = INTCONbits.GIE;
 NVMCON1bits.NVMREGS = 1;
 NVMADRH = 0x80;
 NVMADRL = 0;
 NVMDATH = 0x3F;
 NVMDATL = 0xFF;    
 NVMCON1bits.FREE = 1;
 NVMCON1bits.WREN = 1;
 INTCONbits.GIE = 0;
 NVMCON2 = 0x55;
 NVMCON2 = 0xAA;
 NVMCON1bits.WR = 1;

 while (NVMCON1bits.WR) ;
   
 NVMCON1bits.WREN = 0;
 NVMCON1bits.FREE = 0;
 INTCONbits.GIE = GIEBitValue;
}

void WriteEEPROM(uint16_t bAdd, uint16_t bData) //data 3FFF Maximum
{
    uint8_t GIEBitValue = INTCONbits.GIE;

    NVMADRH = ((bAdd >> 8) & 0xFF);
    NVMADRL = (bAdd & 0xFF);
    NVMDATH = bData >> 8;
    NVMDATL = bData;    
    NVMCON1bits.NVMREGS = 1;
    NVMCON1bits.LWLO = 0;
    NVMCON1bits.WREN = 1;
    INTCONbits.GIE = 0;     // Disable interrupts
    NVMCON2 = 0x55;
    NVMCON2 = 0xAA;
    NVMCON1bits.WR = 1;
    // Wait for write to complete
    while (NVMCON1bits.WR) ;
    NVMCON1bits.WREN = 0;
    INTCONbits.GIE = GIEBitValue;   // restore interrupt enable
}

uint16_t ReadEEPROM(uint16_t bAdd) //3FFF MAX
{
    NVMADRH = ((bAdd >> 8) & 0xFF);
    NVMADRL = (bAdd & 0xFF);
    NVMCON1bits.NVMREGS = 1;    
    NVMCON1bits.RD = 1;
    NOP();  // NOPs may be required for latency at high frequencies
    NOP();
    return ((NVMDATH << 8) + NVMDATL);
}
Если надо при прошивке занести значения:
static const int stored_config[4] @ 0x8000 = {0x3764, 0x1245, 0x2ACE, 0x1D73};
Dima вне форума   Ответить с цитированием
Старый 29.10.2018, 10:54   #12
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC16F15344 NVM

Dima
Здравствуйте.

если бы я был на Вашем месте, то написал бы функции работы с flash и использовал бы их.

кроме прочего не такая сложная задача именовать функции верно.
yvoid ErraseEEPROM(void) - она же у Вас стирает id поля, а не eeprom. тогда кого Вы хотите запутать? почему не nvn_id_erase(void) например?

Единственный ньюанс - стирает все, писать можно в 4-е ячейки по 10 бит назависимо. - почему нюанс-то? как раз таки очень характерное для flash поведение.
besogon вне форума   Ответить с цитированием
Старый 29.10.2018, 10:58   #13
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 31
Сообщений: 1,885
Вес репутации: 3528/77
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: PIC16F15344 NVM

Код:
static const int stored_config[4] @ 0x8000 = {0x3764, 0x1245, 0x2ACE, 0x1D73};
- если будут трудности, то volatile const, чтобы с случае оптимизаций не случилось такого, что после записи компилятор не сгенерировал код без вообще обращений туда.
besogon вне форума   Ответить с цитированием
Старый 29.10.2018, 11:34   #14
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 219
Вес репутации: 233/47
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию Re: PIC16F15344 NVM

Спасибо за подсказки! Изначально планировалось eeprom, так и осталось. :-)
Dima вне форума   Ответить с цитированием
Старый 30.10.2018, 15:00   #15
Илья
Senior Member
 
Регистрация: 26.02.2007
Адрес: SPb
Сообщений: 1,166
Вес репутации: 1775/71
Илья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant future
По умолчанию Re: PIC16F15344 NVM

Если включен SAF (STORAGE AREA FLASH), то последние 128 байт Flash резервируются ядром для хранения данных.
Но компилятору нужно сказать отдельно, чтобы эту область не занимал кодом.
Если SAF установлен, а код заходит в эту область - то получите сброс.

Как только эти контроллеры появились, то делал тесты на доп функции этого семейства (SAF, чтение DIA, MUI, запись Flash и пр.). если интересно, то пока лежит по ссылке, полежит потом удалю.
Илья вне форума   Ответить с цитированием
Старый 31.10.2018, 12:16   #16
Dima
Senior Member
 
Регистрация: 26.02.2007
Адрес: Minsk
Возраст: 49
Сообщений: 219
Вес репутации: 233/47
Dima has a spectacular aura aboutDima has a spectacular aura aboutDima has a spectacular aura about
По умолчанию Re: PIC16F15344 NVM

Илья, приветствую! Не нашел в проекте, где резервируется память. Наверное, Properties-XC8 Linker-Memory model-ROM ranges, но у Вас там пусто.
p.s. А где сейчас материалы с Masters выкладываете?
Dima вне форума   Ответить с цитированием
Старый 31.10.2018, 17:44   #17
Илья
Senior Member
 
Регистрация: 26.02.2007
Адрес: SPb
Сообщений: 1,166
Вес репутации: 1775/71
Илья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant futureИлья has a brilliant future
По умолчанию Re: PIC16F15344 NVM

см функцию
__at(0x3FE0) void dummy(void) {

т.е. её кладем по адресу 0x3FE0 (внутрь SAF области). Обращение к ней ведет к сбросу (эмуляция попытки выполнения кода из зарезервированного региона для данных - это чисто проверка что работает как надо).

резервирование данных можно либо в опциях линкера (в примере этого нет), либо резервированием массива в области данных, типа:
uint8_t SAFBuf[FLASH_BLOCKSIZE] @ 0x3F00

по мастерсу выложим на сайте, видимо на этой неделе или в нач.следующей
Илья вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
pic32mx nvm besogon Вопросы начинающих 3 20.03.2017 11:31
PIC32 и библиотечные функции NVM gontharov Продукция MICROCHIP 1 14.09.2010 10:32


Часовой пояс GMT +3, время: 01:45.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot