1. 项目说明
在进行远程升级单片机程序或者什么别的内容的时候,我们往往需要下载远程的bin文件,并将其内容读出,以切片的方式进行程序的更新。本项目即是使用python编写的一个读取bin文件内容,并将其进行切片组成相应的协议包。
2. 核心代码
- 读取bin文件
import os
def print_hex(bytes):
l = [hex(int(i)).replace('0x', '').zfill(2) for i in bytes]
return " ".join(l)
with open("./01.bin", "rb") as file:
l1 = []
for line in file:
l1.extend(print_hex(line).split(' '))
frame = len(l1) // 128
for i in range(frame):
print(l1[i*128:128+i*128])
print(l1[frame*128: len(l1)])
- 封包成自定义的通信协议
'''
生成通信协议
'''
def create():
content = (t_origin.get("0.0", "end")).split("\n")
content.pop() # 列表最后一个元素是空删除它
res = content[0].split(" ") # 不加任何参数
crc = 0
for re in res:
crc += int(re, 16)
crc = str(hex(crc//(len(res)+3))).replace('0x', '')
test = ['ff', 'ff', '13', '02', str(hex(len(res)+2)).replace('0x', '')]
tmp = [crc, 'ee', 'ee']
test.extend(res)
test.extend(tmp)
t_dest.delete('1.0', 'end')
t_dest.insert('0.0', test)
3. 最终版程序
为了方便演示效果,用python写了个桌面版程序,源码已经上传到github上:https://github.com/ceoifung/Bin2Protocol