개요
리눅스 호스트에서 CCS 12.4를 설치하고 Blackhawk XDS560v2 STM 에뮬레이터로 TDA3x EVM에 JTAG 연결하기까지의 과정을 설명.
| 항목 | 값 |
| 호스트 OS | Ubuntu 22,04 |
| CCS 버전 | 12.4.0.00007 |
| 타겟 보드 | TDA3x EVM (TDA3XX-EVM) |
| 에뮬레이터 | Blackhawk USB560v2 System Trace Emulator |
사전 준비
설치 전에 인터넷 연결, sudo 권한, 약 4 GB의 디스크 여유가 필요하다. 설치기는 컴포넌트를 TI 서버(software-dl.ti.com)에서 내려받으므로 오프라인 설치는 불가하다.
1. TI 사이트에서 리눅스용 CCS 12.4 설치기를 받는다:
https://www.ti.com/tool/download/CCSTUDIO/12.4.0
CCSTUDIO IDE, configuration, compiler or debugger | TI.com
download Windows single file (offline) installer for Code Composer Studio IDE (all features, devices) — 1227793 K
www.ti.com
2. 압축을 풀고 실행 권한을 확인한다.
cd ~/Downloads
tar xzf CCS12.4.0.00007_linux-x64.tar.gz
cd CCS12.4.0.00007_linux-x64
chmod +x ccs_setup_12.4.0.00007.run
3. CCS 12 설치기가 요구하는 배포판 라이브러리를 설치한다. (libgconf-2-4는 Ubuntu 22.04 이후 저장소에 없을 수 있으며, 없으면 건너뛴다.)
sudo apt update
sudo apt install -y libc6-i386 libusb-0.1-4 libgconf-2-4 libncurses5 libpython2.7 libtinfo5 build-essential
4. 에뮬레이터는 설치가 끝난 뒤에 연결한다. 먼저 꽂아두면 udev 규칙 적용 전에 디바이스 노드가 생기므로 다시 연결해야 한다.
CCS 12.4 설치
컴포넌트 선택에서 TDA/DRA 디바이스 지원과 Blackhawk Debug Probes 둘 다 켜야 한다. 기본값은 둘 다 꺼져 있고, Blackhawk을 빼먹으면 에뮬레이터 드라이버(libbh560v2u_io.so) 자체가 설치되지 않는다.
방법 A. 명령줄(unattended) 설치
설치 경로와 컴포넌트를 인자로 바로 지정하므로 재현이 쉽다. 약 5분 걸린다.
cd ~/Downloads/CCS12.4.0.00007_linux-x64
./ccs_setup_12.4.0.00007.run --mode unattended \
--prefix /home/server/ti/ccs1240 \
--enable-components PF_TDA_DRA \
--install-BlackHawk true
| 인자 | 의미 |
| --prefix | 설치 디렉터리. 이 아래에 ccs/가 생긴다 |
| --enable-components PF_TDA_DRA | Automotive(TDA/DRA) 디바이스 지원. TDA3x 디바이스 정의와 XDS560v2 드라이버가 포함된다 |
| --install-BlackHawk true | Blackhawk Debug Probes(EMU_BH) 컴포넌트 |
| --mode gtk | GUI 설치기로 바꾸고 싶을 때(기본값) |
방법 B. GUI 설치
1. ./ccs_setup_12.4.0.00007.run 실행.

2. Installation Directory에 /home/server/ti/ccs1240 입력.
3. Setup type에서 Custom Installation 선택.
4. Select Components에서 Automotive: TDAx devices 체크.

5. Select Debug Probes에서 Blackhawk Debug Probes 체크 (이 페이지를 그냥 넘기면 TI XDS/Spectrum Digital만 설치된다).

