[tools] Universal CRC/nonCRC stm32_mem tool

closes #691
This commit is contained in:
Sergey Krukovski
2014-05-20 10:47:41 +02:00
committed by Felix Ruess
parent 68d95cc411
commit d707d9b850
+25 -4
View File
@@ -30,6 +30,7 @@ from optparse import OptionParser
import usb
import dfu
import time
import numpy
APP_ADDRESS = 0x08002000
SECTOR_SIZE = 2048
@@ -50,8 +51,8 @@ def stm32_erase(dev, addr):
break
def stm32_write(dev, data):
dev.download(2, data)
def stm32_write(dev, data, crc):
dev.download(2+crc, data)
while True:
status = dev.get_status()
if status.bState == dfu.STATE_DFU_DOWNLOAD_BUSY:
@@ -151,6 +152,7 @@ if __name__ == "__main__":
valid_manufacturers.append("Black Sphere Technologies")
valid_manufacturers.append("TUDelft MavLab. 2012->13")
valid_manufacturers.append("1 BIT SQUARED")
valid_manufacturers.append("S.Krukowski")
# list of tuples with possible stm32 (autopilot) devices
stm32devs = []
@@ -232,14 +234,33 @@ if __name__ == "__main__":
addr = options.addr
print("Programming memory from 0x%08X...\r" % addr)
use_crc = False
if "CRC" in product:
use_crc = True
init_progress_bar()
while binf:
update_progress_bar((addr - options.addr), bin_length)
stm32_erase(target, addr)
stm32_write(target, binf[:SECTOR_SIZE])
binf = binf[SECTOR_SIZE:]
if use_crc:
write_block = binf[:(SECTOR_SIZE)]
write_block_array = numpy.frombuffer(write_block, "uint8")
crc1 = 0
crc2 = 0
for b in write_block_array:
crc1 += b
crc2 += crc1 & 0xFF
crc1 &= 0xFF
crc2 &= 0xFF
write_block += struct.pack('1B', crc1)
write_block += struct.pack('1B', crc2)
stm32_write(target, write_block, 1)
else:
stm32_write(target, binf[:SECTOR_SIZE], 0)
binf = binf[(SECTOR_SIZE):]
addr += SECTOR_SIZE
# Need to check all the way to 100% complete