comparison py_avrjtag/cmd_proto.py @ 4:6b1594fb668f

Improve performance of jtag.c and test it with Python scripts. - cp_tditdo.py send bits to TDI and hope it will feed back from TDO. - Expand loops in jtag.c to improve performance.
author Thinker K.F. Li <thinker@branda.to>
date Sun, 22 Feb 2009 12:54:45 +0800
parents
children 61f27549de57
comparison
equal deleted inserted replaced
3:e410832c3280 4:6b1594fb668f
1 import struct
2
3 CPCMD_PING = 1
4 CPCMD_SHIFT_TDI = 2
5 CPCMD_SHIFT_TMS = 3
6 CPCMD_SHIFT_TDI_TDO = 4
7 CPCMD_PONG = 5
8 CPCMD_DATA = 6
9 CPCMD_ACK = 7
10 CPCMD_NAK = 8
11
12 def csum_add(csum, c):
13 return (((csum << 3) | (csum >> 5)) ^ c) & 0xff
14
15 class cmd(object):
16 OFF_SEQ = 2
17 OFF_DSZ = 3
18 OFF_CODE = 4
19 FRAME_OVERHEAD = 5
20
21 def __init__(self, seq=0, code=0, data=''):
22 self.seq = seq
23 self.code = code
24 self.data = data
25 pass
26
27 def to_frame(self):
28 csum = 0
29 csum = csum_add(0, self.code)
30 for c in self.data:
31 csum = csum_add(csum, ord(c))
32 pass
33 csum = csum_add(csum, 0)
34
35 frame = struct.pack('BBBBB', ord('J'), ord('C'), self.seq,
36 len(self.data) + 1, self.code)
37 frame = frame + self.data + chr(csum)
38 return frame
39
40 def from_frame(self, frame):
41 if frame[:2] != 'JC':
42 return -1
43
44 csum = 0
45 for c in frame[self.OFF_CODE:]:
46 csum = csum_add(csum, ord(c))
47 pass
48 if csum:
49 return -1
50
51 data_sz = ord(frame[self.OFF_DSZ])
52 if data_sz != (len(frame) - self.FRAME_OVERHEAD):
53 return -1
54
55 if not data_sz:
56 return -1
57
58 self.seq = ord(frame[self.OFF_SEQ])
59 self.code = ord(frame[self.OFF_CODE])
60 self.data = frame[self.OFF_CODE + 1:-1]
61 pass
62
63 def __repr__(self):
64 return '<%s {seq: %d, code: %d, data: %s}>' % \
65 (self.__class__.__name__, self.seq, self.code, repr(self.data))
66 pass
67