6. Install 후 완료까지 대기.
이미 설치된 CCS에 Blackhawk 컴포넌트만 추가
설치기 사본이 <설치경로>/ccs/install_info/에 보관되므로 다시 내려받을 필요가 없다. CCS를 완전히 종료한 뒤 같은 --prefix로 실행하면 기존 설치에 컴포넌트가 추가된다.
./ccs_setup_12.4.0.00007.run --mode unattended \
--prefix /home/server/ti/ccs1240 \
--enable-components PF_TDA_DRA \
--install-BlackHawk true
USB 드라이버(udev) 설정
install_drivers.sh를 root로 한 번 실행하면 TI와 Blackhawk udev 규칙이 모두 들어간다. 이 단계를 건너뛰면 에뮬레이터 디바이스 노드가 root:root 0644로 생기고 일반 사용자 CCS가 열지 못한다.
cd /home/server/ti/ccs1240/ccs/install_scripts
sudo ./install_drivers.sh
스크립트는 두 개를 순서대로 호출한다.
| 스크립트 | 생성 파일 | 대상 |
| ti_permissions_install.sh | /etc/udev/rules.d/71-ti-permissions.rules | TI XDS100/110/200, Spectrum Digital(0c55), FTDI(0403) |
| bh_emulation_install.sh | /etc/udev/rules.d/71-bh-permissions.rules | Blackhawk(0b1e): USB560v2 STM 0009, 8007, 8008 |
bh_emulation_install.sh는 Blackhawk 컴포넌트가 설치된 경우에만 존재한다. 설치 후에 Blackhawk을 추가했다면 install_drivers.sh를 다시 실행해야 한다.
규칙 적용 후 에뮬레이터 USB를 뽑았다 다시 꽂는다. 이미 꽂혀 있던 장치는 규칙을 다시 읽어도 권한이 바뀌지 않는다.
sudo udevadm control --reload-rules
sudo udevadm trigger
# 그리고 USB 재연결
스크립트 없이 수동으로 넣을 때는 아래 한 줄이면 된다.
echo 'SUBSYSTEM=="usb",ENV{DEVTYPE}=="usb_device",ATTRS{idVendor}=="0b1e",MODE:="0666"' \
| sudo tee /etc/udev/rules.d/71-bh-permissions.rules
sudo udevadm control --reload-rules && sudo udevadm trigger
규칙이 있으면 CCS를 sudo로 띄울 필요가 없다. root로 띄우면 워크스페이스와 ~/.ti/ 설정이 root 소유가 되어 이후 일반 사용자 실행이 깨진다.
에뮬레이터 인식 확인
lsusb에 Blackhawk 장치가 보이고 디바이스 노드가 0666이면 호스트 쪽 준비는 끝이다. 이 두 가지를 CCS를 열기 전에 먼저 확인하면 오류 원인을 호스트/타겟으로 바로 나눌 수 있다.
lsusb | grep -i 0b1e
# Bus 001 Device 062: ID 0b1e:0009 Electronic Warfare Assoc., Inc. (EWA) Blackhawk USB560v2 System Trace Emulator
ls -la /dev/bus/usb/001/062 # Bus/Device 번호는 lsusb 출력에 맞춘다
# crw-rw-rw- 1 root root 189, 61 9월 21 13:11 /dev/bus/usb/001/062
| 확인 항목 | 정상 | 비정상일 때 |
| lsusb에 0b1e:0009 표시 | 보임 | USB 케이블·허브 교체, dmesg | grep -i usb로 열거 오류 확인 |
| 디바이스 노드 권한 | crw-rw-rw- (0666) | udev 규칙 누락 → 위 섹션 다시 수행 후 USB 재연결 |
| 에뮬레이터 LED | 전원 LED 점등 | USB 전류 부족 → 외부 전원 허브 사용 |
같은 보드에서 0403:6011 FT4232H도 함께 보이는데, 이건 EVM 온보드 UART 브릿지라 JTAG 연결과는 무관하다. 시리얼 콘솔은 /dev/ttyUSB*로 잡히며 dialout 그룹이면 접근할 수 있다.
타겟 구성(ccxml) 생성
Connection은 반드시 Blackhawk XDS560v2-USB System Trace Emulator를 고른다. 이름이 비슷한 Spectrum Digital XDS560V2 STM USB를 고르면 드라이버가 SD VID(0c55)만 찾기 때문에 Blackhawk 장비는 열리지 않는다.
- CCS 메뉴 File › New › Target Configuration File.
- 파일 이름 입력(예: TDA3x_BH560v2.ccxml), Use shared location 체크 → ~/ti/CCSTargetConfigurations/에 저장된다.
- Connection: Blackhawk XDS560v2-USB System Trace Emulator.
- Board or Device: 필터에 TDA3x 입력 → TDA3x 체크.
- Save → Test Connection. 아래 연결 테스트 섹션의 정상 출력이 나오면 끝.
저장된 ccxml은 XML이므로 연결 종류를 파일에서 바로 확인할 수 있다.
grep -oE 'href="connections/[^"]+"' ~/ti/CCSTargetConfigurations/TDA3x_BH560v2.ccxml
# href="connections/BH-XDS560v2-USB_Connection.xml" ← Blackhawk (정상)
# href="connections/SD560V2USB_Connection.xml" ← Spectrum Digital (장비 불일치)
TDA3x를 고르면 코어별 GEL 파일이 ccs_base/emulation/gel/TDA3x/에서 자동으로 붙는다. 보드에 맞게 DDR 설정을 바꿔야 하면 TDA3xx_ddr_config.gel을 수정하거나 Advanced 탭에서 경로를 바꾼다.
연결 테스트
1. 평가 보드)을 준비하고, 디버그 모드(예: SYSBOOT 스위치를 디버그 모드로 설정)로 부팅합니다

2. 보드와 JTAG 인터페이스를 연결합니다.

3. EVM을 디버그 모드로 부팅하고, CCS에서 타깃 코어(예: Cortex-M4 또는 Cortex-A15 등)에 연결합니다.

