[STM32] Arduino Pro Portenta H7 Dual Core Processing

2020. 7. 29. 15:47💿/Firmware

   지난번 시간에 개봉과 개발환경을 구축했다면, 이제 본격적인 사용을 하기 전에 테스트를 해보겠습니다.
가장 눈 여겨 봐야할 기능 중 하나인 Dual Core Processing을 간단하게 구현하겠습니다.
Portenta H7에는 core라고 불리는 두개의 처리장치 (m7 core와 m4 core)가 있는 Processor가 장착돼있습니다.이 뜻은 m7, m4가 서로 다른 일을 각각 처리할 수 있다는 뜻입니다.
간단하게 m7과 m4에 서로 다른 일을 주는 예제를 처리해 보도록 하겠습니다. 

 

Portenta H7 Dual Core Processing

 

위의 이미지 클릭 시 아두이노 프로 Dual Core Processing tutorial로 이동합니다.

 

M7 Core

M7 core에 업로드해줄 코드입니다.

void setup() {
  LL_RCC_ForceCM4Boot();
  pinMode(LEDR, OUTPUT);
  digitalWrite(LEDR, HIGH);
}

void loop() {
  digitalWrite(LEDR, LOW);
  delay(500);
  digitalWrite(LEDR, HIGH);
  delay(500);
}
          

0.5초만큼 켜져있다가, 0.5초 만큼 꺼지는 동작을 반복하는 LED Red를 업로딩 해줍니다.

LL_RCC_ForceCM4Boot(); / M4 core 강제 부팅

    Portenta H7의 부트 로더는 M7 core 만 자동으로 부팅되도록 구성돼 있습니다. 간단하게 사용할 경우 불필요한 프로그래밍을 최대한 줄여 M4를 사용하지 않게끔 하여, 전원을 공급할 필요가 없도록 전류를 최대한 줄이는 게 효율적이기 때문입니다. 그렇게 때문에 M7에는 M4의 초기화를 자동으로 처리하는 적절한 펌웨어가 없습니다.
  그러니까 Dual core를 실행하기 위해선 M4를 강제로 부팅시켜 줘야 합니다.
LL_RCC_ForceCM4Boot() 명령어는 Portenta H7의 M7 스케치의 Setup단계에서 사용하여. 강제로 M4를 부팅시킬 수 있습니다.

M4 core

void setup() {
  pinMode(LEDB, OUTPUT);
  digitalWrite(LEDB, HIGH);
}

void loop() {
  digitalWrite(LEDB, LOW);
  delay(200);
  digitalWrite(LEDB, HIGH);
  delay(200);
}

M4 core에는 0.2초 주기로 켰다 꺼졌다 하는 LED Blue를 업로딩 해줍니다.

  간단하게 듀얼코어 프로세싱을 구현할 수 있었습니다.