通过-D参数控制方向

This commit is contained in:
vc4
2024-05-15 09:49:56 +08:00
parent 5343de3ba0
commit d6c038d7e0

View File

@@ -190,7 +190,7 @@ class TransportError(Exception):
class SerialTransport(): class SerialTransport():
def __init__(self, port, baud): def __init__(self, port, baud, dir1=False):
if not port: if not port:
_ports = serial.tools.list_ports.comports() _ports = serial.tools.list_ports.comports()
if len(_ports): if len(_ports):
@@ -201,10 +201,13 @@ class SerialTransport():
except serial.SerialException as e: except serial.SerialException as e:
raise TransportError(str(e)) from None raise TransportError(str(e)) from None
self.serial.rts = False self.SET = dir1
self.serial.dtr = False self.RESET = (not dir1)
self.serial.rts = True
self.serial.dtr = True self.serial.rts = self.SET
self.serial.dtr = self.SET
self.serial.rts = self.RESET
self.serial.dtr = self.RESET
self.serial.timeout = 1 self.serial.timeout = 1
self.serial.write_timeout = None self.serial.write_timeout = None
@@ -226,18 +229,18 @@ class SerialTransport():
self.serial.close() self.serial.close()
def goto_bootloader(self): def goto_bootloader(self):
self.serial.rts = True self.serial.rts = self.RESET
self.serial.dtr = True self.serial.dtr = self.RESET
time.sleep(0.5) time.sleep(0.5)
self.write(b'\x18\xFF'*100, flush=False) self.write(b'\x18\xFF'*100, flush=False)
self.serial.rts = False self.serial.rts = self.SET
self.serial.dtr = False self.serial.dtr = self.SET
self.write(b'\x18\xFF'*10, flush=False) self.write(b'\x18\xFF'*10, flush=False)
time.sleep(0.5) time.sleep(0.5)
if self.serial.in_waiting: if self.serial.in_waiting:
ack = self.read(self.serial.in_waiting) ack = self.read(self.serial.in_waiting)
if ack[-3:] == b'\x11'*3: if ack[-3:] == b'\x11'*3:
time.sleep(3) # clear input buffer time.sleep(2) # clear input buffer
self.serial.flushInput() self.serial.flushInput()
return True return True
return False return False
@@ -327,11 +330,11 @@ class SerialTransport():
return self.read(9) == ack return self.read(9) == ack
def reboot(self): def reboot(self):
self.serial.rts = True self.serial.rts = self.RESET
self.serial.dtr = True self.serial.dtr = self.RESET
time.sleep(0.2) time.sleep(0.2)
self.serial.rts = False self.serial.rts = self.SET
self.serial.dtr = False self.serial.dtr = self.SET
return True return True
if __name__ == '__main__': if __name__ == '__main__':
@@ -346,6 +349,7 @@ if __name__ == '__main__':
parser.add_argument('-R', '--reboot', action='store_true', help='Reboot device') parser.add_argument('-R', '--reboot', action='store_true', help='Reboot device')
parser.add_argument('-e', '--erase', action='store_true', help='Erase device') parser.add_argument('-e', '--erase', action='store_true', help='Erase device')
parser.add_argument('-G', '--goboot', action='store_true', help='Goto bootloader') parser.add_argument('-G', '--goboot', action='store_true', help='Goto bootloader')
parser.add_argument('-D', '--dir1', action='store_true', help='RTS/DTR output 1 for reset')
parser.add_argument('-w', metavar='<filename>', help='Write data from file to device') parser.add_argument('-w', metavar='<filename>', help='Write data from file to device')
parser.add_argument('-r', metavar='<filename>', help='Read data from device to file') parser.add_argument('-r', metavar='<filename>', help='Read data from device to file')
parser.add_argument('-v', metavar='<filename>', help='Verify chksum data in device against file') parser.add_argument('-v', metavar='<filename>', help='Verify chksum data in device against file')
@@ -380,7 +384,7 @@ if __name__ == '__main__':
sys.stdout.write('RameCode: %s\n' % hc32xx['RamCodeBinFile']) sys.stdout.write('RameCode: %s\n' % hc32xx['RamCodeBinFile'])
sys.stdout.write('\n%s\n' % hc32xx['IspConnection']) sys.stdout.write('\n%s\n' % hc32xx['IspConnection'])
# global vars # global vars
transport = SerialTransport(args.port, hc32xx['BootloaderBaudrate']) transport = SerialTransport(args.port, hc32xx['BootloaderBaudrate'], dir1=args.dir1)
base_dir = os.path.dirname(os.path.realpath(__file__)) base_dir = os.path.dirname(os.path.realpath(__file__))
if not args.goboot and args.reboot: if not args.goboot and args.reboot: