PIC32MX795F512L 용 부트 로더를 가져 오는 데 문제가 있습니다.Pic32 부트 로더가 메모리에 쓰는 중
마이크로 칩 웹 사이트의 예제 코드를 기반으로합니다.
다음은 메모리를 작성해야하는 코드 섹션입니다.이 시점까지는 부트 로더를 확인했습니다 (16 진수 파일을 구문 분석하고 데이터가이 지점에 도달 하나 메모리에 기록되지 않음). 로드되는 프로그램 주소
#define NVMOP_WORD_PGM 0x4001
// Write the data into flash.
Result = NVMemWriteWord(ProgAddress, WrData);
// Assert on error. This must be caught during debug phase.
if(Result != 0)
{
ASSERT(Result==0);
}
UINT NVMemWriteWord(void* address, UINT data)
{
UINT res;
NVMADDR = KVA_TO_PA((unsigned int)address);
// Load data into NVMDATA register
NVMDATA = data;
// Unlock and Write Word
res = NVMemOperation(NVMOP_WORD_PGM);
return res;
}
UINT __attribute__((nomips16)) NVMemOperation(UINT nvmop)
{
int int_status;
int susp;
// Disable DMA & Disable Interrupts
#ifdef _DMAC
int_status = INTDisableInterrupts();
susp = DmaSuspend();
#else
int_status = INTDisableInterrupts();
#endif // _DMAC
// Enable Flash Write/Erase Operations
NVMCON = nvmop;//NVMCON_WREN | nvmop;
// Data sheet prescribes 6us delay for LVD to become stable.
// To be on the safer side, we shall set 7us delay.
delay_us(7);
NVMKEY = 0xAA996655;
NVMKEY = 0x556699AA;
NVMCONSET = NVMCON_WR;
// Wait for WR bit to clear
while(NVMCON & 0x8000);//NVMCON_WR);
// Disable Flash Write/Erase operations
NVMCONCLR = NVMCON_WREN;
// Enable DMA & Enable Interrupts
#ifdef _DMAC
DmaResume(susp);
INTRestoreInterrupts(int_status);
#else
INTRestoreInterrupts(int_status);
#endif // _DMAC
// Return Error Status
return(NVMemIsError());
}
예이다 0x9D033358 데이터는 다음과 같이 구성 비트 코드로 설정되어있다 2403000E
인 함께 :
가주소
설정1FC02FF0 FCFFFFFF
1FC02FF4 FFF8FFDF
1FC02FF8 FF69CC5B이
1FC02FFC 7FFFFFFF
이 모든 비트가 할 수 있지만 플래시 비트가 쓰기 가능으로 설정하고 코드 보호 무엇을 말할 수 없습니다 것은사용할 수 없습니다.
프로그램 단어 (쓰기) 작업을 시도하기 전에 블록 삭제 작업을 수행 했습니까? –
고맙습니다. 그 문제가 해결되었습니다. 내가 +1 할 수있는 방법으로 대답을 추가하십시오. – user2076574
질문에 해결책을 게시하는 것은 오류입니다. 자신의 답변으로 게시하십시오. 자신의 질문에 대답하는 것은 괜찮습니다. –