Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
29d4fa93b4 | ||
|
|
d6afe948cf | ||
|
|
e250512ab1 | ||
|
|
b2c1557107 | ||
|
|
b8553c40a1 | ||
|
|
3542c33889 | ||
|
|
442d04713a | ||
|
|
7569ae4313 | ||
|
|
30a13a78c8 | ||
|
|
46852b98ef |
No files matched your search
@@ -0,0 +1,6 @@
|
||||
venv/
|
||||
venv_win/
|
||||
venv_linux/
|
||||
build/
|
||||
build_win/
|
||||
build_linux/
|
||||
@@ -1,2 +1,3 @@
|
||||
# elbear_uploader
|
||||
Скрипт программирования памяти MIK32
|
||||
Скрипт программирования памяти MIK32 Амур платы ELBEAR ACE-UNO.
|
||||
Загрузчик построчно отправляет указанный при вызове hex-файл прошивки в заданный com-порт. При этом парсинг команд осуществляется на стороне микроконтроллера. Для ускорения процесса прошивки скрипт позволяет при помощи map-файла вырезать из отправляемого hex-файла команды записи данных в неиспользуемую область памяти перед некэшируемой областью. Полный набор опций доступен в справке при запуске скрипта с опцией –-help.
|
||||
+1
-2
@@ -1,6 +1,5 @@
|
||||
call .\venv\Scripts\activate.bat
|
||||
python -m nuitka .\elbear_uploader.py ^
|
||||
--output-dir=build ^
|
||||
--output-dir=build_win ^
|
||||
--output-filename="elbear_uploader.exe" ^
|
||||
--standalone
|
||||
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
python -m nuitka ./elbear_uploader.py \
|
||||
--output-dir=build_linux \
|
||||
--output-filename="elbear_uploader" \
|
||||
--standalone
|
||||
|
||||
cd build_linux
|
||||
mv elbear_uploader.dist elbear_uploader
|
||||
tar -czvf elbear_uploader_linux.tar.gz elbear_uploader
|
||||
+30
-9
@@ -1,20 +1,29 @@
|
||||
import serial
|
||||
import time
|
||||
import argparse
|
||||
from sys import exit
|
||||
|
||||
ACK = 0x0F # МК подтвердил 0b00001111
|
||||
NACK = 0xF0 # МК отверг 0b11110000
|
||||
COMMAND_PACKAGE_SIZE = b'\x30' # Команда размера пакета
|
||||
COMMAND_SEND_PACKAGE = b'\x60' # Команда отправить пакет
|
||||
COMMAND_FULL_ERASE = b'\xFE'
|
||||
TIMEOUT_DEFAULT = 0.1 # sec
|
||||
ACK = 0x0F # МК подтвердил 0b00001111
|
||||
NACK = 0xF0 # МК отверг 0b11110000
|
||||
COMMAND_PACKAGE_SIZE = b'\x30' # Команда размера пакета
|
||||
COMMAND_SEND_PACKAGE = b'\x60' # Команда отправить пакет
|
||||
COMMAND_FULL_ERASE = 0xBADC0FEE # Команда очистить чип
|
||||
|
||||
|
||||
def cmd_full_erase():
|
||||
ser.write(bytes(COMMAND_FULL_ERASE))
|
||||
read_byte = ser.read(1) # Прочесть байт ACK/NACK от контроллера
|
||||
ser.write(COMMAND_FULL_ERASE.to_bytes(4, "big"))
|
||||
read_byte = ser.read(1) # Прочесть подтверждение получения команды
|
||||
if int.from_bytes(read_byte, "big") == NACK:
|
||||
print("NACK. COMMAND_FULL_ERASE")
|
||||
exit()
|
||||
ser.timeout = None # Выключить таймаут, чтобы дождаться завершения процесса стирания чипа
|
||||
read_byte = ser.read(1) # Прочесть байт ACK/NACK от контроллера
|
||||
ser.timeout = TIMEOUT_DEFAULT # Включить таймаут обратно
|
||||
|
||||
if int.from_bytes(read_byte, "big") == NACK:
|
||||
print("NACK. FULL_ERASE FAILED")
|
||||
exit()
|
||||
|
||||
# Задать размер пакета
|
||||
def cmd_package_size(package_size):
|
||||
@@ -28,6 +37,7 @@ def cmd_package_size(package_size):
|
||||
if int.from_bytes(read_byte, "big") == NACK:
|
||||
print("NACK. COMMAND_PACKAGE_SIZE")
|
||||
exit()
|
||||
return read_byte == b'\x0f'
|
||||
|
||||
# Отправить пакет
|
||||
def cmd_send_package(data_package):
|
||||
@@ -159,8 +169,19 @@ if namespace.hexpath:
|
||||
i -= 1 # текущая строчка удалилась, следующая будет с тем же индексом
|
||||
i += 1
|
||||
|
||||
ser = serial.Serial(port = namespace.com, baudrate = namespace.baudrate)
|
||||
time.sleep(0.5) # Задержка чтобы успел выставиться RESET
|
||||
ser = serial.Serial(port = namespace.com, baudrate = namespace.baudrate, timeout = TIMEOUT_DEFAULT)
|
||||
|
||||
ping = False
|
||||
for i in range(10): # вместо задержки забрасываем запросами
|
||||
ping = cmd_package_size(15)
|
||||
if ping:
|
||||
break
|
||||
|
||||
if ping:
|
||||
print("Device connected")
|
||||
else:
|
||||
print("Device not responding")
|
||||
exit()
|
||||
|
||||
if namespace.fullerase:
|
||||
print('Erasing memory')
|
||||
|
||||
Binary file not shown.
Reference in new issue
Block a user