================================================================================ ИНСТРУКЦИЯ ПО ИСПОЛЬЗОВАНИЮ ПО "TALENTUM DFUPD_CLIENT.PY" ================================================================================ НАЗНАЧЕНИЕ ---------- Скрипт предназначен для прошивки SPI DATA FLASH W25Q64JV, подключенную к МК CH32F207 по интерфейсу SPI. Этот МК содержит пользовательскую программу UP1 поддерживающую проприетарный протокол обновления ПО в данной DF "DFUPD - Data Flash Update" через TCP/IP соединение. Этот клиент предназначен для работы через Ethernet. ТРЕБОВАНИЯ ---------- - Python 3.x - Сетевое соединение с устройством (порт 5008 по умолчанию) ОБЩИЙ СИНТАКСИС --------------- python3 dfupd_client.py <команда> [ключи] Где: - IP-адрес устройства <команда> - одна из команд: info, erase, write, read, reset ДОСТУПНЫЕ КЛЮЧИ --------------- --addr ADDR Адрес во флеш-памяти (поддерживает 0x для hex, например 0x08000000) --end ADDR Конечный адрес для стирания --file PATH Путь к локальному файлу --size BYTES Размер данных для чтения (в байтах) --port PORT Порт устройства (по умолчанию 5008) КОМАНДЫ И ПРИМЕРЫ ----------------- 1. INFO - информация о флеш-памяти устройства Синтаксис: python3 dfupd_client.py info [--port PORT] Пример: python3 dfupd_client.py 192.168.1.100 info Вывод: ======================================== FLASH INFO ======================================== ID: 0xEF40 Size: 1048576 (1.0 MB) Sector: 4096 bytes Page: 256 bytes Sectors: 256 Write cnt: 42 Read cnt: 156 Erase cnt: 12 ======================================== 2. ERASE - стирание секторов флеш-памяти Синтаксис: python3 dfupd_client.py erase --addr ADDR --end ADDR Пример (стереть область 64KB начиная с адреса 0x08000000): python3 dfupd_client.py 192.168.1.100 erase --addr 0x08000000 --end 0x0800FFFF Примечание: адреса автоматически выравниваются по границе сектора (4096 байт) 3. WRITE - запись файла в флеш-память устройства Синтаксис: python3 dfupd_client.py write --addr ADDR --file FILEPATH Пример (записать прошивку по адресу 0x08000000): python3 dfupd_client.py 192.168.1.100 write --addr 0x08000000 --file ./firmware.bin Вывод: Writing ./firmware.bin to 0x08000000 Size: 32768 bytes, Pages: 128 Erasing sectors 0-7... OK Writing pages... 10/128 pages 20/128 pages ... Done! 128 pages written Примечания: - Стирание выполняется автоматически перед записью - Адрес должен быть выровнен по границе страницы (кратно 256) - Если размер файла не кратен 256, последняя страница дополняется 0xFF 4. READ - чтение данных из флеш-памяти в файл Синтаксис: python3 dfupd_client.py read --addr ADDR --size BYTES --file FILEPATH Пример (прочитать 64KB и сохранить в dump.bin): python3 dfupd_client.py 192.168.1.100 read --addr 0x08000000 --size 65536 --file ./dump.bin Вывод: Reading 65536 bytes from 0x08000000 Pages: 256 10/256 pages 20/256 pages ... Saved to ./dump.bin 5. RESET - перезагрузка устройства Синтаксис: python3 dfupd_client.py reset Пример: python3 dfupd_client.py 192.168.1.100 reset ТИПИЧНЫЙ СЦЕНАРИЙ ИСПОЛЬЗОВАНИЯ -------------------------------- 1. Проверить связь и получить информацию о флеш: $ python3 dfupd_client.py 192.168.1.100 info 2. Записать новую прошивку: $ python3 dfupd_client.py 192.168.1.100 write --addr 0x08000000 --file ./build/app.bin 3. Перезагрузить устройство для запуска прошивки: $ python3 dfupd_client.py 192.168.1.100 reset 4. (Опционально) Прочитать дамп флеш для проверки: $ python3 dfupd_client.py 192.168.1.100 read --addr 0x08000000 --size 65536 --file verify.bin $ diff app.bin verify.bin ВОЗМОЖНЫЕ ОШИБКИ И РЕШЕНИЯ -------------------------- 1. "Connection refused" или таймаут - Проверьте IP-адрес устройства - Проверьте сетевые настройки (firewall, доступность порта 5008) 2. "Invalid address" / "Address not aligned" - Адрес должен быть выровнен по границе 256 байт (кратен 0x100) - Пример правильного адреса: 0x08000000, 0x08000100, 0x08000200 - Неправильно: 0x08000001, 0x08000080 3. "Data must be 256 bytes" - Внутренняя ошибка протокола, обычно не возникает при нормальной работе 4. "Invalid signature" / "Invalid response header" - Устройство ответило не по протоколу DFUPD - Проверьте, что на устройстве запущено правильное по 5. "Connection closed" - Устройство неожиданно разорвало соединение - Возможно, произошла ошибка во время выполнения команды - Проверьте питание устройства и сетевое соединение ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ------------------------- - Протокол использует страницы по 256 байт - Сектор флеш-памяти 4096 байт (16 страниц) - Команда write автоматически вычисляет необходимое количество секторов для стирания - При записи, если файл меньше размера страницы, оставшаяся часть заполняется 0xFF - При чтении, можно указать любой размер, скрипт автоматически округлит до целого числа страниц - Таймаут соединения 30 секунд для длительных операций стирания