Здравствуйте все! ✋
Наконец-то ко мне пришёл долгожданный MIK32 АМУР на плате ELBEAR ACE-UNO от ELRON. Нормально так мне с ним пришлось по возиться, в какой-то момент уже подумал что прислали "кирпич", оказалось просто есть кое-какие нюансы о которых я сейчас расскажу.
Кто не знает MIK32 АМУР - это микроконтроллер К1948ВК018 от фирмы Микрон. Это первый полностью отечественный МК, разработанный и произведённый в России. Сложности, которые у меня с ним возникли - они только либо из-за спешки, либо из-за недостатка знаний, которыми я в этой статье и хочу с вами поделиться.
Итак, микроконтроллер долгое время у меня не хотел определяться. С самого начала "почему-то" не заработал PlatformIO, библиотека MIK32 не определялась и выскакивала ошибка. Теперь то я знаю что просто невнимательно прочёл инструкцию, но тогда не смог установить, а вы в инструкции обратите внимание на ссылки wiki.mik32.ru и сделайте всё в точности как там описано, не спешите (:
Потом я установил MikronIDE, но openOCD писал ошибку, мол к JTAG ничего не подключено. Точнее ошибку сначала выдавал uploader Микрона, а он в свою очередь обращался к openOCD.
Ошибка сначала выглядела так:
Error: JTAG scan chain interrogation failed: all ones
Error: Check JTAG interface, timings, target power, etc.
Error: Trying to use configured scan chain anyway...
Error: riscv.cpu: IR capture error; saw 0x1f not 0x01
Тогда я установил SyntacoreIDE, но и с ним появилась та же ошибка. Я тогда уже через консоль стал пробовать завести АМУР, по примеру из видео Руслана с канала FabmicroLLC. Переделал Makefile под себя так как он под Linux'ом прошивал АМУР, я же работаю под Win10.
К первой ошибке добавилась новая:
Traceback (most recent call last):
File "E:\GitFlic\C_study\MIK_c\AMUR\libs\mik32-uploader\mik32_upload.py", line 431, in
upload_file(
File "E:\GitFlic\C_study\MIK_c\AMUR\libs\mik32-uploader\mik32_upload.py", line 241, in upload_file
openocd.run(f"adapter speed {adapter_speed}")
File "E:\GitFlic\C_study\MIK_c\AMUR\libs\mik32-uploader\tclrpc.py", line 106, in run
reply = self.sendrecv(wrap)
^^^^^^^^^^^^^^^^^^^
File "E:\GitFlic\C_study\MIK_c\AMUR\libs\mik32-uploader\tclrpc.py", line 74, in sendrecv
self.sock.sendall(data)
OSError: [WinError 10057] Запрос на отправку или получение данных (when sending on a datagram socket using a sendto call) no address was supplied
Если у вас возникнет подобная ошибка в "mik32_upload.py", в функции "upload_file", то обратите внимание на то в какой последовательности у вас указаны флаги, у меня они сначала были как и у Руслана:
python mik32_upload.py --run-openocd --openocd-exec=$('путь_до_openocd') --openocd-interface=$('путь_до_m-link.cfg') --openocd-target=$('путь_до_mik32.cfg') build/firmware.hex
Получается что в Win10 mik32_upload ругается если файл прошивки указывать после флагов, эта ошибка исчезла после того как я переставил файл прошивки перед флагами:
python mik32_upload.py build/firmware.hex --run-openocd --openocd-exec=$('путь до openocd') --openocd-interface=$('путь до m-link.cfg') --openocd-target=$('путь до mik32.cfg')
Но это не избавило меня от ошибки JTAG'а. Где-то на третий день мучений и тщетных поПЫТОК я прочитал в даташите что при подаче 3.3в на BOOT0 МК грузится с оперативной памяти, а при 3.3в на BOOT1 грузится с флеш памяти. По умолчанию же он грузится с EEPROM памяти и я предположил что именно в момент запуска что-то происходит и поэтому МК не отзывается.
Поставив перемычку на BOOT0 и запустив openOCD через консоль МК впервые отозвался. Как стало ясно теперь в EEPROM память было что-то записано, что мешало запуску openOCD. Загрузившись из оперативной памяти я через SyntacoreIDE смог во флеш записать пример работы FreeRTOS (первое что попалось под руку), а далее для тестов записал обычный блинк.
По идее в EEPROM память был записан BOOTLOADER, так как записывая во флеш и перезагружая МК без перемычки, АМУР выполнял то что я записывал. Потренировавшись с blink'ом я прошил этот пример в EEPROM память и после этого дальнейшую прошивку я смог делать уже без перемычки на BOOT0.
Таким образом, записывая во флеш память прошивку ничего не менялось, так как работала та прошивка, которая была записана в EEPROM. Найдя пример бутлоадера в MikronIDE, я его подредактировал добавил свой Makefile и записал его в EEPROM. Теперь я спокойно без перемычки прошиваю флеш и всё работает как положено.
Пока писал эту статью, ELRON у себя в телеграме скинули ссылку на свой GitHub где они выложили свой вариант BOOTLOADER'а и UPLOADER'а, с помощью которых можно прошивать МК по USB. Проверил, всё работает отлично и ооочень быстро - по скорости загрузки во флеш разница просто огромная.
Сначала скомпилируйте elbear_fw_bootloader.hex файл или возьмите в релизах уже готовый. Потом загрузите его в EEPROM через программатор. А далее соберите elbear_uploader.exe или возьмите в релизах уже готовый и прошейте МК командой:
elbear_uploader.exe build/firmware.hex --com=COM3
Укажите свой COM порт конечно же и загружаемую прошивку скомпилируйте с spifi.ld что бы загружать её во флеш.
Вот как-то так.
Видео с впечатлениями я выложил на свой Ютуб-канал ХуторянинЪ.
Вот ссылка на мои примеры blink'а, bootloader'а и не только. Помаленьку добавляю примеров, сейчас тестировал I2C и SPI.
Слава Наша Богам и Предкам!!! ✋
Комментарии (18)
fivlabor
20.07.2024 18:12+4https://www.mcu.mikron.ru/mik32-order
Обращаем Ваше внимание, что для получения информации об изделии необходимо направить в наш адрес запрос квоты официальным письмом на бланке организации с указанием ответственного исполнителя.
Запросы от физических лиц, а также запросы с адресов электронной почты на публичных доменах (mail.ru, gmail, yandex и т.д.) в настоящее время не рассматриваются.
Такое-то уважение к потенциальным клиентам
9a75sd
20.07.2024 18:12+4Они сайт забыли обновить, либо это для тех, кто заказывает большими объемами.
В чипе продается, может взять любой, у кого есть деньги.
Предвидя вопрос: а зачем мне этот чип, если могу взять китайский?
Я подобным образом тоже поступаю, и тоже хотелось бы купить отладочную плату на Амуре, есть что там испытать. Ну и встречный вопрос: а если завтра китайцы скажут, что не будут контроллеры продавать, что делать будем?
Ogneyar_ya Автор
20.07.2024 18:12Работают с юр. лицами, отгружают оптом. В розницу да, можно взять в "чипе".
9a75sd
20.07.2024 18:12+2Я как-то в чате поддержки mik32 закидывал идею выполнение части кода из ОЗУ путем определения некоторых функций в секции в ОЗУ, ибо если запускать выполнение из SPIFI, то оттуда выполняется очень медленно: контроллер SPIFI в 1-битном режиме без кэша работает, и прибегают к такому подходу: в EEPROM загрузчик, в SPI-flash основная программа.
Проверь плиз пример из тестовой ветки, который загружается из SPIFI, и блок переконфигурируется кодом из ОЗУ
Ссылка на пример с перенастройкой SPIFI из ОЗУ https://github.com/MikronMIK32/mik32-examples/tree/test/HAL_Blink_SPIFI
Ogneyar_ya Автор
20.07.2024 18:12Хорошо, проверю и отпишусь тогда.
9a75sd
20.07.2024 18:12+1Скорее всего, у тебя сам по себе пример работать не будет: нужны скрипт линковки, где объявлена секция ram_text и crt.S, startup-файл, где работает подгрузка.
Дмитрий, добрый вечер, пробовали такое делать, но пример пока висит в ветке test: https://github.com/MikronMIK32/mik32-examples/blob/test/HAL_Blink_SPIFI/src/main.c
В этом примере лишь включается кэш, перенастройка самой флеш памяти требует встраивания многих функций библиотеки spifi, либо переноса их в ram_text. Встраиваемые функции можно посмотреть в hal_spifi.h (https://github.com/MikronMIK32/mik32-hal/blob/test/peripherals/Include/mik32_hal_spifi.h)
Пример компилируется с hal и shared из ветки test соответственно, а саму секцию ram_text можно посмотреть в скриптах линковки (https://github.com/MikronMIK32/mik32v2-shared/tree/test/ldscripts), в файле sections.lds (https://github.com/MikronMIK32/mik32v2-shared/blob/test/ldscripts/sections.lds#L61), копирование - в стартовом файле (https://github.com/MikronMIK32/mik32v2-shared/blob/test/runtime/crt0.S#L77)
vk6677
20.07.2024 18:12+2Тоже собираюсь в ближайшее время "пощупать" этот МК. Плату отладочную развёл и заказал в "Резоните".
Пока жду изготовления пытаюсь прикрутить средства сборки и отладки к neovim (не очень нравятся IDE на основе "Eclipse", хотя ими вполне можно пользоватся).
smart_alex
Статью прочитал, но так и не понял в чём прикол: цена 10 500 руб, блинк запускается 3 дня (вы серьёзно?).
Вопрос без подвоха: что это и зачем это нужно (с такими ТТХ)?
Ogneyar_ya Автор
Хороший вопрос, раз прочитали значит запустите за пару минут.
Ответ без подвоха: для любых электронных устройств работающих по SPI, I2C, UART.
smart_alex
Подождите, цена 10 500 за подобную плату плюс с такими проблемами с софтом - на кого это рассчитано?
При наличии аналогичных плат в разы дешевле и с отлично работающим софтом и горами готового кода - кто будет покупать ACE-UNO?
Ogneyar_ya Автор
На энтузиастов. Не вижу тут каких-то особых проблем, решение ведь найдено.
Энтузиасты. Хобби дело такое, софт пишем сами не ожидая что его напишет за нас кто-то другой.
smart_alex
Я не против этого контроллера, скорее "за", но у меня для вас плохие новости: я вам как тот самый энтузиаст скажу - ничего кроме недоумения он не вызывает.
ciuafm
Реально цена 10кр, если я не ошибаюсь это сейчас ~100 убитых енотов?
ptr128
PDK5S-P-003 стоит столько же. И ничего, пользуется неплохим спросом. Было бы у меня побольше свободного времени - точно купил бы, чтобы поиграться.
Другой вопрос в рентабельности применения самого К1948ВК018, который стоит сейчас около 3000 рублей. Цена выглядит заградительной и вызывает подозрения, что сейчас спрос намного превышает предложение. С другой стороны, почему бы не освоить МК заранее, так как снижение цены на него вполне прогнозируемо?
smart_alex
Я только спросил в чём смысл всего этого - если смысл есть, то это надо как-то доходчиво доносить до народа.
Мне цена показалась несуразно большой и как разработчик я не понимаю, почему я должен бросить тонны готового и отлаженного када и пойти купить эту плату за 10 500, на которой блинк запускается 3 дня.