Во первых строках сего письма хочется сказать, что идея написать эту статью пришла из-за того, что волею судьбы мне пришлось работать с микроконтроллерами компании Миландр. Помимо того, что информации по сети не так много, она еще и достаточно разрознена. И все бы ничего — кто ищет, тот найдет. Но пришлось (за неимением ничего другого под рукой) отлаживать программы при помощи эмулятора от Olimex. Тут стало тяжелее и было решено хоть как-то систематизировать знания для таких же зеленых бедолаг, как я, которые, возможно, столкнутся с подобными проблемами.
- Подготовка среды разработки Хочется сказать, что у компании производителя есть свой форум и некая база знаний в которых можно найти достаточно много полезной информации. Покапавшись в этих «архивах» было принято решение проводить разработку в keil, так как, судя по «отзывам» в нее достаточно просто интегрировать Миландровские детища. Для изи-интеграции необходим software pack для Keil, найти его и инструкции по установке можно туц.
- Подтягивание драйверов Существует, написанный добрым человеком загрузчик UART – «1986BE1UARTWSD». Легко находится на просторах интернета в комплекте с дровами. Использовать его достаточно удобно и отказываться большого смысла нет. Для его корректной работы нужен драйвер. Будем использовать OpenOCD и, естественно, gcc-none-eabi-gdb. Для работы болгарина под OpenOCD нужно обновить драйвера. Поможет программа. Вкратце: Открыв программу «Zadig» в выпадающем списке нужно выбрать JTAG эмулятор и жмякнуть «Install Driver». Тоже самое необходимо провернуть для «Interface1».
- Создание первого проекта Система готова, можно приступать к работе. Создание hello worldпод 1986BE описывать не буду, хорошо описано туц. Так, собственно, и делаем. Настройка проекта в Keil (до пункта «Debug», так как использовать будем не очень-то нативный эмулятор) описана туц. После выполнения всех шагов, указанных в статьях выше, имеем готовый для прошивки hex файл.
- Прошивка флеши Прошьем флешку готовой программой через UART загрузчик на примере отладочной платы от LDM-SYSTEM LDM-HELPER-K1986BE1QI. Подключаем USB к порту ПК и разъему X1 на отладке (usb разъем один – ошибиться будет трудно). Открываем программу «1986WE1WSD». В левом нижнем углу указываем корректный COM-порт, В поле “baud rate” ставим классические 115200, чекбоксы «Erase», «Program», «Verify» выставляем в true. С помощью кнопки “Browse…” находим новоиспеченный hex-файл прошивки.
Подготовили ПК. Теперь необходимо подготовить контроллер. В даташите написано о «загрузочном» положении переключателя. Для отладки 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».
- Подтягивание отладчика Начинается самое вкусное. Отладка. Если инфу по предыдущим пунктам найти не так сложно, разве что она немного разнесена по интернетам, то по подключению отладчика от OLIMEX я мало чего нашел. Для начала подключим ARM-USB-OCD-H к 1986BE. Тут выводы на каждой плате свои, но, опять же, на отладке LDM-HELPER-K1986BE1QI – это разъем X5. С другой стороны подключаем ARM-USB-OCD-H к ПК.
Запитываем плату. Запускаем OpenOCD: заходим в командную строку вводим путь до установленной программы openOCD (обычно в распакованном архиве/bin/openocd.exe) и с помощью флагов –f указываем путь до конфигурационных файлов. Нам понадобится «архив/scriptsinterfaceolimex-arm-usb-ocd-h.cfg» и «архив/scriptstarget1986ве1т.cfg». Для того, чтобы хоть немного облегчить себе жизнь можно создать bat-ник для старта OpenOcd по типу . :: Старт OpenOcd. Подключение отладочного интерфейса . :: Кодировка для норм понимания имени файла «1986ве1т.cfg» chcp 65001 :: Путь до программы openOcd set OPEN_OCD_PATH=»C:UsersASePetrovDesktopOpenOCD-OLIMEX-WINDOWSopenocd-0.9.0-rc1binopenocd.exe» :: Путь до используемого эмулятора (конф. openOcd) set INTERFACE_PATH=»C:UsersASePetrovDesktopOpenOCD-OLIMEX-WINDOWSopenocd-0.9.0-rc1scriptsinterfaceolimex-arm-usb-ocd-h.cfg» :: Путь до целевого камня (конф. openOcd) set TARGET_PATH=»C:UsersASePetrovDesktopOpenOCD-OLIMEX-WINDOWSopenocd-0.9.0-rc1scriptstarget1986ве1т.cfg» :: Стартуем! %OPEN_OCD_PATH% -f %INTERFACE_PATH% -f %TARGET_PATH% Видим примерно такое:
Значит, что все хорошо и мы запустили OCD. Теперь подтягиваем отладчик. Снова открываем консоль и вводим: ,где — путь до arm-none-eabi-gdb.exe, — путь до исполняемого файла с выхода 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
Миландр. Урок 1. Обзор микроконтроллера К1986ВЕ92QI. Сравнение с аналогами от ST и NXP
Миландр | Урок #1 | Введение — создание проекта и прошивка
- Отладка
- C
- Программирование микроконтроллеров
Источник: habr.com
Программироваение микроконтроллеров 1986ВЕ1Т в Qt Creator
Хочу показать, как можно писать код и собирать hex-файлы для отечественных микроконтроллеров компании «Мидандр» в удобной среде Qt Creator. Обычно для этих средств используются другие среды разработки, но с появлением системы QBS все несколько поменялось.
Для того, чтобы все заработало, достаточно скачать среду и компилятор. Компилятор — GCC; среда, как сказано в заголовке — Qt Creator.
Скачивание необходимого
— Qt Creator можно скачать с официального сайта Qt и без проблем установить как в Windows, так и в Linux. Ставить можно куда угодно;
— Затем скачиваем GCC for ARM. Я брал ссылки отсюда. Распаковываем в удобное для вас место, желательно недалеко от корня диска;
— Скачиваем библиотеки CMSIS и SPL с сайта Миландра. Распаковываем куда угодно. Или можно взять шаблон, который я выложил в конце статьи здесь, и пользоваться библиотеками оттуда. Но когда вам захочется ковыряться дальше, то придется добавлять еще библиотечные файлы. ИХ можно найти на официальном сайте.
Все, больше нам ничего не понадобится.
Создание шаблона
Итак, после того, как вы установили и распаковали все необходимое, можно приступить к созданию проекта и написанию кода. Написанное здесь справедливо как для Windows, так и для Linux (сборка проекта тестировалась на Ubuntu).
— Открываем Qt Creator и создаем новый проект с системой сборки QBS. Назовем его, к примеру, «Habr».
Получаем простой Hello World. После чего из файла main.c удаляем все и оставляем пустой файл. Мы вернемся к нему чуть позднее.
— Открываем файл Habr.qbs и аналогично вычищаем оттуда все, оставляя пустоту. После чего пишем туда следующий код:
import qbs Project < name: «simple» Product < name: «micro» type: «hex» Group < name: «sources» files: [«main.c», «system_MDR32F9Qx.c», «startup_Cortex_M3.c»] fileTags: [‘c’] >Rule < inputs: [«c»] Artifact < fileTags: [‘obj’] filePath: input.fileName + ‘.o’ >prepare: < var args = []; args.push(«-mcpu=cortex-m3») args.push(«-mthumb») args.push(«-g») args.push(«-ffunction-sections») args.push(«-O0») args.push(«-Wall») args.push(«-Wunused») args.push(«-DM3») args.push(‘-c’); args.push(input.filePath); args.push(‘-o’); args.push(output.filePath); var compilerPath = «C:/4.9_2014q4/bin/arm-none-eabi-gcc.exe» var cmd = new Command(compilerPath, args); cmd.description = ‘compiling ‘ + input.fileName; cmd.highlight = ‘compiler’; cmd.silent = false; return cmd; >> Rule < multiplex: true inputs: [‘obj’] Artifact< fileTags:[‘elf’] filePath: project.name + ‘.elf’ >prepare: < var args = [] args.push(«-mcpu=cortex-m3») args.push(«-mthumb») args.push(«-g») args.push(«-nostartfiles») args.push(«-O0») args.push(«-Wl,—gc-sections») for(i in inputs[‘obj’]) args.push(inputs[«obj»][i].filePath); args.push(«-TC:/Source/Qt/ARM_Test_QBS/arm-gcc-link.ld») args.push(‘-o’); args.push(output.filePath); var compilerPath = «C:/4.9_2014q4/bin/arm-none-eabi-gcc.exe» var cmd = new Command(compilerPath,args); cmd.description = «linking»+project.name return cmd; >> Rule < inputs: [‘elf’] Artifact< fileTags:[‘hex’] filePath: project.name + ‘.hex’ >prepare: < var args = [] args.push(«-O») args.push(«ihex») args.push(input.filePath) args.push(output.filePath) var hexcreator = «C:/4.9_2014q4/bin/arm-none-eabi-objcopy.exe» var cmd = new Command(hexcreator,args); cmd.description = ‘create_hex’+project.name return cmd; >> > >
В этом коде поочередно вызываются компилятор, линковщик и создатель хекс файла со своими параметрами.
Обязательно! Пропишите в переменную CompilerPath путь до ваших компилятора, линковщика и gcc-objcopy.
После этого добавляем файлы для cmsis и spl, а также скрипт линкера в папку с исходниками. Должно получиться примерно так:
В файл main.c, который стоит и ждет, пока мы туда что-нибудь напишем, вставляем следующее:
#include «MDR32F9x.h» //Подключаем заголовочный файл с регистрами #include «system_MDR32F9Qx.h» //Подключаем файл с инициализацией периферии long check = 0; void InitPortLED(void)//Инициализация портов микроконтроллера < MDR_PORTD->FUNC <14|1<<13|1<<12|1<<11|1<<10); MDR_PORTD->PWR |= (0x155 RXTX <14|1<<13|1<<12|1<<11|1<<10); MDR_PORTD->OE |= (1 <<14|1<<13|1<<12|1<<11|1<<10); >int main() < SystemInit();//Системная функция, которая инициализирует тактовый генератор InitPortLED(); while(1)//Мигалка светодиодами < check++; if(check == 1000) MDR_PORTD->RXTX |= 1<<14|1<<10|1<<12;//vkl diod if(check == 4000) < check = 0; MDR_PORTD->RXTX <11|0<<13); >> >
Выбор портов обусловлен работой с отладочной платой Миландра.
После запускаем компиляцию и убеждаемся, что все скомпилировалось и мы стали обладателями hex файла.
Все прекрасно, теперь этот файл можно прошивать в контроллер и наслаждаться мигающими диодами.
Как и говорил, выкладываю шаблон, с исходниками.
На этом все, спасибо за внимание!
Источник: savepearlharbor.com
Миландр 1986ве1т примеры программ
Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет
Добавлено: Ср май 22, 2013 23:13:13
Вот чего не знаю, того не знаю.
Но было время, когда Миландр раздавали образцы этих МК бесплатно на пробу (ревизия 1 и 2). Может и на своём оборудовании штампуют.
_________________
Tais sa gueule et écoute un silence
Компания MEAN WELL производит широкий ряд импульсных AC/DC-преобразователей в кожухе индустриального назначения. Особого внимания заслуживают семейства LRS, HRP и UHP, которые выполнены в кожухе и подключаются к однофазным сетям переменного тока. Рассмотрим подбор оптимального и экономичного ИП на примере этих семейств с учетом особенностей эксплуатации, как наличие пыли, агрессивных веществ в атмосфере, надежность и качество электросети, температурные условия, возможные временные перегрузки и.т.д. Семейства LRS, HRP и UHP подходят для обеспечения питания промышленных систем автоматизации и управления, электроприводов, различного технологического оборудования и устройств
Добавлено: Чт май 23, 2013 10:54:31
balmer писал(а):
А это действительно российская разработка сделанная на заводе в России?
Думаю, так : разборка буржуйской, послойное стравливание, выявление топологии и . заказ изготовления в Китае с маркировкой русскими буквами. Если так делалось в сов. времена ( кроме последней операции ) , то почему это должно быть иначе теперь, когда разработчиков, знающих, что транзистор — это вовсе не маленький приемничек — осталось полтора человека. Из тех , что не уехали в ЮЭсЭй и не приспособились челночить барахло из того же Кетая.
А разработки на заводах никогда не делали, им передавалась документация, сделанная в НИИ ( ОКБ ) .
На многих доступных в России компонентах MORNSUN можно реализовать архитектуру распределенного питания для современных ПЛИС (FPGA), процессоров, цифровых сигнальных процессоров (DSP) и других аналогичных компонентов от шины питания до точки конечной нагрузки. Особая тема статьи – на что обращать внимание при выборе стабилизаторов напряжения PoL (Point of Load) для указанных компонентов.
Добавлено: Чт май 23, 2013 12:30:56
Jack_A, не будьте так категоричны. В советское время не делали послойных копий. Это доказано одним из пользователей Хабра — он выложил фотки двух старинных микропроцессоров со снятым корпусом: один забугорный, а второй — его советский аналог. Топология совершенно разная. Это говорит о том, что в СССР делали функциональные аналоги, а не полные копии.
Про Миландр конкретно не знаю, но слышал, что они просто чипы у себя корпусируют для жестких условий (керамика). Но и пластиковые они тоже выпускают.
Добавлено: Чт май 23, 2013 15:38:18
Если ядро АRM, то лицензируется. Дальше — работа в среде разработки. Дальше — сделать кристалл, у на это почти нигде нельзя, по современному тонкому техпроцессу, значит, в Китае или где-то там. Наконец, корпусируют, наверно, у нас, хоть в Томилино, хоть где. Насколько могу судить, результат невеселый.
Добавлено: Чт май 23, 2013 18:52:22
Цитата:
Если так делалось в сов. времена ( кроме последней операции ) , то почему это должно быть иначе теперь
Современный Cortex будет посложнее даже первых процов. Отреверсить вручную — нереально.
Меня удивляет другое — почему они упорно продолжают придумывать мозговыносящие названия, да еще и на кириллице?
_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Добавлено: Чт май 23, 2013 20:06:05
Меня удивляет другое — почему они упорно продолжают придумывать мозговыносящие названия, да еще и на кириллице?
А почему бы и нет.
Кстати, у Миландра есть ещё 1986ВЕ91Т. Тоже стОящий камень. Его бы в пластик да в мирное приборостроение пустить. Там нет военных интерфейсов (правда Ethernet там тоже отсутствует), но всё остальное отлажено.
_________________
Tais sa gueule et écoute un silence
Добавлено: Чт май 23, 2013 20:19:30
А вот ещё один русский МК-.MCp0411100101 Конечно, крутые перцы опять скажут про послойное копирование и прочие гадости о советской и русской электронике.
Добавлено: Чт май 23, 2013 20:33:54
Цитата:
MCp0411100101
Вообще, мне было бы интересно потыкать отечественный МК.
_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Добавлено: Чт май 23, 2013 20:57:40
Есть ещё серия DSP Мультикор с тактовыми частотами до 600 мГц, кажется, НЦ ЭЛВИС.
Наверное, тоже для спец применений. Промышленности нашей мало, что нужно,
серии ,наверняка, небольшие, соответственно цена высокая. Просто так в магазине не купишь.
Добавлено: Чт май 23, 2013 21:00:39
Вот в этом и проблема.
_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Добавлено: Чт май 23, 2013 21:28:51
А Китай «впереди планеты всей». И это не мудрено: у меня в руках китайский демоборд LangTiger 2.0 (ДЗС1768), он понавороченей своего брата от Keil — MCB1700, а самое главное — LangTiger в комплекте идет диск с документацией переведенной на китайский язык и с софтом (сломали и не постеснялись продать).
А родной язык для потребителя = большой толчок в усвоении нового.
Добавлено: Чт май 23, 2013 22:53:26
Цитата:
А родной язык для потребителя = большой толчок в усвоении нового.
Если только перевод нормальный, что случается редко.
_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Добавлено: Пт май 24, 2013 18:34:37
Jack_A писал(а):
А разработки на заводах никогда не делали, им передавалась документация, сделанная в НИИ ( ОКБ ) .
Завод заводу рознь. Вот я в свое время работал на заводе МЭП, с полным названием НПО ХХХХХХ, который имел в своем составе ОКБ и т.п. и передавал свои разработки на ЧИСТО заводы (без ОКБ) для серийного выпуска. А кое-что выпускал серийно сам. В Зеленограде тоже называли — завод Ангстрем, завод Микрон.
В свое время у нас была куча тракторных заводов, которые между делом разрабатывали и выпускали танки.
«Если на клетке со львом написано БУЙВОЛ — не верь глазам своим».
_________________
Человек — это звучит гордо, а обезьяна — объективно.
Добавлено: Пт май 24, 2013 19:01:37
ibiza11 писал(а):
В советское время не делали послойных копий. Это доказано одним из пользователей Хабра — он выложил фотки двух старинных микропроцессоров со снятым корпусом: один забугорный, а второй — его советский аналог.
. Допустим, в советское время в Зеленограде стоял станок на персональном фундаменте, на котором послойно сдирались ИМС. Травление — не катит. Поскольку скорость стравливания разных материалов — разная, да и процесс мало поддается регулированию.
Предположим, уже в советское время разрешения этого станка стало не хватать для послойного сдирания.
Представим, что я в советское время слышал прикол, что у одной ИМС ЭСЛ убрали 2 транзистора в функциональной ячейке, которые вроде как не участвуют ни в чем. При опытном производстве выяснилось — они нужны для выравнивания токов потребления одного хитрого каскада. Вернули взад.
Тогда что?
Копировали, но не все. Кое-что и сами разрабатывали. Так оно будет правильнее.
Те же БЭСМ и Эльбрус со своими потрохами — чисто российского розлива. А вот 155 и 140 серии — практически полностью «цельнотянутые», как тогда выражались.
_________________
Человек — это звучит гордо, а обезьяна — объективно.
Добавлено: Пт май 24, 2013 19:26:21
я говорил про советские микропроцессоры. Посмотрите фото под микроскопом, про которые я говорил. Почему логические микросхемы копировали, а микропроцессор не скопировали? Ведь на разработку ушло очень много времени и сил. Я конечно не работал в то время ни на каком заводе, я вообще тогда еще под стол пешком ходил, но мне хочется верить в величие той страны советов, что она могла все это и сама разработать.
Добавлено: Пт май 24, 2013 19:46:52
Как я слышал 155-я серия поставлялась во Францию. Без купленного
патента ничего бы не получилось.
Приходилось иметь дело с документацией на изделие, в которой на каждую микросхему был указан иностранный аналог с указанием номера патента, в основном США.
Сдаётся мне, что патент покупался на схемотехнику микросхем, что без технологии особого значения не имело.
А послойная шлифовка делалась именно для изучения технологии, примесей в полупроводниках и т.д.
Так быстрее, чем создавать всё самим. Что тут такого зазорного?
Китайцы передирают всё. что попадёт под руку, часто внаглую и это вызывает у многих восторг.
Когда передирают, что то у нас, эти же самые люди гневно возмущаются:
-Опять передрали, сами ничего не можем и т.д.
Такая двойная мораль интеллигентов-электронщиков.
Добавлено: Пт май 24, 2013 20:02:25
SergeBS писал(а):
Предположим, уже в советское время разрешения этого станка стало не хватать для послойного сдирания.
Это про «сдирание» МК.
Ну и еще добавлю: БЭСМ-6, сделанная на транзисторах, уделывала как детей IBM-360. А вот БЭСМ-10 была готова к выпуску на ИМС, но вместо нее Северодонецк стал клепать Эльбрусы. Она так «в железе» и не была сделана (это я тогда слышал, в 80-е).
А еще в СССР была уникальная разработка — в процессе работы ЭВМ могла менять свою разрядность. Причем не усеканием до уменьшения, а изменением в архитектуре. Вот только название уже не помню — склероз, блин.
В те же 80-е запуск какого-то «Марс-а» испугал янкесов со страшной силой. Они прикинули мощность бортового вычислителя.
_________________
Человек — это звучит гордо, а обезьяна — объективно.
Часовой пояс: UTC + 3 часа
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 53
Источник: www.radiokot.ru