-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathprotocol.txt
353 lines (264 loc) · 8.99 KB
/
protocol.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
KITSRUS PROGRAMMER FIRMWARE PROTOCOL P014 AS OF 5 MAY 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 (Stays at jump table. --GEC)
1 = RETURNS 'Q' (ASCII) - Waits for new command start (End command - implies voltages off. --GEC)
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 = NA
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
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
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
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
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 'P' (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: add 2 to EEPROM byte count before sending)
RETURNS 'Y' (ASCII)
Programming EEPROM Loop
Then expects..
EEPROM byte x
EEPROM byte x + 1
All EEPROM Programmed
Y - RETURNS 'P' (ASCII)
Stays at Command Jump Table
N - Programs 2 EEPROM locations
RETURNS 'Y' (ASCII)
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)
Programs ID and FUSE
ERROR - RETURNS 0xFF (Byte)
NO ERROR - RETURNS 0x00 (Byte)
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
Fuse2_H (Byte)
Fuse3_L (Byte) can also be CAL word #2
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)