Страницы

воскресенье, 3 марта 2013 г.

MDR32-Solo. Отладочная плата для процессора Миландр MDR32F9Q2I

Описание скромных возможностей платы MDR32-Solo (MDR32F9Q2I Development board)
Новый 13 год для меня начался с интересом. В 30-х числах января, прошлого года, я приобрёл несколько микроконтроллеров MDR32F9Q2I фирмы Миландр и сразу засел за изучение и разработку макета будущей платы.

Т.к. пришли голые микроконтроллеры, то вариантов 2. Использовать готовую макетную плату под LQFP-64. Питание подать с модуля для контактной макетной платы, а обвязку сделать из дискретных компонентов. В простейшем варианте понадобиться схема сброса, выбора режима загрузчика, а также пара светодиодов и кнопок. Второй вариант, разработать схему в Eagle CAD.

Выбрал оба варианта.

В процесс изготовил библиотеку Eagle для символа микроконтроллера MDR32F9Q2I, но пока не выкладываю, т.к. выявившиеся мелкие недочёты с маской, надо исправить. Разработку платы в CAD Eagle, я осилил за полторы недели. Потом, был период отлёживания, с вялотекущим процессом подгонки под нормы производителя. После чего, заказал изготовление на фабрике в Китае. Казалось что будет быстро, а оказалось, 1 месяц и неделя.

Платы получены и начался процесс их запаивания деталями. Разумеется, первое включение не принесло ничего хорошего. Светодиод питания оказался запаян наоборот, перемычки загрузочного режима установлены неверно и как результат микроконтроллер не определялся ни через UART, ни через JTAG. Пришлось запаять вторую плату и ситуация повторилась. После чего, я стал более тщательно проходить по возможным местам ошибок и в процессе этого понял свою ошибку - переставил перемычки и микроконтроллер стал определяться и дело пошло. Также нашёл одну серьезную ошибку, но её удалось легко исправить перемычкой. Мелких недочётов оказалось больше, но они все не критичны для меня, не влияют на работоспособность.


Общее описание


MDR32-Solo - MDR32F9Q2I отладочная плата. Общий вид + USB-UART TTL адаптер


MDR32-Solo. Запаянный чип микроконтроллера MDR32F9Q2I
MDR32-Solo. Вид лицевой стороны


MDR32-Solo. Вид со стороны USB разъёма

Что удалось сделать, в этом прототипе? Что не удалось?
Первое и главное - работает. Микроконтроллер MDR32F9Q2I Cortex-M3 доступен для программирования.
Второе, получен первоначальный опыт по собиранию цепочки от идеи до реализации. Получено представление о подводных камнях, на всех этапах - веду список косяков, а их вылезло много и это хорошо.

Итак, плата вышла компактной - 49.5 мм х 80 мм. Все детали, за исключением разъемов и гребешков - SMD т.е. поверхностного монтажа, в том числе кварцы и кнопки.


Сканированное изображение платы MDR32-Solo

Схему выложил на диск yandex. т.к. blogger стал урезать размеры файлов. MDR32-Solo-схема

Номиналы многих деталей я не указывал, мне было так проще, да и схема пока непричёсанная.
Да и в принципе, в спецификации говориться о номиналах.

В принципе, всё минимально нужное есть, а чего нет, то это пойдет в следующую версию, по
результатам тестирования использования.

Однако, для работы с платой, нужны инструменты. Из минимума - USB-UART TTL адаптер, чтобы программировать через порт UART. Либо, что более предпочтительно - рекомендуемый JTAG адаптер. У меня в наличии - не совсем рекомендуемый и полурабочий адаптер J-Link фирмы Segger, который в среде Keil работает и отлаживает, а вот отдельно прошить контроллер не получается. Также есть Busblaster, который я подключил к известному программатору milprog, но там только стирание памяти, а прошивка не работает. Куча полурабочего хлама.

Порты ввода-вывода

Все порты (A..F) микроконтроллера выведены на гребёнку. Гребешки подписаны альтернативными функциями. Дополнительно выделены гребешки-порты UART2, SSP1. На контактные площадки выведены UART1, CAN1.

Порт I2С содержит отключаемые (через запаиваемый разрыв) резисторы подтяжки к питанию.

USB подключен к разъёму USB B-mini.

Отладка

Т.к. плата, по моему разумению, отладочная, то на ней присутствует отладочный интерфейс.
Основным интерфейсом отладки выбран JTAG_A, который выведен на стандартный 20-pin колодку. Выбор не очень удачный. Однако присутствуют подтягивающие резисторы.
Дополнительным интерфейсом является JTAG_B, контакты которого просто выведены на площадки, без подтягивающих резисторов, а также доступны на гребёнке.

