Developer Document

Embedded Software 개발을 하면서 습득한 내용을 적은 시니어 개발자들의 글

코 독 코 독 CoderDocument

전체 글 34

Linux Camera Sensor Driver 초기화 흐름 - I2C probe()부터 V4L2 Subdev 등록까지

앞선 글에서는 Linux Camera Driver를 이해하기 위해 두 가지 내용을 살펴보았다.첫 번째 글에서는 Linux I2C Framework를 중심으로 i2c_client, i2c_driver, Device Tree, probe()가 어떻게 연결되는가두 번째 글에서는 V4L2 Framework를 중심으로 v4l2_subdev, Entity, Pad, Link, Format, s_stream() 등의 개념 그런데 여기까지 공부하고 나면 한 가지 궁금한 점이 생기는데 I2C Driver와 V4L2 Driver는 실제 Camera Sensor Driver에서 어떻게 연결되는 것일까?Camera Sensor는 I2C를 통해 Register를 설정해야 하고, 동시에 V4L2 Camera Pipeline의 S..

Embedded SW 기초 2026.09.19

Linux V4L2 Camera Driver - v4l2_subdev부터 Media Pipeline까지

앞선 글에서는 Linux I2C Framework를 중심으로 Camera Sensor Driver가 어떻게 I2C Device와 연결되는지 살펴보았다.특히 i2c_client, i2c_driver, Device Tree, probe()를 통해 Linux에서 Camera Sensor를 어떻게 인식하고 제어하는지를 알아보았다. 이번 글에서는 이 중 V4L2 Framework를 중심으로 살펴보려고 한다.Camera Sensor Driver를 개발하다 보면 단순히 I2C Register를 읽고 쓰는 것만으로는 부족하다.Sensor에서 생성한 영상 데이터를 Linux의 Camera Pipeline으로 연결하고,어떤 Resolution을 사용할 것인지어떤 Pixel Format을 사용할 것인지어떤 Frame Rat..

Embedded SW 기초 2026.09.07

Linux I2C Driver - i2c_client부터 probe()까지

앞선 글에서는 I2C의 기본적인 동작 원리에 대해 정리하였다.I2C는 SDA와 SCL 두 개의 신호선을 이용하고, Master가 통신을 시작하여 Slave Address를 전송한 뒤 Read/Write 방향에 따라 데이터를 주고받는다.또한 Pull-up Resistor, START / STOP Condition, ACK / NACK 등의 개념을 살펴보았다.하지만 실제 Embedded Linux 환경에서 I2C Device를 제어할 때는 이러한 I2C Protocol을 Driver에서 직접 구현하지 않는다.Linux Kernel에서는 I2C Subsystem을 제공하고 있으며, I2C Driver는 이 Framework를 통해 I2C Device와 통신한다.이번 글에서는 Hardware Level의 I2C..

Embedded SW 기초 2026.09.02

MCU - 타이머/카운터

Timer/Counter용도- 시간 및 펄스 폭 측정- 외부 event count- PWM(Pulse Width Modulation) 펄스 발생- 주기적인 인터럽트 발생 종류8bit 타이머/카운터 : 0x00 ~ 0xFF까지 카운트가 가능하다.16bit 타이머/카운터 : 0x0000 ~ 0xFFFF까지 카운트가 가능하다. 동작회로에서 입력으로 clock 신호가 들어오면 clock이 발생한 개수를 count한다. 타이머/카운터 차이타이머는 mcu 내부 clock을 입력으로 사용카운터는 외부 clock을 입력으로 사용 사용1. 일정 시간마다 동작되어야 하는 경우    주기적으로 오버플로우가 발생하도록 하여 오버플로우가 발생한 경우, 특정 동작을 수행하도록 설계된다.2. 모터 동작    PWM 펄스를 생성하여..

Embedded SW 기초 2024.07.08

MCU - 인터럽트 (3)

MCU - 인터럽트 (2)https://coderdocument.tistory.com/entry/MCU-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8-2 외부 인터럽트앞 장에서 서술한 ( 인터럽트 조건 발생 시에만 관련 플래그 트리거 )에 해당하는 종류이다.이는 입력 펄스의 변화를 감지하여 인터럽트가 발생한다. 입력 펄스의 인터럽트 설정1. 입력 펄스의 edge 트리거 방식- 상승 에지 발생 : level이 low에서 high로 변경될 때- 하강 에지 발생 : level이 high에서 low로 변경될 때- 에지 발생 (상승, 하강) : level이 변경될 때2. 입력 펄스의 level 트리거 방식- HIGH 입력 : level이 high일 때- LOW 입력 : level이 low일 때..

Embedded SW 기초 2024.07.08

MCU - 인터럽트 (2)

