TASKING 컴파일러를 이용한 Tricore MCU Start address 변경

TRACE32
이동: 둘러보기, 검색

Infineon의 TC299 target을 예제로 Reset vector인 Start address를 변경하는 방법을 소개한다.

 

Boot Mode 변경

TC299 target에서 지원하는 Boot mode는 Internal Start, Bootloader(ASC/CAN bootloader), Alternate Boot Mode가 있다. TC 299는기본적으로 Internal Start mode로 되어있고 아래 그림과 같이 address가 0xA000_0020으로 고정되어 있다.

 

Internal Start mode에서는 Reset vector를 변경할 수 없기 때문에 Alternate Boot Mode(ABM)으로 mode를 바꿔야 Start address를 변경 할 수 있다.

ABM으로 변경하여 Start address를 지정하기 위해서는 Boot Mode를 변경하여야 한다. Boot Mode를 선택할 때 Target이 Boot Mode Header(BMHD)를 참조하게 된다. BMHD의 위치는 아래와 같다.

그리고 BMHD structure는 아래와 같다.

 

Boot mode를 변경하는 방법에는 아래 그림과 같이 TC299의 HWCFG[5:4] pins로 configuration하는 방법과 BMHD structure의 Boot Mode Index(BMI)를 수정하여 configuration하는 방법이 있다. 여기서 우리가 사용할 방법은 BMI를 수정하여 configuration하는 방법을 사용해야 한다.

 

 

BMHD의 각 header의 start address에서 0x04에 위치한 BMI structure의 아래 그림의 빨간 네모 박스를 수정하여 mode를 바꾼다.

첫 번째 빨간 네모 박스는 HWCFG pins를 사용 여부를 결정하는 pin이다. 이 핀을 disalbe해야 ABM을 사용할 수 있게 된다.

두 번째 빨간 네모 박스는 PINDIS bit를 disable 했을 때 참조하게 되는 bit로 110으로 설정하면 ABM을 사용하게 된다.

 

Tasking 컴파일러에서 Boot mode 변경

아래 그림의 TASKING 컴파일러의 project->properties->C/C++ Build->Memory 항목을 보면 Boot Mode Headers 탭이 있다. Boot Mode Header 0항목의 Boot Mode Header configuration이 현재는 Reserve Boot Mode로 되어있는 것을 확인 할 수 있다.

Reserve Boot Mode : Boot Mode에 대한 정보를 담고 있는 bmhd.lsl 파일을 참조해서 configuration

Generate Boot Mode : 사용자가 Eclipse를 통해 변경한 내용을 통해 Boot Mode를 configuration

 

 

Generate Boot Mode로 바꾸어 주면 우리가 원하는 Boot mode를 선택할 수 있게 아래의 항목들이 활성화 되는 것을 확인할 수 있다.

 

 

현재 Internal start from Flash되어 있는 것을 Alternate Boot Mode으로 바꾸어 주면 Boot mode를 Internal Start에서 ABM로 바꾸어 주는 것이다. 이것은 위에서 언급한 BMI structure의 HWCFG[6:4] 부분을 바꾸어 준 것이다.

 

 

우리는 HWCFG[5:4] pins을 수정하는 방법이 아닌 BMI를 수정하는 방법을 사용하기 때문에 BMI structure의 PINDIS bit를 1로 수정하여 HWCFG pins를 disable한다. 아래와 같이 Mode selection by HWCFG pins 항목의 체크박스를 해제하면 disable된다.

이렇게 해주면 HWCFG pins를 사용하는 것이 아닌 BMI를 변경하여 Boot mode를 바꾸어 준 것이고 ABM을 사용할 수 있게 된 것이다. 이로써 Start address를 변경할 수 있게 되었다.

 

Start address 변경

Internal Start mode에서 Start address는 0xA000_0020으로 default되어 있다. 하지만 Boot mode를 ABM로 변경하였고 Start address를 TASKING 컴파일러를 통해 직접 입력할 수 있다.

아래와 같이 프로젝트의 Properties->C/C++ Build->Memory 항목의 Special Areas 탭을 확을 확인하면 Reset start address를 지정할 수 있다.

위 그림의 빨간색 네모 박스 부분을 더블 클릭하면 아래와 같은 창이 나온다.

 

자신이 원하는 address로 변경해준다. 필자의 경우에는 0xa000_0030의로 변경해보겠다.

 

OK버튼을 누르면 변경된 내용이 적용되고 아래처럼 [project명].lsl 파일을 확인해 보면 아래의 부분이 추가 된 것을 확인할 수 있다.

 

Start address 변경 확인

Build를 수행하고 Start address가 정상적으로 변경되었는지 확인 할 경우 Memory dump를 볼 수 있는 Trace32 PowerView에서 target에 [프로젝트].elf 파일을 download해서 DATA.LIST 창을 확인해 본다.

Target을 reset 하면 위와 같이 사용자가 직접 지정해준 address로 reset 되는 것을 확인 할 수 있다.