본문 바로가기
DSP, MCU/TMS320F2838x (C28x)

TMS320F28388D ] 부트핀 구성을 바꾸는 법 & SCI boot 모드 사용시 디폴트 TX/RX핀 말고 다른 핀을 사용하는 방법

by eteo 2024. 4. 10.

 

 

TRM에서 부트핀 구성을 바꾸는 방법과 SCI boot 모드 사용시 디폴트 TX/RX핀 말고 다른 핀을 사용하는 방법을 확인해보자.

 

 

 

CPU의 Boot 프로세스

 

TRM의 Boot flow를 살펴보면 디버거가 연결되어 있느냐에 따라 두가지 종류의 Boot가 있다.

 

  • Standalone Boot
  • Emulation Boot

 

 

 

 

 

 

 

Emulation Boot 프로세스

 

먼저 Emulation Boot 일 때는 살펴보면 EMUBOOTPINCONFIG를 읽어 정의된 행동을 하도록 되어있다.

 

 

 

 

 

 

 

Standalone Boot 프로세스

 

그리고 Standalone Boot인 경우에는 Zx-BOOTPINCONFIG, Zx-BOOTDEF를 읽도록 되어있는데 부트핀 구성 정보에는 Z2와 Z1 두 그룹이 있다.

Z2가 Z1보다 우선순위가 높아서 Z2가 유효하면(Key == 0x5A) Z1의 구성이 무시되도록 되어있고, Z2와 Z1 둘 다 유효하지 않은 경우에는 공장 초기 설정값인 두 Boot Mode Select 핀(GPIO84, GPIO72)을 읽게 되어있다. 

 

따라서 해당 영역에 특정 값을 쓰면 부트모드에 사용되는 핀과 부트 핀 옵션에 따른 부트 유형을 변경할 수 있으며, 부트핀 구성 정보가 기록되는 영역은 OTP(One Time Programmable) 영역이라서 한번 작성되면 이후 변경할 수 없으니 주의가 필요하다. 따라서 일반적인 상황이라면 Z1을 먼저 사용하고 이후 구성을 바꿔야할 상황이 있을 때 Z2를 사용하면 될 것 같다.

 

 

 

 

 

 

 

 

Default Boot Mode

 

Z2와 Z1 구성이 없는 경우 Default Boot Mode Select 핀은 GPIO84, GPIO72 두개이고 총 4개의 다음과 같은 Boot Mode를 가진다.

 

 

 

 

 

 

Boot Mode 선택

 

커스텀 Boot Mode Select 핀을 설정하려면 Emulation Boot의 경우 EMUBOOTPINCONFIG 레지스터를, Standalone Boot의 경우 OTP 영역의 Z1-BOOTPINCONFIG 또는 Z2-BOOTPINCONFIG 영역을 쓰면 된다.

 

BOOTPINCONFIG 영역은 32비트로 그 비트필드 구성은 Key, BMSP2, BMSP1, BMSP0으로 이루어진다. Key에 0x5A를 쓰면 유효한 구성을 가지고 있음을 의미하고 BMSPx에는 Boot Mode 선택에 사용될 GPIO핀을 지정할 수 있다. BMSPx는 최대 3개를 지정할 수 있고 3개 다 지정한 경우 최대 8개의 Boot Mode 조합을 만들어 낼 수 있으며 BMSPx를 사용하지 않으려면 해당 바이트를 0XFF로 유지하면 된다.

 

✔ 예를들어 BOOTPINCONFIG 영역에 0x5AFFFF01을 쓰면 Boot Mode Select Pin은 GPIO1 핀 하나만 사용한다는 뜻이며 Boot Mode 조합은 Boot Mode 0, Boot Mode 1 두 개이며 부팅 시 GPIO1 핀의 HIGH/LOW 상태에 따라 부트모드가 결정된다.

 

그리고 TRM 이 뒷페이지에도 설명이 있는데 만약 BMSP2를 사용하고 BMSP1, BMSP0을 disable한 경우 Boot Mode 조합은 두 개이고 부트 테이블에서 Boot Mode 0, Boot Mode 4를 사용하게 되는거라 낮은 순서의 BMSP 먼저 사용하는 것을 추천한다고 한다. 그리고 모든 BMSPx를 disable하고 Boot Mode 0을 고정적으로 사용하는 방법도 있다.

 

 

 

 

 

 

 

 

 

Boot Mode 정의

 

각 Boot Mode를 정의할 수 있는 BOOTDEF 영역의 비트필드 구성은 다음과 같고 총 64비트 영역으로 최대 8가지의 Boot Mode를 정의할 수 있다. 

 

BOODEF에 들어갈 값인 부트 옵션은 Section 5.7.8에 나와있다.

 

 

 

 

 

 

