From a660184520d04cbde2bf5914f33a3487a28f38b3 Mon Sep 17 00:00:00 2001 From: hkzlab <603354+hkzlab@users.noreply.github.com> Date: Sat, 11 Nov 2023 11:23:29 +0100 Subject: [PATCH] Add options to invert pin reset logic (#97) This PR adds 'dtr_inverted' and 'rts_inverted' as options for '-A' that invert the pin logic for autoreset. --- doc/USAGE.md | 2 +- stcgal/frontend.py | 2 +- stcgal/protocols.py | 14 +++++++++++--- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/doc/USAGE.md b/doc/USAGE.md index 31148c9..a22ce7a 100644 --- a/doc/USAGE.md +++ b/doc/USAGE.md @@ -22,7 +22,7 @@ options: -h, --help show this help message and exit -e, --erase only erase flash memory -a, --autoreset cycle power automatically by asserting DTR - -A {dtr,rts}, --resetpin {dtr,rts} + -A {dtr,rts,dtr_inverted,rts_inverted}, --resetpin {dtr,rts,dtr_inverted,rts_inverted} pin to hold down when using --autoreset (default: DTR) -r RESETCMD, --resetcmd RESETCMD shell command for board power-cycling (instead of DTR diff --git a/stcgal/frontend.py b/stcgal/frontend.py index 06c1577..a6bdcdc 100644 --- a/stcgal/frontend.py +++ b/stcgal/frontend.py @@ -263,7 +263,7 @@ def cli(): exclusives.add_argument("-e", "--erase", help="only erase flash memory", action="store_true") parser.add_argument("-a", "--autoreset", help="cycle power automatically by asserting DTR", action="store_true") parser.add_argument("-A", "--resetpin", help="pin to hold down when using --autoreset (default: DTR)", - choices=["dtr", "rts"], default="dtr") + choices=["dtr", "rts", "dtr_inverted", "rts_inverted"], default="dtr") parser.add_argument("-r", "--resetcmd", help="shell command for board power-cycling (instead of DTR assertion)", action="store") parser.add_argument("-P", "--protocol", help="protocol version (default: auto)", choices=["stc89", "stc89a", "stc12a", "stc12b", "stc12", "stc15a", "stc15", "stc8", "stc8d", "stc8g", "usb15", "auto"], default="auto") diff --git a/stcgal/protocols.py b/stcgal/protocols.py index 8730000..031e320 100644 --- a/stcgal/protocols.py +++ b/stcgal/protocols.py @@ -265,22 +265,30 @@ class StcBaseProtocol(ABC): def set_option(self, name, value): self.options.set_option(name, value) - def reset_device(self, resetcmd=False, resetpin=False): + def reset_device(self, resetcmd=False, resetpin=False, invertreset=False): if not resetcmd: print("Cycling power: ", end="") sys.stdout.flush() if resetpin == "rts": self.ser.setRTS(True) - else: + elif resetpin == "dtr": self.ser.setDTR(True) + elif resetpin == "rts_inverted": + self.ser.setRTS(False) + else: # dtr_inverted + self.ser.setDTR(False) time.sleep(0.25) if resetpin == "rts": self.ser.setRTS(False) - else: + elif resetpin == "dtr": self.ser.setDTR(False) + elif resetpin == "rts_inverted": + self.ser.setRTS(True) + else: # dtr_inverted + self.ser.setDTR(True) time.sleep(0.030) print("done")