I would like to know how to embed the user ID using PBP? Can I use poke above memory 1FFFH?
Printable View
I would like to know how to embed the user ID using PBP? Can I use poke above memory 1FFFH?
Hi,
From µChip MPLAB Programmers HELP :
From '628 DatasheetQuote:
ID Location : Program or verify the User ID. You can set the User ID by selecting Configure>ID Memory.
I'd recommend you to read The MPASM Help chapter relative to "__idlocs" ...Quote:
14.10 User ID Locations
Four memory locations (2000h-2003h) are designated
as user ID locations where the user can store
checksum or other code-identification numbers. These
locations are not accessible during normal execution
but are readable and writable during Program/Verify.
Only the Least Significant 4 bits of the user ID locations
are used for checksum calculations although each
location has 14 bits.
I will become obvious for you, then ... even if you have a "non µChip" programmer.
Alain
Déja-vue
Writing User ID
http://www.picbasic.co.uk/forum/showthread.php?t=7644&
Wasn't it called " RTFM " in the good ol' Forum times ...Quote:
deuhhh, yes there's an easier way.... Always nice to read MPASM PDF
Quand la censure ne coupait pas systématiquement tout ce qui pouvait ressembler à de l'humour ...
Mheuuuuunoon, je l'ai pas dit ...
Alain
:D hasquetèkon :D
Now I would ask, how do you read these ID location in PBP?
Ioannis
From MPASM
For PIC18, I guess Darrel have the right ticket for that. Something based around the followingQuote:
Usage
This directive is used in the following types of code: absolute or relocatable. For information on types of code, see Assembler Operation.
This directive is not commonly used, but does provide an easy method of serializing devices. __idlocs can be read by a programmer. PIC18 devices can read this value at run-time, but PIC12/16 devices cannot.
http://www.picbasic.co.uk/forum/showthread.php?t=4093
I found this snip on Microchip website
Code:// read serial number from PIC ID memory at address 0x200000 - 0x200007
DWORD ReadIDMemory(void) {
DWORD IdMemory=0;
DWORD Temp;
BYTE i;
TBLPTR = (unsigned short long) 0x200000;
for(i=0;i<8;i++) {
_asm
TBLRDPOSTINC
_endasm
Temp=TABLAT;
Temp<<=((7-i)*4);
IdMemory+=Temp;
}
return IdMemory;
}
I find these a little complicated and limited to 18 series.
My good old programmer, (ELNEC PIKprog+), is doing this serialization in a very good manner. Also gives an option where to store the serial number, so one can choose to store in EEPROM or Code space. Reading then is childs play.
Ooh, and it counts automatically of course with programmable step.
I'd like though to have this option on my ICD2. Maybe one day Microchip will do it. Hope I am alive then!
Ioannis
It is limited to PIC18 only if you want to access it at RunTime, unless most programmer are capable of reading the IDLOCS. And as you say, some also offer the automatic serialization, a nice plus.
Alright, I manage to get it to work now. Thanks for the info guys.