Skip to content

Commit 37322fa

Browse files
committed
feat: readResponse returns NACK when needed
feat: check ACK on read/write steps
1 parent efe0737 commit 37322fa

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

stm32_flash.py

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def STM32_sendCommand(cmd: bytes):
6868
uart.write(_cmd)
6969

7070

71-
def STM32_readResponse() -> [bytearray, int]:
71+
def STM32_readResponse() -> [bytearray, bytes]:
7272
"""
7373
Blocking read to get the STM32 response to command, according to AN3155
7474
:return: returns a response bytearray dropping leading and trailing ACKs. returns -1 if NACK
@@ -81,7 +81,7 @@ def STM32_readResponse() -> [bytearray, int]:
8181
if b is None:
8282
continue
8383
if b == STM32_NACK:
84-
return -1
84+
return STM32_NACK
8585
elif b == STM32_ACK:
8686
if acks == 1:
8787
break
@@ -113,7 +113,7 @@ def STM32_getID() -> bytearray:
113113
"""
114114
STM32_sendCommand(STM32_GET_ID)
115115
res = STM32_readResponse()
116-
if res == -1:
116+
if res == STM32_NACK:
117117
print("GET_ID: STM32 responded with NACK")
118118
return bytearray(0)
119119
return res[1:]
@@ -126,7 +126,7 @@ def STM32_getVER() -> bytearray:
126126
"""
127127
STM32_sendCommand(STM32_GET_VERSION)
128128
res = STM32_readResponse()
129-
if res == -1:
129+
if res == STM32_NACK:
130130
print("GET VER: STM32 responded with NACK")
131131
return bytearray(0)
132132
return res
@@ -239,8 +239,13 @@ def STM32_readMEM(pages: int):
239239
"""
240240

241241
for i in range(0, pages):
242-
_STM32_readMode()
243-
_STM32_sendAddress(readAddress)
242+
if _STM32_readMode() != STM32_ACK:
243+
print("COULD NOT ENTER READ MODE")
244+
return
245+
246+
if _STM32_sendAddress(readAddress) != STM32_ACK:
247+
print("STM32 ERROR ON ADDRESS SENT")
248+
return
244249

245250
page = _STM32_readPage()
246251
print(f"Page {i+1} content:\n")
@@ -252,24 +257,28 @@ def STM32_readMEM(pages: int):
252257
def STM32_writeMEM(file_path: str):
253258

254259
with open(file_path, 'rb') as f:
255-
260+
print(f"Flashing {file_path}\n")
256261
while True:
257262
data = bytearray(f.read(256))
258263
read_bytes = len(data)
259264
if read_bytes == 0:
260265
break
261266
data.extend(bytearray([255]*(256-read_bytes))) # 0xFF padding
262267

263-
_STM32_writeMode()
264-
_STM32_sendAddress(writeAddress)
268+
if _STM32_writeMode() != STM32_ACK:
269+
print("COULD NOT ENTER WRITE MODE")
270+
return
271+
272+
if _STM32_sendAddress(writeAddress) != STM32_ACK:
273+
print("STM32 ERROR ON ADDRESS SENT")
274+
return
275+
276+
if _STM32_flashPage(data) != STM32_ACK:
277+
print(f"STM32 ERROR FLASHING PAGE: {writeAddress}")
278+
return
265279

266-
_STM32_flashPage(data)
267-
print("\nWrote\n")
268-
print(data.hex())
269-
print("\nin\n")
270-
print(writeAddress.hex())
280+
print(".")
271281
_incrementAddress(writeAddress)
272-
sleep_ms(100)
273282

274283

275284
def _STM32_standardEraseMEM(pages: int, page_list: bytearray = None):

0 commit comments

Comments
 (0)