TMS320F28X 개발보드 V2 예제
[F28P65x / CPU1] 28X 칩에 Micro SD 카드를 연결해 파일 읽고 쓰기 예제 (SPI + FatFs, SCI 콘솔 명령, Bitfield/DriverLib/Fre
인터럽트
2026.10.07 14:20:44
조회수 31
1. 실습 안내
본 예제는 TMS320F28P65x(F28P650DK9 산업용 / F28P659DK8-Q1 차량용) 제어 모듈이 탑재된 TMS320F28X 개발보드(EVM) V2를 대상으로 합니다.F28P65x 칩의 SPI-C를 개발보드 '(10) Micro SD 카드(SPI)' 회로와 연결하고, FatFs 파일 시스템으로 SD 카드의 파일을 읽고 씁니다. 카드는 SPI 모드로 동작시키며, 초기화는 400 kHz에서 시작해 성공하면 12.5 MHz로 올립니다.
조작은 개발보드 '(11) 2채널 SCI-to-USB' 회로로 PC 터미널을 연결해 명령으로 합니다.
-
ls : 디렉터리 목록, 파일 수, 남은 용량 / cat : 텍스트 파일 읽기 / write : 파일에 텍스트 쓰기-
mkdir, rm, cd, pwd : 폴더 만들기, 삭제, 이동, 현재 경로학습 목적에 따라 Bitfield / DriverLib / FreeRTOS 3가지 구현을 모두 제공합니다.
2. 실습 준비
본 예제는 아래의 개발환경에서 컴파일/링크를 확인했습니다.1) CCS 버전 : Code Composer Studio v12.x / v20.x / v21.x (Theia)
2) 컴파일러 버전 : TI v22.6.3.LTS 이상
3) 개발보드 : TMS320F28X 개발보드 V2
4) 프로세서 모듈 : 싱크웍스 TMS320F28P65x 모듈 (F28P650DK9 / F28P659DK8-Q1)
5) 예제버전 : v1.00
6) 기타 : Micro SD 또는 Micro SDHC 카드 1개 (4GB ~ 32GB 권장, FAT16 또는 FAT32로 포맷 / exFAT, NTFS는 지원하지 않습니다), Mini-B 5핀 USB 케이블 1개 (PC ↔ '(11) 2채널 SCI-to-USB' 회로), 시리얼 터미널 프로그램 (CCS Serial Console, Tera Term 등)
7) 프로젝트 구성 : 학습 목적에 따라 3가지 버전을 모두 제공합니다.
- Bitfield : DriverLib을 전혀 호출하지 않고 레지스터 비트필드 구조체(SpicRegs, SciaRegs 등)만으로 구현, CPU Timer0 100Hz 인터럽트
- Driverlib : TI 표준 HAL API 라이브러리를 활용한 구현, CPU Timer0 100Hz 인터럽트
- FreeRTOS : 콘솔 / 하트비트 / 디스크 타이머 태스크 3개, 완전 정적 메모리 할당(Zero Heap),
uptime 명령 추가8) 확인 범위 : Bitfield 버전은 보드에서 부팅, SD 마운트,
ls 동작까지 확인했고, DriverLib / FreeRTOS 버전은 컴파일/링크까지 확인했습니다. cat, write, mkdir, rm 명령은 아직 보드에서 확인하지 않았습니다.
3. 실습 예제 다운로드 (GitHub ZIP 다운로드 안내)
초보자분들도 손쉽게 다운로드하여 사용하실 수 있도록 전체 소스 코드를 GitHub에 공개해 두었습니다.아래 안내에 따라 ZIP 압축 파일로 다운로드하세요.
[다운로드 순서]
① 아래의 링크를 클릭하여 GitHub 저장소 페이지로 이동합니다.
>> [GitHub] EVM_V2_F28P65x_10_SD_Card_SPI 저장소 바로가기
(※ 다이렉트 ZIP 다운로드 : EVM_V2_F28P65x_10_SD_Card_SPI.zip 클릭하여 바로받기)
② GitHub 페이지 우측 상단의 초록색 <> Code ▼ 버튼을 클릭합니다.
③ 나타나는 메뉴 맨 아래의 Download ZIP 항목을 클릭하여 압축 파일을 다운로드합니다.
④ 다운로드한 ZIP 파일의 압축을 해제합니다.
- 권장 설치 경로 : C:/SyncWorks/TMS320F28X_EVM_V2_28P65x/10_SD_Card_SPI
(※ 주의 : 경로 상에 한글이나 공백이 포함되지 않도록 주의해 주세요.)
4. CCS 프로젝트 불러오기 (CCS V20 기준) 및 컴파일
>> [유튜브] CCS V20 예제 프로젝트 불러오기 방법 소개 영상① Code Composer Studio(CCS)를 실행합니다.
② 상단 메뉴에서 File > Import Projects... 를 클릭합니다.
③ Specify Search Directory 버튼을 눌러 앞서 압축을 해제한 폴더를 선택합니다. (ZIP 파일을 바로 "Select archive file"로 지정해도 됩니다.)
④ 검색된 프로젝트 목록 중 실습하고자 하는 프로젝트(10_SD_Card_SPI_Bitfield, 10_SD_Card_SPI_Driverlib, 10_SD_Card_SPI_Freertos 중 원하는 프로젝트)를 체크하여 선택합니다.
⑤ Finish 버튼을 클릭하여 프로젝트를 워크스페이스로 불러옵니다.
⑥ 프로젝트를 마우스 우클릭하여 Build Project를 수행합니다. (CPU1_RAM은 디버깅용, CPU1_FLASH는 전원을 껐다 켜도 실행)
5. 예제 실행을 위한 하드웨어 점퍼선 연결 안내
아래와 같이 F28P65x 모듈의 핀-헤더와 개발보드 각 회로 블록을 점퍼 케이블로 연결합니다. SD 카드(SPI)는 B Side, 콘솔(SCI)은 A Side 핀-헤더를 사용합니다.| 번호 | 신호 | EVM V2 핀-헤더 | 할당 신호명 | 연결 대상 |
| 1 | SCI RX | A Side 91번 핀 | GPIO13 / SCIA_RX | (11) 블록 "RX1" |
| 2 | SCI TX | A Side 89번 핀 | GPIO12 / SCIA_TX | (11) 블록 "TX1" |
| 3 | SD CS | B Side 39번 핀 | GPIO53 (일반 GPIO 출력, Low 활성) | (10) 블록 "CS" |
| 4 | SD DI (MOSI) | B Side 45번 핀 | GPIO50 / SPIC_PICO | (10) 블록 "DI" |
| 5 | SD CLK | B Side 41번 핀 | GPIO52 / SPIC_CLK | (10) 블록 "CLK" |
| 6 | SD DO (MISO) | B Side 43번 핀 | GPIO51 / SPIC_POCI | (10) 블록 "DO" |
* SD 카드 전원(3.3V, GND)은 개발보드가 슬롯에 직접 공급하므로 데이터 4선(CS, DI, CLK, DO)만 연결합니다. CD(카드 감지) 핀은 연결하지 않습니다.
* 점퍼선을 SD 카드(SPI)는 B Side, 콘솔(SCI)은 A Side 핀-헤더에 꽂는 점에 주의하세요. 점퍼선이 길어 SPI 12.5 MHz에서 오류가 나면 소스의 SPI_BRR_FAST(Bitfield 버전) 값을 키워 속도를 낮춰 보세요. (6 : 약 7.1 MHz, 9 : 5 MHz)
* '(11) 2채널 SCI-to-USB' 회로의 미니 5핀 USB 커넥터를 PC의 USB 포트와 케이블로 연결하면 PC에서 'USB Serial Port' 2개가 인식됩니다. 그중 1채널(RX1/TX1)에 해당하는 포트를 사용하세요. 어느 쪽인지는 장치관리자에서 확인할 수 있습니다.

