Оболочка для прошивки готовых устройств через внешние консольные программы

Возникла потребность на работе прошивать партии разных устройств: одни такие, другие сякие. То железо чуть отличается, то код должен работать несколько иначе. Вариантов в итоге куча.
Поначалу прошивал из всяких авр студий, но ясно дело, что неудобно. Потом появилась авр студия 5.1 с первыйм cli в виде atprogram.exe. Я мог делать bat-файлы типа таких:
atprogram -t %4 -d %5 -i isp -cl 100khz write -fs --values %3
atprogram -t %4 -d %5 -i isp -cl 1250khz chiperase
atprogram -t %4 -d %5 -i isp -cl 1250khz program -fl -f %1
atprogram -t %4 -d %5 -i isp -cl 1250khz verify -fl -f %1
atprogram -t %4 -d %5 -i isp -cl 1250khz program -ee -f %2
atprogram -t %4 -d %5 -i isp -cl 1250khz verify -ee -f %2

Хватало какое-то время, но появились другие потребности: например, обновить в авр флеш, не трогая еепром (требуется изменить фьюзы, стереть, прошить, вернуть фьюзы). Или сгенерировать серийный номер внешней утилитой и зашить в еепром. Или ещё что.
А ещё проблема в том, что если какой-то этап не выполнен, то остальные выполнять не нужно. Но bat-файлу это не расскажешь.

Захотел и сделал себе программу, которая бы выступала интерфейсом к подобным cli-программаторам и позволяла бы реализовывать подобные алгоритмы прошивки и модификации ПО и еепром в устройствах.

Парочка скриншотов:




По идее, к ней можно подключить любой консольный прошиватор, который получает команды через аргументы запуска и выводит результаты через stdout или stderr. jflash.exe, например, от j-Link совсем не такой, он общается с пользователем каким-то нечеловеческим способом. Но это обычно исключение. Я смог подключить:
  • atprogram.exe от Atmel Studio 6 (AVR Studio 5.1) для программаторов avr isp mkII, jtagice3 и подобных;
  • ST-LINK_CLI.exe от ST-Link Utility для контроллеров stm32 и программатора st-link;
  • STVP_CmdLine.exe от ST Visual Programmer для STM8 и программатора st-link.

Больше у меня программаторов нет. Думаю, avrdude и подобные подключиться тоже должны.

Суть подключения программатора состоит в создании xml-файла, где описывается путь к cli-программе, команды для стирания, прошивки, проверки и т.д. и всех наборов фраз, которые сопутствуют ошибке. Например, кусок xml для avr isp mkII, запись флеша:
<wflash>
	<command value="-t avrispmk2 -d {device} -i isp -cl 1250khz program -fl -f {filename}" />
	<error>
		<string value="Could not" />
		<string value="Unknown file format" />
		<string value="An error" />
		<string value="Unable to" />
		<string value="Failed to" />
	</error>
</wflash>

В проекте указывается набор необходимых скриптов. Например, обновление флеша:
<script>
	<name value="UPG NYA REV 1280" />
	<device value="atmega1280" />
	<cathegory value="4" />
	<steps>
		<option value="FED1FC" comment="Фьюзы для защиты еепром" />
		<erase comment="Очистка памяти" />
		<wflash value="NYARDMWH_Rev.hex" comment="Прошивка ПО" />
		<vflash value="NYARDMWH_Rev.hex" comment="Проверка ПО" />
		<option value="FED9FC" comment="Обычные фьюзы" />
	</steps>
</script>

Или генерация ID внешней (и тоже самопальной) утилитой:
<script>
	<name value="Write ID White 1280" />
	<device value="atmega1280" />
	<cathegory value="3" />
	<input value="uint64" default="089A00100000" />
	<steps>
		<external value="rdmnumber.exe -nnyaw dev=nya filename=serial.bin serial={input}" comment="Генерация EEPROM" />
		<wdata value="serial.hex" comment="Прошивка номера" />
		<vdata value="serial.hex" comment="Проверка номера" />
	</steps>
