세거 J-Link로 아두이노 포텐타 H7 듀얼 코어 시스템 디버깅하기
부품 및 소모품
| Arduino Portenta H7 | × | 1 |
| Arduino Portenta H7 브레이크아웃 보드 | × | 1 |
| Segger J-Link 디버그 프로브 | × | 1 |
| Segger Cortex M 어댑터 | × | 1 |
앱 및 온라인 서비스
| Arduino IDE |
| Microsoft Visual Studio 2017 |
| Visual Micro |
프로젝트 개요
아두이노 포텐타 H7은 강력한 듀얼 코어 아키텍처를 제공합니다: 480MHz Cortex-M7과 240MHz Cortex-M4. 두 코어는 독립적인 펌웨어를 실행하며 공유 메모리나 세마포어로 통신합니다.
두 코어를 동시에 디버깅하려면 전용 SWD 인터페이스와 멀티 타겟 세션을 지원하는 디버거가 필요합니다. 이 가이드에서는 세거 J-Link로 각 코어에 연결하고, 개발 환경을 설정하며, 각 코어의 LED를 독립 제어하는 간단한 블링크 예제로 시연합니다.
하드웨어 설정
- 포텐타 H7을 브레이크아웃 보드에 장착합니다. 보드는 두 코어의 SWD 핀에 연결되는 20핀 MIPS 스타일 헤더를 노출합니다.
- 브레이크아웃 헤더에 20핀 MIPS 컨버터를 연결해 디버깅 신호를 분리합니다.
- 아래 핀아웃 다이어그램에 따라 컨버터를 세거 J-Link에 배선합니다. 커스텀 솔루션을 원하면 0.05인치 피치 커넥터를 사용하고 두 번째 이미지의 예시 배선을 따르세요.
소프트웨어 설정
- Arduino IDE 설치 (아두이노 웹사이트)
- Microsoft Visual Studio (2017, 2019, 2022) 및 Visual Micro 확장 설치 (Visual Micro 웹사이트에서 전체 지침 확인)
- Visual Micro Explorer 또는 아두이노 IDE 보드 매니저에서 Arduino Mbed OS Portenta Boards 패키지 추가
- Zadig로 세거 J-Link의 인터페이스 0 USB 드라이버를 WinUSB 드라이버로 교체. 짧은 워크스루 영상 참조
코드 작성
각 코어별로 별도 프로젝트를 준비합니다. 다음 블링크 예제는 각 코어의 서로 다른 LED를 점등하며, 독립적으로 디버깅 가능합니다.
중요: M7 프로젝트에서 setup() 시작 부분에 bootM4()를 호출해 두 코어가 모두 활성화되도록 하세요.
디버그 설정: M7 코어
M7 스케치를 Visual Studio에서 열고 디버그 > 하드웨어에서 Segger J-Link Debugger 선택 (NoOpenOCD 버전 아님). M7 코어에 빌드 및 업로드.
디버그 설정: M4 코어
M4 스케치를 열고 디버그 > 하드웨어에서 Segger J-Link Debugger (NoOpenOCD) 선택. M4 코어에 빌드 및 업로드.
디버거 시작
먼저 디버그 > 프로세스에 연결으로 M7 스케치 디버깅 세션을 시작합니다. M4 스케치도 동일하게 반복합니다. 이제 각 프로젝트에서 독립적으로 브레이크포인트 설정, 일시정지, 단계 실행, 계속 실행이 가능합니다. 각 코어는 자체 명령에만 반응합니다.
워크스루 영상
유튜브에서 단계별 시연 시청:
포텐타 H7 듀얼 코어 세거 J-Link 디버깅
유용한 링크
코드
- H7 M4 블링크 코드
- H7 M7 블링크 코드
H7 M4 블링크 코드
// 포텐타 M4 코어 블링크
void setup() {
pinMode(LED_BLUE, OUTPUT);
}
void loop() {
digitalWrite(LED_BLUE, HIGH); delay(1000);
digitalWrite(LED_BLUE, LOW); delay(1000);
}
H7 M7 블링크 코드
// 포텐타 M7 코어 블링크
void setup() {
bootM4(); // M4 코어 활성화
pinMode(LED_RED, OUTPUT);
}
void loop() {
digitalWrite(LED_RED, HIGH); delay(1000);
digitalWrite(LED_RED, LOW); delay(1000);
}
회로도
브레이크아웃 보드의 SWD 핀을 세거 J-Link에 연결하는 방법: