@@ -23,15 +23,15 @@ def WriteCOM(com,bytes,ack,timeoutS):
2323 com .write (bytes )
2424 time .sleep (0.5 )
2525 timestart = time .time ()
26- rcvStr = ""
26+ rcvStr = b ""
2727 while 1 :
2828 # length = max(1, min(2048, com.in_waiting))
2929 # rcv = com.read(length)
3030 if (time .time () - timestart > timeoutS ):
3131 break
3232 len = com .in_waiting
3333 if len :
34- rcv = com .read (len ). decode ()
34+ rcv = com .read (len )
3535 rcvStr = rcvStr + rcv
3636 if ack in rcvStr :
3737 break
@@ -54,6 +54,44 @@ class IAP_USART_Pack:
5454 data = [0 for i in range (MEMORY_PAGE_SIZE )]
5555 checkSum = 0x0000
5656
57+ def calcCheckSum (self ):
58+ if self .len % 2 != 0 :
59+ print ("len % 2 != 0,len:" ,self .len )
60+ return None
61+ sum = self .data [1 ]* 256 + self .data [0 ]
62+ for i in range (1 ,int (self .len / 2 )):
63+ temp = (self .data [i * 2 + 1 ]* 256 + self .data [i * 2 ])
64+ sum = sum ^ temp
65+ return sum
66+
67+ def toString (self ):
68+ objStr = "\n ----------------------------\n "
69+ objStr += (("start flag:0x%02X\n total opack:" + (str )(self .packTotal )+ "\n pack ID:" + (str )(self .packID )+ "\n len:" + (str )(self .len )+ "\n check sum:0x%02X\n " ) % (self .packStart ,self .checkSum ))
70+ objStr += "data:\n "
71+ for i in range (MEMORY_PAGE_SIZE ):
72+ objStr += ("%02X " % (self .data [i ]))
73+ objStr += "\n ----------------------------\n "
74+ return objStr
75+
76+ def toBytes (self ):
77+ ret = []
78+ ret .append (self .packStart & 0xff )
79+ ret .append (self .packStart >> 8 & 0xff )
80+ ret .append (self .packStart >> 16 & 0xff )
81+ ret .append (self .packStart >> 24 & 0xff )
82+ ret .append (self .packTotal & 0xff )
83+ ret .append (self .packTotal >> 8 & 0xff )
84+ ret .append (self .packID & 0xff )
85+ ret .append (self .packID >> 8 & 0xff )
86+ ret .append (self .len & 0xff )
87+ ret .append (self .len >> 8 & 0xff )
88+ for i in self .data :
89+ ret .append (i )
90+ ret .append (self .checkSum & 0xff )
91+ ret .append (self .checkSum >> 8 & 0xff )
92+ return ret
93+
94+
5795
5896#######################
5997# main
@@ -75,8 +113,30 @@ class IAP_USART_Pack:
75113
76114
77115appBin = readBinfile (binFilePath )
78- print (appBin )
79116
117+ totalLen = (int )(len (appBin )/ MEMORY_PAGE_SIZE )
118+ if len (appBin ) % MEMORY_PAGE_SIZE != 0 :
119+ totalLen += 1
120+ pack = IAP_USART_Pack ()
121+ pack .packTotal = totalLen
122+ print ("total pack len:" ,totalLen )
123+
124+ for i in range (totalLen ):
125+ pack .packID = i
126+ if i + 1 != totalLen :
127+ pack .len = MEMORY_PAGE_SIZE
128+ else :
129+ pack .len = len (appBin ) % MEMORY_PAGE_SIZE
130+ for j in range (pack .len ):
131+ pack .data [j ] = appBin [i * MEMORY_PAGE_SIZE + j ]
132+ for j in range (pack .len ,MEMORY_PAGE_SIZE ):
133+ pack .data [j ] = 0
134+ pack .checkSum = pack .calcCheckSum ()
135+ transBytes = pack .toBytes ()
136+ print (pack .toString ())
137+ ackBytes = [0x78 ,0x3E ,0x00 ,0xAE ,pack .packID & 0xff ,pack .packID >> 8 & 0xff ,pack .packTotal & 0xff ,pack .packTotal >> 8 & 0xff ,1 ,0 ,0 ]
138+ ...
139+ WriteCOM (com ,transBytes ,ackBytes ,1 )
80140
81141
82142com .close ()
0 commit comments