멀티 코어 주의 사항

멀티코어 MCU

하기 제품이 대상입니다.
F28P65xD, F2827xD, F2838xS, F2838xD

컴파일러 Predefined Symbols옵션

easyDSP에서 제공하는 소스 파일은 CPU1, CPU2, CM, _FLASH compiler에서 선정의된 심볼을 참조하도록 작성되어 있습니다. 이러한 심볼은 멀티코어 MCU (ex, 2837x, 2838x 시리즈)를 사용하는데에 필수적인 조건입니다
F2837xD/F2838xD
CPU2라면 CPU2가 선정의되어야 하며, F2838x CM이라면 CM이 선정의되어야 합니다.
보통 CCS에서 자동 선정되지만, 혹시나 확인 부탁드립니다.

 

디버거 사용시

디버거 사용시에는 디버거가 각 코어에 메모리를 적절히 로딩하므로, easyDSP의 멀티코어 부팅관련 함수 (easyDSP_Boot_Sync)를 동작시키지 말아야 합니다. easyDSP가 제공하는소스파일 폴더의 main.c의 서두 부분의 #define USE_DEBUGGER 을 참조하시기 바랍니다.

램부팅시 easyDSP 사용 리소스

멀티코어 MCU의 램부팅을 위해 easyDSP가 사용하는 리소스가 있습니다. 해당 리소스는 CPU2/CM 램 부팅 이전에 (easyDSP 제공 부팅 함수 easyDSP_Boot_Sync()호출 이전) 사용자 프로그램에서 사용되지 않도록 주의하세요. CPU2/CM 부팅 이후에는 사용하셔도 됩니다.
 MCU

 F2837xD

F2838xS
F2838xD 

 F28P65xD

 easyDSP가 CPU2, CM 부팅시 사용하는 리소스

IPC_FLAG0
IPC_FLAG5
IPC_FLAG31

IPC_FLAG0
IPC_FLAG5
IPC_FLAG6
IPC_FLAG30
IPC_FLAG31
CPU1 to CPU2 MSGRAM1
CPU1 to CM MSGRAM1

IPC_FLAG0
IPC_FLAG5
CPU1 to CPU2 MSGRAM0



F2838x, F28P65xD CPU2, CM
플래시 부팅 시작 위치

easyDSP 제공 소스파일에서 하기와 같이 설정되어 있습니다.
F2838x에서는 CPU2, CM 모두
플래시 sector 0 에서 부팅합니다.
F28P65xD CPU2는 플래시 뱅크 3에서 부팅합니다.
만약 다른 플래시 위치에서 부팅을 하고자 할 경우, easyDSP 제공 소스파일에서 easyDSP_Boot_Sync() 함수 내의 아래 부분 소스를 변경하여 주시기 바랍니다 .

F2838x BitField 사용시 :
ezDSP_Device_bootCPU2(BOOTMODE_BOOT_TO_FLASH_SECTOR0);
ezDSP_Device_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0);

F2838x DriberLib 사용시 :
Device_bootCPU2(BOOTMODE_BOOT_TO_FLASH_SECTOR0);
Device_bootCM(BOOTMODE_BOOT_TO_FLASH_SECTOR0);

F28P65xD BitField 사용시 : ezDSP_Device_bootCPU2(BOOTMODE_BOOT_TO_FLASH_BANK3_SECTOR0);
F28P65xD DriverLib 사용시 : Device_bootCPU2(BOOTMODE_BOOT_TO_FLASH_BANK3_SECTOR0);

F2838x, F28P65xD CPU2, CM 램부팅시 메모리 사용 제약

해당 MCU는 SCI를 통한 램부팅은 CPU1에만 가능하며, CPU2, CM에 대해서는 불가합니다.
easyDSP에서 CPU2, CM에 대해서도 SCI를 통한 램부팅을 지원하기 위해, 먼저 CPU1 사용자 프로그램을 SCI를 통해 램 부팅한 후, 별도의 Agent 프로그램으로 CPU2/CM "IPC Message Copy to RAM" 모드로 부팅한 후, Agent 프로그램이 SCI를 통해서 사용자 프로그램을 CPU2/CM에 다운로딩하는 방식을 사용합니다.  
따라서 Agent 프로그램이 동작할 일정 RAM 영역을 사용자 프로그램에서는 un initialized section으로만 사용할 수 있습니다.
이러한 제약을 cmd 파일을 적절히 반영하시기 바랍니다.

 

 F2838x 램부팅 사용시
사용자 프로그램 메모리 제약

  F28P65xD 램부팅 사용시
사용자 프로그램 메모리 제약

