调整进入bootloader的逻辑,同时操作dtr/rts

This commit is contained in:
vc4
2024-02-27 16:17:02 +08:00
parent b5ea952d4c
commit 5cdfbe3818

View File

@@ -2,6 +2,7 @@
import os, sys, time, struct import os, sys, time, struct
import serial import serial
import serial.tools.list_ports
import argparse import argparse
version = "0.1.2" version = "0.1.2"
@@ -190,12 +191,14 @@ class TransportError(Exception):
class SerialTransport(): class SerialTransport():
def __init__(self, port, baud): def __init__(self, port, baud):
self.port = port
self.baud = baud
self.serial = None self.serial = None
try: try:
self.serial = serial.Serial(port, baud) self.serial = serial.Serial(port, baud)
self.serial.rts = False
self.serial.dtr = False
self.serial.rts = True
self.serial.dtr = True
except serial.SerialException as e: except serial.SerialException as e:
raise TransportError(str(e)) from None raise TransportError(str(e)) from None
@@ -220,12 +223,26 @@ class SerialTransport():
self.serial.close() self.serial.close()
def goto_bootloader(self): def goto_bootloader(self):
self.serial.rts = True _cnt = 0
time.sleep(0.1) while _cnt < 50:
time.sleep(0.01)
self.write(b'\x18\xFF'*10, flush=False) self.write(b'\x18\xFF'*10, flush=False)
step = _cnt % 20
if step == 0:
self.serial.rts = True
self.serial.dtr = True
elif step == 10:
self.serial.rts = False self.serial.rts = False
ack = self.read(10) self.serial.dtr = False
return ack[-6:] == b'\x11'*6 elif step > 10:
if self.serial.in_waiting:
ack = self.read(self.serial.in_waiting)
if ack[-6:] == b'\x11'*6:
time.sleep(1) # clear input buffer
self.serial.flushInput()
return True
_cnt += 1
return False
def check_lock(self): def check_lock(self):
self.write(b'\x01\xFC\x0B\x00\x00\x02\x00\x00\x00\x0A') self.write(b'\x01\xFC\x0B\x00\x00\x02\x00\x00\x00\x0A')
@@ -301,9 +318,11 @@ class SerialTransport():
return self.read(9) == ack return self.read(9) == ack
def reboot(self): def reboot(self):
self.serial.rts = False
time.sleep(0.1)
self.serial.rts = True self.serial.rts = True
self.serial.dtr = True
time.sleep(0.2)
self.serial.rts = False
self.serial.dtr = False
return True return True
if __name__ == '__main__': if __name__ == '__main__':
@@ -369,7 +388,7 @@ if __name__ == '__main__':
sys.stdout.write(".") sys.stdout.write(".")
sys.stdout.flush() sys.stdout.flush()
_err += 1 _err += 1
if _err > (args.goboot and 100 or 0): if _err > (args.goboot and 10 or 0):
sys.stdout.write("error\n") sys.stdout.write("error\n")
sys.exit(1) sys.exit(1)
sys.stdout.write("succ\n") sys.stdout.write("succ\n")