Я пытаюсь запрограммировать и проверить блок внутренней вспышки на PIC32MX360F512L. У меня есть функция, которая стирает, программирует и проверяет 4096 байтовый блок за раз. Когда я запускаю его, функция зависает, пытаясь проверить первый байт.Progam PIC32 внутренняя Flash с помощью программного обеспечения
BOOL Loader_ProgramFlashBlock(unsigned long int adr, unsigned int *p)
{
unsigned long int CurrentAddress;
unsigned long int PageEndAddress;
unsigned int *pData;
unsigned int nvmResult;
// Calculate the beginning and ending addresses of the page.
CurrentAddress = adr;
PageEndAddress = CurrentAddress + FLASH_BLOCK_SIZE;
pData = (unsigned int *)p;
// Check to see if the page has been erased
{
// If not, erase the page & log track it
nvmResult = NVMErasePage((void *)CurrentAddress);
if (nvmResult != 0)
{
// Error erasing Flash page
return FALSE;
}
}
// Program the block to Flash
while (CurrentAddress < PageEndAddress)
{
if (NVMWriteWord((void *)CurrentAddress, *pData) != FALSE)
{
// Error Writing Flash
return FALSE;
}
pData++;
CurrentAddress += sizeof(unsigned int);
}
// Verify that the block was written correctly
// (This check will identify writes to a Flash block that was not fully erased.)
CurrentAddress = adr;
pData = (unsigned int *)p;
while (CurrentAddress < PageEndAddress)
{
// Compare buffer contents to Flash contents
if (*((unsigned int *)PA_TO_KVA1(CurrentAddress)) != *pData)
{
// Flash and buffer did not match.
return FALSE;
}
pData++;
CurrentAddress += sizeof(unsigned int);
}
return TRUE;
} // Loader_ProgramFlashBlock
Функция вешает пытается проверить первое слово вспышки на линии:
если (! * ((Неподписанных INT *) PA_TO_KVA1 (CurrentAddress)) = * PDATA)
Стирание и запись данных, похоже, сработали. Любые предложения, что вызывает это?
Этот код работает в другом приложении.
Я пишу новый загрузчик из приложения. Прерывания отключены. –
убедитесь, что флеш-память не заблокирована для чтения – kirill