Спариваем CoIDE и российский Cortex M3

Микроконтроллеры серии 1986ВЕ9х производства ЗАО «ПКК Миландр» приятно удивляют своими характеристиками, но к сожалению поддерживаются только коммерческими средствами разработки! Уважающим старый добрый GCC посвящается!

Для начала разберемся, что необходимо для работы и вообще что есть что…
• GNU Tools ARM Embedded — набор программ, необходимых для компиляции и генерации выполняемого кода из исходных текстов. Включает в себя GDB (GNU Debugger) отладчик позволяющий выполнять пошаговую трассировку, отслеживать переменные и др.

• JTAG адаптер, например «Olimex arm-usb-ocd-h»

• GDB сервер – перенаправляет команды между GNU Debugger и JTAG адаптером, к примеру – OpenOCD.

• Среда разработки (IDE) которая рулит GDB сервером. Например – Eclipse или CodeBlocks.

На просторах нета можно найти массу примеров настройки связки Eclipse + GCC + GDB + OpenOCD, она работоспособна и для нашего чипа, за исключением загрузки кода во флэш-память. OpenOCD да и другие свободные GDB серверы не умеет прошивать наш камень.

На форуме производителя я встретил несколько обходных путей:
• Прошивка через UART, используя утилиту «1986BE1UARTWSD».
• Прошивка с помощью утилиты «milprog».
Возможно появились еще варианты и (или) они усовершенствовались, но к моменту моей «пляски с бубном» казались неудобными (чисто субъективное мнение, авторам утилит респект). В первом случае необходимо переключаться из режима загрузки в режим отладки, что делается снятием питания и конфигурацией соответствующий выводов. Второй вариант поддерживает только адаптеры Olimex и, насколько я понял, прошивает чип непосредственной выдачей команд через JTAG. К примеру, OpenOCD и Keil сначала загружают небольшую программу в оперативную память чипа, которая принимает через JTAG прошивку небольшими пакетами и программирует флэш-память «изнутри». Такой метод более стабилен.

CoIDE
Сходу настроить связку вышеприведенных программ тяжело даже бывалому, что уж говорить о начинающих. Идеальный выход — бесплатная среда CoIDE, включающая в себя все необходимое для быстрого старта.
CoIDE также не поддерживает прошивку нашего чипа, но заглянув в каталог «CoIDE\flash» я обнаружил папку «source», где есть пример для написания своего загрузчика. «Заполнил» функции стирания, записи и структуру описывающую память нашего процессора. (Исходник во вложении).

В итоге получился загрузчик «MDR.elf». Копируем его в папку «CoIDE\flash». Для проверки воспользуемся утилитой «Сoflash» (CoIDE\bin\coflash.exе). Выбираем Device > ARM > M3, в окне «Flash Driver» добавляем наш загрузчик «MDR.elf». Переходим к вкладке «Command» и выбираем нужное действие. Проверено с адаптерами «Colink» и «Olimex arm-usb-ocd-h» на частоте 500kHz.

Проект в CoIDE.
Создаем в CoIDE проект Menu > Project > New project. Вводим имя проекта и жмем «Next». (не рекомендую создавать проект в папке по умолчанию, объясню позже)
1

В открывшейся форме выбираем «Chip», жмем «Next». Затем ARM > Cortex-M3 > M3 и нажимаем «Finish». В следующей форме добавляем к проекту «start_up_code» и «CMSIS core».

2

В настройках проекта Menu > View > Configuration, выбираем вкладку Link и прописываем параметры памяти нашего чипа: 128кБ флэш-памяти, 32кБ оперативной памяти.
3

Во вкладке «Dedugger» выбираем адаптер, скорость, а во вкладке «Download» наш алгоритм прошивки, для чего жмем кнопку «Add» и указываем на наш файл «CoIDE\flash\MDR.elf».

В модуле «main.c» пишем программу:

int main(void)
{
    volatile int i = 0;
    while(1)
    {
         i++;
    }
} 

Компилируем и пробуем прошить чип чипа из среды (Menu > Flash > Program download).
Смотрим в консоль и видим: Erase: Done; Program: Done; Verify: Done;
Иначе, там же в консоли, проверяем путь к драйверу --driver= C:/Job/flash/mdr.elf, а должен быть – C:/Job/CoIDE/flash/mdr.elf. Ошибка возникает при создании проекта в папке по умолчанию (workspace), это косяк CoIDE.

