LPCXpresso Урок 9. USB-bootloader. Прошиваем контроллер подручными средствами.

Об использовании USB-загрузчика у NXP имеется аппноут AN10986 (код). Я же попробую в рамках курса для новичков рассказать его по-русски.

На данном этапе отладчик нам не нужен, поэтому отключаем его от USB.

Для данного урока вам не подойдет LPC1114 поскольку в нем нет USB, не смотря на то, что они подписаны на плате.

Схема

Собираем следующую схему (желающие, могут собрать сразу схему "посложнее", приведённую в аппноуте):
Схема подключения контроллера к USB-порту

Собрать можно используя имеющееся на плате макетное поле, а можно и просто навесным монтажом. Себе же я напаял на плату штырьков и пользуюсь по аналогии с беспечными макетными платами.

Подробнее где какой выход у USB разъема можно посмотреть в статье на википедии. Для LPCXpresso указаны имена выводов, нанесенные на плату. Перед подключением самой платы, рекомендовал бы проверить мультиметром, что вы не перепутали выводы питания на разъеме, дабы не спалить чего-нибудь (Важно: в китайских удлинителях, хабах цветовая маркировка не является гарантией, как раз таки наоборот, по-этому предварительная проверка обязательна. Спасибо Vga за напоминание).

Ну а теперь подробнее что для чего.

  • Земля, aka GND. Тут как бы без вопросов: земля разъема USB обязана быть объединена с землей контроллера;
  • Питание для платы будем брать с USB. На самой плате предусмотрен вывод +5VIN предназначенный для подключения внешнего источника питания на 5 вольт. Соответственно этот вывод и подключаем к USB +5V;
  • D- заводим на USB-DM вывод платы;
  • D+ заводим на USB-DP вывод платы;
  • Что бы контроллер мог обнаружить подключение к USB шине (и понял, что требуется USB версия загрузчика взамен UART), подключаем +5 вольт с USB на вывод USB-VBUS платы;
  • Что бы компьютер, в свою очередь, смог определить, что к нему подключено USB full-speed устройство, линию D+ подключаем через резистор 1.5КОм к выводу +3.3вольта. Номинал желательно не менять. У меня работало и с резюками 1.3к-1.6к, но нет гарантии, что оно будет работать стабильно.
  • Что бы контроллер понял, что требуется режим загрузчика, вывод FT/GPIO платы подключаем через переключатель на землю. При замкнутом за землю выводе у нас будет режим загрузки, а при разомкнутом – режим выполнения прошивки.

Длина проводов должна быть по возможности небольшой. У меня 10-20см работает без нареканий (но даже через метровый удлинитель).

Собрав данную схему и убедившись в её правильности, подключаем плату к USB порту компьютера (вновь добавленным разъемом, а не тем что предназначен для отладчика). Переключатель при этом должен быть в положении загрузчика. После небольших раздумий и установки драйверов ОС Windows должна оповестить вас о подключении нового устройства. И этим устройством будет съемный диск на 32кБайта. На нем в свою очередь будет файл firmware.bin, который представляет собой текущую прошивку контроллера.
Съемный диск с прошивкой микроконтроллера

Возможные проблемы

Если что-то начало сильно греться, или вдруг задымилось, то, вероятно, вы просто перепутали полярность.

Если ОС сообщает что подключено неизвестное устройство, то проверьте правильность монтажа. Правильно ли подключено питание. Не перепутаны ли выводы D+ и D-. Правильный ли установлен резистор.

Думаю так же стоит упомянуть про возможность защиты кода. Как видно на картинке, метка диска у контроллера CRP disabld, что означает отключенную защиту. У вас будет точно так же, если вы конечно прежде ни где ничего не натворили. Но если вдруг метка другая, то у вас могут возникнуть трудности с чтением/записью прошивки. Подробнее написано в аппноуте.

Прошиваем контроллер

И так. У вас плата с залитой в него прошивкой мигания светодиодом (либо та, что присутствует по умолчанию, либо та, которую мы сделали в прошлых уроках). Докажем что программирование на самом деле работает. Проведём следующий эксперимент.

  1. Копируем файл firmware.bin с контроллера (съемного диска, соответствующего нашей плате) к себе на диск.
  2. Удаляем файл с контроллера. Это приведёт к стиранию прошивки.
  3. Отключаем плату от USB и разрываем соединение FT/GPIO с землёй, тем самым вернув контроллер в режим исполнения прошивки.
  4. Подключаем плату к компьютеры через USB-разъем отладчика и видим что светодиод просто тускло светит. И правильно, в контроллере то нет никакой прошивки.
  5. Отключаем плату от USB и восстанавливаем подключение FT/GPIO с землёй.
  6. Подключаем плату через новый USB разъем. Должен снова появиться диск с файлом firmware.bin, но в нем уже будет мусор.
  7. Возвращаем сохраненный файл firmware.bin на контроллер (на запрос заменить, отвечаем утвердительно).
  8. Повторно отключаем плату от USB и разрываем соединение FT/GPIO с землёй, повторно вернув контроллер в режим исполнения прошивки.
  9. Снова подключаем плату к компьютеры через USB-разъем отладчика и видим что светодиод снова начал мигать.

Разъем отладчика мы тут использовали просто, что бы подать питание на плату. Можно было использовать и новый разъем, только тогда ОС Windows будет нам сыпать ошибки, что устройство не опознано. Связано это с тем, что резистор у нас подключен всегда. Те кто собирал схему из аппноута не получили бы таких сообщений.

Для всего этого вам не надо было ни какого программатора. Только несколько проводков, резистор и разъем USB. Так же не требовалось никаких специализированных программ. Достаточно было любого файлового менеджера (Проводник, Total Commander или любой другой).

Отступление для Linux и MacOS

В Linux и MacOS не всё на столько удобно. В связи с особенностью этих систем (по непонятным причинам) писать на пустой диск новый файл, начиная не с первого сектора, а со второго, контроллер в итоге прошивается не правильно.

Но выход есть и тут. Достаточно файл прошивки принудительно записать начиная с первого сектора, например, с помощью dd. Конечно менее удобно чем простое перетаскивание файлов, но линуксойдам не привыкать.

Вместо заключения

Как видите, прошивка LPC13xx благодаря USB загрузчику, эмулирующему съемный диск, является крайне простой операцией, не требующей к тому же сложных и/или дорогих схематических решений.

Hosted by uCoz