TMS320F28X 개발보드 V2 예제
[F28P65x / CPU1] 28X 칩의 USB 이동식 디스크(MSC) 에뮬레이션 예제 (USB Device MSC, Bitfield/DriverLib/FreeRTOS)
인터럽트
2026.10.01 16:08:25
조회수 30
1. 실습 안내
본 예제는 TMS320F28P65x(F28P650DK9 산업용 / F28P659DK8-Q1 차량용) 제어 모듈이 탑재된 TMS320F28X 개발보드(EVM) V2를 대상으로 합니다.F28P65x 칩의 On-Chip USB(USB0)를 디바이스(Device) 모드의 대용량 저장장치(MSC, Mass Storage Class)로 동작시켜, 개발보드 '(5) USB 통신 회로'의 BOTTOM면 Mini-B 5핀 커넥터로 PC에 연결하면 윈도우 탐색기에 'F28P659' 이동식 디스크가 나타납니다. 외장 SD카드나 플래시 없이 칩 내부 RAM에 만든 64KB 가상 FAT12 파일시스템입니다.
가상 드라이브에는 아래 3개의 파일이 들어 있습니다.
- README.TXT : 보드 개요와 사용법 안내문 (읽기 전용)
- STATUS.TXT : 가변저항 ADC 전압, 택트/토글 스위치 상태, 시스템 가동시간(Uptime), LED 점등 상태를 파일을 열 때마다 새로 생성해서 보여줍니다. 별도의 PC 프로그램 없이 메모장만으로 보드 상태를 확인할 수 있습니다.
- CONFIG.INI : 메모장으로 LED 패턴, 점등 속도, PWM 듀티 값을 고쳐서 저장하면 보드에 즉시 반영됩니다.
USB 호스트 모드로 마우스를 읽는 예제와 반대로, 이번에는 보드가 USB 장치가 되어 PC와 파일을 주고받는 예제이며, 학습 목적에 따라 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) 기타 : USB 케이블 1개 (PC ↔ 보드 BOTTOM면 Mini-B 커넥터)
7) 프로젝트 구성 : 학습 목적에 따라 3가지 버전을 모두 제공합니다.
- Bitfield : 애플리케이션 코드가 DriverLib을 전혀 호출하지 않고 레지스터 비트필드 구조체만으로 구현 (usblib 자체의 숨은 driverlib 의존성만 링크)
- Driverlib : TI 표준 HAL API 라이브러리를 활용한 모던 C2000Ware 구현 (가독성/이식성)
- FreeRTOS : USB 대용량 저장장치 폴링을 태스크 1개(UsbDevMscTask)로 감싼 구현, 완전 정적 메모리 할당(Zero Heap)
3. 실습 예제 다운로드 (GitHub ZIP 다운로드 안내)
초보자분들도 손쉽게 다운로드하여 사용하실 수 있도록 전체 소스 코드를 GitHub에 공개해 두었습니다.아래 안내에 따라 ZIP 압축 파일로 다운로드하세요.
[다운로드 순서]
① 아래의 링크를 클릭하여 GitHub 저장소 페이지로 이동합니다.
>> [GitHub] EVM_V2_F28P65x_05_USB_DevMSC 저장소 바로가기
(※ 다이렉트 ZIP 다운로드 : EVM_V2_F28P65x_05_USB_DevMSC.zip 클릭하여 바로받기)
② GitHub 페이지 우측 상단의 초록색 <> Code ▼ 버튼을 클릭합니다.
③ 나타나는 메뉴 맨 아래의 Download ZIP 항목을 클릭하여 압축 파일을 다운로드합니다.
④ 다운로드한 ZIP 파일의 압축을 해제합니다.
- 권장 설치 경로 : C:/SyncWorks/TMS320F28X_EVM_V2_28P65x/5_USB_Dev_MSC
(※ 주의 : 경로 상에 한글이나 공백이 포함되지 않도록 주의해 주세요.)
4. CCS 프로젝트 불러오기 (CCS V20 기준) 및 컴파일
>> [유튜브] CCS V20 예제 프로젝트 불러오기 방법 소개 영상① Code Composer Studio(CCS)를 실행합니다.
② 상단 메뉴에서 File > Import Projects... 를 클릭합니다.
③ Specify Search Directory 버튼을 눌러 앞서 압축을 해제한 폴더를 선택합니다. (ZIP 파일을 바로 "Select archive file"로 지정해도 됩니다.)
④ 검색된 프로젝트 목록 중 실습하고자 하는 프로젝트(5_USB_Dev_MSC_Bitfield, 5_USB_Dev_MSC_Driverlib, 5_USB_Dev_MSC_Freertos 중 원하는 프로젝트)를 체크하여 선택합니다.
⑤ Finish 버튼을 클릭하여 프로젝트를 워크스페이스로 불러옵니다.
⑥ 프로젝트를 마우스 우클릭하여 Build Project를 수행합니다. (기본 설정: CPU1_RAM 또는 필요 시 CPU1_FLASH)
5. 예제 실행을 위한 하드웨어 점퍼선 연결 안내
개발보드의 '(5) USB 통신 회로'는 F2837x/F2838x용 ControlCARD 구성을 기준으로 만들어져 있어, F28P65x 모듈에서는 아래처럼 A Side 핀-헤더에서 점퍼 케이블로 직접 연결해야 합니다.| 신호 | EVM V2 핀-헤더 | 할당 신호명 | 연결 대상 |
| USB D- | A Side 15번 핀 | GPIO42 / USB0DM | (5) 블록 "D-" |
| USB D+ | A Side 17번 핀 | GPIO43 / USB0DP | (5) 블록 "D+" |
| USB VBUS | A Side 19번 핀 | GPIO46 | (5) 블록 "VBUS" (PC USB 5V 전원 감지) |
| USB ID | A Side 21번 핀 | GPIO47 | (5) 블록 "ID" |
| LED × 16 | A Side 65~95번 핀(홀수) | GPIO0~15 | (8) 범용 LED 16개 블록 입력 16핀에 순서대로 연결 (권장 - CONFIG.INI 변경을 눈으로 확인) |
| 택트 스위치 1~4 (선택) | A Side 29, 27, 25, 23번 핀 | GPIO70, 69, 68, 67 | (6) 블록 SW1~SW4 (STATUS.TXT에 표시) |
| 토글 스위치 1~8 (선택) | A Side 115, 113, ..., 101번 핀(홀수) | GPIO25 ~ GPIO18 | (7) 블록 1~8번 (STATUS.TXT에 표시) |
| 가변저항 (선택) | B Side 111번 핀 | ADCINA0 | (9) 가변전압 블록 출력 (STATUS.TXT에 표시) |
* PC 케이블은 반드시 개발보드 BOTTOM면의 Mini-B 5핀 USB 커넥터에 연결하세요. TOP면의 Type-A 커넥터는 마우스나 USB 메모리를 꽂는 호스트 전용입니다.
* BOTTOM면의 USB ID 풀업 스위치는 디바이스 모드이므로 High 쪽으로 설정하세요.
* 디바이스 모드에서는 PC가 VBUS 전원을 공급하므로 USB 호스트 예제에서 연결하던 EPEN/PFLT(B Side 45/47번)는 연결하지 않아도 됩니다.