CPU1 
사용자 프로그램 

 없음  없음

CPU2
사용자 프로그램

 M1 RAM 영역 일부 (0x400 - 0x7F7)을 initialized section으로 사용 불가  M1 RAM 영역 일부 (0x400 - 0x5FF)을 initialized section으로 사용 불가

CM
사용자 프로그램

 S0 RAM 영역 일부 (0x2000.0800 - 0x2000.0FFF)을 initialized section으로 사용 불가  


F2837xD, F2838xD CPU2 
램부팅 방식 변경 (easyDSP 소스파일 버전 11부터)

easyDSP 소스파일 버전 11 이전에는 F2837xD, F2838xD CPU2 램부팅 동작시
CPU1용 easyDSP 소스파일내 easyDSP_SCIBootCPU2(void) 함수에서 모든 GSRAM (Global Shared RAM) 영역을 CPU2에 할당한 뒤 CPU2 램부팅을 수행하고, 이후 다시 모든 GSRAM 영역을 CPU1에 할당합니다.
따라서 CPU1 프로그램의 램부팅 관련 코드는 (easyDSP_SCIBootCPU2()함수의 .text 섹션) CPU1 LSRAM(Local Shared RAM)에 위치시켜야 하며,
CPU2 램부팅 이후 필요시 CPU1에서 GSRAM을 CPU2에 할당해야하기에, 여러가지 주의사항이 수반되어야 합니다. 해당 사항에 대해서는 버전 11 이전 easyDSP의 도움말을 참조하시기 바랍니다.

이러한 방식은 더이상 권장되지 않으므로, 가급적 easyDSP 소스파일 버전 11 및 이후 버전을 사용하시기 바랍니다.
새로운 방식에서는 더이상 easyDSP_SCIBootCPU2(void) 함수에서 GSRAM을 CPU1 또는 CPU2에 할당하지 않습니다.
대신, CPU1 프로그램 main.c에서 easyDSP_SCIBootCPU2(void) 호출 이전에 CPU2에서 사용하는 공유 메모리를 CPU2에 할당합니다.

이로서 이전 버전의 제약 사항 및 고려 사항이 더 이상 필요하지 않습니다.

F2837xD, F28P65xD의 CPU1, CPU2  부팅 순서 및 동기화

플래시 부팅의 경우 CPU1>CPU2순으로 순차적 부팅을 하며 CPU간 동기화는 수행되지 않습니다.
램부팅의 경우 CPU1>CPU2 순으로 부팅한 후 easyDSP_Boot_Sync() 함수 종료가 동기화됩니다.
CPU1에서 CPU2 부팅을 시작하기 전 (즉, CPU1에서 easyDSP_Boot_Sync 함수를 호출하기 전), CPU2에 적절히 메모리를 할당해야함에 주의하세요.

F2838x의 CPU1, CPU2, CM 의 부팅 순서 및 동기화

플래시 부팅의 경우 CPU1>CPU2>CM순으로 순차적 부팅을 하며 CPU간 동기화는 수행되지 않습니다.
램부팅의 경우 CPU1>CPU2>CM 순으로 부팅한 후  easyDSP_Boot_Sync() 함수 종료가 동기화됩니다.
CPU1에서 CPU2/CM 부팅을 시작하기 전 (즉, CPU1에서 easyDSP_Boot_Sync 함수를 호출하기 전), CPU2/CM에 적절히 메모리를 할당해야함에 주의하세요.

F2838x의 CPU2, CM 클럭 주파수는 ?

CPU1이 CPU2 및 CM을 부팅할 때, 각각 200Mhz, 125MHz 클럭 주파수를 세팅합니다. 이를 변경하려면 직접 해당 소스 부분을 수정하시기 바랍니다.

변경된 사용자 프로그램을 램부팅 또는 플래시에 프로그래밍할 경우

사용자가 도중에 프로그램을 변경하였다면 , 램부팅 내지는 플래시 프로그래밍 이후, 모든 코어에 대해서 변경된 프로그램의 out파일을 사용하여 모니터링을 수행해야 합니다.
만약 각 코어에 연결된 easyDSP가 동일한 PC에 연결되어 있다면, 이러한 동작은 자동으로 진행됩니다.
예를 들어, CPU1에 연결된easyDSP에서 CPU2에 연결된 easyDSP에 이를 반영하도록 자동으로 지령을 내립니다 
만약 각 코어에 연결된 easyDSP가 각기 다른 PC에 연결되어 있다면, 이러한 작업은 MCU > Reload *.out 메뉴를 사용하여 사용자가 직접 수행해야 합니다.