2014-02-20 3 views
0

Я пытаюсь запрограммировать и проверить блок внутренней вспышки на 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)

Стирание и запись данных, похоже, сработали. Любые предложения, что вызывает это?

Этот код работает в другом приложении.

ответ

0

Какой блок памяти вы переопределите? Какие данные там расположены? Не переопределяете ли вы некоторые функции, используемые вашим загрузчиком, или некоторые обработчики прерываний, которые могут быть обнаружены во время написания?

+0

Я пишу новый загрузчик из приложения. Прерывания отключены. –

+0

убедитесь, что флеш-память не заблокирована для чтения – kirill

Смежные вопросы