0% found this document useful (0 votes)
7 views

Protocol

PICPROGRAMMER

Uploaded by

mcu51c51
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

Protocol

PICPROGRAMMER

Uploaded by

mcu51c51
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

KITSRUS PROGRAMMER FIRMWARE PROTOCOL P018 AS OF 16 AUGUST 2004

BAUD SETUP = 19200,N,1

ON POWERUP PIC SENDS

'B' (ASCII) + Firmware Type (Byte)

Firmware Type List

K128 = 0
K149-A = 1
K149-B = 2
K150 = 3

WAIT FOR PROGRAMMER COMMAND START

EXPECTING 'P' (ASCII)

NO - RETURNS 'Q' (ASCII) - Waits for new command start

YES - RETURNS 'P' (ASCII)


Monitors from command jump table

COMMAND JUMP TABLE (Byte)

0 = Waits for new command start [0..24] [byte]


1 = RETURNS 'Q' (ASCII) - Waits for new command start
2 = Wait for next byte received and echo it back
Stays at Command Jump Table
3 = INITIALISE PROGRAMMING VARIABLES
Expects Byte Values
1 - ROM size High
2 - ROM size Low
3 - EEPROM size High
4 - EEPROM size Low
5 - Core Type
0 = 18F6x2x
1 = 18Fx230x330
2 = 18Fxx2xx8
3 = 16F87 88
4 = 12C50x
5 = 12C67x 16C50x 16Cxxx
6 = 16C8x 16F8x 16F87x 16F62x
7 = 16F7x 16F7x7
8 = 12F67x
9 = 16F87xA
10 = 16F818
11 = 16F57
12 = 10Fxxx
6 - Program Flags
Bit 0 = 1, Chip has calibration value ROM word
Bit 1 = 1, Chip has Band Gap value in FUSE
Bit 2 = 1, Sets single panel access for 18F
Bit 3 = 1, Execute very small delay between VCC on, then VPP on or
between VPP on and VCC on
7 - Program Delay
(0 - 255) X 100uS
8 - Power Sequence
0 = VCC only
1 = VCC then VPP1
2 = VCC then VPP2
3 = VPP1 then VCC
4 = VPP2 then VCC
9 - Erase Mode
0 = 16C8x 16F8x 16F87x
1 = 16F7x
2 = 12F67x
3 = I6F7x7
4 = 18Fxxxx
5 = 16F87xA F818 F87
6 = 10Fxxx
7 = 16F57
10 - Program Tries before programming fail
11 - Over Program when programming succeeds

FUNCTION RETURNS 'I' (ASCII)


Stays at Command Jump Table

4 = TURN ON PROGRAMMING VOLTAGES


FUNCTION RETURNS 'V' (ASCII)
Stays at Command Jump Table

5 = TURN OFF PROGRAMMING VOLTAGES


FUNCTION RETURNS 'v' (ASCII)
Stays at Command Jump Table

6 = CYCLE PROGRAMMING VOLTAGES OFF THEN BACK ON


FUNCTION RETURNS 'V' (ASCII)
Stays at Command Jump Table

7 = PROGRAM ROM
Then expects..
ROM word count High ---- ie. Chip ROM size
ROM word count Low
RETURNS 'Y' (ASCII)
Then expects 32 bytes of ROM data High Byte - Low Byte
Fills Buffer_A
RETURNS 'Y' (ASCII)
Then expects 32 bytes of ROM data High Byte - Low Byte
Fills Buffer_B in background as it is received

Programming ROM Loop


Program ROM with data
if no programming error
All ROM Programmed?
Y - RETURNS 'YP' (ASCII)
Stays at Command Jump Table
N - Buffer A or B empty?
Y - Send 'Y' for another 32 bytes of data
Continue at Programming ROM Loop
else
RETURNS 'N' (ASCII)
Current Address High
Current Address Low
Stays at Command Jump Table

8 = PROGRAM EEPROM
Then expects..
EEPROM byte count High
EEPROM byte count Low
(NOTE: function expects an EVEN count of bytes
and byte count must be 2 more than required)
RETURNS 'Y' (ASCII)
Programming EEPROM Loop
Then expects..
EEPROM byte x
EEPROM byte x + 1
Byte count reached...
Y - RETURNS 'P' (ASCII)
Stays at Command Jump Table
N - RETURNS 'Y' (ASCII)
Programs 2 EEPROM locations
Continue at Programming EEPROM Loop

9 = PROGRAM ID FUSES
Then expects...
'0' '0' (ASCII)
14 bit PIC - ID1 ID2 ID3 ID4 'F' 'F' 'F' 'F' (ASCII)
FUSE Value Low
FUSE Value High
0xFF (Byte)
0xFF (Byte)
0xFF (Byte)
0xFF (Byte)
0xFF (Byte)
0xFF (Byte)
0xFF (Byte)
0xFF (Byte)
0xFF (Byte)
0xFF (Byte)
0xFF (Byte)
0xFF (Byte)
Programs ID and FUSE
RETURNS 'Y' (ASCII)
Stays at Command Jump Table
or
16 bit PIC - ID1 ID2 ID3 ID4 1D5 1D6 1D7 1D8 (ASCII)
FUSE1 Value Low
FUSE1 Value High
FUSE2 Value Low
FUSE2 Value High
FUSE3 Value Low
FUSE3 Value High
FUSE4 Value Low
FUSE4 Value High
FUSE5 Value Low
FUSE5 Value High
FUSE6 Value Low
FUSE6 Value High
FUSE7 Value Low
FUSE7 Value High
Programs ID
RETURNS 'Y' (ASCII)
Stays at Command Jump Table