Boot Option (BOOTDEFx value)

 

Section 5.7.8에는 각 Boot Mode별로 정의된 값이 나와있는데 하위 4비트 니블에 따라 의미하는 부팅 유형은 다음과 같다.

 

BOOTDEF value 부팅유형
0x00 Parallel Boot
0x01 SCI Boot
0x02 CAN Boot
0x03 Flash Boot
0x04 Wait Boot
0x05 RAM Boot
0x06 SPI Boot
0x07 I2C Boot
0x09 USB Boot
0x0A Secure Flash Boot

 

 

 

그리고 상위 4비트를 0이 아닌 다른 값으로 쓰면 Alternative 옵션을 사용할 수 있다. 그 중 몇개만 살펴보자.

 

예를들어 SCI Boot 사용하고 싶은데 디폴트 TX/RX핀인 GPIO29, GPIO28 말고 Alternative 핀을 사용하고자 하며 GPIO8, GPIO9를 쓰고 싶으면 해당 BOOTDEFx 위치에다가 0xC1을 쓰면 된다.

 

물론 이렇게 하고나서 나중에 sci_flash_kernel 프로젝트를 빌드할 때 소스코드 상 SCI Pin 설정 부분도 같이 바꿔주는 것을 까먹으면 안된다. 이미 헤더파일에 사용가능한 ALT PIN 옵션이 다 정의되있어서 간단히 수정 가능하다.

 

 

 

 

Flash Boot Option의 경우는 대부분이 Sector 0에서 시작하는 0x03을 사용할 것 같다.

 

 

 

 

 

 

 

Boot ROM 설정 레지스터

 

그래서 그 설정값을 어디다 써야하냐? 그 정보는 아래에 나와있다.

 

만약 Emulation Boot를 사용한다면 디버그 모드에서 0x00000D00, 0x00000D04, 0x00000D06 위치를 원하는 값으로 수정하고 CPU 리셋한 뒤 다시 시작하면 되는 것 같다. Z1, Z2는 OTP 영역이니 먼저 Emulation Boot에서 테스트 해보면 좋을 것 같다. 

 

그리고 Standalone Boot에서 적용될 Boot 구성을 하려면 DCSM 레지스터에서 Z1-GPREGx 부분을 프로그램 하면 된다. 프로그램하는 방법은 CCS Debug View에서 Tool > On-Chip Flash에서 GUI로 수정할 수 있고, 코드상으로도 할 수 있는데 DCSM 예제를 확인하거나 아니면 Sysconfig 툴을 사용해 할 수 있다고 다. 프로그램 후에는 CCS에서 Register View를 통해 해당 레지스터가 잘 수정되었는지 확인할 수 있다.

 

 

 

✔ 상황을 가정해보면 Boot Mode Select 핀은 GPIO10 하나만 사용하여 두 개의 Boot Mode를 둔다면 Z1-BOOTPINCONFIG (0x00078008)에 '0x5AFFFF0A'을 쓰면 되고, BOOTDEF 영역은 하위 두 바이트 포지션만 쓸 거니까 Z1-BOOTDEF-LOW (0x0007800C)에다 쓰면 되는데.. GPIO10이 LOW일 때는 Flash Boot로 GPIO10이 HIGH일 때는 SCI Boot가 되도록 할건데 이 때 Flash Boot Entry Point는 0x00080000으로하고 SCI Boot TX/RX 핀으로는 GPIO84, GPIO85를 쓰고 싶다고 가정해보자. 그러면 Z1-BOOTDEF-LOW에는 '0xFFFF2103' 을 쓰면 되겠다.

 

 

 

 

참고 :

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/975662/tms320f28388d-tms320f28388d-how-to-change-the-sci_a-pins-for-sci-boot

 

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/935199/ccs-tms320f28388d-how-does-one-set-the-emubootpinconfig-register-and-its-otp-equivalents

 

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/998340/tms320f28388d-boot-pins-not-connected

 

https://blog.csdn.net/booksyhay/article/details/120172063

 

 

 

 

OTP 영역 프로그램 방법

 

Debug View 상태에서 Tools > On-Chip Flash

 

 

On-Chip Flash를 실행시키면 기존에 저장된 값이 불러와지는데 GPREG(BOOTCTRL) 영역에 수정할 값을 쓰고 Program한다. OTP영역이라 딱 한번만 1에서 0으로 바꿀 수 있다.

 

이후 Register View에서 Program 내용 Verify

 

 

 

 

 

flash_kernel_c28x_dual_ex1_c28x1 또는 flash_kernel_c28x_cm_ex1_c28x1 프로젝트 소스코드에서 ALT 옵션으로 수정