SWD-интерфейсы не выделены, т.к. интерфейс неизвестен мне.
На 3-штыревую колодку выведен UART2 для подключения к переходнику USB-UART TTL, чтобы использовать Uart-загрузчик.

Всё работает.

Питание платы
Основной источник питания - линейный регулятор, IC1, напряжением 3.3В, преобразующий питание шины USB 5В в требуемые микроконтроллером 3.3В.

Альтернативный вариант, использование внешнего питания 3.3В через контактные площадки, на обратной стороне платы. Этот вариант удобен для быстрого подключения микроконтроллера, с минимальной обвязкой и имеющимся источником питания.

Дополнительный вариант, на случай отсутствия деталей в корпусе SOT223, на задней стороне есть площадка для регулятора на 5В IC2 в корпусе TO252, также его можно использовать и как 3.3В. Однако, в любом случае, питание с USB, должно быть отрезано от схемы - для этого используется предохранитель F1, его надо выпаять из схемы и впаять в предусмотренное место альтернативного источника.

В правом верхнем углу присутствует штыревой выход основного питания и земля.

На обратной стороне присутствует площадка для светодиодного индикатора наличия питания. Тут у меня, спустя полтора месяца возникает вопрос, а почему не на лицевой стороне и он остаётся без ответа.

Доп. оборудование
Присутствует штыри для выбора режима загрузки. Режим загрузки задаётся комбинацией Boot 0 1 2. В спецификации это называется Mode[2:1:0].

Присутствуют тактовые кнопки RESET, WAKE, SLEEP.

Присутствует площадка под microSD адаптер, позволяет запаять адаптер и использовать microSD карты в режиме SPI.

Присутствует площадка уровня согласования. Позволяет согласовать напряжения микроконтроллера и 5В периферии. Расположена в области выводов I2C.

Присутствует батарейный адаптер, позволяющий поддерживать часы реального времени в микроконтроллере. Также присутствует отключаемый кварц на 32768 Гц.

Присутствует площадка для LED индикатора, подключённого через разрыв к порту A.1 и площадка LED индикатора подключённого к порту С.3.

С помощью контактных площадок, я решил проверить идею, о том, что иногда проще подпаять проводки, чем искать разъёмы.

Заключение

В следующих постах, опишу как первоначально запрограммировать микроконтроллер MDR32F92I на ассемблерах armasm и gnu assembler.
Оказывается, 0805 - это "огромные резисторы".
Микроконтроллеру Миландр MDR32F9Q2I для любительских нужд - быть. Очень неплохо для старта. Обвязка практически не нужна, ну разве что конденсаторы по питанию, да кнопка ресет, да выбор boot. Программируется стандартными средствами.

После запаивания имеющихся контроллеров, осталась небольшая кучка пустых плат, так что если кому резко захочется и надо - обращайтесь.

Жалею только, что не вывел JTAG_B на 20 контактный разъём.

P.S. Фото сделаны вебкамерой.
 

16 комментариев:

Dmitriy комментирует...

В схеме, забыт конденсатор 0.1uF у вывода-ввода батарейки.

Unknown комментирует...

Здравствуйте, хотел бы приобрести у вас макетную платку. Моя почта almaz_1c@mail.ru. Пришлите пожалуйста вашу почту. Еще вопрос: есть ли какие сложности при сборке проектов, написанных на СИ, а не асм? Имеются в виду те же исходные данные:linux + makefile + компилятор codesourcery.

Dmitriy комментирует...

Шелкография порта F содержит перепутку. Надпись CLK должна быть заменена на RXD и соотв. RXD на CLK. В результате, квадратное отверстие - это клок.

Dmitriy комментирует...
Этот комментарий был удален автором.
Dmitriy комментирует...

В связи с ограничениями 2022-2023 годов, не сразу удалось найти утилиту uart-загрузчика 1986WSD для микроконтроллера MDR32F9Q2I.
В качестве бонуса поиска нашёлся такой репозиторий:
https://github.com/PeterBeklemishev/mila

Там и для Linux есть скрипт на питоне и исходники утилиты 1986WSD.

Dmitriy комментирует...

Надпись шелкографией PF654 не верна, так как должно быть PF456.

Dmitriy комментирует...

Пример использования отладчика st-link v2 по протоколу SWD для отладки микроконтроллера MDR32F9Q2I:
http://фридуин.ство.рф/?p=1575

Dmitriy комментирует...

В правом верхнем углу, забыта шелкография для UART2.
Сигналы такие (слева на право):
GND (горизонтальная площадка)
TXD (соединён с 3-й ножкой МК)
RXD (соединён со 2-й ножкой МК)

Dmitriy комментирует...

Проверил работы скрипта 1986SWD под Linux.
Прошивка для отладки загружается и выполняется. После снятия питания - не работает.

Dmitriy комментирует...