</script>

К каждому проекту предлагается список программаторов, которые поддерживают прошивку данного типа контроллеров. Порядок выдачи совместимых программаторов настраивается в файле tools.xml. И перед использованием во всех хмлках надо бы указать свои пути до программ, мои вряд ли покатят.

Не думаю я, что в единичном производстве это кому-то надо, да и наверняка, все придумали свои, более удобные, способы прошивки массового продукта (или такие программы есть более мощные уже, о которых я не знаю), но как-то так.

Исходники ПО на github.
Прикреплено Programmer.zip — старая версия. Programmer2.zip — новая, чисто exe.
Programmer_Min.zip — новая, с примерами и парочкой программок вспомогательного толка.
Файлы в топике: Programmer.zip, Programmer2.zip

Комментарии (25)

RSS свернуть / развернуть
А ещё проблема в том, что если какой-то этап не выполнен, то остальные выполнять не нужно. Но bat-файлу это не расскажешь.
Разве? А как же «if %ERRORLEVEL% ...»?

На чем написана программа? Почему бы не приложить исходники?
+1
  • avatar
  • Vga
  • 26 марта 2014, 20:16
Ну да, но условия лепить достаточно муторно, не люблю я эти батчи

C#, я её на гуглокод хочу закинуть, как и генератор hex еепрома из командной строки, который сейчас делаю. Секрета в коде никакого нет, но прям сейчас (да и потом) вряд ли он кому нужен, так что я не тороплюсь.
0
Use Mono Luke! Даёшь кросcплатформенное решение :)
0
например, обновить в авр флеш, не трогая еепром
есть FUSE bit который если выставить, то затирания данных в еепром не происходит при прошивки флеша.
0
Я про это и пишу) Фьюз надо выставить, прошить, а потом убрать обратно.
0
А зачем убирать обратно? Есть в этом какое-то сокровение (может я что-то упустил)?
0
Да нет, особого смысла нет, можно не возвращать, но как пример.
0
что имеем в итоге?
1) вагон XML которые надо мостырить так же, как и BATники, только ещё и разбираться надо, как их писать. Ещё, возможно кому-то придётся ставить редактор XML или вкуривать этот язык.

2) программулину с кучей кнопочек, которые надо в нужном порядке протыкивать.

Итого: гемора больше, скорость меньше. ХЗ, как вам, но у меня был фитоновский autoprog-se, которым можно было шить только из GUI. Я его проклял и переделал прошивку для USBASP, чтоб работала с s51dude. А ребята, перед тем, как приноровились шить из GUI, попортили несколько чипов, прошивая не те фьюзы.

Такие дела.
0
Ох, давно не заходил.

Штука эта для массовой прошивки устройств даже неквалифицированными людьми. Файлы готовит программист, конечному пользователю предлагается только выбор проекта и нужной версии ПО путём нажатия на кнопочку. Все операции выполняются скрыто любым программатором, который прописан в настройках вне зависимости от того, что и чем прошивается (stm32, avr через программатор, dfu, uart или сеть или ещё что — лишь бы был вменяемый cli).
Задача человека, кто программирует — сунуть программатор в отверстия, нажать на кнопку и дождаться конца процесса.

Скорость отличная, только платы меняй. Настраивается всё один раз, прошивается многократно.
Вот и сейчас кто-то прошивает тиньки через avrispmkII (800 штук), до этого прошивались платы где две хмеги и один stm32 и всё из одной программы.

Недостаток батов в том, что если произошла ошибка на каком-то из этапов, остальные выполнять смысла нет, но ему пофиг. Да и в миллионе ярлыков запутаться недолго. И, что было важно, там запаришься прописывать серийный номер для каждого устройства, когда в программе есть для этого спец. поле (из которого сгенерируется hex еепромки).

