Программаторы

Материал из ВИКИЦМИТ
Перейти к навигации Перейти к поиску

J-Link

Update Jlink clone to latest version =
STM32 Nucleo 144: J-Link Reflash

Какие настройки нужно прописать в файлах MCU.csv и Flash.csv для корректной прошивки и отладки MDR32F9Q2I? Может быть нужно сделать еще какие-нибудь настройки? Для отладки использую связку Eclipse+GDB+J-Link. Плата LDM-K1986BE92QI.

Отладчик J-Link ARM V8.00 версия прошивки 2014 Nov 28 13:44, версия ПО JLink_V500f.

При добавлении строк в конфигурационные файлы J-Link V5.00f:

В файл MCU.csv:

Milandr;MDR32F9Q2I;MDR32F9Q2I internal;030000FF;0;0;0;4BA00477;8000000;20000000;8000

В файл Flash.csv:

Milandr;MDR32F9Q2I internal;0;0;1;34;0;32;1;1;0;0;0;0;0;0;0;0;0;0;0;"1000[32];"

С полем Algo=34 получается прочитать Flash-память MDR32F9Q2I при помощи отладчика J-Link 8 и программы J-Flash V5.00f.При этом выводится предупреждение:

The selected device "MDR32F9Q2I" is unknown to this version of the J-Link software.

Жмем кнопку No и чтение проходит без проблем. Но вот прошивать МК не хочет. При попытке стереть всю память, выдает ошибку:

Erase chip: Unsupported flash type / bus width (13413200). Please contact info@segger.com Failed to erase chip

Отладка работает в Eclipse с драйверами от SEGGER, можно выполнять по шагам ассемблерные инструкции, ставить аппаратные точки останова, запускать и останавливать программу, просматривать содержимое памяти и регистров ядра.

В связи с этим возникают вопросы:

- Возможно ли вообще прошивать Flash-память MDR32F9Q2I через J-Link?

Если с J-Link невозможно прошить Flash, то какими отладчиками можно пользоваться в Eclipse+GCC+GDB?

Проблема программирования Flash-памяти MDR32F9Q2I из Eclipse при помощи отладчика J-Link решилась использованием OpenOCD вместо ПО от Segger.

Итак, прежде всего, нужно заменить USB драйвер для J-Link от Segger на драйвер libusb. Делается это с помощью утилиты Zadig:

1. Запускаем утилиту Zadig с правами администратора;

2. Устанавливаем галочку Options->List All Devices;

3. Выбираем в списке USB устройство J-Link (J-Link должен быть подключен к USB);

4. Выбираем альтернативный драйвер libusb-win32 (WinUSB и libusbK тоже работают, но на некоторых ПК были проблемы);

5. Жмем кнопку Replace Driver.

Вернуть обратно драйвер от Segger можно повторной установкой Setup_JLink_Vxxxx.exe.

Создаем в Eclipse конфигурацию отладки GDB OpenOCD Debugging и во вкладке Debugger в поле Config options вводим:

-f interface/jlink.cfg -f target/mdr32f9q2i.cfg

Все остальные настройки можно оставить по-умолчанию.

Тестировалось на Eclipse Luna и Eclipse Mars, GNU ARM Eclipse plug-ins от 06.04.2015, J-Link 5, J-Link 8, J-Link Pro (по USB), OpenOCD 0.9.0, gcc_arm_none_eabi 4.9.3, GNU ARM Eclipse Build Tools v2.4, код стандартной библиотеки адаптированной под GCC emdr1986x-std-per-lib (находится здесь: https://github.com/eldarkg/emdr1986x-std-per-lib ).

Все нужные функции отладки работают корректно: точки останова (аппаратные и программные), пошаговая отладка на уровне C/C++ и ассемблера, выход из функции, старт и стоп программы, просмотр переменных и регистров ядра.

Сейчас работаю над отображением регистров периферии.

Иногда могут возникнуть проблемы с просмотром ассемблерного кода при отладке. Для решения проблемы нужно закрыть окно Assembly и нажать кнопку Instruction Stepping Mode. При этом окно Assembly снова появится с корректным кодом. Режим Instruction Stepping Mode можно выключить для отладки на уровне C/C++ кода.

Загрузчик EEPROM 1986BE4 для J-Link SEGGER.

Создано в Eclipse IDE for C/C++ Version: Mars.2 Release (4.5.2), GNU Arm Embedded Toolchain 5.4 2016q3.

Тестировался с J-link lite, J-link Commander, J-link GDB. Пак J-link'а V634b. Erase, program, verify без ошибок. Отладка в Eclipse с предварительной загрузкой в EEPROM работает.

SEGGER предоставляет описание, а так же шаблон проекта для SEGGER Studio для создания собственного загрузчика https://wiki.segger.com/Open_Flash_Loader

За основу взяты труды kravitz и R Max, так же проекты для Keil https://github.com/StartMilandr/FLM

В качестве загрузчика выступает elf файл. В release включаются только FlashPrg.c и FlashDev.c с необходимыми библиотеками. При сборе release должна быть включена отладка, опция -g. Так же необходимо отредактировать JlinkDevices.xml

Код: Выделить всё

  <Device>
    <ChipInfo Vendor="Milandr" Name="1986BE4" WorkRAMAddr="0x20000000" WorkRAMSize="0x4000" Core="JLINK_CORE_CORTEX_M0" />
    <FlashBankInfo Name="EEPROM" BaseAddr="0x0" MaxSize="0x20000" Loader="Devices\Milandr\1986BE4_EEPROM.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>

Файл загрузчика переименован для удобства.

P.S. На J-Flash лицензии не хватило...

Загрузчик EEPROM 1986BE1QI для J-Link SEGGER.

Создано там же, тестировался так же)

