본문 바로가기
임베디드 개발/TMS320F2838x (C28x)

TMS320F28388D ] TI 제공 부트로더 & Flash programmer 툴 사용하기

by eteo 2023. 4. 18.

 

 

관련 문서

 

sprabv4g.pdf
0.55MB

 

 

TI가 ROM에 마스킹 해둔 부트로더 중 SCI boot와 Flash programmer를 사용해 어플리케이션을 program 해보자.

 

 

 

전체 Flow 요약해보면 Boot Mode를 SCI Boot로 바꾸고 SCI ROM bootloader를 사용해 flash kernel 코드를 통째로 램에 복사해 올힌다. 그리고 RAM에 올린 flash kernel을 실행하여 User Application을 Flash에 Program한다.

 

 

 

 

 

먼저 내장 SCI bootloader를 사용하기 위해 bootmode를 SCI/Wait Boot로 변경해야 한다.

 

 

 

만약 컨트롤 카드를 쓰고 있다면 S2 스위치로 bootmode를 변경하면 되고, 아닌 경우 해당 boot Pin에 Logic 0 또는 1 신호를 주면 된다.

컨트롤카드의 경우 'ON'이 써있는 쪽이 Logic 0이다.

 

✔ 참고로 이 때 사용하는 SCIA TX/RX핀은 GPIO29, GPIO28이다.

 

 

 

 

 

 

 

 

 

boot 핀 설정을 했으면 보드 리셋이 SCI/Wait Boot Mode에 들어가는데 그 전에 준비할 사항이 있다.

 

 

 

 

 

serial flash programmer 유틸리티는 아래 경로에 있다. 그리고 사용법까지 자세히 나와있다.

 

C:\ti\c2000\C2000Ware_[Version_No]\utilities\flash_programmers\serial_flash_programmer

 

 

 

 

 

 

 

 

 

 

그리고 아래 경로에서 flash_kernel_c28x_dual_ex1_c28x1 프로젝트를 import해서 빌드한다.

 

C:\ti\c2000\C2000Ware_[Version_No]\driverlib\f2838x

 

이 코드가 통째로 램에 올라가서 부트로더로 작동하게 된다.

 

 

 

빌드 하면 CPU1_RAM 폴더 안에 아래와 같은 txt파일이 있을 것이다. serial_flash_programmer.exe 와 같은 폴더안에 넣어둔다.

 

 

 

 

 

이런 build output이 나온 이유는 프로젝트 Properties에 C2000 Hex Utility가 Enable되어있기 때문이다.

 

 

 

 

 

 

이거랑 같은 옵션으로 보드에 다운로드할 application 프로젝트도 txt파일을 만들어야 한다.

 

기존 sci_ex3_echoback.c 예제에서 baudrate만 바꾸고 간단히 성공 여부를 출력해줄 프로젝트를 만들었다.

for(;;)
{
    char *msg = "Something to show that flash programin completed successfully\r\n\0";
    SCI_writeCharArray(SCIA_BASE, (uint16_t *)msg, strlen(msg));
    DEVICE_DELAY_US(1000000);
}

 

 

FLASH 빌드 옵션으로 한다.

 

C2000 Hex Utility를 Enable 하고 outputfile name이 원래 프로젝트명.hex일텐데 .txt로 바꿔준다.

 

 

 

 

 

Select boot mode를 체크하고 SCI-A port, 8-bit mode를 선택한다.

 

 

 

 

 

Output Format Option을 ASCII hex로 한다.

 

 

 

 

 

 

 

빌드하면 txt 파일이 생기는데 복사해서 serial_flash_programmer.exe 랑 같은 폴더에 갖다 놓는다.

 

 

 

 

 

 

탐색기에서 cmd . 을 치고 프롬프트창을 열어서 아래와 같이 입력한다. COM port는 본인의 장치관리자를 보고 확인하고 baudrate는 예제에서는 9600으로 하고있지만 어차피 커널 코드에선 autobaud detect해서 통신하기 때문에 더 빠른 전송을 위해 높은 baudrate를 써도 된다. 테스트 시 57600으로 했을 때 부턴 먹통이었고 38400까지는 통신이 잘되었다.

만약 device, kernel name, filename이 나와 다르면 본인에 맞게 바꾸면 된다.

 

 

 

serial_flash_programmer.exe  -d f2838x -k flash_kernel_c28x_dual_ex1_c28x1.txt -a sci_ex3_echoback.txt -p COM15 -b 9600

 

 

이러고 한참을 기다려야 한다.

 

 

 

 

 

 

위 과정이 끝나고 나면 아래와 같은 메뉴가 보인다.

 

 

여기서 '1-DFU CPU1'을 선택해준다. 그럼 또 한참 쓰는데 그래도 아까보단 덜쓴다. 아까가 flash kernel 코드를 받아서 램에 올려 실행한거라면 이제는 보드에 다운로드하기 위해 만들었던 application의 txt 파일을 플래시에 프로그램한다.

 

 

 

 

 

 

완료됐으면 이제 '17-Reset CPU1' 을 해줄건데 그전에 bootmode가 SCI/Wait boot로 되어있으니 다시 Flash boot 로 핀을 변경한 후 reset을 선택한다.

 

보니까 리셋은 워치독 통해서 하고 있다.

 

EALLOW;
SysCtl_setWatchdogMode(SYSCTL_WD_MODE_RESET);
SysCtl_enableWatchdog();
EDIS;
while(1){}

 

 

 

확인 완료

 

 

 

 

 

 

 

 

 

 

README.txt 파일을 보니 써보진 않았지만 CPU2, CM의 flash kernel 과 filename을 지정하는 옵션도 있다.

Com port만 있으면 되니까 커스텀 부트로더가 안올라간 상황에서 쓸수 있을 것 같다. bootmode 핀을 제어할 수 있는 상황이라는 가정하에 말이다.