Отладка.
Запускаем отладку, нажимая на значок «StartDebug». Ждем запуска. Смотрим в консоль и видим, что программа стартует с адреса 0x000000a6, а ведь память программ начинается с 0x08000000.

Идем в папку «CoIDE\bin». Смотрим «start_gdbserver.bat», откуда узнаем, что при запуске gdbserver-а, ему передаются параметры о чипе «Device=M3» Ищем в папке «CoIDE\config\devices\ARM» файл с именем «M3.xml». В нем для флэш установлены значения: addr=«0x00000000» size=«0x00002000», теперь понятно, почему отладчик решил начать с 0x000000a6. Вбиваем параметры нашего чипа и алгоритм прошивки «STM32F10x_LD_32.elf», установленным по умолчанию, заменяем нашим «MDR.elf».
Пробуем. Отладка запустилась, процессор остановился на функции main!
4

Но это еще не все, оказалось CoIDE генерирует файл «M3.xml» при каждом запуске проекта.
Самый простой выход — подготовить наш «M3.xml» и подменять его перед каждой компиляцией проекта. Для этого создаем папку «CoIDE\~CoIDE_patch\mdr», куда помещаем отредактированный «M3.xml» и «mdr.bat» со следующим содержимым:
«COPY /Y ..\..\..\~CoIDE_patch\mdr\M3.xml ..\..\..\config\devices\ARM\M3.xml».
В настройках проекта во вкладке «User», добавляем запуск нашего батника, перед каждой компиляцией.
5

В заключение скажу, что данный способ подмены файла не очень красив, но зато прост в исполнении. Таким способом можно запустить отладку на любом другом кортексе не поддерживающимся в CoIDE. Пробовал STM32F2 загрузчик брал от STM32F4.

На момент «танцев с бубном» актуальными были версии GNU_Tools_ARM_Embedded_4.7_2013q1 и CoIDE v.1.7.0.
Проверил с CoIDE v.1.7.5 — работает.

В приложении имеется пример проекта «mdr_template», а так же папка ~CoIDE_patch со всем необходимым и исходниками загрузчика «MDR.elf»

  • +13
  • 27 ноября 2013, 13:19
  • Direct
  • 2
Файлы в топике: ~CoIDE_patch.zip, mdr_template.zip

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

RSS свернуть / развернуть
Зачёт!
Я бы ещё кучу времени убил бы на это.
Тоже пытался настроить эту среду под отечественный мк.
0
Приятно, что статья Вам полезна!
Пришлось ещё помучаться с отображением периферии в отладчике. Там похожий подход. Если интересно напишу продолжение?!
0
Если интересно напишу продолжение?!
Пиши конечно.
+2
Перенес статью в спецблог по кортексам, если будете править, то смотрите чтобы она обратно в ваш личный не улетела.
0
Хорошо, спасибо.
Скажите, плиз, я все правильно оформил для участия в конкурсе? Всё же это моя первая статья.
Понимаю, что с такой «узкой» темой шансов мало… вдруг понравится… ещё напишу.
0
Да, все в порядке.
0
можно создать конфиг mdr32f9x.xml
и выбирать ARM > Cortex-M3 > mdr32f9x
а уже там заменить на MDR.elf
0
Полноценно, прикрутить камень к CoIDE не получилось… новый конфиг не отображается в среде.
Курил инфу о том как прикручиваются новые камни add new chip, но так и не получилось. Сильно заморачиваться не стал, время поджимало. Если кто сможет или уже смог, пожалуйста отпишитесь.
0
кстати, советую сделать название семейства mdr32f9x, ведь у миландра есть и другие кортексы, на ядре м1
0
У миландра не м1 а м0 с 24бит дельтасигма ацп, для них тоже собираюсь делать плату.
0
1986ве1т и 1986ве3т на каком ядре?
у 1901вц1т какое процессорное ядро?

а 1986ве21у сильно заточен под одно применение…
0
1901вц1т 2 разных ядра, 16 битный дсп аналог TMS320C54 и 32 битный RISC и судя по 1.25
DMIPS/MHz (Dhrystone 2.1) это тоже какойто кортекс. Этим двуядерником не интересовался особо.

Cortex-M1 используется вроде как для FPGA а миландр получается использует их в железе, я это не знал 0-о.
Вообще я смотрю только то что в пластике, керамика это очень дорого.

