LPCXpresso Урок 9. USB-bootloader. Прошиваем контроллер подручными средствами.
Об использовании USB-загрузчика у NXP имеется аппноут AN10986 (код). Я же попробую в рамках курса для новичков рассказать его по-русски.
На данном этапе отладчик нам не нужен, поэтому отключаем его от USB.
Для данного урока вам не подойдет LPC1114 поскольку в нем нет USB, не спотря на то, что они подписаны на плате.

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

Если ОС сообщает что подключено неизвестное устройство, то проверьте правильность монтажа. Правильно ли подключено питание. Не перепутаны ли выводы D+ и D-. Правильный ли установлен резистор.
Думаю так же стоит упомянуть про возможность защиты кода. Как видно на картинке, метка диска у контроллера CRP disabld, что означает отключенную защиту. У вас будет точно так же, если вы конечно прежде ни где ничего не натворили. Но если вдруг метка другая, то у вас могут возникнуть трудности с чтением/записью прошивки. Подробнее написано в аппноуте.
На данном этапе отладчик нам не нужен, поэтому отключаем его от USB.
Для данного урока вам не подойдет LPC1114 поскольку в нем нет 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 платы подключаем через переключатель на землю. При замкнутом за землю выводе у нас будет режим загрузки, а при разомкнутом – режим выполнения прошивки.
Собрав данную схему и убедившись в её правильности, подключаем плату к USB порту компьютера (вновь добавленным разъемом, а не тем что предназначен для отладчика). Переключатель при этом должен быть в положении загрузчика. После небольших раздумий и установки драйверов ОС Windows должна оповестить вас о подключении нового устройства. И этим устройством будет съемный диск на 32кБайта. На нем в свою очередь будет файл firmware.bin, который представляет собой текущую прошивку контроллера.

