Прошивка ARM Cortex M3 на примере STM32 и LPC1300

Готовую программу надо каким-либо образом запихать в контроллер. Для этого существует множество способов.

JTAG/SWD адаптер
Так как часто для отладки под ARM используется JTAG, то этот метод получается наверное самым популярным. Для этой цели используется какой-либо адаптер. Например я использую CoLinkEX так что показывать буду на его примере. Там все просто — подключаешь адаптер к контроллеру стандартным SWD или JTAG шлейфом. Через линии NRST/TDI/TDO/TCK/TMS для JTAG или через SWO/SWOCLK/SWDIO/NRST для SWD режима. На адаптере моей верси CoLinkEX оба эти разьема выведены на одну колодку, так что получается как бы сразу и JTAG и SWD соединение. А там какое надо такое и выбираешь. Особой разницы в отладке/прошивке между ними нет.

И прошиваешь либо из среды Keil.

Либо используя утилитку CoFlash oт CooCox.com

Выбираем тип контроллера, размер памяти.

А дальше надо только указать бинарный или Hex файл и нажать прошивку.

Чтобы Keil сгенерировал hex файл нужно выставить галочку в опциях проекта.

А чтобы получить bin файл прогнать выходной axf файл через специальную утилитку fromelf входящую в состав Keil. Проще всего вписать это сразу в постобработку:

Формат там такой:

fromelf --bin --output .\имя_будущего_файла.bin .\имя_создаваемого_файла.axf

Ну или, если выходные файлы создаются в какой-либо подпапке, то путь будет включать и эту подпапку

Первичный Bootloader
Если нет JTAG/SWD адаптера, то не беда. Достаточно иметь переходник USB-UART или COM-UART так как почти все ARM контроллеры содержат в памяти аппаратно встроенный бутлоадер, позволяющий накатить прошивку. Главное следить за тем, чтобы напряжение на выходе с адаптера совпадало с напряжением питания контроллера, а то можно пожечь входы (FTDI можно запитать от 3.3 вольт. А для работы с RS232 использвоать не MAX232, а MAX3232 — то же самое, но на 3.3 вольта). Я в качестве USB-UART использую свою демоплату Pinboard с джампером питания выставленным на 3.3 вольта. Питание беру с той же платы.

Вход Boot_0 выставыляю в 1, вход Boot_1 выставляю в 0. Набрасываю на RX1 и TX1 контроллера STM32F103C8 проводочки от RX-TX микрохсемы FTDI

Готово — можно шить. Для прошивки в STM32 используется программка Flash Loader Demonstrator v2.2.0 от STM запускаем ее:

Настраиваем порт, жмем Next

Она сразу показывает, что есть контроллер.

Тут можно посмотреть какие страницы флеша нам доступны на запись. Жмем Next

Выбираем какую операцию будем делать. Для прошивки надо выбрать Download и не забыть галочку Стереть чип.

Жмем Next и пошел процесс прошивки-проверки

Для LPC от NXP используется другая утилитка, зовется она Flash Magic — те же яйца, вид сбоку. Разве что может быть для входа в загрузчик надо другие выводы коротить. Это надо в User Manual на LPC уточнять уже.

Mass Storage USB Bootloader
Кроме того, у LPC1343 (у других LPC не встречал) есть одна прикольня фича. Там встроенный загрузчик может работать и по USB. Для этого надо собрать следующую схему:

Еще нужно вывод PIO001 подтянуть резистором на 10кОм к 3.3 вольтам питания и вывести на джампер, который бы его коротил в землю. Это будет условия входа в бутлоадер. После чего замыкается джампер входа в бут и девайс втыкается в USB. Винда его быстро определяет как сьемный диск объемом в 32Кб, на котором лежит файл firmware.bin если его скопировать — то мы получим юзерскую прошивку, что была там ранее. Это если не включена защита.

В противном случае мы, наверное, считаем мусор. А если удалить файл firmware.bin и на ее место записать файл с бинариком новой прошивки, то он вольется во флеш. Усе, не надо больше ничего! Красота! Правда в линухе оно работает не так как надо, дело в том, что линух пишет туда начиная со второго чтоль сектора и в результате Epic Fail. Впрочем, там же есть замечательная утилитка dd которая может скопировать на эту «флешку» файл в точности как надо, с нулевого адреса.

Вторичный бутлоадер
Поскольку я решил зарыться в STM32, то мне тоже захотелось такую вкусняшку как USB boot в режиме mass storage. Забросил идею Владимиру aka RtxOnAir и в результате он, за пару дней, выдал аналогичное решение для STM32F103.

Для загрузки с USB нужна следующая схема:

Транзистор подтягивает линию D+ к питанию и это означает, что на шине кто то появился, заставляя OС компа произвести определение устройства. Можно сделать и по колхозному. Подтянуть D+ через резистор напрямую. Но в этом случае для входа в бут придется передергивать шнур USB, иначе винда не захочет находить устройство. А так контроллер сам дернет вожжу.

Штука у Владимира получилась классная — автоматом определяет все типы кристаллов серии F103, позволяет выбрать любую ногу для передергивания USB шиной. Для входа во вторичный бутлоадер надо выводы Boot_0 и Boot_1 посадить на землю и нажать RESET ну или воткнуть девайс в USB если шина у нас не коммутируемая. Также можно выбирать работу от внутреннего генератора или от внешнего.

Вообще, инструкция явно говорит, что USB может работать только от внешнего кварцевого резонатора, т.к. частота внутреннего нестабильная и вообще кака. Не будем спорить с создателями камня, но у нас наш бутлоадер отлично завелся на HSI и при комнатной температуре отлично работал. Впрочем, стабильность тут явно не на высоте и надо быть осторожным.

