Jag har experimenterat lite med att programmera om en PIC24FJ64GA004 via ICSP (MCLR, PGD, PGD) med en FTDI FT232R (USB till UART). Detta för att slippa en bootloader samt att jag redan har en FTDI-krets på kortet.
Har följt anvisningarna i PIC24FJXXXGA0XX Flash Programming Specification (men man får passa sig för skrivfel) http://ww1.microchip.com/downloads/en/D ... 39768d.pdf.
Men tyvärr blir det fel i steg 8 på sidan 19 då man ska skriva till FLASH minnet. Man ska ligga och polla WR biten i NVMCON och när skrivningen är klar skall WR biten bli 0. Men problemet är att den aldrig blir 0.

Samma polling teknik används vid FLASH radering i steg 5 på sidan 17, och då funkar det att WR blir nollad när raderingen är klar.
Så för att lösa problemet kollade jag i motsvarande dokument för dsPIC. Där pollar de inte WR-biten utan bara väntar 2ms och sedan nollar biten manuellt. Jag har kört den metoden och det funkar.
Förlängde väntetiden för programmeringen (P13) till 10ms dock, tyvärr finns ingen maxtid angiven för programmeringen, endast en min tid. Om man tittar på sidan 49, tiden P13 anges en min tid på 2ms och ingen maxtid, eller ska man tolka att maxtiden är samma som mintiden?
Någon här som har knölat med samma problem?
Sen har jag även sett i dsPIC dokumentet att de använder följande för att möjliggöra radering och programmering:
Kod: Markera allt
MOV #0x55, W8
MOV W8, NVMKEY
MOV #0xAA, W9
MOV W9, NVMKEY
Alltså nu funkar det att radera FLASH minnet, programmera om det, läsa tillbaks. Jag kan verifiera att innehållet blir samma som via ICD2 med MPLAB samt att programmet funkar som det skall. Men jag skulle vilja veta mer om varför WR-biten inte funkar vid programmeringen.
