AzureSphere M4 Running on the Flash

Taylor
WIZnet
Published in
Nov 10, 2020

최초 배포 일자 : 2020/11/02
최종 수정 일자 : 2020/11/02

MT3620은 2개의 M4 Core에 SRAM, TCM을 포함하고 있습니다. 또한 각 M4 Core는 1MBytes Flash를 포함하고 있습니다. 이는 아래 linker script linker.ld를 통해서도 확인할 수 있습니다.

하지만 아래와 같이 SDK Example은 TCM에 모든 Section을 배치하여 사용하고 있습니다.

MEMORY
{
TCM (rwx) : ORIGIN = 0x00100000, LENGTH = 192K
SYSRAM (rwx) : ORIGIN = 0x22000000, LENGTH = 64K
FLASH (rx) : ORIGIN = 0x10000000, LENGTH = 1M
}

REGION_ALIAS(“CODE_REGION”, TCM);
REGION_ALIAS(“RODATA_REGION”, TCM);
REGION_ALIAS(“DATA_REGION”, TCM);
REGION_ALIAS(“BSS_REGION”, TCM);

보통은 Flash에 Code나 Read-Only Data를 배치하고 Data나 BSS를 RAM에 사용합니다. linkser script를 수정해서 Flash에 Code, Read-Only Data를 배치하여 실행해보겠습니다.

SDK는 Link Github MediaTek SDK 를 사용합니다.

SDK 변경 사항 release_201020에서 아래와 같이 linker script의 수정이 있었습니다. 이전 Version에서는 vector_table을 text section에 배치해서 flash에 Code를 배치했을 때 vector_table을 고정해서 사용하거나, 별도 등록/해지 할 수 있도록 수정했어야 했는데 이부분이 수정 되었습니다.

Example 중 HelloWorld를 선택하여 Visual Studio에서 열어줍니다. CMake Project를 여는 방법은 이전글을 참조해주십시오.

아래와 같이 linker script linker.ld를 수정합니다.

REGION_ALIAS(“CODE_REGION”, FLASH);
REGION_ALIAS(“RODATA_REGION”, FLASH);

또한 아래와 같이 CMakeLists.txt도 수정합니다.

add_compile_definitions(M4_ENABLE_XIP_FLASH)

저장하고 Build 하여 줍니다. release_201020 이후 이처럼 간단하게 Flash를 사용하 도록 수정할 수 있습니다.

이를 disassembly로 확인해 보겠습니다. Azure Sphere Developer Command Prompt를 실행하여 MT3620_RTApp_BareMetal_HelloWorld/ 로 이동합니다.

아래와 같이 objdump를 실행 합니다.

arm-none-eabi-objdump -Dsxzh .\out\ARM-Debug\Bare_Metal_RTApp_HelloWorld.out > Bare_Metal_RTApp_HelloWorld.out.dis

생성된 Bare_Metal_RTApp_HelloWorld.out.dis 를 열어서 RTCoreMain을 찾아 보면 Flash 영역(0x10000000 1M)임을 확인할수 있습니다.

아래는 Flash를 사용하도록 수정하지 않았을 때 입니다. TCM 영역(0x00100000 192K)임을 확인할 수 있습니다.

Memory가 부족하지 않다면 빠른 실행이 가능한 RAM을 두고 Flash에서 Code를 실행할 필요는 없지만 부족할때는 적절하게 Flash를 사용해서 Memory를확보할 수 있습니다.

--

--