4. 아래과 같은 로그가 나오면 정상 연결 된 것
Cortex_M4_IPU1_C0: GEL Output: ==================================================
Cortex_M4_IPU1_C0: GEL Output: ========= TDA3xx PG3.0 device detected =========
Cortex_M4_IPU1_C0: GEL Output: ========= TDA3xx GP Device detected ===========
Cortex_M4_IPU1_C0: GEL Output: ========= TDA3xx 15x15 Device detected ===========
Cortex_M4_IPU1_C0: GEL Output: ==================================================
Cortex_M4_IPU1_C0: GEL Output: --->>> All Control module lock registers are UNLOCKED <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> RTI is not currently enabled, so not doing anything <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> Starting IPU A-MMU configurations... <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> IPU A-MMU configuration completed. <<<---
Cortex_M4_IPU1_C0: GEL Output: ------------------------------------------------------------------------------------------
Cortex_M4_IPU1_C0: GEL Output: --->>> DDR and DPLL configuration Based on Package selection pin status(Sysboot[7]) <<<---
Cortex_M4_IPU1_C0: GEL Output: ------------------------------------------------------------------------------------------
Cortex_M4_IPU1_C0: GEL Output: --->>> 15x15 Package Detected(SYSBOOT[7]=0)... <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> PRCM Clock Configuration for OPPNOM in progress... <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> CORE DPLL OPP 0 clock config is in progress...
Cortex_M4_IPU1_C0: GEL Output: --->>> CORE DPLL OPP 0 is DONE!
Cortex_M4_IPU1_C0: GEL Output: --->>> PER DPLL OPP 0 clock config in progress...
Cortex_M4_IPU1_C0: GEL Output: --->>> PER DPLL OPP 0 is DONE!
Cortex_M4_IPU1_C0: GEL Output: --->>> DSP_GMAC DPLL OPP 0 clock config is in progress...
Cortex_M4_IPU1_C0: GEL Output: --->>> DSP_GMAC DPLL OPP 0 is DONE!
Cortex_M4_IPU1_C0: GEL Output: --->>> EVE_VID_DSP DPLL OPP 0 clock config is in progress...
Cortex_M4_IPU1_C0: GEL Output: --->>> EVE_VID_DSP_DPLL OPP 0 is DONE!
Cortex_M4_IPU1_C0: GEL Output: --->>> PRCM Clock Configuration for OPP 0 is DONE! <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> PRCM Configuration for all modules in progress... <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> PRCM Configuration for all modules is DONE! <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> DDR3 initialization starts (TI 15x15 EVM)... <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> DDR3 Initialization is in progress ... <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> DDR DPLL clock config for 532MHz is in progress...
Cortex_M4_IPU1_C0: GEL Output: --->>> DDR DPLL clock config for 532MHz is in DONE!
Cortex_M4_IPU1_C0: GEL Output: Launch full leveling
Cortex_M4_IPU1_C0: GEL Output: Updating slave ratios in PHY_STATUSx registers
Cortex_M4_IPU1_C0: GEL Output: as per HW leveling output
Cortex_M4_IPU1_C0: GEL Output: HW leveling is now disabled. Using slave ratios from
Cortex_M4_IPU1_C0: GEL Output: PHY_STATUSx registers
Cortex_M4_IPU1_C0: GEL Output: --->>> EMIF1 Narrow Mode config is in progress ... <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> EMIF1 Narrow Mode config is DONE! <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> CANLAB: EMIF1 narrow (16-bit) mode enabled <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> DDR3 532MHz Initialization is DONE! <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> TDA3xx Begin All Pad Configuration for Vision Platform <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> TDA3xx Begin All Pad Configuration for RGMII usage on EVM Platform <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> TDA3xx Begin GMAC_SW MDIO Pad Configuration <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> TDA3xx End GMAC_SW MDIO Pad Configuration <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> TDA3xx Begin GMAC_SW RGMII0 Pad Configuration <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> TDA3xx End GMAC_SW RGMII0 Pad Configuration <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> TDA3xx End All Pad Configuration for RGMII usage on EVM Platform <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> TDA3xx End All Pad Configuration for Vision Platform <<<---
Cortex_M4_IPU1_C0: GEL Output: --->>> TDA3xx Target Connect Sequence DONE !!!!! <<<---
트러블슈팅
오류에 관한 내용을 정리해 놓은 공식 페이지이다.
https://software-dl.ti.com/ccs/esd/documents/ccsv7_debugging_jtag_connectivity_issues.html
Debugging JTAG
software-dl.ti.com
로그 파일로 원인을 추적할 때 보는 곳은 세 군데다.
- Test Connection 결과: CCS 화면 출력 또는 ~/.ti/ccs1240/0/0/BrdDat/ 아래 .dat와 함께 생기는 로그
- Blackhawk 드라이버: bh560v2-dbgjtag.sh 사용 시 /tmp/bh560v2-output.log
- 설치 문제: /home/server/ti/ccs1240/ccs/install_logs/<날짜시간>/ccs_install_12.4.0.00007.log의 Components installed: 줄
'TI > TDA3' 카테고리의 다른 글
| Vision SDK에서 NDK 네트워크 통신 구성하기 (0) | 2026.03.20 |
|---|---|
| UART2 추가 가이드 (0) | 2026.02.19 |
| Draw2D를 이용해 한글 표시 (0) | 2025.12.31 |
| I2C SLAVE MODE (0) | 2025.06.03 |
| Vision SDK Usecase 사용 방법 (0) | 2025.04.16 |