프로그래밍
- edit -> build -> download -> debug
1) 디버깅
- 프로그램이나 하드웨어 장치의 문제점을 찾아 해결하는 것
- 일반 범용 PC의 디버깅 환경 -> IDE 내에 디버깅 내장 -> 문제 프로그램의 소스를 보면서 변수나 메모리 값 확인
임베디드 시스템 디버깅 환경
- 호스트 컴퓨터 - IDE <-> 디버거 장비 <--> AVR 타겟보드 - 디버깅할 프로그램
- 중간에 디버거 장비가 필요. 타겟 보드에 따라 디버거 장비가 결정
- AVR 타겟보드 디버깅 시 AVR용 디버거 사용
2) 소스레벨 디버깅
소스레벨 디버깅
- 프로그램 소스 코드 보면서 디버깅 하는 것
- 프린트 문으로 변수, 메모리 값 확인 시 : 문제가 되는 코드 위치와 CPU 내부 값 확인이 힘듬
-> 소스 레벨 디버깅 : 프로그램 진행을 멈추어 확인하고싶은 변수나 메모리, 어셈블리 값, CPU 상태도 확인 가능
3) JTAG
디버거
- 에뮬레이터라는 용어와 혼용해서 많이 사용
- JTAG이라는 디버깅 방식 개발전에 에뮬레이터 방식으로 제작됨
에뮬레이터
- CPU나 메모리 동작을 흉내내어주는 디버깅에 사용되는 장비나 소프트웨어
- 종류 : CPU 에뮬레이터, ROM 에뮬레이터
- 고가, CPU 100Mhz 이상인 경우 잡음이 심해 잡음이 어려움, CPU 모든 핀 연결해야하나 핀수가 많고 소형화되어 힘듬
JTAG
- Joint Test Action Group
- IEEE 1148.1 아이트리플이
- 조립된 PCB 테스트 목적으로 연구
- 디바이스 패키지, 고집적화로 물리적 접촉 방식으로 테스트가 힘듬 -> JTAG 탄색
- 외부로 나온 핀을 직접 접촉하지 않고, 테스트 목적의 셀을 칩 내부에 장착하여 전용 데이터 입력 핀인 데이터 입력으로, 입력시 데이터 아웃으로 출력하게 하여 칩이나 보드에 이상유무를 확인
-> Boundary Scan Architecture
- PCB 보드 검증 뿐만 아니라 디버거 만드는데서도 활용 가능 -> 에뮬레이터 방식의 대안이 됨
JTAG 디버거
- JTAG 단자라고 하는 편개의 신호만 연결하면 디버깅이 가능한 장비
- 보드에 존재했던 모듈들이 하나의 칩안으로 들어감(SoC), RAM, ROM, IO 등 칩안에 들어감
-> JTAG이 현실적인 대안이 됨
JTAG 인퍼테이스
- TDI : Test Data Input
- TDO : Test Data Output
- TMS : Test Mode Select
- TCK : Test clock
- nTRST : Test Rest
- 디버그 목적으로 몇개 신호선 추가 : nRESET, Vtref, DBGRQ
-> 타겟 시스템 자원을 소모하지 않아 디버깅으로 인한 타겟 소모나 영향이 없음
IEEE1149.1 디바이스 구조
- 시리얼 방식 사용 - 데이터라인이 TDO 한개 뿐이므로
- TAP 컨트롤러 : 스테이트 머신 방식, TMS 신호에 의해 Test Mode 전환 과정
-> TAP 상태에 따라 TDI가 명령이거나 데이터 일 수 있음. TDO 값도 어드레스 이거나 데이터일수있음
- JTAG 이용 -> TAP 컨트롤러를 제어하여 필요한 명령어나 데이터를 읽고 쓰는 방식
- 동작 주파수가 10~100MHz인 TCK핀이 일반적으로 사용됨.
JTAG Pin 배치
- CPU 코어나 종류, 버전에 따라 다양한 핀배치를 가짐
AVR JTAG
- AVR : 총 10개의 핀으로 구성
- nTRST : TAP 컨트롤러를 리셋하기 위한 신호
- nSRST : CPU 코어를 리셋하기 위한신호
ARM JTAG
- ARM 코어는 버전에 따라 핀맵이 달라짐
- ARM7 : 총 14개 핀
- ARM9 : 총 20개 핀
TMS (Test Mode Select)
- 디버깅 상태에서 Scan Chain을 결정하고 Bypass와 같은 디버깅 모드 선택에 사용
TCK Test Clock
- JTAG을 구동하는 Clock으로 보틍 10MHz
nTRST test rest
- JTAG의 Tap 컨트롤러 리셋
VTref Test Voltage reference
- JTAG 인터페이스의 입출력 전압 레벨을 설정. 전원 공급용이 아님
- JTAG Logic이 들어있는 프로세서 전압은 따로 공급이 필요
nSRST = nRESET
- Target CPU를 리셋하거나 리셋을 검출하는데 사용
DBGRQ
- 외부 트리거 신호로 프로그램 신호를 멈춤
DBGACK
- 정확한 시간 측정
- 프로그램 실행 정지 시 다른 디바이스를 정확하게 트리거 할수있도록 해줌
1) ISP 방식
ISP 장비
- CPU 내부 플래시 메모리, EEPROM을 지우거나 프로그래밍만 가능
JTAG
- 프로그래밍 + 소스레벨 디버깅이 가능
기존의 EPROM 형태 개발
- ISP 개발 이전 방식
- 외부의 EPROM을 사용하거나 EPROM과 CPU가 내장된 단일 칩을 땟따 붙여 롬라이터로 프로그래밍하고 디버깅하는 방식
- EPROM CPU를 ROM eraser에 넣어 삭제(1시간 이상걸림) 후 ROM Writer로 쓰기함.
ISP in system programming
- 플래시 메모리와 CPU가 단일칩이 되면서 등장
- 보드상 플래시 메모리 프로그래밍 가능
- 프로그래밍 시간이 수분 내로 획기적으로 축소
- AVR의 플래쉬 메모리에 직렬통신으로 실행 프로그램을 다운로드함
-> ISP를 사용하기 위해 ISP 프로그래머가 필요
PC와 연결 방식
- 병렬포트, 직렬포트, USB 포트
-> 근래는 USB포르를 대부부분 사용
AVR ISP방식 하드웨어 연결
- 6핀 방식과 10핀 방식 연결 방법 존재
실제 사용하는 신호선 종류와 기능은 동일
타겟 보드의 ISP 인터페이스를 보고 선택
- ISP 프로그래머는 둘다 지원
ISP 프로그래머는 SPI인터페이스를 사용하여 연결
SPI 인터페이스는 직렬통신 한 종류 -> 이 인터페이스로 ISP 사용
SPI Serial Peripheral Interface
- 마스터와 슬레이 개념을 이용한 통신
- 사용 신호선 : MOSI, MIOS, SCLK, SS 등
- MISO : Master Input Slave Output
- MOSI : Master Output Slave Input
- SCK : Serial Clock
- SS : Slave Select (여러개 슬레이브가 존재시 선택하는 신호)
AVR의 ISP 신호
- 슬레이브가 AVR CPU 한 개이므로 SS는 사용하지 않음
- VCC라는 전원 신호와 /RES(AVR Reset)라는 리셋 신호를 추가하여 AVR ISP 신호선 완성
- 마스터 : ISP 프로그래머가 됨
- 슬레이브 : AVR CPU가 되어 PC 코드를 AVR의 플래쉬메모리나 EEPROM에 프로그래밍하게됨.
상용 JTAG 디버거 특징
- 다양하지만 대부분 고가
- 특정 CPU 코어만 지원하는경우가 대부분
-> 다양한 CPU를 지원해도 라이센스 구매가 필요할수있음
TRACE32
- 거의 모든 코어 지원
- JTAG 장비 중 가장 비쌈
'컴퓨터과학 > 임베디드' 카테고리의 다른 글
펌웨어구현 환경구축 6 - JTAG 활용 (0) | 2020.05.06 |
---|---|
펌웨어구현 환경구축 5 - 교차 개발 환경 (0) | 2020.05.06 |
펌웨어구현 환경구축 3 - 하드웨어 장비 (0) | 2020.05.06 |
펌웨어구현 환경구축 2 - 펌웨어 구현을 위한 소프트웨어 (0) | 2020.05.06 |
펌웨어구현 환경구축 1 - 펌웨어란 (0) | 2020.05.06 |