6. 예제 실행 및 동작 확인
① JTAG 에뮬레이터를 연결하고 디버그(Debug, F11) 후 실행(Resume, F8)합니다.② PC 연결 :
개발보드 BOTTOM면의 Mini-B 커넥터를 PC에 USB 케이블로 연결하면 윈도우 탐색기에 F28P659 이동식 디스크가 나타납니다. 장치관리자의 '디스크 드라이브'에는 SyncWorks Disk USB Device로 표시됩니다.

③ STATUS.TXT - 실시간 보드 상태 확인 :
메모장으로 STATUS.TXT를 열고 F5(새로고침)를 누를 때마다 Uptime이 올라가고, 스위치를 누르거나 가변저항을 돌리면 표시되는 값이 바뀌어야 정상입니다.
④ CONFIG.INI - 보드 설정 변경 :
CONFIG.INI를 메모장으로 열어 아래 값을 수정한 뒤 Ctrl + S로 저장하면 보드의 LED 패턴과 PWM 듀티가 바로 바뀝니다.
-
LED_PATTERN : 1=순차 점등, 2=왕복 점등, 3=전체 깜빡임, 4=이진 카운터-
LED_SPEED_MS : 점등 속도 (20 ~ 2000 ms)-
PWM_DUTY_PCT : PWM 듀티 (0 ~ 100 %)LED16 블록을 연결해 두었다면 LED_PATTERN을 바꿔 저장하는 순간 점등 모양이 바뀌는 것이 눈으로 보입니다.

7. 참고 — 3가지 버전 실측 메모리 사용량 비교
동일한 동작을 세 가지 방식으로 구현했을 때 RAM 사용량(CPU1_RAM 빌드 기준)이 얼마나 달라지는지 실제로 빌드해서 비교했습니다. 링커 맵의 온칩 RAM 사용량을 합산한 값이며 링커 옵션의 스택 2KB가 포함되어 있습니다.| 버전 | RAM 사용량 합계 |
| Bitfield | 18,701 B (18.3 KB) |
| DriverLib | 26,169 B (25.6 KB) |
| FreeRTOS | 31,759 B (31.0 KB) |
Bitfield 버전이 가장 작은 이유는 애플리케이션 코드가 DriverLib 함수 호출 대신 레지스터를 직접 다루기 때문이고, FreeRTOS 버전이 가장 큰 이유는 커널 자체 코드/데이터(태스크 스택, TCB, 스케줄러)가 추가되기 때문입니다.
| 번호 | 제목 | 작성자 | 날짜 |
|---|
- 1




