PIC18F - programovani ID z kodu
Jan Smrz
jan.smrz na email.cz
Úterý Červenec 9 21:26:42 CEST 2013
Zdravím,
mé trápení s PIC18F4685 pokračuje a chtěl bych se zeptat, jak správně
měnit ID z programu. Podle datasheetu by se s ID mělo pracovat stejně
jako s flash na adrese 0x200000. Čtení ID mi funguje, zápis také.
Problém je ale mazání, kdy se program "kousne" a to jak při debugování s
PICKIT3, tak v simulátoru. Pokud se adresa změní na programovou flash,
funguje vše bez problému. Jak se to dělá správně?
Testovací program pro XC8 je v příloze. Používá PLIB, avšak i při
napsání vlastní rutiny byl výsledek stejný.
Děkuji,
J.S.
------------- další část ---------------
#include <htc.h>
#pragma config CONFIG1H = 0x06 // Clock source setting, HSPLL (external resonator + PLL 4x)
#pragma config CONFIG2L = 0x1F // Brown-out enabled, PWRT disabled
#pragma config CONFIG2H = 0x0A // Watchdog disabled, period 4 secs
#pragma config CONFIG3H = 0x80 // Pin muxing
#pragma config CONFIG4L = 0x91 // Debug disabled, Extended instr. set disabled, 4KB bootloader, Low-volt. programming disabled, Stack overflow resets
#pragma config IDLOC0 = 0x0F
#pragma config IDLOC1 = 0x0F
#pragma config IDLOC2 = 0x0F
#pragma config IDLOC3 = 0x0F
#pragma config IDLOC4 = 0x05
#pragma config IDLOC5 = 0x06
#pragma config IDLOC6 = 0x07
#pragma config IDLOC7 = 0x08
typedef unsigned char uint8_t;
typedef unsigned long int uint32_t;
volatile uint8_t rdata1[8];
volatile uint8_t rdata2[8];
volatile uint8_t rdata3[8];
volatile uint8_t wdata[8] = {0x0A, 0x0B, 0x00, 0x0D, 0x00, 0x0F, 0x0A};
uint32_t address;
//------------------------------------------------
void main(void)
//------------------------------------------------
{
address = 0x200000LU;
// Read ID
ReadFlash(address, 8, (uint8_t*)rdata1);
// Erase ID
EraseFlash(address, address+7);
// Read ID
ReadFlash(address, 8, (uint8_t*)rdata2);
// Write new ID
WriteBytesFlash(address, 8, (uint8_t*)wdata);
// Read ID
ReadFlash(address, 8, (uint8_t*)rdata3);
LATE = 0xFF;
while(1)
;
}
Další informace o konferenci Hw-list