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

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


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

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

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

И так. У вас плата с залитой в него прошивкой мигания светодиодом (либо та, что присутствует по умолчанию, либо та, которую мы сделали в прошлых уроках). Докажем что программирование на самом деле работает. Проведём следующий эксперимент.
  1. Копируем файл firmware.bin с контроллера (съемного диска, соответствующего нашей плате) к себе на диск.
  2. Удаляем файл с контроллера. Это приведёт к стиранию прошивки.Отключаем плату от 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

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

RSS свернуть / развернуть
Боян :) А вообще неплохо. Товарищ уверенно идет на осциллограф :)
0
Этот баян нужен как введение к следующему уроку :)
0
Гм. Однако, хотелось бы заметить, что в отличие от цикла про ENC28J60 тут статьи гораздо короче и проще.
На мое мнение правда влияет еще и то, что я не начинающий и большинство содержимого статей нахожу чем-то и так известным, а перечитывать его не так интересно, как в авторстве DI.
0
  • avatar
  • Vga
  • 16 сентября 2011, 14:48
Да, но конкурентов сильных пока не видно. Я пока еще не поссчитывал текущее число, но на глазок результат неплох.
0
Кстати, я не совсем понял условия, второй виток будет считаться завершенным, когда накопится 200 статей на него?
0
  • avatar
  • Vga
  • 16 сентября 2011, 14:53
Да. также как и первый. Отбивка идет по числу постов.
0
Эм, в первом копилось 100 постов, а не 200.
0
  • avatar
  • Vga
  • 16 сентября 2011, 15:37
Да. Но первый конкурс был стартовый и завершился в три раза быстрей чем я расчитывал. Так что на второй число постов увеличил вдвое, тем более что народу в сообществе на данный момент тоже стало больше в несколько раз.
0
Реквестирую промежуточные результаты после 25 каждых постов.
0
Плохой вариант. Так пока никто не знает что на то то претендует у него есть стимул написать ещё, а то бросит и всё :)
0
Наоборот, хороший годный вариант.
Увидит, в чем его ошибки и будет писать лучше.
0
Естественно будут промежуточные варианты, А еще я подоябываюсь до каждой статьи, баллы поснимаю за плохое раскрытие темы и так далее :))))
0
Ты доёбывайся сразу, а то через год уже поздно будет.
0
Курс в таком виде и планировался, что бы новичек мог взять и запустить. АРМы, имхо, гораздо проже 8 биток (если не лезть сильно в железо), освоить их проще. Однако почему-то бытует обратное мнение.
0
Освоить проще 8051 (стандартный), там периферия примитивная. А так разницы нету, асм везде по сути примерно одинаковый, С и подавно.
У арма с периферией тоже ничего особо сложного, но опций больше и нуна почитать даташитик, чтобы их все выставить.
0
  • avatar
  • Vga
  • 16 сентября 2011, 15:39
Я скажу так. Даташит я открыл только когда у меня в USB стек начал сталлится. И то не сильно помогло, база знаний лучше в этом плане была.
А писать под арм можно «как и под комп». Си основной для них, с портируемостью проблем не сильно. При использовании библиотек вообще можно о регистрах и не знать как оно работает. На авр таких библиотек я не встречал.
0
Если не лезть в железо то оно все простое и легкое. Но в железо лезть полюбому придется. А начинать вообще самое то с 8051 вот когда там реализуешь и ШИМ и АЦП и и2с со spi всякими (все программно епт) то тогда все остальное будет легко и просто.
0
Перед подключением самой платы, рекомендовал бы проверить мультиметром, что вы не перепутали выводы питания на разъеме, дабы не спалить чего-нибудь.
И не только «вы». Китайцы в кабелях иногда путают цвета, так что как минимум полярность питания на шнурке стоит проверить до подключения к контроллеру.
Длина проводов должна быть по возможности небольшой. У меня 10-20см работает без нареканий (но даже через метровый удлинитель).
Через удлинитель все должно быть нормально, даже через пятиметровый. А вот провода между USB-гнездом и пинами МК желательно делать как можно короче (уже 10 сантиметров нескрученных D+/D- приводят к неустойчивой работе USB 2.0). Ну и D+/D- желательно тянуть витой парой (или аналогичной печатной линией).
Для всего этого вам не надо было ни какого программатора. Только несколько проводков, резистор и разъем USB. Так же не требовалось никаких специализированных программ. Достаточно было любого файлового менеджера (Проводник, Total Commander или любой другой).
Такой МК для сборки программаторов хорош, проблема курицы и яйца отсутствует)
0
  • avatar
  • Vga
  • 16 сентября 2011, 14:45
