디바이스 드라이버(영어:device driver)는 특정 하드웨어나 장치를 제어하기 위한커널의 일부분으로 동작하는 프로그램이다. 컴퓨터를 구성하는 다양한 입출력 장치마다 각각 장치드라이버가 프로그램 되어 커널에 통합되어 실행된다. 높은 수준의컴퓨터 프로그램들이 컴퓨터하드웨어장치와 상호 작용하기 위해 만들어진 하나의 컴퓨터 프로그램이다.
장치드라이버는 커널의 일부분이기는 하나 커널과 통합되는 것은 처음부터 해당 드라이버 프로그램 코드소스가 커널 전체 소스에 포함되어 컴파일되는 경우도 있고, 그리고 별도로 컴파일된 파일(윈도의 *.sys, 리눅스의 *.o)의 형태로 존재하고 부팅 시 또는 필요 시 해당 파일이 로드되어 커널과 통합되기도 한다.
드라이버는 흔히컴퓨터 버스, 또는 하드웨어와 이어진 통신 하위 시스템을 통해 장치와 통신한다. 요청하는 프로그램이 드라이버의 명령어를 호출하면, 드라이버는 장치에 명령어를 전달한다. 장치가 드라이버에게 데이터를 되돌려 주면, 드라이버는 원래 요청한 프로그램의 명령어로 데이터를 다시 전달한다. 드라이버는 하드웨어에 의존하며 특정한 운영 체제를 따른다. 이러한 드라이버는 비동기 시간에 의존하는 하드웨어 인터페이스에 필요한 인터럽트를 다룰 수 있다.
장치 드라이버는 흔히 장치 칩의레지스터에 접근하여하드웨어를 제어하며 하드웨어와 주변 기기를 사용하는 프로그램의 중간 다리 역할을 한다.
마이크로컨트롤러(Microcontroller) 또는MCU(Micro Controller Unit)는마이크로프로세서와 입출력 모듈을 하나의 칩으로 만들어 정해진 기능을 수행하는 컴퓨터를 말한다.
CPU 코어, 메모리 그리고 프로그램 가능한 입/출력을 가지고 있다. NOR플래시 메모리[1][3],EPROM[2]그리고 OTP ROM등의 메모리를 가지고 있어 정해진 기능을 수행하도록 프로그래밍 코딩하고 이 기계어 코드를 써 넣는다. 기계어 코드가 실행되기 위한 변수나 데이터 저장을 위해 적은 용량의SRAM을 가지고 있다. 기타 칩에 따라EEPROM을 내장하기도 한다.
MCU는 임베디드 애플리케이션을 위해 디자인되었으며 임베디드 시스템에 널리 사용된다. 개인용 컴퓨터가 다양한 요구에 따라 동작하는 일반적인 일에 사용된다면, MCU는 기능을 설정하고 정해진 일을 수행하도록 프로그래밍되어 장치 등에 장착되어 동작한다. 따라서 일반적으로 성능이 PC에 비해 낮고 형상도 다르다. 한 번 프로그래밍하면 코드를 나중에 바꿀 일이 거의 없기 때문에 냉장고, 전자레인지 등의 기기에 사용된다.
-위키백과
MCU 는 CPU 메모리 보조 모듈로 구성
메모리와 CPU는 명령 & 데이터
메모리 : ROM(Flash rom, EEPROM) 프로그램 저장 / RAM 임시저장 데이터 데이터 읽고 쓰는 장치
CPU : ALU(산술장치 ), Register(임시저장 데이터 ), Shifter
보조모듈 : SPI, UART, I2C, ADC, DAC, 타이머
Program Memory(Flash Memory) : 프로그램 명령어 저장
Core(CPU) : 명령어 수행
Data Memory(SRAM) : 명령어 수행한 임시데이터 저장
SRAM, 변수나 스택등에서 사용하는 읽기, 쓰기 전용 메모리
Flash ROM, 프로그램 굽는 용도 읽기전용의 상수 데이터도 저장함
EEPROM 읽고 쓰기가 가능하지만 속도가 느리며 횟수제한이 있으므로 변경하지 않는 설정값 저장
DataFlash 플래시 메모리 중의 일부분을 읽고 쓰기 가능하도록 만든 것으로써 일부 제품만 이런 기능이 있다
JTAG(Joint Test Action Group)으로 디지털 회로에서 특정 노드의 디지털 입출력을 위해 직렬 통신 방식으로 출력 데이터를 전송하거나 입력데이터를 수신하는 방식을 말함. IEEE 1149.1 표준임, 회로 설계에 따라 디지털 회로의 내부로 저송하거나 핀의 외부로 데이터를 출력할 수도 있고 상태를 읽을 수도 있음
임베디드시스템 개발 시에는 디버깅 장비가 대표적인 활용 예임, CPU의 기계어 코드를 실행하지 않고 MCU 내부의 플래시 메모리나 임베디드 장치에서 CPU의 외부 플래시 메모리에 코드를 쓰거나 읽을 수 있음
또한 디버거가 CPU 동작과 연동하여 특정 기계어 코드 위치에서 멈추고 상태를 읽어 내부의 상태를 알 수 있음
JTAG의 작동 방식은 칩 내부에 Boundary Cell을 만들어 이것이 외부의 핀과 일대 일로 연결되어 프로세서가 할 수 있는 동작을 중간의 Cell을 통해 인위적으로 수행할 수 있도록 하는 것임
인터페이스
1. TDI(데이터 입력) : Test 하기 위한 신호
2. TDO(데이터 출력) : Test 한 결과를 외부에서 모니터링 하기 위한 Pin
3. TCK(클럭)
4. TMS(모드) : Test 모드로 전환하기 위한 제어 신호
5. TRST(리셋)
-위키 백과
자 정리하자면 제품을 만들때 제품이 잘 동작하는지 테스트를 해야합니다.
그러면 핀 마다 잘 동작을 확인을 해야하는데 핀이 너무 작고, 숨어 있을 수 있기 때문에
이걸 표준으로 만들어 테스트하기 용이하게 만들어 놓은걸 JTAG이라고 합니다.
그리고 JTAG는 임베디드 시스템의 MCU 자체를 테스트 한다기 보단 보드 자체를 테스트 한다고 보시면 됩니다.
해당 핀에 신호가 잘 들어가는데 왜 동작이 이상한지, 아니면 코드에 문제가 있는지 등등을 확인할 수 있습니다.
또한 JTAG은 하드웨어 디버거에 속합니다. 개발자가 직접 CPU를 조절하며 디버깅이 가능하죠.
쉽게 말하자면 if문 안에 printf("if"); 같이 하여 확인하는 것이 소프트웨어 디버깅
실행, Break를 통해서 특정 변수의 값, Memory에 값이 잘 쓰였는지 확인하는 것이 하드웨어 디버깅입니다.
또한 JTAG를 통해 플래시 다운로드가 가능합니다.
Hex파일이나 Elf파일을 MCU에 다운로드가 가능합니다.
Boundary Scan에 대해서는 아직 잘 모르니 잘 설명해놓은 블로그 링크를 걸어두겠습니다.