6. 예제 실행 및 동작 확인
① 포맷한 Micro SD 카드를 (10) 슬롯에 꽂고, 루트에readme.txt 같은 텍스트 파일을 하나 넣어 두면 cat으로 바로 읽기를 확인할 수 있습니다.② JTAG 에뮬레이터를 연결하고 디버그(Debug, F11) 후 실행(Resume, F8)합니다.
③ 시리얼 터미널 설정 (CCS V20 Serial Console) : CCS V20에서는 Serial Console을 엽니다.
- 상단 메뉴에서 View > Open View 메뉴를 누른 후 'serial console'을 입력해 검색하고 엔터를 눌러 선택합니다.
- Serial Console 뷰 오른쪽 위의 Connect/Disconnect COM PORT 아이콘(아래 사진의 빨간 네모)을 누릅니다.
- COM Port 창에서 Port와 Baud Rate 등을 선택해 COM 포트를 연결합니다.
* Port : COMx (PC 환경마다 다를 수 있습니다. / 장치관리자에서 확인, 예: COM34 (FTDI))
* Baud Rate : 115200 / Parity : none / Data Size : 8 / Stop Bits : 1 (흐름 제어 없음)
(Tera Term 같은 다른 시리얼 터미널 프로그램도 같은 설정으로 사용할 수 있습니다.)