1986ве21у да заточен под одно применение, но это ведь не 1 устройства а целый класс специальных устройств где этот камень будет идеальным решением.
0
Ещё есть м4 вроде но он для вояк
0
Во что сегодня у миландра ещё увидел milandr.ru/index.php?mact=Products,cntnt01,details,0&cntnt01productid=270&cntnt01returnid=68
0
аха
с названием вообще не парились )
0
BGA-576 это уже не металлокерамика а уже ближе к нам, интересна какая цена будет у такого набора…
0
ближе к нам
имел ввиду что в гражданском применении
0
… а как там у миландра с даташитами?,… я как-то там лазил — ничего не нашел
0
Даташиты на русском, хорошо написаны, есть даже ерраты на камни.
Вот например кортекс м3 который обсуждается здесь, вот его пдф лежит тут milandr.ru/index.php?mact=Products,cntnt01,details,0&cntnt01productid=57&cntnt01returnid=68 а конкретно вот milandr.ru/uploads/Products/product_80/spec_seriya_1986BE9x.pdf
0
А какова цена МК на данный момент? Не могу найти его в интернет-магазинах.
0
В 2012 году брал по 165р.
0
40+грн. и чем оно лучше ctm32f103rb?
не курил эти ваши русские армы, потому и спрашиваю.
0
Объясняется просто.
Допустим появился в Украине UARM32U8603, он точно такой-же как и всем известный STM32F103.
Его делали в какой-то не очень известной Украинской компании, где работают граждане твоей страны.
Но он стоит подороже и документации/примеров практически 0… Что вы выберете?
Я бы выбрал — поддержать своих.

Разумеется это мнение, которое может быть также непонятным как и «Не понимаю зачем брать никому неизвестное говно, своего производства»

Вообще, меня сейчас больше привлекает миландровский кортекс м0 который имеет на борту 24бит дельта сигма ацп, есть у ST такой мк за нормальную цену(STM32F3 вроде имеют до 16бит ацп)?
0
я ничуть не патриот. я выбираю то, что мне удобнее/дешевле/привычнее.
я еще в 90-е принял на себя «делаем для себя, потому патриотизм здесь неуместен»
0
и УПД, есличто, я предпочитаю ездить совсем-совсем НЕ на наших дейву-шевроле…
0
Я помню как-то выбирал авто из автоваза, пригляделся на ладу-гранту, но в тот момент я работал сборщиком планшетов в одной конторе. И я прекрасно видел, что всем кроме меня было Абсолютно ПО*УЙ на то что этот планшет мог купить родственник/друг. Тогда мне на этот вопрос отвечали так — «Я своих предупредил».
Вместо лады купил авто от рено(хоть их тоже здесь собирают).

Банальный пример на бывшей работе, пришёл китайский планшет, в него нужно вставить оперативку.
Снимаем крышку, везде всё проклеено, провода не болтаются, 8 болтов на материнке, не люфтит, СУПЕР…
Старший смены — Отрывайте весь скотч на*уй и термопрокладку под процы можно не возвращать, закручивать мать на 3 болта.
Работнечки(друганы) — да всё как обычно сделаем, и домой по бабам Ха.

Разумеется в стране где народ сам себе делает говно, ничего не получится.
Но есть некоторый нормальный товар который всётаки можно рекомендовать.

Отом что за контора без коментов — уж извеняйте но новая тачка и жена мне дороже.
0
Но он стоит подороже и документации/примеров практически 0… Что вы выберете?
я выберу что дешевле и с нормальными доками.
а что
Я бы выбрал — поддержать своих.
я понимаю, но… МАЯНИПАМАТЬ!!1111 зачем продолжать жрать кактус?
+1
если вы работаете на вояки прочих подобных — тогда да, по долгу службы приходится жрать и не такое. например, МСВС. но если добровольно…
0
Я бы понял поддержку своего разработчика, который там плат уникальные делает или процы свои, но если проц клон импортного «UARM32U8603, он точно такой-же как и всем известный STM32F103», то о какой поддержке речь? Единственный довод в пользу своего будет лишь сертификация какая-нить, без которой заказа не видать.

ЗЫ камень не в огород Миландра, а в огород поддержки «вітчізняного виробника» не глядя на этого «виробника».
0
Не понимаю Вашего объяснения! Вас спросили, чем он лучше STM, а Вы пишите, типа, «да все — полное говно»…
стоит подороже и документации/примеров практически 0… Что вы выберете?
Вас рекламу попросили сделать, а Вы вообще, как-будто оправдываетесь патриотизмом…

