Mercurial > lcfOS
diff python/stlink.py @ 124:d38729d35c4d stm32f4discovery flash with python
New implementation of hexfile viewer
author | Windel Bouwman |
---|---|
date | Sat, 12 Jan 2013 15:43:10 +0100 |
parents | 9f1094b1587a |
children | 51cc127648e4 |
line wrap: on
line diff
--- a/python/stlink.py Sat Jan 12 12:52:18 2013 +0100 +++ b/python/stlink.py Sat Jan 12 15:43:10 2013 +0100 @@ -29,6 +29,7 @@ DEBUG_ENTER_SWD = 0xa3 DEBUG_GETSTATUS = 0x01 DEBUG_RESETSYS = 0x03 +DEBUG_READALLREGS = 0x04 DEBUG_READREG = 0x5 DEBUG_WRITEREG = 0x6 DEBUG_READMEM_32BIT = 0x7 @@ -104,6 +105,7 @@ if len(stlink2s) > 1: print('More then one stlink2 found, picking first one') stlink2 = stlink2s[0] + assert checkDevice(stlink2) self.stlink2 = stlink2 def open(self): self.devHandle = self.stlink2.open() @@ -395,6 +397,12 @@ cmd[0:3] = DEBUG_COMMAND, DEBUG_READREG, reg reply = self.send_recv(cmd, 4) return struct.unpack('<I', reply)[0] + def read_all_regs(self): + cmd = bytearray(16) + cmd[0:2] = DEBUG_COMMAND, DEBUG_READALLREGS + reply = self.send_recv(cmd, 84) + fmt = '<' + 'I' * 21 # unpack 21 register values + return list(struct.unpack(fmt, reply)) def write_mem32(self, address, content): assert len(content) % 4 == 0 cmd = bytearray(16) @@ -443,12 +451,18 @@ print('status: {0}'.format(sl.StatusString)) # test registers: + sl.write_reg(0, 0xdeadbeef) + sl.write_reg(1, 0xcafebabe) + sl.write_reg(2, 0xc0ffee) sl.write_reg(3, 0x1337) - sl.write_reg(2, 0x1332) + sl.write_reg(5, 0x1332) sl.write_reg(6, 0x12345) assert sl.read_reg(3) == 0x1337 - assert sl.read_reg(2) == 0x1332 + assert sl.read_reg(5) == 0x1332 assert sl.read_reg(6) == 0x12345 + regs = sl.read_all_regs() + for i in range(len(regs)): + print('R{0}=0x{1:X}'.format(i, regs[i])) sl.exitDebugMode() print('mode at end:', sl.CurrentModeString)