[root@fedora 1986wsd]# ./burner.sh
Opened at 9600
Preparing bootstrap done
Preparing hex file done
Synchronization...
Synchronized successfully
Setting up baudrate...
Sending command
Got response: b'\xff'
Change port baudrate setup on 115200
Baudrate 115200 is set successfully
Uploading bootloader...
Start adress: 30720, lenght: 995
Uploading done
Start code verifying
Bootloader uploaded successfully
Starting bootloader...
bootloader id: b'1986BOOTUART'
Bootloader started successfully
Erasing...
Erasing done
Program 256 byte...
ready to upload
Program 256 byte done!
Run at 0x08000000...
Run at 0x08000000 OK!

Dmitriy комментирует...

Прекрасная сборка инструментов под Windows, для работы с микроконтроллером MDR32F9Q2I
https://github.com/tunerok/milandr_vscode_win_ocd

Dmitriy комментирует...

Т.к. в сети есть опыт использования отладчика st-link v2 для прошивки микроконтроллера MDR32F9Q2I по протоколу SWD,
то подключение проводов следующее:

Для SWD_A:
SWDIO - JA_TMS - ножка 44 - PB1
SDCLK - JA_TCK - ножка 45 - PB2

Для SWD_B:
SWDIO - JB_TMS - ножка 31 - PD0
SDCLK - JB_TCK - ножка 32 - PD1

В спецификации 2.4.0 от 08.06.2023 на микроконтроллер MDR32F9Q2I уже вытерли всю информацию о SWD.

Dmitriy комментирует...

Упрощённая схема подключения, за счёт использования питания от usb-uart адаптера.
Не забыть переключить напряжение на 3.3v, джампером.
Удалось избавиться от кабеля питания отладочной платы на время отладки.
Вся сборка из 2 плат: usb-uart и mdr32-solo и четырех проводочков.

Dmitriy комментирует...

Нашлась таки рабочая плата mdr32-solo, с которой удалось в linux подключить отладчик segger j-link к порту JTAG_B и опознать микросхему.
MODE[2:1:0] - 0 0 0
Подключение на гребёнку JTAG_B (группа ADC, совмещена с сигналами jtag)

Вывод:
jtag> cable jlink
J-Link initial read failed, don't worry (result=0)
Vref = 3.274 TCK=0 TDI=0 TDO=0 TMS=0 TRES=1 TRST=0
J-Link JTAG Interface ready
jtag> detect
IR length: 4
Chain length: 1
Device Id: 01001011101000000000010001110111 (0x4BA00477)
Unknown manufacturer! (01000111011) (/usr/share/urjtag/MANUFACTURERS)

Dmitriy комментирует...

После прописывания микроконтроллера MDR32BE92QI в анналы UrJTAG
стало показывать осмысленную информацию.

jtag> frequency 1000000
Setting TCK frequency to 1000000 Hz
jtag> detect
IR length: 4
Chain length: 1
Device Id: 01001011101000000000010001110111 (0x4BA00477)
Manufacturer: Milandr Pkk (0x477)
Part(0): MDR32BE92QI (0xBA00)
Stepping: B0
Filename: /usr/share/urjtag/milandr/mdr32be92qi/mdr32be92qi
jtag>

Для этого пришлось по аналогии в папке /usr/share/urjtag прописать сведения.
Для получения файла описания микроконтроллера из bsdl-файла,в формат файл используемый UrJTAG, использовал утилиту bsdl2jtag входящую в поставку urjtag.
Пришлось удалить одну строку в файле предоставляемом производителем:
"use CDNDFT_1149_1_2001.all ; for UrJTAG", потому, что неизвестно где брать CDNDFT_1149_1_2001.all
Есть подозрение, что не вся семантическая информация передалась, но это выясниться по ходу дела.

Dmitriy комментирует...

В репозитории Fedora 36 есть пакет openocd и он поддерживает микроконтроллер MDR32BE92QI, правда target называется mdr32f9q2i.cfg

# openocd -f interface/jlink.cfg -c 'adapter speed 1000' -c 'transport select jtag' -f target/mdr32f9q2i.cfg

Вот такой вывод:

# openocd -f interface/jlink.cfg -c 'adapter speed 1000' -c 'transport select jtag' -f target/mdr32f9q2i.cfg
Open On-Chip Debugger 0.11.0
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
adapter speed: 1000 kHz

jtag
cortex_m reset_config sysresetreq

Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : J-Link ARM V8 compiled Nov 28 2014 13:44:46
Info : Hardware version: 8.00
Info : VTarget = 3.287 V
Info : clock speed 1000 kHz
Info : JTAG tap: mdr32f9q2i.cpu tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd), part: 0xba00, ver: 0x4)
Info : mdr32f9q2i.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : starting gdb server for mdr32f9q2i.cpu on 3333
Info : Listening on port 3333 for gdb connections