реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Не получается работать с flash., PIC24FJ1024GB606
I_am_Lexx
сообщение Nov 14 2016, 10:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 21-10-09
Пользователь №: 53 122



Всем доброго дня.

Проблема в следующем. Не могу научиться писать/стирать flash в микроконтроллере PIC24FJ1024GB606.
Среда: MPLAB X.
Компилятор: XC16 ver.1.26.

Сказу скажу, что в структуре памяти разбираюсь не очень, но программирую PIC давно. Так что некоторые вещи понимаю.

Ранее для записи настроечных параметров в микроконтроллер, типа PIC24FJ64GB004, использовал библиотеку DEE Emulation 16-bit - эмулятор EEPROM. Использовал функции read, write и горя не знал.

При попытке запустить ее (DEE) на PIC24FJ1024GB606 оказалось, что она не работает. Стал смотреть ее. Оказалось регистр NVMCOM - регистр контроля Flash памяти в библиотеке DEE не соответствует требуемому. Попробовал поменять - не помогло. Далее в библиотеке разбираться не стал.

Открыл документы даташит на мк и "PIC24F Flash Program Memory" - DS30009715C. Надергал примеров из документа на flash. В итоге получилось следующее:

unsigned int __attribute__((section(".defaults"), space(prog))) factoryPARAM[512]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; // объявил область памяти.

Доработанный пример стирания из даташита на мк:
void erasing(void)
{
// C example using MPLAB XC16
unsigned long progAddr = (unsigned long)(&factoryPARAM); // Address of row to write
unsigned int offset;
//Set up pointer to the first memory location to be written
NVMADRU = progAddr>>16; // Initialize PM Page Boundary SFR
NVMADR = progAddr & 0xFFFF; // Initialize lower word of address
NVMCON = 0x4003; // Initialize NVMCON
asm("DISI #5"); // Block all interrupts with priority <7
// for next 5 instructions
__builtin_write_NVM(); // check function to perform unlock
// sequence and set WR
}

Не стирает.

Пример ниже выдернул из "PIC24F Flash Program Memory". factoryPARAM - моя область памяти.

void erasing(void)
{
unsigned int offset;

NVMCON = 0x4003;

offset = __builtin_tbloffset(factoryPARAM);
TBLPAG = __builtin_tblpage(factoryPARAM);

__builtin_tblwtl(offset, 0);
__builtin_disi(5);
__builtin_write_NVM();
}

Ничего не стирает.

Прошу помочь разобраться, чего я делаю не так. С библиотекой начинал работать за 5 мин. Сейчас убил 2 дня пробуя все варианты. Читать документы полностью тяжко.
Естественно, прошу помощи именно по указанному семейству МК, типа PIC24FJ1024GA610/GB610 FAMILY, ну или аналоги.

Сообщение отредактировал I_am_Lexx - Nov 14 2016, 10:58


--------------------
I am the Lexx. I am the most powerful weapon of destruction in the two universes.
Go to the top of the page
 
+Quote Post
asm_lock
сообщение Jun 16 2017, 14:37
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 78
Регистрация: 30-01-09
Из: СПб
Пользователь №: 44 178



Насколько я знаю, в пиках флешак стирается страницами...

void FlashPageErase(uint16_t Adru, uint16_t Adr)
{
uint16_t saveTBLPAG = TBLPAG;
TBLPAG = Adru;
__builtin_tblwtl(Adr, 0);

#if defined( __dsPIC33E__ )
NVMADRU = Adru;
NVMADR = Adr;
#endif

NVMCON = FLASH_PAGE_ERASE_CODE;
SET_CPU_IPL(7);
__builtin_write_NVM();
while (NVMCONbits.WR) {}
NVMCON = 0x0001;
TBLPAG = saveTBLPAG;
SET_CPU_IPL(0);
}

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd October 2017 - 17:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01245 секунд с 7
ELECTRONIX ©2004-2016