From ec2a2e049f3074e5327e6c47140e582e883d1c8a Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Tue, 28 Jul 2015 23:02:33 +0900 Subject: [PATCH] stlinkv2.py now works with newer PyUSB --- ChangeLog | 3 +- THANKS | 1 + chopstx | 2 +- tool/stlinkv2.py | 73 ++++++++++++++++++++++-------------------------- 4 files changed, 38 insertions(+), 41 deletions(-) diff --git a/ChangeLog b/ChangeLog index 070805b..036c2cf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ 2015-07-28 Niibe Yutaka - * tool/stlinkv2.py: Fix for Python3. + * tool/stlinkv2.py: Fix for Python3. Thanks to Bertrand Jacquin. + * tool/gpg_agent.py: Fix for Python3. * src/usb-msc.c: Update from Fraucheky. diff --git a/THANKS b/THANKS index 139eea5..c95e33c 100644 --- a/THANKS +++ b/THANKS @@ -10,6 +10,7 @@ improvements, or fixing bugs. Here is a list of those people. Achim Pietig achim@pietig.com Aidan Thornton Andre Zepezauer andre.zepezauer@student.uni-halle.de +Bertrand Jacquin bertrand@jacquin.bzh Hironobu SUZUKI hironobu@h2np.net Jan Suhr jan@suhr.info Kaz Kojima kkojima@rr.iij4u.or.jp diff --git a/chopstx b/chopstx index bdaae56..83486ef 160000 --- a/chopstx +++ b/chopstx @@ -1 +1 @@ -Subproject commit bdaae5661d374d8bc7fe2a3244c10f535180bc2a +Subproject commit 83486efd5f7857e539c79ed9c947cec854468240 diff --git a/tool/stlinkv2.py b/tool/stlinkv2.py index 0316bf5..940a0c6 100755 --- a/tool/stlinkv2.py +++ b/tool/stlinkv2.py @@ -26,6 +26,7 @@ from struct import * import sys, time import usb from colorama import init as colorama_init, Fore, Back, Style +from array import array # INPUT: binary file @@ -75,12 +76,9 @@ SPI1= 0x40013000 def uint32(v): return v[0] + (v[1]<<8) + (v[2]<<16) + (v[3]<<24) -prog_flash_write_body = "\x0D\x4A" + "\x0B\x48" + "\x0B\x49" + \ - "\x09\x4C" + "\x01\x25" + "\x14\x26" + "\x00\x27" + "\x25\x61" + \ - "\xC3\x5B" + "\xCB\x53" + "\xE3\x68" + "\x2B\x42" + "\xFC\xD1" + \ - "\x33\x42" + "\x02\xD1" + "\x02\x37" + "\x97\x42" + "\xF5\xD1" + \ - "\x00\x27" + "\x27\x61" + "\x00\xBE" + "\xC0\x46" + "\x00\x20\x02\x40" + \ - "\x3C\x00\x00\x20" +prog_flash_write_body = b"\x0D\x4A\x0B\x48\x0B\x49\x09\x4C\x01\x25\x14\x26\x00\x27\x25\x61" + \ + b"\xC3\x5B\xCB\x53\xE3\x68\x2B\x42\xFC\xD1\x33\x42\x02\xD1\x02\x37\x97\x42\xF5\xD1" + \ + b"\x00\x27\x27\x61\x00\xBE\xC0\x46\x00\x20\x02\x40\x3C\x00\x00\x20" # .SRC_ADDR: 0x2000003C ## HERE comes: target_addr in 4-byte # .TARGET_ADDR @@ -90,11 +88,9 @@ prog_flash_write_body = "\x0D\x4A" + "\x0B\x48" + "\x0B\x49" + \ def gen_prog_flash_write(addr,size): return prog_flash_write_body + pack("> 12) & 0x0f, (val >> 6) & 0x3f, val & 0x3f) @@ -555,7 +550,7 @@ def stlinkv2_devices(): def compare(data_original, data_in_device): i = 0 for d in data_original: - if ord(d) != data_in_device[i]: + if d != data_in_device[i]: raise ValueError("Verify failed at:", i) i += 1 @@ -686,7 +681,7 @@ def main(show_help, erase_only, no_protect, spi_flash_check, stl.flash_write(0x08000000, data) print("VERIFY") - data_received = () + data_received = array('B') size = len(data) off = 0 while size > 0: @@ -694,10 +689,10 @@ def main(show_help, erase_only, no_protect, spi_flash_check, blk_size = 1024 else: blk_size = size - data_received = data_received + stl.read_memory(0x08000000+off, blk_size) + data_received = data_received + array('B', stl.read_memory(0x08000000+off, blk_size)) size = size - blk_size off = off + blk_size - compare(data, data_received) + compare(array('B', data), data_received) if not no_protect and stl.has_protection(): print("PROTECT")