Возможные проблемы
Если что-то начало сильно греться, или вдруг задымилось, то, вероятно, вы просто перепутали полярность.Если ОС сообщает что подключено неизвестное устройство, то проверьте правильность монтажа. Правильно ли подключено питание. Не перепутаны ли выводы D+ и D-. Правильный ли установлен резистор.
Думаю так же стоит упомянуть про возможность защиты кода. Как видно на картинке, метка диска у контроллера CRP disabld, что означает отключенную защиту. У вас будет точно так же, если вы конечно прежде ни где ничего не натворили. Но если вдруг метка другая, то у вас могут возникнуть трудности с чтением/записью прошивки. Подробнее написано в аппноуте.
Прошиваем контроллер
И так. У вас плата с залитой в него прошивкой мигания светодиодом (либо та, что присутствует по умолчанию, либо та, которую мы сделали в прошлых уроках). Докажем что программирование на самом деле работает. Проведём следующий эксперимент.- Копируем файл firmware.bin с контроллера (съемного диска, соответствующего нашей плате) к себе на диск.
- Удаляем файл с контроллера. Это приведёт к стиранию прошивки.Отключаем плату от USB и разрываем соединение FT/GPIO с землёй, тем самым вернув контроллер в режим исполнения прошивки.
Подключаем плату к компьютеры через USB-разъем отладчика и видим что светодиод просто тускло светит. И правильно, в контроллере то нет никакой прошивки.
Отключаем плату от USB и восстанавливаем подключение FT/GPIO с землёй.
Подключаем плату через новый USB разъем. Должен снова появиться диск с файлом firmware.bin, но в нем уже будет мусор.
Возвращаем сохраненный файл firmware.bin на контроллер (на запрос заменить, отвечаем утвердительно).
Повторно отключаем плату от USB и разрываем соединение FT/GPIO с землёй, повторно вернув контроллер в режим исполнения прошивки.
Снова подключаем плату к компьютеры через USB-разъем отладчика и видим что светодиод снова начал мигать.
Разъем отладчика мы тут использовали просто, что бы подать питание на плату. Можно было использовать и новый разъем, только тогда ОС Windows будет нам сыпать ошибки, что устройство не опознано. Связано это с тем, что резистор у нас подключен всегда. Те кто собирал схему из аппноута не получили бы таких сообщений.
Для всего этого вам не надо было ни какого программатора. Только несколько проводков, резистор и разъем USB. Так же не требовалось никаких специализированных программ. Достаточно было любого файлового менеджера (Проводник, Total Commander или любой другой).
Отступление для Linux и MacOS
В Linux и MacOS не всё на столько удобно. В связи с особенностью этих систем (по непонятным причинам) писать на пустой диск новый файл, начиная не с первого сектора, а со второго, контроллер в итоге прошивается не правильно.
Но выход есть и тут. Достаточно файл прошивки принудительно записать начиная с первого сектора, например, с помощью dd. Конечно менее удобно чем простое перетаскивание файлов, но линуксойдам не привыкать.
Вместо заключения
Как видите, прошивка LPC13xx благодаря USB загрузчику, эмулирующему съемный диск, является крайне простой операцией, не требующей к тому же сложных и/или дорогих схематических решений.
- +1
- 16 сентября 2011, 08:46
- angel5a
Гм. Однако, хотелось бы заметить, что в отличие от цикла про ENC28J60 тут статьи гораздо короче и проще.
На мое мнение правда влияет еще и то, что я не начинающий и большинство содержимого статей нахожу чем-то и так известным, а перечитывать его не так интересно, как в авторстве DI.
На мое мнение правда влияет еще и то, что я не начинающий и большинство содержимого статей нахожу чем-то и так известным, а перечитывать его не так интересно, как в авторстве DI.
Да, но конкурентов сильных пока не видно. Я пока еще не поссчитывал текущее число, но на глазок результат неплох.
Кстати, я не совсем понял условия, второй виток будет считаться завершенным, когда накопится 200 статей на него?
Курс в таком виде и планировался, что бы новичек мог взять и запустить. АРМы, имхо, гораздо проже 8 биток (если не лезть сильно в железо), освоить их проще. Однако почему-то бытует обратное мнение.
Освоить проще 8051 (стандартный), там периферия примитивная. А так разницы нету, асм везде по сути примерно одинаковый, С и подавно.
У арма с периферией тоже ничего особо сложного, но опций больше и нуна почитать даташитик, чтобы их все выставить.
У арма с периферией тоже ничего особо сложного, но опций больше и нуна почитать даташитик, чтобы их все выставить.
Я скажу так. Даташит я открыл только когда у меня в USB стек начал сталлится. И то не сильно помогло, база знаний лучше в этом плане была.
А писать под арм можно «как и под комп». Си основной для них, с портируемостью проблем не сильно. При использовании библиотек вообще можно о регистрах и не знать как оно работает. На авр таких библиотек я не встречал.
А писать под арм можно «как и под комп». Си основной для них, с портируемостью проблем не сильно. При использовании библиотек вообще можно о регистрах и не знать как оно работает. На авр таких библиотек я не встречал.
Перед подключением самой платы, рекомендовал бы проверить мультиметром, что вы не перепутали выводы питания на разъеме, дабы не спалить чего-нибудь.И не только «вы». Китайцы в кабелях иногда путают цвета, так что как минимум полярность питания на шнурке стоит проверить до подключения к контроллеру.
Длина проводов должна быть по возможности небольшой. У меня 10-20см работает без нареканий (но даже через метровый удлинитель).Через удлинитель все должно быть нормально, даже через пятиметровый. А вот провода между USB-гнездом и пинами МК желательно делать как можно короче (уже 10 сантиметров нескрученных D+/D- приводят к неустойчивой работе USB 2.0). Ну и D+/D- желательно тянуть витой парой (или аналогичной печатной линией).
Для всего этого вам не надо было ни какого программатора. Только несколько проводков, резистор и разъем USB. Так же не требовалось никаких специализированных программ. Достаточно было любого файлового менеджера (Проводник, Total Commander или любой другой).Такой МК для сборки программаторов хорош, проблема курицы и яйца отсутствует)
Благодаря автору «Терраэлектроника» распродала все LPC1343 LPCXpresso… Похоже это сообщество им на руку в прямом смысле слова. И делиться не надо: указал ссылку и лады. ;)
Ага и у нашего регионального поставщика уже нет ни LPCXpresso, ни LPC1343
остались из 13-тых только LPC1313FBD48 по 183 рубля :(
остались из 13-тых только LPC1313FBD48 по 183 рубля :(
Комментарии (36)
RSS свернуть / развернуть