10 = PROGRAM CALIBRATION
Then expects...
Calibration High (Byte)
Calibration Low (Byte)
FUSE High (Byte)
FUSE Low (Byte)
CALIBRATION ERROR RETURNS 'C' (ASCII)
FUSE ERROR RETURNS 'F' (ASCII)
NO ERRORS RETURNS 'Y' (ASCII)
Stays at Command Jump Table

11 = READ ROM
RETURNS ALL ROM DATA UP UNTIL ADDRESS SPECIFIED
WHEN INITIALISING VARIABLES IN HIGH/LOW FORMAT
Stays at Command Jump Table

If a byte is received during transfer, it stops and


stays at Command Jump Table

12 = READ EEPROM

RETURNS ALL EEPROM DATA UP UNTIL ADDRESS SPECIFIED


WHEN INITIALISING VARIABLES
Stays at Command Jump Table

If a byte is received during transfer, it stops and


stays at Command Jump Table

13 = READ CONFIGURATION
RETURNS
'C' (ASCII)
ChipID_L (Byte)
ChipID_H (Byte)
ID1 (Byte)
ID2 (Byte)
ID3 (Byte)
ID4 (Byte)
ID5 (Byte)
ID6 (Byte)
ID7 (Byte)
ID8 (Byte)
Fuse1_L (Byte)
Fuse1_H (Byte)
Fuse2_L (Byte) can also be CAL word #1 or address 0x2008, or 10Fxxx Backup
CAL word
Fuse2_H (Byte)
Fuse3_L (Byte) can also be CAL word #2 or address 0x2009
Fuse3_H (Byte)
Fuse4_L (Byte)
Fuse4_H (Byte)
Fuse5_L (Byte)
Fuse5_H (Byte)
Fuse6_L (Byte)
Fuse6_H (Byte)
Fuse7_L (Byte)
Fuse7_H (Byte)
Calibrate_L (Byte)
Calibrate_H (Byte)
Stays at Command Jump Table

NOTE: Data fields are filled depending on chip type else are 0xFF

14 = READ CALIBRATION
RETURNS
Calibrate_H (Byte)
Calibrate_L (Byte)
Stays at Command Jump Table

15 = ERASE CHIP
RETURNS 'Y' (ASCII)

16 = ERASE CHECK ROM


Then expects...
High byte of blank ROM
Eg 0x3F 14 bit PIC
0xFF 16 bit PIC

All ROM checked?


NO
RETURNS
0xFF (Byte) after every 256 words checked
YES
RETURNS
ALL BLANK 'Y' (ASCII)
NOT BLANK 'N' (ASCII)
Stays at Command Jump Table

17 = ERASE CHECK EEPROM


RETURNS
ALL BLANK 'Y' (ASCII)
NOT BLANK 'N' (ASCII)
Stays at Command Jump Table

18 = PROGRAM 18Fxxxx FUSE


RETURNS 'Y' (ASCII)
Stays at Command Jump Table

19 = CHIP IN SOCKET DETECT


RETURNS 'A' (ASCII)

IF CHIP IS DETECTED IN PROGRAMMING SOCKET


RETURNS 'Y'
Waits for new command start

20 = CHIP OUT OF SOCKET DETECT


RETURNS 'A' (ASCII)

IF CHIP IS DETECTED OUT OF PROGRAMMING SOCKET


RETURNS 'Y'
Waits for new command start

21 = GET VERSION
RETURNS
K128 = 0 (Byte)
K149-A = 1 (Byte)
K149-B = 2 (Byte)
K150 = 3 (Byte)

22 = GET PROTOCOL
RETURNS - Protocol number.

Eg 'P013' (ASCII)

23 = PROGRAM DEBUG VECTOR


Then expects...
High address of DEBUG vector (Byte)
Mid address of DEBUG vector (Byte)
Low address of DEBUG vector (Byte)
RETURNS
Suceeded 'Y' (ASCII)
Failed 'N' (ASCII)

24 = READ DEBUG VECTOR


RETURNS
0xEF (Byte)
High address of DEBUG vector (Byte)
Mid address of DEBUG vector (Byte)
Low address of DEBUG vector (Byte)

25 = PROGRAM CAL DATA FOR 10Fxxx


Then expects...
Calibration High (Byte)
Calibration Low (Byte)
Backup Calibration High (Byte)
Backup Calibration Low (Byte)
CALIBRATION ERROR RETURNS 'C' (ASCII)
BACKUP CALIBRATION ERROR RETURNS 'B' (ASCII)
NO ERRORS RETURNS 'Y' (ASCII)
Stays at Command Jump Table

You might also like