Skip to content

Commit d6d62e2

Browse files
committed
poc flasher
0 parents  commit d6d62e2

File tree

4 files changed

+169
-0
lines changed

4 files changed

+169
-0
lines changed

Blink_fast.bin

19 KB
Binary file not shown.

Blink_slow.bin

11.8 KB
Binary file not shown.

stm32_flash.py

+143
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
import time
2+
from machine import Pin, UART
3+
4+
5+
STM32_INIT = b'\x7F'
6+
STM32_NACK = b'\x1F'
7+
STM32_ACK = b'\x79'
8+
9+
STM32_GET = b'\x00'
10+
STM32_ID = b'\xFD' #should be 0x02
11+
12+
STM32_READ = b'\x11'
13+
STM32_RUN = b'\x21'
14+
STM32_WRITE = b'\xCE' #0xCE 0x31
15+
16+
STM32_ADDRESS = bytes.fromhex('08000000') #[b'\x08',b'\x00',b'\x00',b'\x00']
17+
18+
19+
20+
21+
22+
23+
24+
25+
26+
led = Pin(48,Pin.OUT)
27+
led_state = False
28+
29+
uart = UART(1, baudrate=115200, bits=8, parity=0 , stop=1, tx=43,rx=44) #parity 0 equals to Even, 1 to Odd
30+
31+
32+
33+
def STM32_sendCommand(x):
34+
value = x
35+
value_not = bytes([value[0]^0xFF])
36+
uart.write(value)
37+
uart.write(value_not)
38+
39+
40+
41+
42+
def STM32_checkOK():
43+
result = -1
44+
reply = uart.read(1)
45+
if reply != None:
46+
if reply == STM32_ACK:
47+
result=0
48+
else:
49+
if reply == STM32_NACK:
50+
result=1
51+
return result
52+
53+
54+
55+
def STM32_waitOK():
56+
result=-1
57+
while result<0:
58+
result = STM32_checkOK()
59+
return result
60+
61+
62+
63+
def STM32_getID():
64+
lock = True
65+
while lock:
66+
STM32_sendCommand(STM32_ID)
67+
if STM32_waitOK()==0:
68+
lock = False
69+
70+
lock = True
71+
while lock:
72+
data = uart.read(1)
73+
if data != None:
74+
N = data[0]
75+
lock = False
76+
stm32id = uart.read(N+1)
77+
STM32_waitOK()
78+
return stm32id
79+
80+
81+
82+
def STM32_writeMode():
83+
lock = True
84+
while lock:
85+
STM32_sendCommand(STM32_WRITE)
86+
if STM32_waitOK()==0:
87+
lock = False
88+
89+
90+
91+
def STM32_address(address):
92+
check = 0x00
93+
check = check^address[0]
94+
check = check^address[1]
95+
check = check^address[2]
96+
check = check^address[3]
97+
98+
uart.write(address)
99+
uart.write(bytes([check]))
100+
101+
102+
103+
print('\nSTM32 FIRMWARE UPDATER')
104+
105+
STM32_sendCommand(STM32_INIT)
106+
STM32_waitOK()
107+
108+
print('\nSTM32 FOUND')
109+
print('\nSTM32 GETTING ID')
110+
print(STM32_getID().hex())
111+
112+
113+
STM32_writeMode()
114+
print('\nSTM32 WRITE MODE')
115+
116+
"""
117+
file = open('Blink_fast.bin','rb')
118+
firmware = file.read()
119+
firmware_size_256 = len(firmware)/256
120+
firmware_size_256_last = len(firmware)%256
121+
print(firmware_size_256)
122+
print(firmware_size_256_last)
123+
"""
124+
125+
with open('Blink_fast.bin','rb') as file_t:
126+
blob_data = bytearray(file_t.read())
127+
print(blob_data)
128+
129+
130+
"""
131+
132+
x=int.from_bytes(STM32_ADDRESS,'big')
133+
x=x+127
134+
new_address=x.to_bytes(4,'big')
135+
STM32_address(new_address)
136+
137+
STM32_waitOK()
138+
"""
139+
140+
141+
142+
143+

uart.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import time
2+
from machine import Pin, UART
3+
4+
led = Pin(48,Pin.OUT)
5+
led_state = False
6+
7+
uart = UART(1,baudrate=9600,tx=43,rx=44)
8+
9+
uart.write('ciao')
10+
11+
start = time.ticks_ms()
12+
13+
while True:
14+
result = uart.read()
15+
if result!= None:
16+
print(result)
17+
delta = time.ticks_diff(time.ticks_ms(), start)
18+
if delta>1000:
19+
start=time.ticks_ms()
20+
if led_state == False:
21+
led.on()
22+
led_state=True
23+
else:
24+
led.off()
25+
led_state=False
26+

0 commit comments

Comments
 (0)