Конфигурация бутлоадера
Для конфигурации нашего бута RtxOnAir написал небольшую утилитку:

Запустив которую можно выбрать нужные опции и нажав «Ок» получить сконфигурированный бутлоадер, который надо залить в МК любым вышеуказанным способом. Переключив джамперы Boot0 и Boot1 в режим нормальной работы Boot0=0 Boot1=1 и нажав сброс мы должны увидеть как в системе появится новый USB Mass Storage диск с емкостью равным размеру флеш памяти нашего кристалла за вычетом размеров бутлоадера.

Конфигурация проект под вторичный Bootloader
Поскольку этот бутлоадер распологается в области откуда обычно идет пользовательская прошивка, то в создаваемых под него проектах надо немного сконфигурировать опции линковки и компиляции, чтобы они начинались с области не занятой бутом. Для этого в Keil надо в опции проекта подправить начальный адрес:

Ну и прописать строку для формирования бинарика из axf файла.

После чего файлы прошивки можно банальным копированием загонять в STM32 и никакой программатор или адаптер больше не нужны совсем. Красота же!

Файло

128 thoughts on “Прошивка ARM Cortex M3 на примере STM32 и LPC1300”

    1. Смотря для чего. Если грубо, то bin — это сама откомпилированная программа в том виде, как она будет записана во флеш-память МК байт в байт, т.е. это непосредственные коды команд, данные в сыром виде и т.д. А hex формат — это тоже самое но в виде обычного текста + доп. информация. Т.е. если прошивку в hex формате залить в МК 1 в 1, то естественно работать ничего не будет.

  1. Ещё у STM32 есть фирменная система DFU (Device Firmware Upgrade) используя которую тоже можно шить по USB, предварительно прошив контроллер спец прошивкой от них. Там все довольно запутанно, но промучавшись пол дня все получилось.

    1. И работает это не только для 105 или 107 (в этих USB загрузчик с завода), но и для всех контроллеров серии с USB. Лично я прошил так 103 проц.

    2. В курсе. Но раз все равно нужен свой бутлоадер (я имею ввиду 103 серию), то зачем связываться с «запутанным» DFU, который к тому же требует использование утилиты-прошивальщика, раз можно сразу сделать весь процесс прошивки в виде удаления/копирования файла стандартными способами самой системы, что, согласитесь, всетаки на порядки проще.

    3. А не могли бы подсказать где эту прошивку саму взять и как ее сгенерировать?
      Я нашел только ту чем прошивать. boot от rtxonair так нормально и не заработал..

  2. А можно этот генератор перевести на английский??? А то у иеня винда не русская и показывает знаки вопроса.. Ну или хотябы сделать её в уникоде?? А то неудобно.. а попробовать хочется..

    1. Можно. В ближайших планах есть такое намерение.
      Но, у меня тоже английская винда без MUI… И все на русском везде отображается без проблем. Есть подозрение, что нужно выбрать русский язык в Control Panel->Regional and Language Options->Advanced->Language for non-Unicode programs.

      1. Это да.. Только после этого начинают не так работать и показывать буквы остальные програмы :) Вобщем подожду на английскую версию..

  3. Такая фича есть и в LPC214x. Тоже когда вставляешь кабель определяется как флешка и вся прошивка заключается в копировании бин файла. Только есть одно но. При прошивке через юарт хекс файлом надо сначала править критерий действительного пользовательского програмного кода. в LPC flash utility это есть. А как быть с бин файлом? Может кто то подскажет?
    LPC flash utility с бин файлами не может работать.

    1. > А как быть с бин файлом? Может кто то подскажет?
      > LPC flash utility с бин файлами не может работать.
      Ну во первых, если уж использовать LPC flash utility, то зачем генерить именно bin файлы?
      А во вторых, очевидно, нужно читать даташит в котором сказано где должна распологаться контрольная сумма и как ее считать. Я с LPC баловался совсем не много, но по моему и EWARM и Keil могут считать контрольную сумму и записывать ее куда надо.

      1. Прошивка в формате бин нужна для того чтоб залить её через ЮЗБ. Где должна распологаться контрольная сумма я знаю, а вот как заставить чтоб ИДЕ её генерировала и записывало в нужное место я так до сих пор и не нашёл. и посему использую LPC flash utility для правки контрольной суммы.

        rtxonair не могли бы вы вспомнить что надо делать чтоб иде генерировала и писала контрольную сумму куда надо? был бы очень благодарен

        1. А чем именно вы пользуетесь? Сейчас проверил в EWARM 5.4 — он автоматом всатвляет контрольную сумму в bin файл, если правильно указан тип МК в свойствах проекта. Потом нашел ту-же инфу на их сайте…

          1. Пользуюсь я IAR 5.2. Я ещё пока ЮЗБ загрузчик не прошил и пока ставлю чтоб ИДЕ генерировала файлы в хекс формате. И оно контрольную сумму не вставляет. Программа не работае ни в железе ни в протеусе. Хотя я выставляю тип мк в свойствах проекта LPC2142. После того как исправлю контрольную сумму LPC flash utility работает и в железе и в протеусе.

            rtxonair покажите пожалуйста где на их сайте рассказывается в какие выходные форматы оно вставляет контрольную сумму.

              1. Посмотрел на файлы конфигурации упомянутые в статье по приведенной мной ссылке. Насколько я понял, вото оно:
                //IElfTool command line for device specific post processing
                IElfToolPostProcess=—checksum __vector_table+0x1c:4,sum32:2;__vector_table-__vector_table+0x1B

                Или можно самомому воспользоваться утилитой ielftool.exe с приведенными параметрами —checksum __vector_table+0x1c:4,sum32:2;__vector_table-__vector_table+0x1B

                1. >А почему бы не перейти на EWARM 5.4?
                  Да я бы с радостью но пока я этой идеей в серйоз не задавалдся.
                  Но я думаю и версия 5.2 тоже это должна делать испавлять вектора.
                  За ссылку спасибо щас буду внимательно изучать.

                  rtxonair а можно с вами как то по мылу/асаьке/скайпу связаться?
                  В коментах тяжело общаться.

                2. rtxonair да вы правы. версия 5.4 сама правит контрольную сумму в зависчимости какой девайс выбран. Вот оно: This Tech Note does not apply to recent versions. There is no need for the label __vector_0x14 (or __vector_table_0x1c) as the EWARM get the information based on the slected chip in the General Options. Эта техническая нотация не применяется к недавним версиям. Нет нужды для метки __vector_0x14 (or __vector_table_0x1c) так как EWARM получает информацию по выбраному чипу в главных настройках.

                  Только я вот не совсем разобрался с этой строкой: IElfToolPostProcess=–checksum __vector_table+0×1c:4,sum32:2;__vector_table-__vector_table+0×1B
                  Я так понял эту строку нужно указавать линковщику.
                  настройки, категория линкер, вкладка экстра опшонс, ставим галочку использовать опции командной строки и туда эту строку писать?
                  Я правильно понял?

                3. Скачал я ИАР 5.4. Написал простенькую программу мигания светодиодом. Запускаю в протеус и результата 0. Программа не работает. Может я проект неправильно создаю, может я ещё что то не так делаю я не пойму.
                  Кто знает помогите пожалуйста.

                  1. Кхм, кхм, кхм… Даже не знаю с чего начать… :-)
                    Ну попробую:
                    1. Мы здесь ведем речь об МК на базе архитектуры Cortex-M3 а LPC2138 и LPC2142 это архитектура ARM7TDMI. Я, конечно, понимаю, что и то и то АРМ, но все таки архитектуры довольно таки различны…
                    2. Файлы генерятся нормальные и контрольная сумма генерится и ложится куда надо. Можешь убедиться сам что:
                    а) оба HEX файла одинаковые с точностью до байта кроме 1 строки в каждом файле, которые данными прошивки не являются (о них речь ниже).
                    б) генерируемый BIN файл с точностью до байта повторяет данные в HEX файлах.
                    в) сама контрольная сумма лежит по адресу 0x14 (4 байта). И она меняется, если изменять содержимое векторов прерываний, я проверил.
                    3. По видимому ты либо както не так генерируешь BIN файл либо шьешь его как-то не так или не туда (в друге адреса может быть).

                    Что касается различия по 1 строке в HEX Файлах, то я точно не понял, что это. Можешь сам поизучать вот это: http://ru.wikipedia.org/wiki/Intel_HEX но особой ясности это не даст. Надо искать более подробное описание.
                    В «правильном» HEX Файле присутствует запись :020000040000FA что соответствует «04 запись расширения линейного адреса»
                    В файле генерируемом EWARM’ом вместо нее есть запись :04000005000000C037, что соответствует «05 Start Linear Address Record.»
                    А что это точно означает — надо курить мануалы. Может это и не влияет в данном контексте ни на что.

                    1. rtxonair спасибо за ответ. По поводу первого пункта я понимаю что вопрос совсем не в тему(DI HALT вообще имеет полное право эти коменты удать) но самому мне трудно разобраться и поэтому просил помощи.
                      ->Оба HEX файла одинаковые с точностью до байта кроме 1 строки в каждом файле.
                      В этом я убедился, а вот когда сравнивал «исправленую прошивку IAR 5.3» и прошивку которая была сгенерирована IAR той же версии без исправлений, то там пол файла не совпадает.
                      Сравнивал в тотал командере сравнить по содержимому.

                    2. Если пол файла не совпадает, то это уже что-то не то…
                      Контрольная сумма занимает всего 4 байта. Вот они могут не совпадать… А остальное, должно оставаться без изменений!

    1. Но у ST был пример вторичного бута на базе которого была скреативлена эта прошивка. Можешь поискать его.

      1. Ага, посмотрю.
        Кстати, чтобы не вырезать окно (при верстке статьи) можно пользоваться комбинацией ALT+PRINTSCREEN

        1. Я в курсе, но у меня эта комбинация не работает. Т.к. принтскрин жмется с шифта. А в сочетании альт+шифт+принтскрин открывается консоль cmd

  4. Напишите подробнее о режиме работы bootloader-a:

    1. лоадер срабатывает при старте устройства и подключеном USB ?
    2. через какое время лоадер передает управление основной программе ?

    1. 1. При старте устройства, подключенном усб и хитро выставленных джамперах загрузки бута. В частности на Boot1 должен быть 0.
      2. Сам не отдаст. Надо перелкючить джампер boot1 с 0 на 1 и нажать сброс.

      1. 1. Вы сами себе противоречите, у Вас в статье написано что вторичный USB bootloader в STM32 располагается в основной flash (с адреса 0х800 0000), чтобы он стартовал надо boot0=0, boot1=x(неактивен)- согласно ref.manual, это и возвращает нас к тем же двум вопросам: как загрузчик определяет что надо включить режим USB storage (по наличии подключения к USB компа?), и сколько времени ждет чтобы передать управление основной прошивке ( с адреса 0х800 2000)

        1. >Для входа во вторичный бутлоадер надо выводы Boot_0 и Boot_1 посадить на землю и нажать RESET
          Наличие Boot0=0 условие для старта основной флеши. Наличие Boot1=0 условие того, что вторичный бутлоадер расположенный в основной флеши с ее начала перехватит управление, а не сразу отдаст его проге идущей с адреса 8002000.

          То что он в рефмануале не активен ничего не говорит. Это такой же вывод порта как и остальные. Просто мы туда завели опрос НАШЕГО бутлоадера. Мы могли бы по любому другому порту сделать точку входа в бутлоадер. Но раз там уже в даташите подписано BOOT1 и ничгео важного на этой ноге нет, то почему бы и не его?

          И где это я сам себе противоречу?

        2. > boot0=0, boot1=x(неактивен)- согласно ref.manual
          x != 0, х — это любое состояние
          Читаем мануал, раздел 2.4 Boot configuration
          Из таблички видно, что если в момент ресета на BOOT0 низкий уровень, то НЕ ЗАВИСИМО от того, какой уровень на BOOT1 МК грузится из внутренней флеш памяти.
          А вот если на BOOT1 — высокий уровень, то тогда уже анализируется BOOT1 чтобы определить, грузиться ли из внутреннего бутлоадера или из СРАМ…

          > как загрузчик определяет что надо включить режим USB storage
          Для определения необходимости входа в режим USB Mass Storage либо выполнения программы по адресу 0x08002000 используется нога BOOT1 (PB.2). BOOT0 при этом ОБЯЗАТЕЛЬНО должен быть с низким уровнем иначе см. выше.
          Таким образом, если на BOOT0 низкий уровень, после ресета всегда начинает выполняться вторичный бутлоадер. Вторичный бутлоадер первым делом проверяет уровень на ноге BOOT1. Если он высокий — то начинается выполнение программы по адресу 0x08002000. Если низкий, то включается режим USB Mass Storage. Все, никаких задержек нет. Наличие подключения по USB никак не влияет.

          Так понятнее?

          1. Если я правильно понимаю, то к ножке BOOT1 параллельно джамперу я могу повесить свою кнопку которая будет просаживать BOOT1 на ноль при нажатии. Если она будет нажиматься через како-то маленькое время после подачи питания (когда этот BOOT1 джампером подтянут к питанию), то я могу использовать эту кнопку на свое усмотрение, сэкономив порт? Верно?

            1. Если на ней есть вывод порта, то после инициализации ты можешь перепрограммировать эту ногу как тебе угодно и юзать без ограничений.

          2. Владимир, у меня есть изделие на базе процессора STM32F103RET6, где активация ЮСБ-порта производится плюсовым сигналом на пине РС9 (используется эммитерный повторитель), а в вашем случае надо наоборот — активация ЮСБ минусовым сигналом. Также в этом изделии есть кнопка, по нажатию которой подается минус на пин РА0. Буду вам очень признательным, если вы «сгенерите» для меня загрузчик с HSE=8MHz и вышеуказанными «коррекциями», касательно логики активации ЮСБ (подача плюса на РС9) и «условием» входа в загрузочную область (ВООТ0=0, РА0=0).
            Могу рассмотреть коммерческий вариант получения исходного кода для микропроцессора (сама десктоповская прога как-бы и не нужна), в которой можно будет разобраться и своими силами подправить условия активации ЮСБ и «точки» входа в загрузочную область. Спасибо.

  5. Здравствуйте. Вопрос от полного чайника но надеюсь что ответите. Вы пишете в начале статьи » использую CoLinkEX так что показывать буду на его примере. Там все просто — подключаешь адаптер к контроллеру и прошиваешь» — там на этом адаптере микросхема контроллера напаяна, как же можно подключить другие? Тоесть для каждой микросхемы контроллера нужно паять такую плату?

    1. Нет конечно. Та микросхема что на адаптере это управляющий контроллер самого ColinkEx а он подключается шлейфом к целевой плате на которой стоит прошиваемый контроллер.

  6. Добрый день, Dihalt !

    Dihalt, восстанови мне доступ на форум ! Старый пароль забыл, процедура смены пароля поменяла доступ но на форум хода нет. мой старый ник ciscobsci.
    Спасибо

    1. Насколько знаю, уже не рассылают. Слоны кончились. Но я себе парочку урвал. Да и у нас на форуме темка про этот кит лежит. Народ уже затарился :)

    1. Раздавал. Кто подсуетился раньше тот уже заказал и получил. Ныне халява кончилась :( всем новым отписываются, мол что усе…

      Но вообще такие акции последнее время постоянно. Не так давно TI раздавал нахаляву свои девборды

  7. На прошлой неделе получил STM32 Discovery Kit от EBV Elektronik и STMicroelectronics.
    Сижу разбираюсь. В документации делают упор на наличие и преимущества bit-banding. Однако я не нашел определения адресов битов в области bit-banding, есть только адреса регистров и бит маски…
    Я плохо искал или надо самому пересчитывать адреса тех битов которые нужны? Пересчет конечно элементарен, но все же, такие объемные библиотеки неужели там этого нет. Нашел только это:
    #define PERIPH_BB_BASE ((uint32_t)0x42000000)
    #define SRAM_BB_BASE ((uint32_t)0x22000000)
    И еще: есть ли еще необходимость использовать bit-banding, кроме случаев когда нельзя читать регистр при модификации (например, когда это может сбросить флаг)?
    не считая выигрыша в памяти программ и скорости работы с регистрами….

    1. Сделай макрос пересчета и все. Базовые смещения у тебя уже есть. А все адреса в библиотеку никто бы и не стал совать Иначе бы пришлось вписывать ВСЕ адреса заново.

      Насчет флагов не уверен. Надо проверить. МОжет и снимется. А вообще это для скорости. Хотя у того же STM довольно работать и без битбандинга. Но раз есть, чего бы не юзать?

  8. Блин, ничего не получается с загрузчиком. Использую контролеер STM32F100RB. Подключил Boot0 к +3,3в. Подключил переходник RS232-UART. Переходник работает, а вот программа Flash Loader Demonstrator выдает ошибку. Подсажите, в чем причина?

  9. Вопрос:
    При зашитом вторичном буте можно заливать свою прошивку адаптером по JTAG или SWD? или только копированием?

    1. Можно, но бут ты вынесешь. Впрочем, если указать прошивальщику ограничения модификации адресов, то может и нет.

  10. Привет DI, в AVR одна из граблей, это разделение памяти на ОЗУ, ФЛЕШ и ЕЕПРОМ.(адресация к ней), (по крайней мере в С :), можно поподробнее осветить эту тему для ARM’ов?

    Ещё вопрос. Я так понимаю, у тебя в магазине есть программатор для АРМ в отдельности. Ты не думал создать аналог Pinboard, но только для АРМ? Лично мои хотелки: совместимый со средой IAR EWARM,на борту графический дисплей, НЕ ЗНАЮ ПОКА- ЧТО НИБУДЬ, ЧТО НУЖНО ДЛЯ СОВМЕСТИМОСТИ ПО USB, и конечно личный автограф на память :-)
    Если тебе это интересно,напиши.

    1. А на арме нет разделения на озу флеш и еепром. Т.к. еепрома там нет, флеш и озу находятся в едином адресном пространстве. Т.е. с одних адресов у нас флеш, с других озу. Исполняемый код можно перебросить в ОЗУ и выполнить там, что позволяет избежать задержек флеша.

      Думал, но пока даже не знаю что туда ставить. Графический дисплей, например. Какой? Они продаются либо в виде COG которую хер подключишь в домашних условиях, либо в виде готовых модулей, которая стоит уж больно дохера. От сотовых? Тут надо искать поставщика, чтобы смог подгонять мне их не по 1..10шт и не по 1000…5000шт, а хотя бы по сотне за раз. И опять же напрягаться по поводу поддержки и наличия сих дисплеев. Плюс проблемы с их подключением (шлейф и тыды). Сильно сомневаюсь, что тут у меня получется дешевле тех же китайцев. У них под арм барахло на любой вкус и кошелек.

      Ну и я не считаю ARM сильно перспективным для домашних разработок. Для профи однозначно да. Любителям поковыряться — хватит любой халявной/стартовой девборды (тот же stm32eval).

      А вот что то делать на них для решения своих домашних бытовых проблем… Ну не знаю. Я бы взял аврку. МОщи мне ее полюбому хватит. Монтаж проще, плату всегда можно будет развести по одному слою, масса инфы и досконально все разобрано.

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

  11. Подскажите пожалуйста-нашел в интернете среду xduino я так понял это типа arduino ide но под ARM -у меня вопрос как подключить stm32 discovery .Бился целый день но плата в системе видеться как накопитель а мне на до по ком порту виртульному чтоб через usb

  12. Нда такое впечатление что тут только место для мощных эмбедеров-почему нельзя упростить пользование платой-к примеру на ардуино куча проектов и там не заморачиваються с настройкой и инициализацией.Жаль что так относитесь к тем кто не может вникнуть в глубины арм

    1. Между ардуино и арм пропасть. AVR и ARM соврешенно разные архитектуры. Совершенно разная периферия. Нельзя вот так взять и скетч с ардуино перетащить на арм. Не будет он работать, придется ЗАНОВО ВСЕ переписывать. Или ждать когда это кто то сделает за вас.

      Полноценные среды вроде IAR или Keil поддерживают отладку внутрисхемно и так далее. Ползволяя влезть в мозги кристаллу и посмтреть ,что происходит внутри. А поделие аля ардуино в лучшем случае позволит лишь прошить.

      Кстати, тот же кейл позволяет тоже не заморачиваться с настройкой и инициализацией, давая в шаблоне проекта уже готовый к компиляции шаблон кода. А дальше уже родимый Си компилятор и пишем на Си. А архитектуру АРМа и его периферию один хрен придется изучать по даташитам. Не вдупляешь? Значит рано, поразбирайся с AVR там все попроще, а задачи он решает те же самые.

  13. Прочитал этот пост и коменты, но вопрос не отпал: как через STM Flash Loader — подконнектиться к STM32F103RBT6 ? что выставить в самой проге, какой из UART-ов использовать и как выставить BOOT1 и BOOT0. Вилами не тычьте, это мой второй в жизни ARM, а у первого все было уже настроено и работало до меня…

    Спасибо за понимание!

    1. Там же все написано:

      >Первичный Bootloader
      Если нет JTAG/SWD адаптера, то не беда. Достаточно иметь переходник USB-UART или COM-UART так как почти все ARM контроллеры содержат в памяти аппаратно встроенный бутлоадер, позволяющий накатить прошивку. Главное следить за тем, чтобы напряжение на выходе с адаптера совпадало с напряжением питания контроллера, а то можно пожечь входы (FTDI можно запитать от 3.3 вольт. А для работы с RS232 использвоать не MAX232, а MAX3232 — то же самое, но на 3.3 вольта). Я в качестве USB-UART использую свою демоплату Pinboard с джампером питания выставленным на 3.3 вольта. Питание беру с той же платы.

      Вход Boot_0 выставыляю в 1, вход Boot_1 выставляю в 0. Набрасываю на RX1 и TX1 контроллера STM32F103C8 проводочки от RX-TX микрохсемы FTDI

      1. Это я понимаю. Подключаюсь через шнурок USB->RS232 к микроконтроллеру, по средствам MAX2323, однако у КМ есть два UART-а. Подключаюсь к UART1 (PA9, PA10). На boot1 — подтыкаю gnd, на boot0 +3.3v. Далее захожу в программу STM Flash Loader, все по дефолту, кроме порта COM. Нажимаю Next и он не работает.

          1. Походу так. Но совершенно непонятно, что именно не так, толь usb-rs232 шнурок подводит (замыкаю Rx-Tx, что после, что до MAX-а все нармальу), других подозрений вродь нет, плата вот такая: http://cgi.ebay.com/STM32F103RBT6-ARM-Cortex-M3-mini-Development-Board-Code-/280615042737?pt=BI_Electrical_Equipment_Tools&hash=item4155f5beb1. Что может быть не так?

          2. Пораскинув мозгами, вспоминаю, что сразу после приобретения, пробовал шить его по JTAG, возможно затер bootloader. DI HALT, пожалуйста подскажите, где взять родной бут и как его вшить на место по JTAG (j-link/j-trace)?

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

  14. вопрос к rtxonair.
    когда я копирую прошивку поверх firmware.bin через far, она обновляется, а если через
    проводник или командой copy, то остаётся предыдущая. это как-то возможно поправить? хотел сделать заливку сразу через makefile, не получается ((
    вопрос второй, нельзя ли сделать возможность сконфигурировать произвольный пин вместо boot1? а то он на имеющейся плате жестко запаян, но есть кнопка в другом месте.

    1. У меня такая же проблема. Через Totol Comander не обновляется. Пришел на работут, тут у нас FAR обновилась прошивка, пришел домой опять фиг. Думал комп. Получается что FAR)), сегодня попробую дома FAR поставить. Как то странно? Может кто подскажет где косяк и как с ним быть?

  15. При попытки отладки программы в симуляторе Keil-а, выдает следующее:
    *** error 65: access violation at 0xFFFFFFF4 : no ‘write’ permission
    В чем может быть дело?

    1. Вообще в жтаге стандартизирован только протокол краевого сканирования, для которого он и был разработан. А всякие прошивалки отлаживалки это побочный эффект, приятный бонус. И у каждого МК он свой и часто закрытый.

      1. Откуда только Вы все это знаете)). Как же хочется поиграться с чем-нибудь подобным.
        Но речь ведь вот о чем: например c сайта usb.org можно скачать официальную спецификацию по этому интерфейсу. А есть что-нибудь такое JTAGовское? На их сайте я уже побывал и, увы, ничего не нашел (а может просто не разобрался??)

  16. Кажись где-то видел простой проектик с печаткой под STM8 …
    не могу найти. Голый совсем, драйвер хотел добавить. Ошибся ?

  17. Вопрос [b]rtxonair[/b] насчет тонкостей с загрузчиком:
    таблица прерываний должна лежать в бинарнике по адресу начала программы или по адресу начала флеша?
    как и откуда загрузчик настраивает стек?
    как он передает управление прерываниям программы? перехватывая оригинальные или переместив таблицу?
    пока все :)

  18. Не могу понять в чем дело. Шью при помощи UART в STM32F103 простую программу от DI, где перещекивается портА-3. В отладчике все работает, при записи через UART — successfull.
    В железе — на ноге полная тишина. На кварце — ничего. Скажите, где я туплю?

  19. Добрый день. подскажите: на плату припаял STM32F101V8, подключил MAX232(5вольтовый) ибо 3в ненашел, к ножкам RXD1,TXD1, выставил: «Вход Boot_0 выставыляю в 1, вход Boot_1 выставляю в 0.» (через резистор 1КОм)
    запускаю программка Flash Loader Demonstrator v2.2.0 от STM, и пишет что «типа не найден девайс»(

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

    1. Нет не нужно. А сам интерфейс то работает? на 3 вольта мах232 запускается весьма вяло. Ну и стоит поглядеть на порядок входа в 101й может отличается. Хотя не должен.

  20. Всем привет, у меня возникла проблема с работой контроллера STM32F100C4T6 точнее с его запуском. Спаял я значит новый программатор на FT232R(по схеме DiHalt’a) только добавил в нее LM1117 для напряжения 3.3V. Подключил STM32F100C4T6 к этому программатору по средствам UARTa, подал 3.3v на boot_0, а землю на boot1. Далее посредствам «Flash load DEMO» загрузил код формата .hex в контроллер. Код успешно был загружен и верифицирован. Далее хотел проверить работу, Boot_0 зацепил на землю Вот только он в контроллере не хочет исполняться. код я брал из учебного проекта DiHalt’a по ARM STM32F103 — архив keil_p1.zip, в проекте я только в оциях поменял тип контроллера на STM32F100C4T6 и добавил галочку для создания hex файла.

    Люди добрые ПОМОГИТЕ советом в чем может быть причина.

    1. Между 100 и 103 существенная разница. Поэтому код может не подойти. Перепиши пример конкретно под 100ку и тогда будет что то ясно.

      1. Всем привет. Спасибо Ди, что уделил минутку своего внимания. Вообщем пока я вышел из ситуации просто сняв внешний кварц от контроллера. И контроллер затактировал тогда от внутреннего и все норм(хотя до этого в настройках проекта keil я ставил частоту кварца 12МГц и на плате у меня тоже 12МГц). Буду теперь разбираться почему не хочет работать от внешнего кварца.

        Вообщем я понял, что я мал и глуп и не видал БОЛЬШИХ СРАЖЕНИЙ :)

        1. Да, там может тактовая система чуток различаться. Поэтому мой SystemInit для твоего проца не подойдет.

  21. Решил попробывать что то новое и купил
    STM32 STM32F103ZET6 development board + 3.2″Touch LCD (http://www.ebay.com/itm/190501591417)

    Купил за одно программатор Ulink2
    C платой китайцы прислали CD с примерами для:
    Keil uVision4
    IAR

    Поставил проги. Хочу попробывать залить другие примеры в плату. Долбаюсь несколько дней, не могу понять принцип как заливать прошивку. Мож есть где описание, ка настроить Keil для Ulink2

  22. Пробовал запустить вторичный лоадер на STM32F103VGT6. Утилитой создаю прошивку, заливаю через Flash Loader Demo успешно. При подключению к ПК выводится сообщение, что «Устройство USB не опознано». Пробовал и HSE, и HSI. Значения Boot0 и Boot1 пробовал разные, не работает. Даже не знаю что может быть.

  23. Не могу зашить свою дискавери через USB из Keil
    Программа компилируется. Нажимаю Flash -> Download
    Выкидывает сообщение No STLink detected
    Error: Flash Download failed – Target DLL has been cancelled
    помогите пожалуйста

  24. Добрый день! Можно ли получить исходники бутлоадера от Владимира RtxOnAir, чтобы переделать под собственные нужды? Спасибо.

    1. У меня их нет. Владимир исходники не открывал. Можете попробовать ему сами написать. В комменты, например.

    2. AlekseyK, вам удалось от Владимира получить исходники загрузчика для микропроцессора?
      А то мне также надо под себя «подкорректировать» загрузчик :-)
      А именно, условие актвиации ЮСБ (подача плюса на РС9), а также «условие» входа в загрузочную область (ВООТ0=0, РА0=0).

  25. Господа, помогите разобраться. Проблемы с прошивкой stm32f103vb. Шью ColinkExом, Coflash. Нажимаю, например, Erase, он мне отвечает «full chip erase, take a few seconds», потом спустя пару секунд красным «Flash driver function execute timeout» и усё. При чем, накануне все было нормально, шился, читался. Комп вырубил, а на след. утро увидел это сообщение. Что делать? Уже и драйвер и флешер перекатывал, и прошивку обновлял, ничего не помогает. Помогите, что делать??

  26. Подскажите в чем проблема. Запустил бут. Винда видет, что появился сторадж девайс. Размер frimware.bin соответствует. Настроил keil как в статье, задал другой адрес (сместил на 0х2000). Сконвертил hex в bin. С этим тоже все ОК. Скопировал с заменой файл firmware.bin, затем переключил джампер на boot1, но программа не запускается (программа простая, мигание светиком). Где может быть ошибка? Все настроенно по мануалу.

  27. Работающие примеры программ для платы STM32-P407 (Olimex).
    Это недорогая мощная плата с процессором STM32F407ZGT6 Cortex-M4 210DMIPS.
    1 пример — просто LCD. Реализованы функции закраски прямоугольника, вывод текста, консоль.
    2 пример — HID Joystick. Подключена библиотека STM32_USB-Host-Device_Lib_V2.1.0.

    В проектах настроена конфигурация Debug — для отладки в памяти (установлен макрос VECT_TAB_SRAM).

  28. Добрый вечер! ( Ё….. уже ночь )
    Вопрос такой.
    DIHALT Вы пользовали GCC для Cortex M3 ? Yagarto или WinArm?
    Ну или может знаете как это делается? ))))
    Я купил себе ( не знаю зачем ) ))) STM32L-Discovery.
    Купился на возможность прошивки через USB.
    Собственно интересует как организовать начальную инициализацию? А именно Startup файл.
    Можно конечно запустить Keil. Но……. мы не ищем легких путей ))

    Сам я пользую Programmers Notepad 2. Пишу по мере необходимости для AVR и MCS-51 ( обожаю последнее ) ))))
    Пробовал писать для MSP430……………прикольная штуковина.
    Понравились таймеры. Можно организовать таймер любой разрядности. Соответственно и ШИМ можно сделать какой хошь.
    Буду признателен если Вы ответите.

    Спасибо.

  29. Скажите пожалуйста, при прошивки STM32 через USB куда вешать ножку i/o, как ее нужно дергать и наверно изначально до прошивки по usb нужно запрогить камень чтоб он дергал ножкой?

    1. Туда, куда сконфигурируешь бутлоадерную прошивку в программе конфигураторе. До прошивки нужно накатить вторичный бутлоадер.

  30. Попробовал загрузчик, на простом коде работает. А вот код в котором используются прерывания, не работает. Чувствую что проблема в векторах прерываний для основной программы, а как их правильно настраивать ума не хватает. Направьте на путь истинный. Пробую Keil 4.72.

  31. Здравствуйте, когда первый рас заливаю свой проект через USB программа работает но если я его изменяю и заливаю еще раз программа узе не запускается. В чием может быт проблема?

  32. Очень интересная прошивка. Я про версию под stm32. Мне очень понравилась, несмотря на огрехи в коде.
    Решил попробовать её в деле. Залил на ARMka с контроллёром stm32f103c8t6 и обломился, определяет девайс как 900GB флешку и дальше глючит. Оно вообще работоспособное?

    Немного информации о внутренностях: какими библиотеками пользовались при её создании, какой компилятор использовался для сборки?

    1. Девятьсот гигов флеша — это не многовато ли для F103 контроллёра?
      Aug 25 18:09:41 hall kernel: [376036.194345] usb 1-3.4: Product: USBbtldr
      Aug 25 18:09:41 hall kernel: [376036.194348] usb 1-3.4: Manufacturer: rtxonair
      Aug 25 18:09:41 hall kernel: [376036.194351] usb 1-3.4: SerialNumber: 0
      Aug 25 18:09:41 hall kernel: [376036.194733] usb-storage 1-3.4:1.0: USB Mass Storage device detected
      Aug 25 18:09:41 hall kernel: [376036.196565] scsi44 : usb-storage 1-3.4:1.0
      Aug 25 18:09:42 hall kernel: [376037.196769] scsi 44:0:0:0: Direct-Access RTXONAIR USB BOOTLOADER 0.1 PQ: 0 ANSI: 2
      Aug 25 18:09:42 hall kernel: [376037.198614] sd 44:0:0:0: [sdf] 1929379841 512-byte logical blocks: (987 GB/920 GiB)
      Aug 25 18:09:42 hall kernel: [376037.202791] sd 44:0:0:0: Attached scsi generic sg6 type 0
      Aug 25 18:09:42 hall kernel: [376037.292282] usb 1-3.4: reset full-speed USB device number 101 using ehci-pci
      Aug 25 18:09:43 hall kernel: [376037.500230] usb 1-3.4: reset full-speed USB device number 101 using ehci-pci
      Aug 25 18:09:43 hall kernel: [376037.708310] usb 1-3.4: reset full-speed USB device number 101 using ehci-pci
      Aug 25 18:09:43 hall kernel: [376037.916214] usb 1-3.4: reset full-speed USB device number 101 using ehci-pci
      Aug 25 18:09:43 hall kernel: [376038.124284] usb 1-3.4: reset full-speed USB device number 101 using ehci-pci
      Aug 25 18:09:54 hall kernel: [376048.620052] usb 1-3.4: device not accepting address 101, error -110
      Aug 25 18:09:54 hall kernel: [376048.637394] usb 1-3.4: USB disconnect, device number 101
      Aug 25 18:09:54 hall kernel: [376048.644146] sd 44:0:0:0: [sdf] Write Protect is off
      Aug 25 18:09:54 hall kernel: [376048.644165] sd 44:0:0:0: [sdf] Mode Sense: 73 00 00 00
      Aug 25 18:09:54 hall kernel: [376048.644221] sd 44:0:0:0: [sdf] No Caching mode page found
      Aug 25 18:09:54 hall kernel: [376048.644230] sd 44:0:0:0: [sdf] Assuming drive cache: write through
      Aug 25 18:09:54 hall kernel: [376048.644701] sd 44:0:0:0: [sdf] Attached SCSI removable disk

  33. Привет, DI HALT!
    Есть у тебя разведенная схема для STM32F103RBT6? А то не получается у меня под такие ножки в программе дорожки развести, недавно просто заниматься этим стал. Заранее благодарен!

  34. Здравствуйте, Di Halt!

    Я попробовал залить вторичный бутлодер в чип STM32F103RBT8, но он работает как-то странно… Диск в системе появляется, но пишет — no media. Т.е. типа не вставлен. Что я мог сделать не так?

    С уважением,
    Александр.

    1. Не знаю, у меня таких проблем не было. А бут этот писал не я, вполне возможно он просто не определяется правильно в 7 винде.

      1. Прикольно… Подключил к телефону — работает! Подключил к компу — определяется, но не работает…
        Подключил другим кабелем — работает! Значит, будем использовать.
        Спасибо!

        Кстати, есть какие-то требования к моему коду, чтобы правильно все работало, в том числе прерывания?
        Я только начинаю разбираться с стм32 )

  35. Блин, это ооочень круто!!1

    Раньше я всегда делал выбор в пользу дополнительной микросхемы (cp2102, ft232), т.к. CDC/HID/MASS STORAGE и т.д. это круто, но прошивку бывает необходимо обновить без программатора. И ради этой возможности зачастую отказываешься от аппаратного USB.
    Кажется, этот бутлоадер все меняет) Спасибо, мужики! Все заработало с первого раза.

    Один только вопрос/просьба.
    МК определяется компьютером как диск под названием STM32F10XXX. Возможно ли расширить программу, генерирующую бинарник — что бы можно было еще и название диска задавать.
    Или я слишком обнаглел?
    Ну или хотя бы возможность выбрать что-то более нейтральное, типа UPDATING_DRIVE.

    1. Хотя, получилось сделать это напрямую:
      ————
      0x00001390 53 54 4d 33 32 46 31 30 58 58 58 28 00 00 00 00 STM32F10XXX(….
      ————
      Однако если выйти за скобку, все рушится =(
      Имя превращается просто в «Съемный диск», а на диске лежат странные файлы, а прошивка не работает. Ну да ладно, 11 произвольных символов — уже неплохо. Как минимум не будет видно, что в изделии стоит STM32.

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

  37. В mass storage изначально зачем-то прописан firmware.bin. Но это ладно. Проблема в том, что он не заменяется на мой *.bin
    Точнее, вроде как заменяется. Но если потом опять посмотреть, то опять там сидит firmware.bin.
    Пробовал на стационарном компе (Windows7-32) через Total commander, через проводник, через FAR.
    Также на ноуте (Windows8-32) через Total commander.

  38. Добрый день! Мужики, нужна помошч. Есть NXP LPC1765FET100, в даташите несколько схем подключения к усб. Возможно какая то из них дает такую же возможность подключения как флешки. помогите сообразить какая. Более всего похоже Fig 32. USB interface with soft-connect. Картинку прилепить не могу… ссылка на даташит http://www.nxp.com/documents/data_sheet/LPC1769_68_67_66_65_64_63.pdf страница 71

Добавить комментарий

Ваш e-mail не будет опубликован.

Перед отправкой формы:
Human test by Not Captcha