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