python 实现将二进制文件发向串口,实现设备的串口升级
2018-02-08 13:37
495 查看
# -*- coding: utf-8 -*- """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Note : you should use this script like this: python xxxxxx.py COMx (python fwupThroughSeiral 17) Env : python v2.7.13 Author: zhangwl Date : 20180206 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" import serial import time import os from sys import argv from binascii import b2a_hex, a2b_hex BAUDRATE = 115200 TIMEOUT = 0.05 BLOCKSIZE = 512 def readfile(filename, readLen): dataList = [] fileSize = os.path.getsize(filename) blockNum = fileSize/readLen if fileSize%readLen != 0: blockNum += 1 print "size %d, blockNum %d" % (fileSize, blockNum) with open(filename,'rb') as f: for i in range(blockNum): block = f.read(readLen) dataList.append(block.strip()) # print "index %d:%s" % (i, block) f.close() return dataList, blockNum def sendCommandToDevice(COMx, cmdStr, expectedAck, TryTime): ack = 'no' for i in range(TryTime): num = COMx.write(cmdStr) ack = COMx.read(32) # print 'COM recv:%s' % ack if ack == expectedAck: break return ack # ----------------- # main # ----------------- if __name__ == "__main__": script, portNum = argv port = "COM%s" % (portNum) FWUP_START = "AT+&UPDM=1\r\n\r\n" FWUP_TRANS = "AT+&UPDD=512\r\n" FWUP_END = "AT+&UPDM=0\r\n\r\n" START_OK = '+OK\r\n\r\n' TRANS_OK = '+OK=1\r\n\r\n' SET_OK = '+OK=-1\r\n\r\n' fwBlocks, blockNum = readfile("../WM_VENUS_SEC.img", BLOCKSIZE) ''' for i in range(blockNum): print 'fwBlocks[%d]:%d' % (i,len(fwBlocks[i])) ''' try: COM = serial.Serial(port, BAUDRATE, timeout = TIMEOUT) for i in range(0, blockNum, 1): response = sendCommandToDevice(COM, FWUP_START, START_OK, 5) if response == START_OK: response = sendCommandToDevice(COM, FWUP_TRANS, SET_OK, 5) if response == SET_OK: response = sendCommandToDevice(COM, fwBlocks[i], TRANS_OK, 5) if response == TRANS_OK: print "fwBlocks[%d] OK" % i else: print "fwBlocks[%d] Fail" % i # i -= 1; response = sendCommandToDevice(COM, FWUP_END, START_OK, 5) if START_OK == response: print "set OK" else: print 'set Fail' COM.close() print 'Steps over, COM close.' except Exception,e: print 'str(Exception):', str(Exception) print 'str(e):', str(e)
相关文章推荐
- python实现文本文件转二进制文件(二进制序列化)
- 在Windows系统中,如何python脚本实现分割合并大二进制文件,方便上传
- Python脚本生成的exe文件自动升级程序实现方法
- 用Python实现B2M算法:将二进制文件映射为灰度图片
- python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
- python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
- python实现数通设备tftp备份配置文件示例
- python实现数通设备tftp备份配置文件示例
- python在twisted中实现二进制数据
- java实现插入mysql二进制文件,blob类型,遇到问题及解决办法
- 以上的文章是我解决这样一个问题时候的大致的思路: 把Matlab读取二进制文件的函数变成VBA读取二进制文件,实现同样的功能
- Python 二进制文件读取显示
- Python 文件操作实现代码
- Python实现ini文件操作
- 将C++代码全部写到头文件:)python脚本帮助自动生成相应的实现文件初始框架
- C# 实现在线软件自动升级自动下载更新文件
- C# 实现在线软件自动升级自动下载更新文件
- python 查找文件夹下所有文件 实现代码
- java实现插入mysql二进制文件,blob类型,遇到问题及解决办法
- python实现查找c cpp的文件[原创]