Вполне ведь можно отметить:
Во-первых, это МК с характеристиками на уровне конкурентов (производительность, периферия, корпус...) и по сравнимой цене. Этого уже вполне достаточно чтобы обычному радиолюбителю рассматривать его как будущую покупку на равне с другими мк. Имеет и доступные средств разработки/отладки, ибо основан на весьма распространенной архитектуре (и является аналогом stm32f103), есть JTAG… Бонус — русскоязычная документация и поддержка.
Во-вторых, есть возможность заказать аналогичный вариант с различной степенью стойкости к внешним воздействиям (что имеет немалое значение для промышленных и военных применений — есть ведь у людей и профессиональный интерес).

Ну и что немаловажно, это просто весьма интересный образец для изучения. Да хотя бы просто взять поиграться было бы уже интересно.
Вот купить ангстремовский мк в dip16 корпусе с весьма скромными характеристиками, почти без стандартной периферии, без распространенных интерфейсов, с неизвестными мне средствами разработки/отладки, и почти за 300р мне совсем не хочется, а вот этот, учитывая выше написанное и если бы увидел в магазине, за 160р — вполне!!!
0
Я вообщето сам себе разработчик и если-бы они меня просили бы рекламировать, у меня были бы деньги, и я бы не искал деньги на производство плат.
Я В АФИГЕ…
Я отвечал в том сообщении на конкретный вопрос. Я не буду постоянно писать одно и тоже в каждом сообщении.

И цена кстати цена не 160 а 165, или вам это сказал недавно отдел маркетинга?
0
Я вообщето сам себе разработчик и если-бы они меня просили бы рекламировать
Здесь Вы меня не так поняли, видимо… Я имел в виду то, что Вас человек спросил «что хорошего в этом мк», то есть как бы, попросил образно рекламу сделать — кратко рассказать о положительных сторонах)
Про 160 это я так… на форуме читал про 165р
0
=) блин. не выспался значит я…
0
С текстом по середине согласен полностью.

Наверно от того что я не умею общатся с людми меня и не просят рекламировать «только хуже сделаю»
0
+документация на русском
+usb host
0
в интернет магазинах его ещё нет(а может уже где продают???), я его продаю за 185руб но только в качестве бонуса к плате ПМК19ПБ2В2.
0
ПМК19ПБ2В2 — весьма интересная плата. Отправляете почтой?
0
Да отправляю почтой. В субботу вечером будет большое пополнение магазина, думаю найдётся чтонибудь интересное, ато платить за доставку 1 фиг одно и тоже.
0
Спасибо большое за статью. Лично для меня оказалась крайне полезной. Несмотря на то, что новых комментариев уже давно нет, хотелось бы внести и свои пять копеек. А точнее описать небольшую проблему, с которой столкнулся, и соответственно её решение. Может кому будет полезно. В общем обнаружилось, что после запуска контроллера под отладчиком не настраивается ни один периферийный модуль. Используемый отладчик — ST-LINK/V2. Оказалось, что бит PCLK_EN[4](RST_CLK) в регистре MDR_RST_CLK->PER_CLOCK при старте сброшен. Этот бит отвечает за тактирование интерфейса настройки тактовых частот (имеется соответствующая тема на форуме Миландра forum.milandr.ru/viewtopic.php?f=33&t=2187). При запуске контроллера бит выставляется в 1. Сбрасывается бит, как выяснилось, при загрузке программы через отладчик. В функции FlashInit в файле FlashAlgoFncs.c из исходников загрузчика «MDR.elf» присутствует строка «PER_CLOCK = EEPROM_CNTRL;», обнуляющая рассматриваемый бит. Решить проблему можно, например, следующим образом: добавить константу "#define RST_CLK (1<<4)", и заменить строку «PER_CLOCK = EEPROM_CNTRL;» на «PER_CLOCK = EEPROM_CNTRL | RST_CLK;».
Как я уже писал ранее, проблема возникла при работе с отладчиком ST-LINK/V2. Так как никто больше не отписывался о подобной проблеме, логично предположить, что ST-LINK/V2 не производит каких-то дополнительных перезагрузок контроллера, в отличие от ряда других отладчиков.
+2
А точнее описать небольшую проблему, с которой столкнулся, и соответственно её решение. Может кому будет полезно.
Такие вещи писать никогда не поздно.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.