55472

[i] Запуск микросхем MDR1215LGI

Дата последнего изменения: 01.11.2024 16:50:38

Микросхемы MDR1215LGI функционально аналогичны микросхемам MDR1206FI за исключением корпуса (и внутренней разварки выводов), а также некоторых особенностей, которые описаны ниже. 

В рамках данной статьи приводится базовая информация для использования микросхем MDR1215LGI.

1. Создание и запуск проекта HelloWorld в IDE Eclipse и IAR EW for RISC-V, особенности работы

Вся информация из статей [i] Создаем проект для МК MDR1206FI, MDR1206AFI в IDE Eclipse и [i] Создаем проект для МК MDR1206FI, MDR1206AFI в IAR EW for RISC-V касательно микросхем MDR1206FI применима к MDR1215LGI, поэтому по части установки ПО и настройки проекта следует ориентироваться на информацию из этой статьи. 

При подключении отладчиком к микросхеме по JTAG выводы микросхемы в функции JTAG должны быть стандартно доопределены до высокого уровня внешними резисторами доопределения от 4,7 кОм до 10 кОм с учетом того, чтобы эти подтяжки не влияли на работу системы.

Основные отличия относительно MDR1206FI, на которые стоит обратить внимание:

  • Загрузочная программа для микросхем MDR1206(A)FI к микросхемам MDR1215LGI не применима и должна использоваться отдельная загрузочная программа. 

  • В загрузочной программе микросхем MDR1215LGI осуществляется настройка выводов GPIO, не выведенных в качестве выводов микросхем MDR1215LGI, как технологических выводов. Перенастраивать данные технологические выводы GPIO нельзя, что необходимо предусмотреть в основном ПО. В качестве технологического вывода выступает PD11, настраиваемый как цифровой выход в функции MODE=00 с состоянием высокого уровня. В целом, следует использовать только те выводы, которые разведены в данном корпусе - это PA[9:6] и PD5, PD7. Неиспользуемые в микросхеме MDR1215LGI выводы GPIO при настройке PA[9:6] и PD5, PD7 должны быть замаскрованы.

  • Ограничение на использование только разведенных в корпусе выводов применимо и для специальных выводов, таких как SW (настройка данного функционал в BKP не приведет к выводу микросхемы из строя, но не имеет смысла - в частности, значения WAKEUP3-WAKEUP1 всегда равны 0). 

  • У микросхем MDR1215LGI вывод nRESET доопределен до высокого уровня внутри корпуса и в связи с крайне ограниченным количеством выводов GPIO в загрузочной программе отсутствует выбор режима загрузки - при запуске загрузочная программа после необходимых настроек передает управление в основную Flash-память. То есть записываемое программное обеспечение начинает работу сразу при подаче питания и, если каким-то образом нарушается доступ по JTAG (например, переопределение функций выводов GPIO, совмещенных с JTAG, или "поломка" тактирования - см. [i] МК не определяется по интерфейсу JTAG/SWD. Восстановление работы МК), то восстановить доступ к JTAG будет или крайне затруднительно, или невозможно. Поэтому для предосторожности в основной программе нужно первыми инструкциями ввести задержку и внимательно настраивать выводы GPIO.  

Код базового примера "HelloWorld" с переключением выводов PD5, PD7 при использовании SPL MDR32VF0xI v0.1.0 приведен ниже:

/* Includes ------------------------------------------------------------------*/

#include "MDR32VF0xI_config.h"

#include "MDR32VF0xI_rst_clk.h"

#include "MDR32VF0xI_port.h"


/* Private define ------------------------------------------------------------*/

#define LED_PORT MDR_PORTD

#define LED_PORT_CLK RST_CLK_PCLK_PORTD

#define LED_PIN_1 PORT_PIN_7

#define LED_PIN_2 PORT_PIN_5


/* Private variables ---------------------------------------------------------*/

PORT_InitTypeDef PORT_InitStructure;


uint32_t DelayCnt = 0;


/* Main function */

int main()

{

    RST_CLK_DeInit();

    for (uint32_t i = 0; i < 1000000; i++) {}

    RST_CLK_HCLK_ClkSelection(RST_CLK_CPU_HCLK_CLK_SRC_HSI);


    RST_CLK_PCLKCmd(LED_PORT_CLK, ENABLE);


    PORT_StructInit(&PORT_InitStructure);

    PORT_InitStructure.PORT_Pin = (LED_PIN_1 | LED_PIN_2);


    PORT_InitStructure.PORT_Direction = PORT_DIRECTION_OUT;

    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(LED_PORT, &PORT_InitStructure);


    PORT_SetBits(LED_PORT, (LED_PIN_1 | LED_PIN_2));


    while (1) {

          if (DelayCnt++ >= 0x00010000) {

                DelayCnt = 0;

                PORT_ToggleBit(LED_PORT, (LED_PIN_1 | LED_PIN_2));

          }

    }

}


2. Использование выводов GPIO, совмещенных с JTAG

При разрешенной работе порта JTAG количество доступных для использования выводов GPIO у микросхем MDR1215LGI ограничено двумя выводами (PD5 и PD7). Их количество можно расширить до 6 за счет отключения JTAG. Аппаратно отключение JTAG осуществляется с помощью сброса в 0 бита BKP_LDO.JTAG_ON батарейного домена. Для записи в данный бит предварительно необходимо разрешить тактирование блока BKP в регистре PER2_CLOCK контроллера тактовой частоты и записать ключ 0x8555AAA1 в регистр BKP_WPR батарейного домена. После отключения JTAG выводы PA6-PA9 можно настраивать в требуемую функцию. 

Но важно понимать, что отключение JTAG исполняемым из Flash-памяти ПО может повлечь за собой полную потерю возможности подключения по JTAG в дальнейшем. Поэтому перед отключением JTAG для возможности подключения к микроконтроллеру отладчиком в начале основной программы необходимо выставить достаточную задержку (например, 1 секунду), чтобы был временной промежуток между подачей питания и отключением JTAG.

Сохранить статью в PDF

Документация

Теги

Была ли статья полезной?