[i] Применение SEGGER Real Time Transfer (RTT) в микроконтроллерах К1986ВЕ1QI, К1986ВЕ92QI

ID статьи: 55380
Дата последнего изменения: 29.10.2024 17:34:06
Материал из настоящей статьи, относящийся к микросхемам К1986ВЕ92QI и К1986ВЕ1QI, распространяется в том числе на микроконтроллеры К1986ВЕ92FI, К1986ВЕ92F1I, К1986ВЕ94GI и К1986ВЕ1FI, К1986ВЕ1GI.

В статье Printf через ITM рассматривалась возможность вывода информации (в том числе отладочной) с помощью отладчика по интерфейсу ITM. Однако, такой подход применим только для МК с ядром Cortex-M3 и выше. Для микросхем К1986ВЕ1QI, ядро которых функционально аналогично Cortex-M1, данная возможность не применима. 

В статье Printf через UART рассмотрена возможность вывода информации через аппаратный блок UART и без использования отладчика, но данный способ задействует аппаратные ресурсы микросхемы, которые могли бы использоваться для задач вне отладки. 

В качестве более быстрого и универсального, а также менее затрагивающего аппаратные ресурсы микросхем решения можно рассмотреть технологию Real Time Transfer (RTT), которая изначально была разработана SEGGER для JTAG-адаптеров J-Link.

1. Сводная информация

Метод Real Time Transfer, несмотря на то, что разработан для отладчиков J-Link, не привязан к конкретному JTAG-программатору, но предоставляемое компанией SEGGER программное обеспечение для ПК предназначено только для J-Link. Со стороны микроконтроллера требуется поддерживать фоновый доступ к памяти ("background memory access") - то есть это любые микроконтроллеры с ядром ARM Cortex-M или функционально аналогичным.

Программное обеспечение на ПК передает JTAG-отладчику команду записать или считать из ОЗУ микроконтроллера специальную структуру "SEGGER RTT Control Block", которая отвечает за "чтение" и "запись" информации из/в микроконтроллер. При конфигурации подключения RTT необходимо указать или непосредственно адрес на структуру, или адресный диапазон ОЗУ, в котором она находится.

На стороне ПК программное обеспечение для обмена данными предоставляется SEGGER (JLinkRTTClient, JLinkRTTLogger, JLinkRTTViewer - они работают с J-Link). 

На стороне микроконтроллера весь функционал реализуется проприетарной программной библиотекой RTT.

Библиотека RTT и ПО от SEGGER содержатся в составе "J-Link Software and Documentation Pack". Если устанавливаемое инсталлятором ПО (а для Windows и MacOS есть только инсталляторы) не требуется и нужна только библиотека RTT, можно скачать архив для любой операционной системы (на данный момент архивы есть только для Linux). Внутри архива или после установки инсталлятора библиотека RTT с примерами доступна в папке Samples\RTT\

2. Пример запуска RTT на К1986ВЕ92QI (К1986ВЕ92FI, К1986ВЕ92F1I, К1986ВЕ94GI)

Для базового запуска достаточно скопировать в новый проект файлы SEGGER_RTT.c, SEGGER_RTT.h, SEGGER_RTT_printf.c и SEGGER_RTT_Conf.h. Конфигурационный файл SEGGER_RTT_Conf.h содержит ряд настроек, которые в рамках базового запуска можно не изменять. 

В конце статьи приведен проект для микроконтроллера К1986ВЕ92QI в среде Keil uVision 5, где используется пример "Эхо ("Main_RTT_InputEchoApp.c"). Структура SEGGER_RTT_CB _SEGGER_RTT, на которую нужно указать адрес в ПО для ПК, расположена в адресной области ОЗУ SRAM (с адреса 0x20000000) - а именно по адресу 0x20000008. При использовании ПО от SEGGER (на примере J-Link RTT Veiwer) адрес указывается при конфигурации соединения (File -> Connect) - см. рис. 1.


Рисунок 1 - Подключение к микроконтроллеру в J-Link RTT Viewer, указание адреса структуры в памяти микроконтроллера

После подключения к микросхеме отладчиком и установки соединения отправляемые в J-Link RTT Veiwer данные транслируются обратно (рисунок 2).


Рисунок 2 - Работа примера "Main_RTT_InputEchoApp" в J-Link RTT Viewer

3. Особенности запуска RTT на К1986ВЕ1QI (К1986ВЕ1FI, К1986ВЕ1GI)

Для микросхем К1986ВЕ1QI (К1986ВЕ1FI, К1986ВЕ1GI) есть следующие особенности относительно запуска на микросхемах К1986ВЕ92QI:

1) В микросхеме помимо AHB-Lite SRAM (с адреса 0x2010_0000) реализовано DTCM SRAM (c адреса 0x2000_0000), где по умолчанию располагаются данные, в том числе структура SEGGER_RTT_CB _SEGGER_RTT. Однако для корректной работы RTT структуру SEGGER_RTT_CB _SEGGER_RTT нужно расположить во внутреннюю AHB-Lite SRAM.

Для этого в проекте в среде Keil нужно подключить scatter-файл c областью "EXECUTABLE_MEMORY_SECTION", как описано в статье "Расположение функций в ОЗУ, программирование EEPROM". Далее в начале файла "SEGGER_RTT_Conf.h" добавить строку:

#define SEGGER_RTT_SECTION "EXECUTABLE_MEMORY_SECTION"

В результате структура SEGGER_RTT_CB _SEGGER_RTT будет расположена в области AHB-Lite SRAM и обмен через RTT будет осуществляться. 

2) В связи с особенностями ядра и реализации задержки доступа к Flash-памяти корректная работа RTT возможна только при нулевой задержке (MDR_EEPROM->CMD.Delay = 0) - по сбросу при этом выставлена ненулевая задержка (Delay=0x04) и ее нужно будет сбросить в 0. Это накладывает ограничение на частоту микроконтроллера при использовании RTT - до 25 МГц. 

Проект для К1986ВЕ1QI, учитывающий данные особенности, приведен в конце статьи.

Контактная информация

Сайт:https://support.milandr.ru
E-mail:support@milandr.ru
Телефон: +7 495 221-13-55