Программаторы
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 на примере контроллеров Миландр