# include: PIC24FJxxx{DA1,DA2,GB2,GA3}xx
tblpag = 0x32
+WRITE_MAX_POLL_ATTEMPTS = 100
+
dev_table = { 0x00EE : "dsPIC33FJ128GP708",
0x00EF : "dsPIC33FJ128GP710",
0x080A : "PIC24HJ12GP201",
0x0407 : "PIC24FJ128GA006",
0x040A : "PIC24FJ128GA008",
0x040D : "PIC24FJ128GA010",
+ 0x1000 : "PIC24FJ64GA106",
+ 0x1008 : "PIC24FJ128GA106",
+ 0x1010 : "PIC24FJ192GA106",
+ 0x1018 : "PIC24FJ256GA106",
+ 0x1002 : "PIC24FJ64GA108",
+ 0x100A : "PIC24FJ128GA108",
+ 0x1012 : "PIC24FJ192GA108",
+ 0x101A : "PIC24FJ256GA108",
+ 0x1006 : "PIC24FJ64GA110",
+ 0x100E : "PIC24FJ128GA110",
+ 0x1016 : "PIC24FJ192GA110",
+ 0x101E : "PIC24FJ256GA110",
+ 0x1001 : "PIC24FJ64GB106",
+ 0x1009 : "PIC24FJ128GB106",
+ 0x1011 : "PIC24FJ192GB106",
+ 0x1019 : "PIC24FJ256GB106",
+ 0x1003 : "PIC24FJ64GB108",
+ 0x100B : "PIC24FJ128GB108",
+ 0x1013 : "PIC24FJ192GB108",
+ 0x101B : "PIC24FJ256GB108",
+ 0x1007 : "PIC24FJ64GB110",
+ 0x100F : "PIC24FJ128GB110",
+ 0x1017 : "PIC24FJ192GB110",
+ 0x101F : "PIC24FJ256GB110",
0x4109 : "PIC24FJ128DA106",
0x410D : "PIC24FJ256DA106",
0x410B : "PIC24FJ128DA110",
#else:
# stop_addr = addr+126
+ print "Writing address 0x%06X" % (addr)
+
runlist( wr_pm64_li_setaddr[:4]
+ [0x200000 + ((addr>>12)&0xff0),
wr_pm64_li_setaddr[5],
+ wr_pm64_li_wrlat )
runlist( wr_pm64_li_wr )
+ attempts = 0
status = readNVMCON()
while status & 0x8000:
+ attempts += 1
+ #print " Status was 0x%04X for address 0x%06X" % (status, addr)
+ if attempts >= WRITE_MAX_POLL_ATTEMPTS:
+ print "Error writing to address 0x%06X (Status: 0x%04X)\nTry erase and program again." % (addr, status)
+ stopICSP()
+ exit(-1)
client.writecmd( PICAPP, 0x82, 3, [0x00,0x00,0x00] )
status = readNVMCON()
# Configuration registers must be treated separately
for addr in ph_addrs[ph_addrs.index(last_code_addr):]:
+
+ print "Configuration register 0x%06X" % ( addr )
+
if addr%4 != 0:
continue
if (addr>>1) > 0xf80017:
0x000000, # NOP
0x000000] # NOP
runlist( wr_cfg_li )
+ attempts = 0
status = readNVMCON()
while status & 0x8000:
+ attempts += 1
+ #print " Status was 0x%04X for address 0x%06X" % (status, addr)
+ if attempts >= WRITE_MAX_POLL_ATTEMPTS:
+ print "Error writing to address 0x%06X (Status: 0x%04X)\nTry erase and program again." % (addr, status)
+ stopICSP()
+ exit(-1)
client.writecmd( PICAPP, 0x82, 3, [0x00,0x00,0x00] )
status = readNVMCON()