Во первых строках сего письма хочется сказать, что идея написать эту статью пришла из-за того, что волею судьбы мне пришлось работать с микроконтроллерами компании Миландр. Помимо того, что информации по сети не так много, она еще и достаточно разрознена. И все бы ничего - кто ищет, тот найдет. Но пришлось (за неимением ничего другого под рукой) отлаживать программы при помощи эмулятора от Olimex. Тут стало тяжелее и было решено хоть как-то систематизировать знания для таких же зеленых бедолаг, как я, которые, возможно, столкнутся с подобными проблемами.

  1. Подготовка среды разработки

    Хочется сказать, что у компании производителя есть свой форум и некая база знаний в которых можно найти достаточно много полезной информации. Покапавшись в этих "архивах" было принято решение проводить разработку в keil, так как, судя по "отзывам" в нее достаточно просто интегрировать Миландровские детища. Для изи-интеграции необходим software pack для Keil, найти его и инструкции по установке можно туц.

  2. Подтягивание драйверов

    Существует, написанный добрым человеком загрузчик UART – «1986BE1UARTWSD». Легко находится на просторах интернета в комплекте с дровами. Использовать его достаточно удобно и отказываться большого смысла нет. Для его корректной работы нужен драйвер.

    Будем использовать OpenOCD и, естественно, gcc-none-eabi-gdb.

    Для работы болгарина под OpenOCD нужно обновить драйвера. Поможет программа. Вкратце: Открыв программу «Zadig» в выпадающем списке нужно выбрать JTAG эмулятор и жмякнуть «Install Driver». Тоже самое необходимо провернуть для «Interface1».

  3. Создание первого проекта

    Система готова, можно приступать к работе. Создание hello worldпод 1986BE описывать не буду, хорошо описано туц. Так, собственно, и делаем.

    Настройка проекта в Keil (до пункта «Debug», так как использовать будем не очень-то нативный эмулятор) описана туц.

    После выполнения всех шагов, указанных в статьях выше, имеем готовый для прошивки hex файл.

  4. Прошивка флеши

    Прошьем флешку готовой программой через UART загрузчик на примере отладочной платы от LDM-SYSTEM LDM-HELPER-K1986BE1QI.

    Подключаем USB к порту ПК и разъему X1 на отладке (usb разъем один – ошибиться будет трудно).

    Открываем программу «1986WE1WSD». В левом нижнем углу указываем корректный COM-порт, В поле “baud rate” ставим классические 115200, чекбоксы «Erase», «Program», «Verify» выставляем в true. С помощью кнопки “Browse…” находим новоиспеченный hex-файл прошивки.

    Программа для прошивки флеши МК 1986ВЕ
    Программа для прошивки флеши МК 1986ВЕ

    Подготовили ПК. Теперь необходимо подготовить контроллер. В даташите написано о «загрузочном» положении переключателя. Для отладки LDM-HELPER-K1986BE1QI это устанавливается с помощью физической кнопки «LOAD» на плате.

    На плате зажимаем кнопку «LAOD» и, не отпуская ее, нажимаем кнопку «PWROFF». После чего отжимаем “LOAD”. Плата готова к загрузке через UART.

    В программе «1986WE1WSD» жмем «Start» и видим следующие сообщения:

    «Синхронизация…ОК!»

    «baud rate 115200 OK!»

    «boot load…OK!»

    «Chip erase done!»

    «Program XXXX byte done!»

    «Verify done!»

    Программа прошита в отладку. Запустится по ресету или можно нажать «RUN» в программе «1986WE1WSD».

  5. Подтягивание отладчика

    Начинается самое вкусное. Отладка. Если инфу по предыдущим пунктам найти не так сложно, разве что она немного разнесена по интернетам, то по подключению отладчика от OLIMEX я мало чего нашел.

    Для начала подключим ARM-USB-OCD-H к 1986BE. Тут выводы на каждой плате свои, но, опять же, на отладке LDM-HELPER-K1986BE1QI – это разъем X5. С другой стороны подключаем ARM-USB-OCD-H к ПК.

    Подключение
    Подключение

    Запитываем плату.

    Запускаем OpenOCD: заходим в командную строку вводим путь до установленной программы openOCD (обычно в распакованном архиве/bin/openocd.exe) и с помощью флагов –f указываем путь до конфигурационных файлов. Нам понадобится «архив/scripts\interface\olimex-arm-usb-ocd-h.cfg» и «архив/scripts\target\1986ве1т.cfg».

    Для того, чтобы хоть немного облегчить себе жизнь можно создать bat-ник для старта OpenOcd по типу

    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    :: Старт OpenOcd. Подключение отладочного интерфейса

    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

    :: Кодировка для норм понимания имени файла "1986ве1т.cfg"

    chcp 65001

    :: Путь до программы openOcd

    set OPEN_OCD_PATH="C:\Users\ASePetrov\Desktop\OpenOCD-OLIMEX-WINDOWS\openocd-0.9.0-rc1\bin\openocd.exe"

    :: Путь до используемого эмулятора (конф. openOcd)

    set INTERFACE_PATH="C:\Users\ASePetrov\Desktop\OpenOCD-OLIMEX-WINDOWS\openocd-0.9.0-rc1\scripts\interface\olimex-arm-usb-ocd-h.cfg"

    :: Путь до целевого камня (конф. openOcd)

    set TARGET_PATH="C:\Users\ASePetrov\Desktop\OpenOCD-OLIMEX-WINDOWS\openocd-0.9.0-rc1\scripts\target\1986ве1т.cfg"

    :: Стартуем!

    %OPEN_OCD_PATH% -f %INTERFACE_PATH% -f %TARGET_PATH%

    Видим примерно такое:

    Значит, что все хорошо и мы запустили OCD. Теперь подтягиваем отладчик.

    Снова открываем консоль и вводим:

    <PATH_GDB> <PATH_AXF>

    ,где <PATH_GDB> - путь до arm-none-eabi-gdb.exe,

    <PATH_AXF> - путь до исполняемого файла с выхода IDE Keil uVision (Обычно, в директории проекта/Objects/projName.axf)

    Результат примерно такой:

    Отлично, теперь можно выдавать команды для gdb.

    Сначала расскажем ему, куда смотреть:

    (gdb) target extended-remote localhost:3333

    “localhost:3333” – так как OpenOCD открывает telnet соединения, как ни удивительно, на локальной машине, на порту 3333.

    В консоли с gdb видим, что он подключился и, возможно, выдал некоторые отладочные, так сказать, сообщения:

    В консоли с openOCD также можно заметить новое подключение:

    Отлично, резетим проц:

    (gdb) monitor reset halt

    В итоге видим сообщения о том, что проц сброшен. Результат консоли gdb и openOCD, соответственно:

    Теперь можно загружать исполняемый файл:

    (gdb) load

    Вуаля! Загружены и готовы к работе! Ставим точку останова при входе в main()

    (gdb) b main

    И запускаем программу

    (gdb) c

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


  1. Mih-mih
    10.03.2022 12:29
    +1

    Почему бы не взять вместо Кейла няшный, быстрый и очень, очень удобный CodeBlocks, сделать там точно такие же настройки GDB+OpenJCD и спокойно отлаживаться прямо в редакторе? Olimex не подключал, но для J-Link там точно такие же действия.


    1. JozeAlehandro Автор
      10.03.2022 22:06

      Когда только приступил к работе с данным комплектом - первым делом чекнул инфу о том, где удобнее и какие инструменты юзать. Судя по форумам и почти оффициальной базе знаний понял, что Келич должен неплохо подойти. Грезы о том, что все супер легко встанет развеялись, пришлось разбираться, что, собсна, и послужило поводом для написания. Но с CodeBlocks обязательно попробую, спасибо)


  1. ripandtear
    10.03.2022 13:47
    +7

    Плотно и уже достаточно долго работаю с данным МК, довольно неплох. Освоены все интерфейсы, кроме специфических для авиа-применений (Изначально был выбран из-за наличия ethernet на борту), сам писал USB CDC драйвер, и портировал FreeRTOS вместе с FreeRTOS+TCP.

    Самый большой минус - отсутствие регистра указателя на таблицу векторов прерываний, т.е. из ОЗУ ПО не запустить, по факту работа происходит с тактами ожидания чтения из флэша - ядро эти такты простаивает (Там есть ускоритель чтения, но эффективен он только с линейными кусками кода, которые проще всего на ассемблере написать), а так же не функционирующий SysTick, который не заюзать для ОСРВ.

    Есть еще специфика работы DMA которое почему-то имеет доступ только ко второй половине ОЗУ (там 32кб и 16кб).

    В общем, все это преодолимо и работает в итоге нормально.

    Использую последние версии vs code со всякими плюшками, gcc arm, cmake, openocd + j-link.


    1. JozeAlehandro Автор
      10.03.2022 22:15

      Из минусов (он же, наверное и плюс) - это количество пунктов в errata))

      А вот насчет "т.е. из ОЗУ ПО не запустить" можно немного подробнее?


      1. ripandtear
        11.03.2022 10:06

        Я наверное изначально не очень понятно выразился - чисто технически здесь вы можете исполнять код из внешней памяти или из ОЗУ, в данном МК этот режим предполагается использовать только для перепрошивки flash, в случае с UART-загрузчиком.

        Для полноценной работы данный режим не предназначен, т.к. не будут функционировать прерывания - для этого нужно переносить таблицу векторов прерываний туда, откуда будет исполняться код (Естественно что начало такой памяти должно быть отображаемо на 0x00000000 - об этом обычно заботятся уже производители конкретных МК).


  1. punzik
    10.03.2022 14:01
    +2

    А что с Миландром, кто нибудь знает?


    1. le2
      10.03.2022 15:21
      +8

      В слове TSMC слишком много ошибок.


    1. mctMaks
      10.03.2022 17:12

      дополню список вопросов (может кто-нибудь работает с их производными и имеет информацию из первых рук):

      • почему сайт внезапно на англицком стал, если производитель отечественный?

      • на сайте МК найти не смог;

      • кто торгует ими или где посмотреть прай?

      • куда пропал Петя?


      1. JozeAlehandro Автор
        10.03.2022 22:19

        Насчет торгуют точно знаю, что LDM SYSTEMS


      1. Margel
        11.03.2022 08:50
        +2

        Получил письмо от Миландр, что примерно до конца марта остановлены продажи категории ОТК.


      1. Prometheus
        11.03.2022 14:01

        У миландра такая штука работает, он по ip определяет регион, если смог определить что вы из РФ - откроет русскоязычный сайт. Иначе - будет редирект на .com


        1. mctMaks
          11.03.2022 15:35

          странно как-то работает у них определитель. мегафон\ростелеком\мегалинк дают мне не российский ip? digikey/mouser вполне успешно определили что из России идет запрос к ним, а эти не смогли.

          edit: я себя по ip вычислил, внезапно я в Ростовской области) так что похоже не работает штука по определению региона пользователя


  1. Dark_Purple
    10.03.2022 19:26
    +2

    А что толку.. В этом сезоне более актуален будет К1810ВМ86 ))


  1. Lampadov
    11.03.2022 16:03

    Здравствуйте!

    От лица компании Миландр сообщаю, что на сайтах компании "Миландр" milandr.ru, support.milandr.ru, forum.milandr.ru проводятся технические работы, по завершении которых сайты milandr.ru и support.milandr.ru возобновят свою работу. Сроки возобновления работы русскоязычной версии сайта не определены, но мы прикладываем все усилия для оперативного решения данного вопроса. Сайт forum.milandr.ru временно работать не будет. 

    Все возникающие вопросы просим адресовать на данную электронную почту отдела технической поддержки компании Миландр support@milandr.ru. Обратите, пожалуйста, внимание, что по телефону техническая поддержка временно осуществляться не будет. Спасибо за понимание.