5 Commits
4 changed files with 33 additions and 8 deletions

No files matched your search

+3 -4
View File
@@ -1,7 +1,6 @@
venv/
venv_win/
venv_linux/
venv*/
build/
build_win/
build_linux/
__pycache__/
__pycache__/
*.xml
+5 -1
View File
@@ -14,4 +14,8 @@
При успешном подключении к устройству в терминале отобразится процесс и результат загрузки файла. В случае неудачного подключения в терминале так же отобразится информация об этом.
![command](images/command.PNG)
Для ускорения процесса прошивки скрипт позволяет при помощи map-файла вырезать из отправляемого hex-файла команды записи данных в неиспользуемую область памяти перед некэшируемой областью. Полный набор опций доступен в справке при запуске скрипта с опцией –-help.
Для ускорения процесса прошивки скрипт позволяет при помощи map-файла вырезать из отправляемого hex-файла команды записи данных в неиспользуемую область памяти перед некэшируемой областью. Полный набор опций доступен в справке при запуске скрипта с опцией –-help.
# необходимые для сборки пакеты
ubuntu18.04: zlib1g-dev patchelf scons
Regular → Executable
+1
View File
@@ -1,4 +1,5 @@
#!/bin/bash
rm -rf build_linux
python -m nuitka ./elbear_uploader.py \
--output-dir=build_linux \
--output-filename="elbear_uploader" \
+24 -3
View File
@@ -3,6 +3,8 @@ import time
import argparse
from sys import exit
UPLOADER_VERSION = "0.2.3"
TIMEOUT_DEFAULT = 0.1 # sec
BYTE_COUNT_POS = 0 # индекс счетчика байт данных
@@ -13,6 +15,7 @@ REC_TYPE_EXT_LIN_ADDR = 4 # тип записи - расширенный ад
COMMAND_PACKAGE_SIZE = b'\x30' # Команда размера пакета
COMMAND_SEND_PACKAGE = b'\x60' # Команда отправить пакет
COMMAND_GET_VERSION = b'\x90' # Команда получить версию начального загрузчика
COMMAND_FULL_ERASE = 0xBADC0FEE # Команда очистить чип
ACK = 0x0F # МК подтвердил 0b00001111
@@ -64,6 +67,19 @@ def cmd_send_package(data_package):
# Если дошли сюда, значит контроллер ответил на команду. Отправить пакет
send_parsel(bytes(data_package))
# Получить версию начального загрузчика
def cmd_get_version():
# отправить команду получения версии
send_parsel(COMMAND_GET_VERSION)
# Если дошли сюда, значит контроллер ответил на команду. Получить версию загрузчика - 3 байта
read_bytes = ser.read(3)
if len(read_bytes) == 3:
major, minor, patch = read_bytes
return f"{major}.{minor}.{patch}" # Возвращаем строку версии
else:
print("Get incorrect bootloader version")
return 0
def printProgressBar (iteration, total, prefix = '', suffix = '', decimals = 1, length = 100, fill = '_', printEnd = "\r"):
percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
@@ -77,7 +93,7 @@ DEFAULT_BAUDRATE = 230400
def createParser():
parser = argparse.ArgumentParser(
prog='bootloader.py',
prog='elbear_uploader.py',
description='''Script for writing to external flash on SPIFI interface'''
)
@@ -124,6 +140,8 @@ parser = createParser()
namespace = parser.parse_args()
if namespace.hexpath:
print(f"Start elbear_uploader v{UPLOADER_VERSION}")
# читаем хекс
with open(f"{namespace.hexpath}", "r", encoding='utf-8') as f:
hex_lines = f.readlines()
@@ -218,6 +236,9 @@ if namespace.hexpath:
if ping:
print("Device connected")
version_str = cmd_get_version()
print("Bootloader version:", version_str)
if namespace.fullerase:
print('Erasing memory')
cmd_full_erase()
@@ -225,7 +246,7 @@ if namespace.hexpath:
# перебираем все строчки в прочитанном файле и отправляем
timestart = time.time()
resolution = 1 # секунды - период выплевывани инфы о прогрессе в терминал
resolution = 1 # секунды - период выплевывания инфы о прогрессе в терминал
all_showed = False
for line in data_lines:
cmd_package_size(len(line))
@@ -235,7 +256,7 @@ if namespace.hexpath:
# printProgressBar(progress, 100, prefix = 'Upload:', suffix = 'Complete', length = 50)
if time.time() > timestart + resolution:
timestart += resolution
print(f'Uploaded {int(progress)}%')
print(f'Uploaded {int(progress)}%', flush=True)
if progress == 100:
all_showed = True