Страницы

Показаны сообщения с ярлыком Cortex-M3. Показать все сообщения
Показаны сообщения с ярлыком Cortex-M3. Показать все сообщения

вторник, 5 марта 2013 г.

Milandr - MDR32F9Q2I - cheetsheet. Схемы, памятки

Схемы, памятки по Cortex-M3 микроконтроллеру Миландр MDR32F9Q2I


Выложу парочку схем-памяток, по микроконтроллеру MDR32F9Q2I. Делал на основе спецификации. Могут быть ошибки и разночтения. Комментарии приветствуются.

Файлы большие, пригодные к печати на A4 (600 dpi), их ссылки даны под картинками для просмотра.
Скачивать последние версии.
Последняя версия 0.8 от 10 апреля 2015 года.
Порты вводв-вывода и отладочные порты микроконтроллера Миландр K1986F9BQ2I (MDR32F9Q2I). Версия 0.8
В версии 0.8, на схеме исправлены надписи TX/RX для выводов в BOOT режиме. Добавлен 20-pin JTAG-разъём.
Полноценный файл для печати на A4 (клик по изображению).






Порты ввода-вывода и отладочные порты микроконтроллера Миландр MDR32F9Q2I. Версия 0.6
В версии 0.6, на схему добавлено подключение интерфейса SWD.
Версия 0.6 от 8 марта 2013 года. Устарела. Полноценный файл для печати на A4 5Мб.
(mdr32f0q2i-ports-порты-ввода-вывода-0.6)



Порты ввода-вывода и отладочные порты микроконтроллера Миландр MDR32F9Q2I. Версия 0.5
Версия 0.5 от 5 марта 2013 г. Устарела. Полноценный файл для печати на A4 4,7Мб.
(mdr32f9q2i-ports-порты-ввода-вывода-0.5).




Дополнительные функции портов ввода-вывода микроконтроллера Миландр MDR32F9Q2I. Версия 0.5
Версия 0.5 от 5 марта 2013 года. Полноценный файл для печати на A4 4,7Мб. (mdr32f9q2i-ports-дополнительные-функции)



UART - УАПП

Текущая версия 0.6 от 9 марта 2013 года

Памятка по быстрой настройке микроконтроллера MDR32F9Q2I, для простой передачи по протоколу UART. Версия 0.6

Версия 0.6 от 9 марта 2013 года. Полноценный файл для печати на A4 5,9Мб. (mdr32f9q2i-uart-памятка-0.6)


Памятка по быстрой настройке UART-УАПП на микроконтроллере MDR32F9Q2I. Версия 0.5
Версия 0.5 от 7 марта 2013 года. Устарела.

USB - Универсальная последовательная шина

Текущая версия памятки по USB: 0.5 от 6 декабря 2014 года.

Пока только для режима USB Device - подчинённое устройство.

Памятка по быстрой настройке USB DEVICE микроконтроллера Миландр К1986ВЕ92QI/К1986ВЕ92QC, Версия 0.5



воскресенье, 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. Фото сделаны вебкамерой.
 

вторник, 15 января 2013 г.

Миландр MDR32F9Q2I. ASM. Средства разработки на ассемблере


Миландр MDR32F9Q2I. ASM. Средства разработки на ассемблере
С целью изучения сред программирования для микроконтроллеров ARM Cortex-M3 Миландр MDR32F9Q2I, кратко рассмотрены интегрированные пакеты и их ассемблеры. 
Микроконтроллеры были приобретены у производителя. Была сделана  небольшая отладочная плата, заказана в производстве. Пока делают печатные платы, спаял на макетке. Подключил UART. Сделал прототипы загрузчика для загрузки по UART на Python и C# Visual Studio 2010 Express. В планах подключить открытые JTAG-средства. Выбираю ассемблер, смотрю на спецификацию.

Страница микроконтроллера на сайте производителя:

Форум на сайте производителя:


Отечественная интегрированная среда Phyton CodeMaster-ARM

Поставляется с отладочными платами от производителя.
Содержит собственный ассемблер mcaarm.exe. Ассемблер содержит собственный формат директив. Со средой поставляется описание ассемблера на русском языке, что является несомненным плюсом для начинающих. Ассемблер среды Phyton CodeMaster-ARM, поддерживает синтаксис UML.

ARM MACRO ASSEMBLER Version 1.01.101130 Demo
Copyright (C) 2009 Phyton, Inc.


Среда разработки IAR IAR Embedded workbench (EWBAR)

Среда поставляется с собственным ассемблером IASMARM. Ассемблер имеет собственный синтаксис директив. Синтаксис директив в чём то похож, на синтаксис ассемблера Keil, что потенциально позволяет производить перенос кода с одного ассемблера на другой - с небольшими правками, в основном касающимися синтаксиса директив, макросов и пр., оставляя мнемокоды UML нетронутыми.


Среда разработки Keil uVision v.4

Keil uVision - набор инструментов, для разработки программ на компьютерных языках C, C++, ассемблер (UAL) для микроконтроллеров, в том числе с ядром ARM Cortex-M3.
В наборе инструментов Keil присутствует ассемблер armasm, а также встроенный оптимизированный ассемблер, для разбора инструкций включённых в текст программы на языке CИ. Ассемблер имеет собственный синтаксис директив. Поддерживает UAL синтаксис команд.

В четвертой версии Keil uVision, поставляется версия 5.02 ассемблера. Расположен он в папке c:\Keil\ARM\ARMCC\bin, при установке среды в c:\Keil.


Радует то, что принципы всех этих ассемблеров, практически одинаковы. Это позволяет, без
особых трудностей использовать любой их них, предварительно ознакомившись с конкретным синтаксисом ассемблера. А имена машинных операций (мнемокоды) соответствуют стандарту UAL (унифицированного ассемблерного языка).


Среда разработки GNU GCC ARM

Открытая, бесплатная, без ограничений размера кода, система компиляторов, в том числе для ARM.
Содержит собственный ассемблер GNU AS, с собственными синтаксисом.

Ассемблер GNU AS наиболее мощный из всех, т.к. поддерживает (в одном стиле) ассемблеры очень многих наборов команд различных процессоров. С этой точки зрения - перспективен.



Для выбора ассемблера (да какой выбор-то - gnu arm, т.к. и Linux используется), составил небольшую табличку сравнения мнемоник, чтобы не путаться в синтаксисе.


Подобие подобия. Краткий синтаксис директив ассемблеров для ARM
Таблица №1

 

Phython

CodeMaster

ARM

IAR

Embedded

Workbench

Keil

MDK-ARM

GNU AS

 

Сайт





 

 

mcaarm.exe v. 1.01.101130

 

Armasm 5.02

GNU assembler version 2.23.51 (arm-none-eabi)

 

Комментарии

; - строка

; - строка

// - строка

/* */ - группа строк

; - строка

# - имеет доп. спец. значение

; - строка

@ - строка

/* */ - группа строк

 

Символы (метки)

Latin1 - символы, цифры, спецсимволы

Latin1,a-zA-Z, цифры,

 символы _ $, могут содержать печатные символы, если заключены в апострофы ``

 

Символы, цифры, знак подчёркивание (_). Различается регистр символов.

Unicode-строка, цифры, 3 символа "_.$"

Различается регистр символов.

 

Директива

THUMB, указывающая на 16-битные инструкции ARM, ассемблеру

.THUMB

THUMB

THUMB

.thumb или .code16

 

Директива включение другого файла с исходным кодом

.INCLUDE

INCLUDE или $

GET или INCLUDE

.include

 

Импорт символов

.EXTRN

.EXTRNx - типизированный импорт

IMPORT или

EXTERN или

EXTWEAK

IMPORT или