Содержимое JlinkDevices.xml

Код: Выделить всё

<Device>
    <ChipInfo Vendor="Milandr" Name="1986BE4x" WorkRAMAddr="0x20000000" WorkRAMSize="0x4000" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="EEPROM" BaseAddr="0x0" MaxSize="0x20000" Loader="Devices\Milandr\FL_1986BE4x.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
  <Device>
    <ChipInfo Vendor="Milandr" Name="1986BE1x" WorkRAMAddr="0x20100000" WorkRAMSize="0x4000" Core="JLINK_CORE_CORTEX_M1"/>
    <FlashBankInfo Name="EEPROM" BaseAddr="0x0" MaxSize="0x20000" Loader="Devices\Milandr\FL_1986BE1x.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>

Предыдущий проект был как шаблон. Разделил по семействам для каждого свой проект. И именование.

Для 1986BE1x рабочая область RAM как для данных так и для инструкций начинается с 0x20100000. С 0x20000000 только для данных.

Вложение:

Комментарий к файлу: Сам проект. В папке Release лежит непосредственно сам загрузчик FL_1986BE1x.elf

FL_1986BE1x.zip [5.79 МБ]

247 скачиваний

Вложение:

Комментарий к файлу: Проект для 1986BE4x, немного подкорректирован. В папке Release лежит непосредственно сам загрузчик FL_1986BE4x.elf

FL_1986BE4x.zip [5.33 МБ]

230 скачиваний

P.S. Программирование страницы EEPROM контроллера 1986BE1x происходит через одно место...

Загрузчик EEPROM 1986BE94 для J-Link SEGGER.

Создано там же, тестировался так же)

Содержимое JlinkDevices.xml

Код: Выделить всё

<Device>
    <ChipInfo Vendor="Milandr" Name="1986BE4x" WorkRAMAddr="0x20000000" WorkRAMSize="0x4000" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="EEPROM" BaseAddr="0x0" MaxSize="0x20000" Loader="Devices\Milandr\FL_1986BE4x.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
  <Device>
    <ChipInfo Vendor="Milandr" Name="1986BE1x" WorkRAMAddr="0x20100000" WorkRAMSize="0x4000" Core="JLINK_CORE_CORTEX_M1"/>
    <FlashBankInfo Name="EEPROM" BaseAddr="0x0" MaxSize="0x20000" Loader="Devices\Milandr\FL_1986BE1x.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>
   <Device>
    <ChipInfo Vendor="Milandr" Name="1986BE9x" WorkRAMAddr="0x20000000" WorkRAMSize="0x8000" Core="JLINK_CORE_CORTEX_M3"/>
    <FlashBankInfo Name="EEPROM" BaseAddr="0x8000000" MaxSize="0x20000" Loader="Devices\Milandr\FL_1986BE9x.elf" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
  </Device>

Вложение:

Комментарий к файлу: Сам проект. В папке Release лежит непосредственно сам загрузчик FL_1986BE9x.elf

FL_1986BE9x.zip [7.84 МБ]

267 скачиваний

P.S. Программирование страницы EEPROM контроллера 1986BE9x происходит так же как и 1986BE1x. Начальный адрес EEPROM 0x08000000.

Converting ST-LINK On-Board Into a J-Link

Eclipse + GCC + OpenOCD: готовая сборка среды

QBS шаблон для программирования микроконтроллеров в QtCreator на примере контроллеров Миландр