[i] Начало работы с платами MDR1215LGI-Micro и MDR1219LGI-Micro
1. Особенности работы
Диапазон напряжения питания микроконтроллеров MDR1215LGI и MDR1219LGI в предельно-допустимом режиме работы составляет от 1,8 до 3,6 В. Максимально допустимое напряжение высокого уровня на входах GPIO ограничено текущим напряжением питания и не должно превышать верхнюю границу этого же диапазона, то есть 3,6 В.На платах установлен конденсатор по питанию микроконтроллера и сам микроконтроллер. Также предусмотрены посадочные места для монтажа вилок PLS.
Распиновка платы MDR1215LGI-Micro
Распиновка платы MDR1219LGI-Micro
Программирование микроконтроллера выполняется через интерфейс JTAG. Поддерживаются следующие программаторы:
- SEGGER J-Link
- Программаторы на базе микросхемы FT2232H
- I-Jet (только при работе в среде IAR for RISC-V)
Для подключения программатора к интерфейсу JTAG микроконтроллера необходимо соединить выводы программатора с соответствующими выводами микроконтроллера, как приведено в таблицах 1 и 2.
Таблица 1 – Расположение выводов интерфейса JTAG микроконтроллера MDR1215LGI
| Обозначение вывода программатора | Номер вывода микроконтроллера |
| TMS | 1 |
| TCK | 2 |
| TDI | 3 |
| GND | 4 |
| TDO | 7 |
| VDD | 8 |
Таблица 2 – Расположение выводов интерфейса JTAG микроконтроллера MDR1219LGI
| Обозначение вывода программатора | Номер вывода микроконтроллера |
| TDI | 3 |
| VDD | 5 |
| TCK | 6 |
| TMS | 7 |
| TDO | 8 |
| GND | 9 |
Подключение программатора должно выполняться согласно пункту 28.3 «Подключение адаптера JTAG к микросхеме» спецификации ТСКЯ.431296.033СП на микросхемы MDR1215LGI, MDR1219LGI, которая прикреплена в конце статьи. При подключении отладчиком к микросхеме по JTAG выводы микросхемы в функции JTAG должны быть стандартно доопределены до высокого уровня внешними резисторами доопределения от 4,7 кОм до 10 кОм с учетом того, чтобы эти подтяжки не влияли на работу системы.
Пример подключения программатора к микроконтроллеру MDR1215LGI приведен на рисунке 1.
Рисунок 1 – Подключение программатора к микроконтроллеру MDR1215LGI
Пример подключения программатора к микроконтроллеру MDR1219LGI приведен на рисунке 2.
Рисунок 2 – Подключение программатора к микроконтроллеру MDR1219LGI
2. Создание проекта
Микроконтроллеры MDR1215LGI и MDR1219LGI во многом идентичны микроконтроллеру MDR1206FI, поэтому библиотечные файлы, примеры и шаблоны проектов для микроконтроллера MDR1206FI подойдут и для микроконтроллеров MDR1215LGI, MDR1219LGI при учете особенностей, описанных далее.Информация из статей [i] Создаем проект для МК MDR1206FI, MDR1206AFI в IDE Eclipse, [i] Создаем проект для МК MDR1206FI, MDR1206AFI в IAR EW for RISC-V и [i] Создание проекта для МК MDR1206FI, MDR1206AFI, К1986ВК025 в Visual Studio Code касательно микросхем MDR1206FI по части установки ПО и настройки проекта также актуальна для MDR1215LGI и MDR1219LGI.
Основные отличия относительно MDR1206FI, на которые стоит обратить внимание:
-
Загрузочная программа для микросхем MDR1206(A)FI к микросхемам MDR1215LGI и MDR1219LGI не применима. Для этих микросхем необходимо использовать отдельную загрузочную программу.
-
В загрузочной программе для микроконтроллера MDR1215LGI, некоторые выводы GPIO, не выведенные в корпусе, настраиваются как технологические. Перенастраивать данные технологические выводы GPIO нельзя, что необходимо предусмотреть в основном ПО. В качестве технологического вывода выступает, например, PD11, настраиваемый как цифровой выход в функции MODE=00 с состоянием высокого уровня.
-
Важно: следует использовать только те выводы, которые разведены в данном корпусе: для MDR1215LGI это PA[9:6], PD5, PD7, для MDR1219LGI это PA0, PA3, PA[11:5]. Неиспользуемые в микросхеме MDR1215LGI выводы GPIO должны маскироваться, а настройку других портов производить не допускается. Например, вывод PD12 микросхемы MDR1215LGI подключен к питанию, вывод PC3 подключен к земле, и их настройка на выход может привести к выходу микросхемы из строя. Помимо этого, разварка кристалла может изменяться (без изменения доступного функционала) для повышения надежности.
-
Ограничение на использование только разведенных в корпусе выводов применимо и для специальных выводов, таких как SW (настройка данного функционал в BKP не приведет к выводу микросхемы из строя, но не имеет смысла. Помимо этого, значения WAKEUP3-WAKEUP1 всегда равны 0).
-
Вывод nRESET доопределен до высокого уровня внутри корпуса. Из-за крайне ограниченного количества выводов GPIO в загрузочной программе отсутствует выбор режима загрузки. При запуске загрузочная программа после необходимых настроек передает управление в основную Flash-память. То есть записываемое программное обеспечение начинает работу сразу при подаче питания и, если каким-то образом нарушается доступ по JTAG (например, переопределение функций выводов GPIO, совмещенных с JTAG, или неправильно настроенное тактирование (см. [i] МК не определяется по интерфейсу JTAG/SWD. Восстановление работы МК), то восстановить доступ к JTAG будет или крайне затруднительно, или невозможно. Поэтому для предосторожности в основной программе нужно первыми инструкциями ввести задержку и внимательно настраивать выводы GPIO.
-
Выводы PA3, PA5, PA7 и SAR_AIN1 в микроконтроллере MDR1219LGI объединены внутри корпуса. Это накладывает ограничение на их использование. Если один из выводов PA3, PA5, PA7 настроен как выход, остальные два обязательно должны работать в режиме входа. Использование двух и более из этих выводов одновременно в режиме выхода может привести к короткому замыканию и выходу микросхемы из строя, например, если на один вывод подана логическая единица, а на другой – логический ноль. Также при настройке любого из этих выводов на выход измеряемое АЦП напряжение будет определяться уровнем, формируемым данным выводом GPIO.
Пример кода проекта для MDR1215LGI.
/* Includes ------------------------------------------------------------------*/
#include "MDR32VF0xI_config.h"
#include "MDR32VF0xI_rst_clk.h"
#include "MDR32VF0xI_port.h"
/* Private define ------------------------------------------------------------*/
#define GPIO_PORT MDR_PORTD
#define GPIO_PORT_CLK RST_CLK_PCLK_PORTD
#define GPIO_PIN_1 PORT_PIN_5
#define GPIO_PIN_2 PORT_PIN_7
/* Private variables ---------------------------------------------------------*/
PORT_InitTypeDef PORT_InitStructure;
void Delay(uint32_t Ticks) {
for (uint32_t i = 0; i < Ticks; i++) { __NOP(); }
}
int main(void)
{
RST_CLK_DeInit();
for (uint32_t i = 0; i < 100000; i++) {}
RST_CLK_HCLK_ClkSelection(RST_CLK_CPU_HCLK_CLK_SRC_HSI);
RST_CLK_PCLKCmd(GPIO_PORT_CLK, ENABLE);
PORT_StructInit(&PORT_InitStructure);
PORT_InitStructure.PORT_Pin = (GPIO_PIN_1 | GPIO_PIN_2);
PORT_InitStructure.PORT_Direction = PORT_DIRECTION_OUTPUT;
PORT_InitStructure.PORT_Function = PORT_FUNCTION_PORT;
PORT_InitStructure.PORT_Mode = PORT_MODE_DIGITAL;
PORT_InitStructure.PORT_Power = PORT_POWER_NOMINAL_UPTO_2mA;
PORT_Init(GPIO_PORT, &PORT_InitStructure);
PORT_SetBits(GPIO_PORT, (GPIO_PIN_1 | GPIO_PIN_2));
while (1) {
Delay(100);
PORT_ToggleBit(GPIO_PORT, (GPIO_PIN_1 | GPIO_PIN_2));
}
} Осциллограмма сигналов, снятых с выводов PD5 и PD7 микроконтроллера MDR1215LGI во время выполнения приведённого примера, представлена на рисунке 3.
Рисунок 3 – Осциллограмма сигналов на выводах PD5 и PD7 микроконтроллера MDR1215LGI при выполнении программы переключения состояний GPIO
Пример кода проекта для MDR1219LGI.
Данный пример полностью аналогичен предыдущему, за исключением использования выводов PA10 и PA11 вместо PD5 и PD7.
/* Includes ------------------------------------------------------------------*/
#include "MDR32VF0xI_config.h"
#include "MDR32VF0xI_rst_clk.h"
#include "MDR32VF0xI_port.h"
/* Private define ------------------------------------------------------------*/
#define GPIO_PORT MDR_PORTA
#define GPIO_PORT_CLK RST_CLK_PCLK_PORTA
#define GPIO_PIN_1 PORT_PIN_10
#define GPIO_PIN_2 PORT_PIN_11
/* Private variables ---------------------------------------------------------*/
PORT_InitTypeDef PORT_InitStructure;
void Delay(uint32_t Ticks) {
for (uint32_t i = 0; i < Ticks; i++) { __NOP(); }
}
int main(void) {
RST_CLK_DeInit();
for (uint32_t i = 0; i < 100000; i++) {}
RST_CLK_HCLK_ClkSelection(RST_CLK_CPU_HCLK_CLK_SRC_HSI);
RST_CLK_PCLKCmd(GPIO_PORT_CLK, ENABLE);
PORT_StructInit(&PORT_InitStructure);
PORT_InitStructure.PORT_Pin = (GPIO_PIN_1 | GPIO_PIN_2);
PORT_InitStructure.PORT_Direction = PORT_DIRECTION_OUTPUT;
PORT_InitStructure.PORT_Function = PORT_FUNCTION_PORT;
PORT_InitStructure.PORT_Mode = PORT_MODE_DIGITAL;
PORT_InitStructure.PORT_Power = PORT_POWER_NOMINAL_UPTO_2mA;
PORT_Init(GPIO_PORT, &PORT_InitStructure);
PORT_SetBits(GPIO_PORT, (GPIO_PIN_1 | GPIO_PIN_2));
while (1) {
Delay(100);
PORT_ToggleBit(GPIO_PORT, (GPIO_PIN_1 | GPIO_PIN_2));
}
} 3. Использование выводов GPIO, совмещенных с JTAG
При разрешенной работе порта JTAG количество доступных для использования выводов GPIO у микросхем MDR1215LGI ограничено двумя выводами, а у MDR1219LGI - тремя. Отключение JTAG позволяет освободить еще 4 вывода. Аппаратное отключение JTAG осуществляется с помощью сброса в 0 бита JTAG_ON в регистре BKP_LDO батарейного домена. Для записи в данный бит предварительно необходимо разрешить тактирование блока BKP в регистре PER2_CLOCK контроллера тактовой частоты и записать ключ 0x8555AAA1 в регистр BKP_WPR батарейного домена. После отключения JTAG выводы, совмещенные с JTAG, можно настраивать в требуемую функцию.
Но важно понимать, что отключение JTAG программой, исполняемой из Flash-памяти, может привести к полной потере возможности подключения отладчика в дальнейшем. Поэтому перед отключением JTAG для возможности подключения к микроконтроллеру отладчиком в начале основной программы необходимо выставить задержку (например, 1 секунду), чтобы был временной промежуток между подачей питания и отключением JTAG.
Сохранить статью в PDF
Документация
Программное обеспечение