EXTERN

.import

 

Экспорт символов

.PUBLIC

PUBLIC или

PUBWEAK

EXPORT или

GLOBAL,

EXPORTAS

.global

.globl

 

Объявление функций (подпрограмм)

.FUNC и .ENDF

Или .EXTRNF

Явно не выделено

FUNCTION или PROC и .ENDP .ENDFUNC

.func

 

Объявление

Макросов (начало и конец)

.MACRO и .ENDMAC

MACRO и ENDM

Или ENDR

MACRO и MEND

.macro и .endm

 

Присваивание символического имени выражению

.EQU распространяется на модуль внутри файла

или .DEFINE распространяется на весь файл

.SET или =  - может быть переопределено в том же модуле

.LABELx - типизированные метки

EQU в пределах модуля

ALIAS в пределах модуля

SET, SETA, ASSIGN временно

DEFINE - на весь файл

EQU

.equ

 

Определение секций кода и данных

.ASEG и .ENDSEG

.RSEG и .ENDSEG

OSEG и .ENDSEG

SECTION или RSEG

И END

ALIGNROM, ALIGNRAM, EVEN,ODD

AREA CODE

AREA DATA

.section

 

Конец файла

.END - конец модуля и конец файла

.ENDMOD - конец модуля

END

END

.end

 

Модуль начало

.PMODULE

.LMODULE

PROGRAM или NAME или MODULE

 

Явно не выделено

Явно не выделено

 

Заголовок и подзаголовок на каждой странице

 

.TITL

.STITL

Явно не выделено

TTL и SUBT

.ttl и .sbttl

 

Условное

.IF, .ELSE, .ENDIF

IF и ENDIF

IF, ELSE, ENDIF, and ELIF

.if или несколько .ifxx, где xx-какое-либо условие

И .endif

.else и .elseif

 

Предопределённые символы регистров

 

CPSR, R0–R12, R13 (SP), R14 (LR), R15 (PC), SPSR  и пр.

 
 

 

 

Вызов процедуры

 

 

BL имя

 

 

 

 

 

 

 

Bus Blaster v.2 как UART-TTL

Использование JTAG-отладчика BusBlaster v.2 в качестве UART-TTL адаптера

BusBlaster v.2 - небольшая плата открытого JTAG-отладчика, созданная на сайте DangerousPrototypes.com. В наличии имеется вторая версия платы.
Проверку и настройку производил в системе Windows 7 Home Basic. В Ubuntu Linux 12.04, работает.
Планируемое использование - отладка ARM-микроконтроллеров Cortex-M3, в том числе Миландр MDR32F9Q2I.

JTAG-отладчик основан на распространённой микросхеме FTDI FT2232H - мост USB-Serial. Из особенностей - применения CPLD микросхемы, в качестве согласующего логические уровни буфера, с возможностью перепрограммирования, для изображения из себя различных jtag-отладчиков. 

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

Сайт поддержки отладчика: http://dangerousprototypes.com/docs/Bus_Blaster 

Руководство по настройке программы отладчика urJTAG (en): http://dangerousprototypes.com/docs/Bus_Blaster_urJTAG_guide

Руководство по настройке программы отладчика OpenOCD (en): http://dangerousprototypes.com/docs/Bus_Blaster_OpenOCD_guide

Заметка по смене VID/PID у EEPROM памяти BusBlaster http://dangerousprototypes.com/docs/Bus_Blaster_custom_USB_VID_and_PID

Страница микросхемы FT2232H на сайте производителя: http://www.ftdichip.com/Products/ICs/FT2232H.htm

Bus Blaster v.2. Thank to DangerousPrototypes.com

Идентификационные данные отладчика на шине USB:
VID = 0x0403 (FTDI)
PID = 0x6010 (FT2232H)


Для подключения и проверки работоспособности отладчика BusBlaster надо выполнить несколько шагов:


