Mercurial > avr_jtag
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 |