④ 시작 확인 : 터미널에 아래와 같은 시작 배너와 마운트 문구, 프롬프트가 나옵니다. (배너의 제목 줄은 버전마다 조금 다릅니다.)
TMS320F28P65x Micro SD Card SPI Console (Bitfield)SD Card mounted successfully./>※
SD Card mounted successfully.는 FatFs에 드라이브를 등록했다는 뜻이며 이 시점에는 카드에 접근하지 않습니다. 카드 초기화는 첫 명령에서 일어나므로 ls를 입력해 확인하세요.⑤ ls 확인 :
ls를 입력하면 루트 디렉터리가 아래처럼 한 줄에 속성 날짜 시간 크기 이름 순서로 출력됩니다.- 속성 문자 :
D 디렉터리, R 읽기 전용, H 숨김, S 시스템, A 보관 (해당하지 않으면 -)-
SYSTEM~1은 Windows가 카드에 만든 System Volume Information 폴더의 짧은 이름입니다.- 마지막 두 줄은 파일 수와 합계 크기, 폴더 수와 남은 용량(KB)입니다.
- 이 예제는 RTC가 없어 보드에서 만든 파일/폴더의 시각은 고정값(2026-09-17 12:00)으로 기록됩니다.
-
FR_NOT_READY가 나오면 카드가 꽂혀 있는지, 점퍼선 4선(CS/DI/CLK/DO)이 5번 표대로 연결됐는지, 카드가 FAT16/FAT32인지 확인하세요.
⑥ 명령어 사용 : 터미널에 아래 명령을 입력하고 엔터를 누릅니다.
| 명령 | 설명 | 예 |
help, h, ? | 명령어 목록 | help |
ls | 현재 디렉터리 목록, 파일 수, 남은 용량 | ls |
pwd | 현재 경로 | pwd |
cd, chdir | 디렉터리 이동 (.. 상위, / 루트) | cd logs |
cat | 텍스트 파일 출력 | cat readme.txt |
write | 파일에 텍스트 쓰기 (없으면 생성) | write log.txt hello world |
mkdir | 디렉터리 생성 | mkdir data |
rm | 파일 또는 빈 디렉터리 삭제 | rm log.txt |
uptime | 가동 시간과 하트비트 카운터 (FreeRTOS 버전만) | uptime |
⑦ FreeRTOS 버전 관찰 : CCS View > Watch (기존 CCS v12 이하는 View > Expressions) 창에
heartbeatCount를 등록하고 ls처럼 SD 카드를 읽는 명령을 실행해 보세요. 카드를 읽는 동안에도 값이 계속 올라가면 태스크가 멀티태스킹으로 돌아가고 있다는 뜻입니다.
7. 참고 — 3가지 버전 실측 메모리 사용량 비교
동일한 동작을 세 가지 방식으로 구현했을 때 메모리 사용량이 얼마나 달라지는지 실제로 빌드해서 비교했습니다. 링커 맵의 영역별 사용량을 합산한 값이며, 단위는 워드(1워드 = 16비트 = 2바이트)입니다.| 버전 | CPU1_RAM 구성 합계 | CPU1_FLASH 구성 Flash 사용량 | CPU1_FLASH 구성 RAM 사용량 | Flash 사용률 (FLASH_BANK0 기준) |
| Bitfield | 16,922 | 12,964 | 3,966 | 약 9.9% |
| DriverLib | 17,748 | 14,733 | 3,717 | 약 11.2% |
| FreeRTOS | 20,334 | 16,878 | 4,150 | 약 12.9% |
CPU1_RAM 구성은 코드까지 RAM에 올라가므로 값이 크고, 스택(0x800)과 DriverLib/FreeRTOS 버전의 힙 예약(0x800), PIE 벡터 테이블과 주변장치 프레임 영역(약 480워드)이 포함됩니다. Bitfield 버전이 가장 작은 이유는 애플리케이션 코드가 DriverLib 함수 호출 대신 레지스터를 직접 다루기 때문이고, FreeRTOS 버전이 가장 큰 이유는 커널 자체 코드/데이터(태스크 스택, TCB, 스케줄러)가 추가되기 때문입니다. 측정은 최적화 없음(
--opt_level=off) 기준입니다.| 번호 | 제목 | 작성자 | 날짜 |
|---|
- 1




