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")