9 Commits

Author SHA1 Message Date
c8d3c0c0d6 Added the STC8H2K08U series to models.py 2024-01-09 10:03:55 +01:00
fdf5fdd605 ci: trigger on pull request
Trigger actions on pull requests, which is needed for PRs from third party branches.
2023-11-11 11:26:05 +01:00
a660184520 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.
2023-11-11 11:23:29 +01:00
6e8e73669e Merge pull request #91 from grigorig/version_fix
Fixed version for new release
2023-09-01 20:10:07 +02:00
b32bbf99c8 Fixed version for new release 2023-09-01 20:07:23 +02:00
cdc365a5f0 Merge pull request #89 from grigorig/doc_update
Updated list of tested models
2023-08-30 17:37:57 +02:00
521339066c Updated list of tested models 2023-08-30 17:36:00 +02:00
48a36b90c9 Merge pull request #88 from grigorig/proto_fix
Fixed protocol autodetection to support STC8H1KxxT
2023-08-30 17:27:05 +02:00
1c37582952 Fixed protocol autodetection to support STC8H1KxxT 2023-08-30 17:24:28 +02:00
7 changed files with 29 additions and 12 deletions

View File

@ -1,6 +1,6 @@
name: Python package name: Python package
on: [push] on: [push, pull_request]
jobs: jobs:
test: test:

View File

@ -44,6 +44,7 @@ STC8 series
* STC8G1K17-20/16PIN (BSL version: 7.3.12U) * STC8G1K17-20/16PIN (BSL version: 7.3.12U)
* STC8G2K64S4 (BSL version: 7.3.11U) * STC8G2K64S4 (BSL version: 7.3.11U)
* STC8H1K08 (BSL version: 7.3.12U) * STC8H1K08 (BSL version: 7.3.12U)
* STC8H1K17T (BSL version: 7.4.5U)
* STC8H3K64S2 (BSL version: 7.4.1U) * STC8H3K64S2 (BSL version: 7.4.1U)
* STC8H3K64S4 (BSL version: 7.4.1U) * STC8H3K64S4 (BSL version: 7.4.1U)
* STC8H4K64TL (BSL version: 7.4.3U) * STC8H4K64TL (BSL version: 7.4.3U)

View File

@ -22,7 +22,7 @@ options:
-h, --help show this help message and exit -h, --help show this help message and exit
-e, --erase only erase flash memory -e, --erase only erase flash memory
-a, --autoreset cycle power automatically by asserting DTR -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) pin to hold down when using --autoreset (default: DTR)
-r RESETCMD, --resetcmd RESETCMD -r RESETCMD, --resetcmd RESETCMD
shell command for board power-cycling (instead of DTR shell command for board power-cycling (instead of DTR

View File

@ -1 +1 @@
__version__ = "1.8" __version__ = "1.10"

View File

@ -263,7 +263,7 @@ def cli():
exclusives.add_argument("-e", "--erase", help="only erase flash memory", action="store_true") 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", "--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)", 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("-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)", 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") choices=["stc89", "stc89a", "stc12a", "stc12b", "stc12", "stc15a", "stc15", "stc8", "stc8d", "stc8g", "usb15", "auto"], default="auto")

View File

