comparison python/stm32.py @ 256:225f444019b1

Added build and flash menu option
author Windel Bouwman
date Sun, 04 Aug 2013 18:32:04 +0200
parents 7416c923a02a
children b2f94b4951f1
comparison
equal deleted inserted replaced
255:7416c923a02a 256:225f444019b1
1 import time 1 import time
2 import logging
2 from devices import Device, registerDevice, STLinkException, Interface 3 from devices import Device, registerDevice, STLinkException, Interface
3 import stlink 4 import stlink
4 5
5 # F4 specifics: 6 # F4 specifics:
6 STM32_FLASH_BASE = 0x08000000 7 STM32_FLASH_BASE = 0x08000000
98 self.eraseFlashSector(sector) 99 self.eraseFlashSector(sector)
99 # program pages: 100 # program pages:
100 self.unlockFlashIf() 101 self.unlockFlashIf()
101 self.writeFlashCrPsiz(2) # writes are 32 bits aligned 102 self.writeFlashCrPsiz(2) # writes are 32 bits aligned
102 self.setFlashCrPg() 103 self.setFlashCrPg()
103 self.logger.info('writing {0} bytes'.format(len(content)), end='') 104 self.logger.info('writing {0} bytes'.format(len(content)))
104 offset = 0 105 offset = 0
105 t1 = time.time() 106 t1 = time.time()
106 while offset < len(content): 107 while offset < len(content):
107 size = len(content) - offset 108 size = len(content) - offset
108 if size > 0x8000: 109 if size > 0x8000:
111 while len(chunk) % 4 != 0: 112 while len(chunk) % 4 != 0:
112 chunk = chunk + bytes([0]) 113 chunk = chunk + bytes([0])
113 # Use simple mem32 writes: 114 # Use simple mem32 writes:
114 self.iface.write_mem32(address + offset, chunk) 115 self.iface.write_mem32(address + offset, chunk)
115 offset += size 116 offset += size
116 print('.', end='', flush=True) 117 self.logger.info('.')
117 t2 = time.time() 118 t2 = time.time()
118 print('Done!') 119 self.logger.info('Done!')
119 print('Speed: {0} bytes/second'.format(len(content)/(t2-t1))) 120 self.logger.info('Speed: {0} bytes/second'.format(len(content)/(t2-t1)))
120 self.lockFlash() 121 self.lockFlash()
121 # verfify program: 122 # verfify program:
122 self.verifyFlash(address, content) 123 self.verifyFlash(address, content)
123 def eraseFlashSector(self, sector): 124 def eraseFlashSector(self, sector):
124 self.waitFlashBusy() 125 self.waitFlashBusy()
133 self.setFlashCrMer() 134 self.setFlashCrMer()
134 self.setFlashCrStart() 135 self.setFlashCrStart()
135 self.waitFlashBusy() 136 self.waitFlashBusy()
136 self.clearFlashCrMer() 137 self.clearFlashCrMer()
137 self.lockFlash() 138 self.lockFlash()
139
138 def verifyFlash(self, address, content): 140 def verifyFlash(self, address, content):
139 device_content = self.readFlash(address, len(content)) 141 device_content = self.readFlash(address, len(content))
140 ok = content == device_content 142 ok = content == device_content
141 print('Verify:', ok) 143 self.logger.info('Verify: {}'.format(ok))
144
142 def readFlash(self, address, size): 145 def readFlash(self, address, size):
143 print('Reading {1} bytes from 0x{0:X}'.format(address, size), end='') 146 self.logger.info('Reading {1} bytes from 0x{0:X}'.format(address, size))
144 offset = 0 147 offset = 0
145 tmp_size = 0x1800 148 tmp_size = 0x1800
146 t1 = time.time() 149 t1 = time.time()
147 image = bytes() 150 image = bytes()
148 while offset < size: 151 while offset < size:
157 160
158 mem = self.iface.read_mem32(address + offset, aligned_size) 161 mem = self.iface.read_mem32(address + offset, aligned_size)
159 image += mem[:tmp_size] 162 image += mem[:tmp_size]
160 163
161 # indicate progress: 164 # indicate progress:
162 print('.', end='', flush=True) 165 self.logger.info('.')
163 166
164 # increase for next piece: 167 # increase for next piece:
165 offset += tmp_size 168 offset += tmp_size
166 t2 = time.time() 169 t2 = time.time()
167 assert size == len(image) 170 assert size == len(image)
168 print('Done!') 171 self.logger.info('Done!')
169 print('Speed: {0} bytes/second'.format(size/(t2-t1))) 172 self.logger.info('Speed: {0} bytes/second'.format(size/(t2-t1)))
170 return image 173 return image
171 174
172 def waitFlashBusy(self): 175 def waitFlashBusy(self):
173 """ block until flash operation completes. """ 176 """ block until flash operation completes. """
174 while self.isFlashBusy(): 177 while self.isFlashBusy():