def run(self): try: _port = tl_open_port(self._port_name) except Exception: self.textSignal.emit("串口 " + self._port_name + " 打开失败,请检查串口是否被占用!!!") self.pressbarSignal.emit(200) return self.pressbarSignal.emit(1000) self.textSignal.emit("打开串口成功!!!") if self.action == "reset": #复位模组,进入运行模式 _port.setRTS(True) _port.setDTR(False) time.sleep(0.1) _port.setRTS(False) self.textSignal.emit("模组已复位!!!") self.pressbarSignal.emit(100) _port.close() return if not connect_chip(_port): #连接芯片,进入烧录模式 self.textSignal.emit("连接芯片失败!!!") self.pressbarSignal.emit(200) _port.close() return self.textSignal.emit("连接芯片成功!") if self.action == "burn": #烧录固件 self.textSignal.emit("尝试提高波特率...") if change_baud(_port): self.textSignal.emit("提高波特率成功!!!") self.textSignal.emit("擦除固件 ... ... ") if not telink_flash_erase(_port, 0x4000, 44): self.textSignal.emit("擦除固件失败!!!") self.pressbarSignal.emit(200) _port.close() return self.textSignal.emit("擦除固件成功!") self.textSignal.emit("烧录固件 :" + self.args.file_name) fo = open(self.args.file_name, "rb") firmware_addr = 0 firmware_size = os.path.getsize(self.args.file_name) percent = 0 if (firmware_size >= 192 * 1024): # 固件大于192KB,说明是合并好的固件,要跳过Boot fo.seek(16 * 1024, 0) firmware_addr = 16 * 1024 while True: data = fo.read(256) if len(data) < 1: break if not telink_flash_write(_port, firmware_addr, data): self.textSignal.emit("烧录固件失败!!!") self.pressbarSignal.emit(200) break firmware_addr += len(data) percent = (int)(firmware_addr * 100 / firmware_size) self.pressbarSignal.emit(percent) # 跟新进度条 if percent == 100: self.textSignal.emit("烧录固件完成!") fo.close() elif self.action == "burn_triad": #烧录三元组 self.textSignal.emit("擦除三元组 ... ... ") if not telink_flash_erase(_port, 0x78000, 1): self.textSignal.emit("擦除三元组失败!!!") self.pressbarSignal.emit(200) _port.close() return self.textSignal.emit("擦除三元组成功!") self.textSignal.emit("烧录三元组 :" + str(self.args.triad)) if telink_flash_write(_port, 0x78000, self.args.triad): self.textSignal.emit("烧录三元组成功!") self.pressbarSignal.emit(100) else: self.textSignal.emit("烧录三元组失败!!!") self.pressbarSignal.emit(200) elif self.action == "erase": #擦除Flash self.textSignal.emit("擦除Flash: 从 " + hex(self.args.addr) + " 擦除 " + str(self.args.len_t) + " 扇区... ... ") if telink_flash_erase(_port, self.args.addr, self.args.len_t): self.textSignal.emit("擦除成功!") self.pressbarSignal.emit(100) else: self.textSignal.emit("擦除失败!!!") self.pressbarSignal.emit(200) _port.close()
def run(self): try: _port = tl_open_port(self._port_name) except Exception: self.textSignal.emit("串口 " + self._port_name + " 打开失败,请检查串口是否被占用!!!") self.pressbarSignal.emit(200) return self.pressbarSignal.emit(1000) self.textSignal.emit("打开串口成功!!!") if self.action == "reset": #复位模组,进入运行模式 _port.setRTS(True) _port.setDTR(False) time.sleep(0.1) _port.setRTS(False) self.textSignal.emit("模组已复位!!!") self.pressbarSignal.emit(100) _port.close() return if not connect_chip(_port): #连接芯片,进入烧录模式 self.textSignal.emit("连接芯片失败!!!") self.pressbarSignal.emit(200) _port.close() return self.textSignal.emit("连接芯片成功!") info = get_chip_info(_port) #获取芯片信息 if len(info) != 5: self.textSignal.emit("获取芯片信息失败!!!") self.pressbarSignal.emit(200) _port.close() return jedecid = hex((info[0] << 16) | (info[1] << 8) | info[2]) fsize = str((1 << info[2]) >> 10) + " KBytes" chip = hex(info[3] * 256 + info[4]) self.textSignal.emit("Chip Type:" + chip + " Flash ID:" + jedecid + " Size:" + fsize) if self.action == "burn": #烧录固件 self.textSignal.emit("擦除固件 ... ... ") if not telink_flash_erase(_port, 0, 48): self.textSignal.emit("擦除固件失败!!!") self.pressbarSignal.emit(200) _port.close() return self.textSignal.emit("擦除固件成功!") self.textSignal.emit("烧录固件 :" + self.args.file_name) fo = open(self.args.file_name, "rb") firmware_addr = 0 firmware_size = os.path.getsize(self.args.file_name) percent = 0 if (firmware_size >= 192 * 1024): # 固件大于192KB,说明是合并好的固件,要跳过Boot fo.seek(16 * 1024, 0) firmware_addr = 16 * 1024 while True: data = fo.read(256) if len(data) < 1: break if not telink_flash_write(_port, firmware_addr, data): self.textSignal.emit("烧录固件失败!!!") self.pressbarSignal.emit(200) break firmware_addr += len(data) percent = (int)(firmware_addr * 100 / firmware_size) self.pressbarSignal.emit(percent) # 跟新进度条 if percent == 100: self.textSignal.emit("烧录固件完成!") fo.close() elif self.action == "burn_triad": #烧录三元组 self.textSignal.emit("擦除三元组 ... ... ") if not telink_flash_erase(_port, 0x78000, 1): self.textSignal.emit("擦除三元组失败!!!") self.pressbarSignal.emit(200) _port.close() return self.textSignal.emit("擦除三元组成功!") self.textSignal.emit("烧录三元组 :" + str(self.args.triad)) if telink_flash_write(_port, 0x78000, self.args.triad): self.textSignal.emit("烧录三元组成功!") self.pressbarSignal.emit(100) else: self.textSignal.emit("烧录三元组失败!!!") self.pressbarSignal.emit(200) elif self.action == "erase": #擦除Flash self.textSignal.emit("擦除Flash: 从 " + hex(self.args.addr) + " 擦除 " + str(self.args.len_t) + " 扇区... ... ") if telink_flash_erase(_port, self.args.addr, self.args.len_t): self.textSignal.emit("擦除成功!") self.pressbarSignal.emit(100) else: self.textSignal.emit("擦除失败!!!") self.pressbarSignal.emit(200) _port.close()