@ -39,7 +39,7 @@ class MCUModelDatabase:
MCUModel(name='STC32F12K59', magic=0xf875, total=60416, code=60416, eeprom=0, iap=True, calibrate=True, mcs251=True), MCUModel(name='STC32F12K59', magic=0xf875, total=60416, code=60416, eeprom=0, iap=True, calibrate=True, mcs251=True),
MCUModel(name='STC32G12K128-Beta', magic=0xf7e1, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True), MCUModel(name='STC32G12K128-Beta', magic=0xf7e1, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True),
MCUModel(name='STC32G12K128', magic=0xf7e3, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True), MCUModel(name='STC32G12K128', magic=0xf7e3, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True),
MCUModel(name='STC-USB Link1', magic=0xf7ee, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True), MCUModel(name='STC-USB Link1D', magic=0xf7ee, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True),
MCUModel(name='STC-USB Writer1', magic=0xf7ef, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True), MCUModel(name='STC-USB Writer1', magic=0xf7ef, total=131072, code=131072, eeprom=0, iap=True, calibrate=True, mcs251=True),
MCUModel(name='STC32G8K64-Beta', magic=0xf850, total=65536, code=65536, eeprom=0, iap=True, calibrate=True, mcs251=True), MCUModel(name='STC32G8K64-Beta', magic=0xf850, total=65536, code=65536, eeprom=0, iap=True, calibrate=True, mcs251=True),
MCUModel(name='STC32G8K16', magic=0xf851, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=True), MCUModel(name='STC32G8K16', magic=0xf851, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=True),
@ -52,6 +52,14 @@ class MCUModelDatabase:
MCUModel(name='STC8H8K48U', magic=0xf785, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), MCUModel(name='STC8H8K48U', magic=0xf785, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False),
MCUModel(name='STC8H8K60U', magic=0xf783, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False), MCUModel(name='STC8H8K60U', magic=0xf783, total=65536, code=61440, eeprom=4096, iap=False, calibrate=True, mcs251=False),
MCUModel(name='STC8H8K64U', magic=0xf784, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False), MCUModel(name='STC8H8K64U', magic=0xf784, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False),
MCUModel(name='STC USB-2UART', magic=0xf78f, total=65536, code=65024, eeprom=512, iap=True, calibrate=True, mcs251=False),
MCUModel(name='STC8H2K02U', magic=0xf891, total=12288, code=2048, eeprom=10240, iap=False, calibrate=True, mcs251=False),
MCUModel(name='STC8H2K04U', magic=0xf892, total=12288, code=4096, eeprom=8192, iap=False, calibrate=True, mcs251=False),
MCUModel(name='STC8H2K06U', magic=0xf893, total=12288, code=6144, eeprom=6144, iap=False, calibrate=True, mcs251=False),
MCUModel(name='STC8H2K08U', magic=0xf894, total=12288, code=8192, eeprom=4096, iap=False, calibrate=True, mcs251=False),
MCUModel(name='STC8H2K10U', magic=0xf895, total=12288, code=10240, eeprom=2048, iap=False, calibrate=True, mcs251=False),
MCUModel(name='STC8H2K12U', magic=0xf896, total=12288, code=12288, eeprom=0, iap=True, calibrate=True, mcs251=False),
MCUModel(name='STC8H2K17U', magic=0xf897, total=17408, code=17408, eeprom=0, iap=True, calibrate=True, mcs251=False),
MCUModel(name='STC8H4K16TLCD', magic=0xf811, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False), MCUModel(name='STC8H4K16TLCD', magic=0xf811, total=65536, code=16384, eeprom=49152, iap=False, calibrate=True, mcs251=False),
MCUModel(name='STC8H4K32TLCD', magic=0xf812, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False), MCUModel(name='STC8H4K32TLCD', magic=0xf812, total=65536, code=32768, eeprom=32768, iap=False, calibrate=True, mcs251=False),
MCUModel(name='STC8H4K48TLCD', magic=0xf815, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False), MCUModel(name='STC8H4K48TLCD', magic=0xf815, total=65536, code=49152, eeprom=16384, iap=False, calibrate=True, mcs251=False),

View File

@ -265,22 +265,30 @@ class StcBaseProtocol(ABC):
def set_option(self, name, value): def set_option(self, name, value):
self.options.set_option(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: if not resetcmd:
print("Cycling power: ", end="") print("Cycling power: ", end="")
sys.stdout.flush() sys.stdout.flush()
if resetpin == "rts": if resetpin == "rts":
self.ser.setRTS(True) self.ser.setRTS(True)
else: elif resetpin == "dtr":
self.ser.setDTR(True) self.ser.setDTR(True)
elif resetpin == "rts_inverted":
self.ser.setRTS(False)
else: # dtr_inverted
self.ser.setDTR(False)
time.sleep(0.25) time.sleep(0.25)
if resetpin == "rts": if resetpin == "rts":
self.ser.setRTS(False) self.ser.setRTS(False)
else: elif resetpin == "dtr":
self.ser.setDTR(False) self.ser.setDTR(False)
elif resetpin == "rts_inverted":
self.ser.setRTS(True)
else: # dtr_inverted
self.ser.setDTR(True)
time.sleep(0.030) time.sleep(0.030)
print("done") print("done")
@ -390,11 +398,11 @@ class StcAutoProtocol(StcBaseProtocol):
("stc12", r"(STC|IAP)(10|11|12)\D"), ("stc12", r"(STC|IAP)(10|11|12)\D"),
("stc15a", r"(STC|IAP)15[FL][012]0\d(E|EA|)$"), ("stc15a", r"(STC|IAP)15[FL][012]0\d(E|EA|)$"),
("stc15", r"(STC|IAP|IRC)15\D"), ("stc15", r"(STC|IAP|IRC)15\D"),
("stc8d", r"STC8H(3|4|8)K"), ("stc8g", r"STC8H1K\d\d$"),
("stc8d", r"STC32"),
("stc8d", r"STC8A8K\d\dD4"),
("stc8g", r"STC8H"),
("stc8g", r"STC8G"), ("stc8g", r"STC8G"),
("stc8d", r"STC8H"),
("stc8d", r"STC32"),
("stc8d", r"STC8A8K\d\dD\d"),
("stc8", r"STC8\D")] ("stc8", r"STC8\D")]
for protocol_name, pattern in protocol_database: for protocol_name, pattern in protocol_database: