stc15: use generic/new sync sequence for handshake

Use the newer sync sequence. Refactor the pulse() function to make
it somewhat generic, so we can use it without worrying about writing
the exactly right number of bytes.

This seems to get STC15W4 series chips working.
This commit is contained in:
Grigori Goronzy 2015-12-11 00:36:47 +01:00
parent 432fed8af1
commit 9f42ef29f3

View File

@ -662,13 +662,17 @@ class StcBaseProtocol:
print("Target frequency: %.3f MHz" % (self.mcu_clock_hz / 1E6)) print("Target frequency: %.3f MHz" % (self.mcu_clock_hz / 1E6))
print("Target BSL version: %s" % self.mcu_bsl_version) print("Target BSL version: %s" % self.mcu_bsl_version)
def pulse(self): def pulse(self, character=b"\x7f", timeout=0):
"""Send a sequence of 0x7f bytes for synchronization""" """Send a sequence of bytes for synchronization with MCU"""
duration = 0
while True: while True:
self.ser.write(b"\x7f") if timeout > 0 and duration > timeout:
raise serial.SerialTimeoutException("pulse timeout")
self.ser.write(character)
self.ser.flush() self.ser.flush()
time.sleep(0.015) time.sleep(0.015)
duration += 0.015
if self.ser.inWaiting() > 0: break if self.ser.inWaiting() > 0: break
def initialize_model(self): def initialize_model(self):
@ -1735,8 +1739,7 @@ class Stc15Protocol(Stc15AProtocol):
packet += bytes([0x00, 0x40, 0x80, 0x40, 0xff, 0x40]) packet += bytes([0x00, 0x40, 0x80, 0x40, 0xff, 0x40])
packet += bytes([0x00, 0x00, 0x80, 0x00, 0xc0, 0x00]) packet += bytes([0x00, 0x00, 0x80, 0x00, 0xc0, 0x00])
self.write_packet(packet) self.write_packet(packet)
self.ser.write(bytes([0x92, 0x92, 0x92, 0x92])) self.pulse(b"\xfe", timeout=1.0)
self.ser.flush()
response = self.read_packet() response = self.read_packet()
if response[0] != 0x00: if response[0] != 0x00:
raise StcProtocolException("incorrect magic in handshake packet") raise StcProtocolException("incorrect magic in handshake packet")
@ -1755,8 +1758,7 @@ class Stc15Protocol(Stc15AProtocol):
for i in range(prog_trim[0] - 3, prog_trim[0] + 3): for i in range(prog_trim[0] - 3, prog_trim[0] + 3):
packet += bytes([i & 0xff, prog_trim[1]]) packet += bytes([i & 0xff, prog_trim[1]])
self.write_packet(packet) self.write_packet(packet)
self.ser.write(bytes([0x92, 0x92, 0x92, 0x92])) self.pulse(b"\xfe", timeout=1.0)
self.ser.flush()
response = self.read_packet() response = self.read_packet()
if response[0] != 0x00: if response[0] != 0x00:
raise StcProtocolException("incorrect magic in handshake packet") raise StcProtocolException("incorrect magic in handshake packet")