Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сохрание данных в PIC32
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
swagger
Добрый день!
Изучаю PIC32 на отладочной плате UNO32 компилятор С32. Вопрос по сохранению данных пользователя при сбросе питания. EEPROM нет как в PIC18. Получается сохраняем во flash память?
Ruslan1
Цитата(swagger @ Mar 13 2014, 07:06) *
Добрый день!
Изучаю PIC32 на отладочной плате UNO32 компилятор С32. Вопрос по сохранению данных пользователя при сбросе питания. EEPROM нет как в PIC18. Получается сохраняем во flash память?

ага, именно так.
Вот кусок из моего старенького, опирается на NVN "Microchip PIC32MX Peripheral Library"
CODE

/***********************************************************************
PROCEDURE: SerMem_reading

This procedure reads multiple addresses of the device and stores
data into RAM buffer

Input:
startAddr: Destination Address 000000H - 3FFFFFH
no_bytes Number of bytes to read
*pntres - the pointer of the read data

Returns:
Nothing

/************************************************************************/
void SerMem_reading(u32 startAddr, u8 *pntres, u16 no_bytes )
{
u8 *pnt = (u8*)startAddr;

while (no_bytes > 0)
{
*pntres = *pnt; /* receive byte and store at address 80H - FFH */
pntres++;
*pnt++;
no_bytes--;
}
return;
}


/***********************************************************************
PROCEDURE: SerMem_writing
This procedure writes multiple addresses of the device
Input:
startAddr: Destination Address aligned 4
nbytes Number of bytes (4,8,12,16....)
*pntres - the pointer in RAM of the data
Returns:
Nothing
Note:
The smallest block of data that can be programmed in a single operation is 1 instruction word (4 Bytes).

/************************************************************************/
void SerMem_writing(u32 startAddr, u8 *pntres, u16 nbytes)
{
u32 wrdata;
nbytes &=0xFFF4; // align is 4 bytes

while (nbytes > 0)
{
wrdata = *((u32*)pntres);
NVMWriteWord((void*) startAddr, wrdata);
pntres+=4;
nbytes-=4;
startAddr+=4;
}
}


void SerMem_erase4K(u32 startAddr)
{
NVMErasePage((void*)startAddr);
}
swagger
Спасибо!
swagger
А насколько живучая эта память? Есть мнение, что в PIC24 и PIC32 ее лучше не использовать для сохранения конекста, так как кол-во циклов перезаписи флеш достаточно ограничено (около 1000) и лучше сделать отдельную мсх типа EEPROM или FRAM
Ruslan1
Цитата(swagger @ Apr 3 2014, 09:08) *
А насколько живучая эта память? Есть мнение, что в PIC24 и PIC32 ее лучше не использовать для сохранения конекста, так как кол-во циклов перезаписи флеш достаточно ограничено (около 1000) и лучше сделать отдельную мсх типа EEPROM или FRAM

В документации четко сказано, что, например у PIC32MX5XX/6XX/7XX "Cell Endurance : 1000 E/W min". У некоторых (PIC32MX534/564/664/764) обещают сильно больше (20000 E/W), но это предварительно.

Конечно, эту цифру превышать не следует. Если есть вероятность что нужно больше-то нужны специальные механизмы, чтобы этого избежать (использование нескольких областей ячеек, например). Ну или внешняя память.
Про внешнюю память: тоже нужно смотреть внимательно, часто пишут что типично до 100 тысяч, а в таблице спецификации дают 10 тысяч для конкретной микросхемы- зависит от суффикса в названии. А другие якобы 100-тысячники- тот же тип но другая буква.цифра в конце- и не продаются нигде.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.