1. Установка драйверов микросхемы FT2232H. Это могут быть фирменные драйверы (фирмы FTDI) http://www.ftdichip.com/Drivers/D2XX.htm , либо открытые libUSB http://sourceforge.net/projects/libusb-win32/.

2. Установить программы отладчиков urJTAG или OpenOCD, или всё вместе.

3. Установка программы отладчика urjtag. 
Во время установки, надо указать путь c:\urjtag, вместо C:\Program Files\UrJTAG, иначе установщик не работает.
Лучше использовать исправленную версию, с сайта DangerousPrototypes.com

4. Соединение JTAG отладчика и отлаживаемого устройства. Соединение должно происходить сигнал в сигнал, как подписано.
TDO - TDO
TDI - TDI
TCK - TCK
TMS - TMS
TRST - TRST
Обязательно! Питание с отлаживаемого (целевого) устройства, должно подаваться на микросхему буфера, через VTG пин JTAG разъёма, т.к. часть микросхемы буфера не запитана.



5. Проверка возможности использования BusBlaster v.2 , как обычного UART-TTL

В микросхеме FT2232H присутствуют выводы TXD-RXD (38,39) Обозначаются также BDBUS0, BDBUS1, которые выведены на разъём JP1 (контакты 2 - TCK,3 - TDI).

Итак, в моей системе Windows, рабочий COM порт оказался 25 (их ведь 2 в микросхеме), настройка 9600-8-1. Замкнутые выводы RX-TX на разъёме JP1 и получили простой порт для обмена данными.

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

6. Установил исправленную версию urjtag и стала срабатывать опция interface=1, на которой определяется устройство - микросхема CPLD. Это уже радует.
Перед использованием положить bsdl файл микросхемы CPLD (или иной) в папку c:\urjtag
7. Команды выполняемые в программе: urjtag-rev11
jtag> cable jtagkey interface=1
jtag> bsdl path c:\urjtag
jtag> detect
IR length: 8
Chain length: 1
Device Id: 00000110111000011100000010010011 (0x06E1C093)
Filename: c:/urjtag/XC2C32A.bsd
jtag>




8. Прошить в CPLD последний вариант буфера Jtagkey. Т.е. теперь отладчик совместим с отладчиком JTAGkey.

9. Для быстрой проверки работоспособности отладчика с разным ПО, я подключаю его JTAG-порт, к порту JTAG на пинах JP1, и устанавливаю JP4 (подаю питание). Если всё работает, то определяется IDCODE Xilinx.

Небольшое описание платы отладчика на память.


BusBlaster v.2 - расположение компонентов



JP1 - Выход JTAG, напрямую с микросхемы FT2232H? Для чего?
Используется как подсоединение второго порта к jtag- интерфейсу буферной микросхемы CPLD. Может использоваться как UART-TTL.
JP2 - Неиспользуемые выводы
JP3 - Микросхема памяти EEPROM (Хранение идентификаторов USB VID/PID)
JP4 - Подача питания 3.3V. При снятой перемычке питание на микросхему буфера (часть микросхемы) подаётся от отлаживаемого устройства. При установленной перемычке - питание берется у BusBlaster для питания отлаживаемого устройства, а также для питания микросхемы буфера (IO).

JTAG - 20-выводной разъём соответствует стандарту JTAG ARM 20 pin

XC2C32A CPLD - XC2C32A CoolRunner-II CPLD, микросхема программируемой логики, используется в качестве буферной, для согласования логических уровней с отлаживаемым устройством (1.8 - 3.3В).

FT2232H - микросхема моста USB-Serial, выполняющая основную работу.

Из плюсов
1. Буферная согласующая микросхема
2. Поддержка OpenOCD
3. Отладочная плата для Xilinx CPLD


Из недостатков

1. Не все возможные выводы разведены, т.к. что потенциал микросхемы FTDI FT2232H слегка ограничен. Например, не получилось сделать 2 порта. Может потом.