MCU - 인터럽트 (1)https://coderdocument.tistory.com/entry/MCU-%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8 - 인터럽트 우선 순위인터럽트는 비동기적으로 발생하기 때문에 여러 개가 인터럽트를 요청하는 경우가 발생할 수 있다.이 경우, 마이크로컨트롤러는 한번에 여러 개의 인터럽트를 처리할 수 없기 때문에 순차적으로 처리할 필요가 있다.순차적으로 처리하기 위해 인터럽트의 우선순위를 정하게 된다. 우선순위는 마이크로컨트롤러 내부에 미리 결정되어 있으며, 미리 결정된 인터럽트 우선 순위를 변경하기 위해서는 인터럽트 우선순위를 지정하는 레지스터를 변경하면 된다.마이크로컨트롤러에 따라 우선순위가 정해져 있어 변경하지 못하는 경우도 존재한다. - 인터럽트 ..

Embedded SW 기초 2024.07.01

MCU - 인터럽트 (1)

인터럽트인터럽트란, 프로그램이 수행되고 있는 동안에 어떤 조건이 발생하여 수행 중인 프로그램을 일시적으로 중지하게 만드는 조건이나 사건의 발생을 의미한다.인터럽트는 사건에 대해 비동기적으로 반응한다. 인터럽트 프로그램 실행 과정  마이크로컨트롤러가 프로그램을 실행하는 과정은 한번에 하나의 명령어만 처리할 수 있다.그러므로 인터럽트가 발생하면 현재 수행하던 Main 프로그램을 일시 중단하고 인터럽트 처리를 위한 ISR 프로그램을 수행한 후, 다시 원래 Main 프로그램으로 복귀하는 구조로 이루어진다. Main Program이 비동기적으로 발생한 event에 대해 반응하여 프로그램을 수행할 수 있다.이처럼 비동기적인 event에 대응하여 인터럽트를 처리하는 프로그램을 인터럽트 서비스 루틴 (Interrupt..

Embedded SW 기초 2024.07.01

MCU - I/O 레지스터

I/O 레지스터I/O(Input/Output) register는 입출력 레지스터로 주변 소자의 기능을 제어하기 위해 사용된다.이 레지스터는 SRAM 영역에 주소가 할당되어있다. I/O 레지스터의 일반적인 제어 방법- I/O 포트를 제어하기 위해 sfrb, sfrw 키워드가 제공된다.- I/O 레지스터의 주소는 헤더 파일에 정의되어 있다. sfrb : byte 단위 특수 기능 레지스터를 지정하는 지시어다.sfrw : word 단위 특수 기능 레지스터를 지정하는 지시어다. C8051 I/O RegisterUser's Guides for Keil C51 Development Tools 내용을 참조하자면https://developer.arm.com/documentation/101655/0961/Cx51-User..

Embedded SW 기초 2024.07.01

MCU - 상태 레지스터

상태 레지스터상태 레지스터(Status Register)란 가장 최근에 실행된 산술 연산의 명령 처리 결과에 대한 상태 정보를 표현한다.이 상태 정보는 조건부 처리 명령어(if ... 등)에 의해 프로그램의 흐름을 제어해야 할 경우, 사용될 수 있다. 상태 레지스터는 인터럽트를 처리하는 과정에서 자동적으로 저장되거나 복구되지 않기 때문에 필요하다면 소프트웨어에서 필요한 동작을 처리해주어야 한다. - 연산 결과에 따라 나타나는 플래그부호 플래그 : 가장 최근 수행된 산술 연산 결과과 +일 경우 0, -일 경우 1로 세팅된다.제로 플래그 : 연산 결과가 0일 경우 1, 0이 아닌 경우 0으로 세팅된다.캐리 플래그 : 자리 올림이 발생하거나 감산 결과 자리내림이 발생할 경우 1로 세팅된다.오버플로우 플래그 :..

Embedded SW 기초 2024.06.30

MCU - 마이크로컨트롤러

마이크로컨트롤러마이크로컨트롤러(microcontroller, MCU)는 CPU, 기억장치(RAM, ROM), 입출력 장치를 하나의 칩에 모두 내장하여 정해진 기능을 수행할 수 있다. MCU는 micro controller unit의 약자이다. 마이크로컨트롤러의 종류에는 8051, AVR, PIC, ARM, 80C196 ... 등이 존재한다.마이크로컨트롤러를 컨트롤할 때 AND, OR, XOR 등의 비트 연산을 수행할 수 있다.마이크로컨트롤러는 규모가 작은 시스템에 사용한다. 그래서 특징으로 운영체제를 포함하지 않는 경향이 있다는 점과 특정 기능만 수행하도록 응용프로그램이 만들어진다는 점이 있다. 중앙처리장치(CPU)는 마이크로컨트롤러의 중심을 담당한다. 명령어의 인식, 해석과 실행을 제어하고 연산 처리를..

Embedded SW 기초 2024.06.30