Программа развивается потихоньку до сих пор и является весьма полезной хотя бы для меня.
0
Решил здесь написать — Кто нибудь программировал через J-LINK в режиме daisy chain группу микросхем на плате через один разъем?
Какой софт использовали? Все утилиты позволяющие это делать платные :(
Автору — Вы выложили сырцы на гугл или гле нибудь? Интересно под Qt и кроссплатформенность перевести утилиту и наделить режимом daisy chain
0
Нет, никогда не встречал такой конфигурации.

Программа работает с внешними консольными программами и понятия не имеет ни об едином алгоритме программирования. Все алгоритмы программирования внешние, потому сырцы ничем не помогут. Гуглкод закрывается 26 января. А там, может, выложу чуть позже, когда допилю очередную версию и проверю.
0
Попробовал, вроде как раз то что нужно.
Единственное, не хватает опционального выбора.
Например, MSP430-bsl может шить через один из COM-портов, и тут либо зашивать намертво конкретный либо в списке программаторов забивать все возможные… тоже не айс.
0
Да, я сделал в новой версии программы возможность выбора типа JTAG/SWD, JTAG/ISP/DebugWire, быстро/медленно и т.д… До 4х разных опций одновременно.

Вот последняя версия: yadi.sk/d/eoP8HZF3jksh6
Там я ещё собирал все программы для автономного существования (чтоб скопипастил на новый комп, поставил драйвера и шей). Не знаю, могу я их выложить или нет, потому поудалял проприетарные огрызки программаторов, но оставил в соответствующих папках файл info.txt с указанием, что там лежало и где искать. Да и жирные они, программа со всем софтом и дровами (stm32, stm8, jlink, avrdbg) весит 100 метров.
И в корне лежит файл info.txt с кратким описанием устройства файлов или где смотреть примеры, который я по-быстрому накидал.

0
Запихнул бы уже на гитхаб, там и релиз выложить можно :)
0
Его надо оформить как полагается — с примерами, хелпом и всё такое. Хотя бы базово. Я начал это дело уже (судя по архиву), две недели назад было всё как-то более разобщено><

Я постараюсь во всяком случае это сделать.
0
Вспоминается комментарий из репозитория farbrauch — «мы хотели все причесать и задокументировать, прежде чем выкладывать, но поняли, что или выкладываем как есть, или не выкладываем вообще» :) Так что я бы предложил запихать на гитхаб и допиливать — в конце концов, для разработки он и предназначен.
0
Да, стоит выложить и допилить там.
0
Руки до гитхаба дошли-таки.

Примеры есть в архиве с описанием, исходники тож, если надо что прогрейдить. Последний раз собирал 15 студией, откатить до более старых можно, переписав в солюшене нужный номер версии студии.
+1
В сам топик еще линк добавь.
0
Ага.
0
Есть, кстати, ещё один интересный вариант, которым я пользовался не далее как неделю назад — сделать на каком-нибудь сишарпе прокси-программку микроскопических размеров, вся цель которой — переправить исходной программе аргументы вызова и вернуть результат в консоль. С единственным изменением — подстановкой ком-порта, который очень легко узнаётся по вид-пиду в три функции.
0
Только что раскопал — тег Походу то, что нужно.
Ещё бы не помешало хотя бы кратенький мануал по тегам выложить. Хотя бы в виде таблички — description. Чтобы не тратить лишнее время на самостоятельные раскопки.
Вообще, давно что-то подобное хотел соорудить, но на питоне. Да все никак. А тут резко расширилась номенклатура контроллеров и соответственно зоопарк тулзов, и регулировщики начали плакаться на свою тяжелую судьбу.
0
Проклятье, все теги в угловых скобочках съелись
0
А, в новой версии уже все есть. ОК.
0
Да, для введения там есть info.txt =)

Напишите по результатам, если не трудно, — получилось ли, ускорило ли, упростило ли насколько.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.