Отладка двухъядерной системы Arduino Portenta H7 с Segger J-Link
Компоненты и материалы
| Arduino Portenta H7 | ×1 |
| Arduino Portenta H7 Breakout Board | ×1 |
| Segger J-Link Debug Probe | ×1 |
| Segger Cortex M Adapter | ×1 |
Программное обеспечение и сервисы
- Arduino IDE
- Microsoft Visual Studio 2017/2019/2022
- Visual Micro (расширение для VS)
Обзор проекта
Arduino Portenta H7 предоставляет мощную двухъядерную архитектуру: Cortex-M7 на 480 МГц и Cortex-M4 на 240 МГц. Два ядра могут выполнять независимую прошивку и общаться через разделяемую память или семафоры.
Одновременная отладка обоих ядер требует выделенный SWD-интерфейс и отладчик с поддержкой мультитаргетных сессий. В этом руководстве показано, как подключить Segger J-Link к каждому ядру, настроить среду разработки и запустить простой пример blink, демонстрирующий независимое управление светодиодом каждого ядра.
Аппаратная настройка
- Установите Portenta H7 на breakout-плату. Она выводит 20-пиновый MIPS-стиль разъём, соединяющий SWD-пины обоих ядер.
- Подключите 20-пиновый MIPS-конвертер к разъёму breakout для разделения сигналов отладки.
- Соедините конвертер с Segger J-Link согласно распиновке ниже. При желании можно использовать кастомное решение с 0.05-дюймовыми коннекторами по примеру второй картинки.
Программная настройка
- Установите Arduino IDE (скачать с официального сайта).
- Установите Microsoft Visual Studio (2017, 2019 или 2022) и расширение Visual Micro (подробные инструкции на сайте Visual Micro).
- Добавьте пакет Arduino Mbed OS Portenta Boards через Visual Micro Explorer или Board Manager в Arduino IDE.
- Замените USB-драйвер интерфейса 0 Segger J-Link на WinUSB с помощью Zadig. Короткое видео-руководство приведено ниже.
Пишем код
Подготовьте два отдельных проекта — по одному для каждого ядра. Приведённые ниже примеры Blink зажигают разные светодиоды на каждом ядре и могут отлаживаться независимо.
Важно: в проекте M7 вызовите bootM4() в начале setup() для активации обоих ядер.
Настройка отладки: ядро M7
Откройте скетч M7 в Visual Studio, перейдите в Debug > Hardware и выберите Segger J-Link Debugger (не версию NoOpenOCD). Соберите и загрузите скетч в ядро M7.
Настройка отладки: ядро M4
Откройте скетч M4, выберите Debug > Hardware и выберите Segger J-Link Debugger (NoOpenOCD). Соберите и загрузите в ядро M4.
Запуск отладчика
Сначала запустите сессию отладки для скетча M7 через Debug > Attach to Process. Повторите для скетча M4. Теперь вы можете устанавливать точки останова в любом проекте, ставить на паузу, выполнять пошагово или продолжать — каждое ядро отвечает на свои команды независимо.
Видео-разбор
Пошаговая демонстрация на YouTube:
Отладка Portenta H7 Dual-Core с Segger J-Link
Полезные ссылки
Исходный код
- H7 M4 Blink Code
- H7 M7 Blink Code
H7 M4 Blink Code
// Blink на ядре Portenta M4
void setup() {
pinMode(LED_BLUE, OUTPUT);
}
void loop() {
digitalWrite(LED_BLUE, HIGH);
delay(1000);
digitalWrite(LED_BLUE, LOW);
delay(1000);
}
H7 M7 Blink Code
// Blink на ядре Portenta M7
void setup() {
bootM4(); // Активация ядра M4
pinMode(LED_RED, OUTPUT);
}
void loop() {
digitalWrite(LED_RED, HIGH);
delay(1000);
digitalWrite(LED_RED, LOW);
delay(1000);
}
Схемы
Подключение SWD-пинов на Breakout Board к Segger J-Link:
Производственный процесс
- Arduino запускает Portenta H7: Industrial-Grade IoT Board дебютирует на CES
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Оптимизированные решения питания для проектов на Arduino
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
- Пошаговое руководство: сборка умного четырёхногого робота на Arduino
- Своё рулевое управление (джойстик) для игр на Arduino