И не только «вы». Китайцы в кабелях иногда путают цвета, так что как минимум полярность питания на шнурке стоит проверить до подключения к контроллеру.
Да, есть такое западло. 2 раза попадал. В последнее время юзаю просто разъемы, потому как-то не подумал что кто-то удлинитель разобирать будет.
0
Ну иногда делаются такие девайсы как скажем джойстик. Туда традиционно кабель запаивается. Так-то да, с гнездом это не играет значение. Но тогда значения не имеют и цвета проводов.
0
  • avatar
  • Vga
  • 16 сентября 2011, 15:36
Благодаря автору «Терраэлектроника» распродала все LPC1343 LPCXpresso… Похоже это сообщество им на руку в прямом смысле слова. И делиться не надо: указал ссылку и лады. ;)
0
  • avatar
  • DVF
  • 16 сентября 2011, 15:44
Может у них просто пара плат и была всего-то :)
0
Не меньше шести штук — сам оплачивал в понедельник. Но сегодня, в пятницу, пусто и на складе и в офисе.
0
  • avatar
  • DVF
  • 16 сентября 2011, 21:37
А кто то ее покупал? Ее же NXP нахаляву всем желающим слала.
0
Там же LPC1114, а тут аж LPC1343.))
0
Да все равно шлак. STM32 форева!
+1
Отладчик LPCExpresso — говнище полное. Работает только из под своей среды и только с камнями NXP. Линуксоиды же там вообще похоже лососнут тунца. Потому как виндовый драйвер только есть.
Да, ну, хватит уже этих STM vs LPC ;)
0
  • avatar
  • DVF
  • 16 сентября 2011, 22:30
Слали 1114 (в ней нет USB). А 1343 только покупать. В прочем те у кого есть экспресса 1114 могут просто распаять на отдельной платке 1343 и к экспрессе подключить.
0
Кстати, никто не в курсе, где можно разъёмчик такой мелкий раздобыть?
0
Та про разъем программатора? а почему был BLS не напаять на «стыке плат» и распилить плату как GS ман предлагает?
0
Ага и у нашего регионального поставщика уже нет ни LPCXpresso, ни LPC1343
остались из 13-тых только LPC1313FBD48 по 183 рубля :(
0
  • avatar
  • ZiB
  • 17 сентября 2011, 06:09
не стоит ихо оно того. 1313 это 1343 только без USB. что то ваши региональные офигевшие. Возьмите в Чип-НН лучше. И плата и контроллеры в наличие, цена вро-де без измененияй со времён моей покупки.
0
Я просто проанализировал возможности.
После работы с lpc1768, понял что на данный момент работать с lpc-шками я не буду :)
0
  • avatar
  • ZiB
  • 19 сентября 2011, 14:11
Шикарно вообще! Феникс зажигает!
0
angel5a
Собираем следующую схему (желающие, могут собрать сразу схему «посложнее», приведённую в аппноуте):
В предложенном аппноуте AN10986 нет схем «посложнее».
0
  • avatar
  • DVF
  • 16 октября 2011, 21:34
там она «схемотичная», вместо транзистора просто ключ указан (мол что хотите, то и ставьте). С юзер мануала склонирована вроде.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.