노트
로드맵의 모든 주제를 짧은 노트로 정리했습니다. 지금 182개, 순서대로 읽으면 다음 노트로 이어집니다.
깊이 있게 정리한 노트 35개
UART 기초: 클럭 없이 데이터를 보내는 방법
UART가 클럭선 없이 통신할 수 있는 이유와 시작 비트, 데이터 비트, 정지 비트, 보레이트를 정리했습니다.
실무 회로소자풀업 저항은 왜 필요할까
떠 있는 입력 핀이 왜 문제인지, 풀업 저항이 무엇을 해결하는지, 값은 어떻게 고르는지 정리했습니다.
MCU 펌웨어PWM 기초: 듀티비로 평균 전압 만들기
디지털 핀으로 LED 밝기와 모터 속도를 조절하는 PWM의 원리와 타이머 설정 계산법을 정리했습니다.
C 언어배열과 문자열: 버퍼 넘침의 원리
배열은 메모리에 연속으로 놓인 같은 자료형의 묶음이고, 문자열은 널 문자로 끝나는 char 배열입니다.
C 언어포인터: 주소를 다루면 레지스터가 보인다
포인터는 주소를 담는 변수입니다. 특정 주소를 읽고 쓰는 것이 레지스터 제어의 전부라는 점을 정리했습니다.
C 언어포인터 심화와 함수 포인터
포인터 연산, 이중 포인터, 그리고 콜백과 상태 머신에 쓰는 함수 포인터를 정리했습니다.
C 언어구조체, 공용체, 비트필드
레지스터 묶음과 통신 패킷을 구조체로 표현하고, 메모리 정렬과 패딩이 왜 생기는지 확인합니다.
C 언어비트 연산: 켜고, 끄고, 뒤집기
AND로 지우고, OR로 켜고, XOR로 뒤집고, 시프트로 자리를 옮깁니다. 레지스터 제어의 기본 문법입니다.
C 언어volatile, const, static
최적화를 막는 volatile, 값을 고정하는 const, 범위와 수명을 바꾸는 static. 임베디드에서 가장 자주 묻는 키워드 세 개.
자료구조와 알고리즘링 버퍼: 인터럽트와 메인 루프 사이의 다리
UART로 들어오는 바이트를 잃지 않고 쌓아 두는 원형 큐. 인터럽트가 쓰고 메인 루프가 읽는 구조입니다.
자료구조와 알고리즘상태 머신: 펌웨어 설계의 기본 도구
복잡한 동작 순서를 상태와 전이로 정리합니다. 플래그가 늘어나 if문이 얽히기 시작하면 상태 머신으로 바꿀 때입니다.
컴퓨터구조메모리 맵: MCU의 모든 것은 주소가 있다
코드는 Flash에, 변수는 SRAM에, 주변장치 레지스터도 정해진 주소에 있습니다. 데이터시트의 메모리 맵 읽는 법.
컴퓨터구조스택과 힙: 함수 호출이 쌓이는 곳
함수를 부를 때마다 쌓이는 스택, 런타임에 빌려 쓰는 힙. 임베디드에서 스택 넘침과 힙 사용을 조심하는 이유.
컴퓨터구조인터럽트와 예외: 하던 일을 멈추고 다녀오기
이벤트가 생기면 CPU가 상태를 저장하고 처리 루틴으로 뛰었다가 돌아옵니다. Cortex-M에서 그 과정이 어떻게 일어나는지 정리했습니다.
컴퓨터구조DMA: CPU 없이 데이터를 옮기는 일꾼
메모리와 주변장치 사이의 복사를 하드웨어가 대신합니다. ADC 샘플링, UART 수신, SPI 디스플레이 전송이 빨라지는 원리.
회로이론옴의 법칙과 전력: 부품이 얼마나 뜨거워질까
V = IR로 전류를 계산하고, P = VI로 부품이 감당할 열을 계산합니다. LED 저항과 션트 저항 예제로 정리했습니다.
회로이론직렬, 병렬, 전압 분배
저항 두 개로 전압을 나누는 분배 회로는 ADC 입력, 배터리 전압 측정, 레귤레이터 피드백에서 계속 나옵니다.
회로이론커패시터와 RC 시정수
커패시터는 전압이 갑자기 변하는 것을 막습니다. τ = RC는 63%까지 충전되는 시간이고, 5τ면 거의 다 찹니다.
전자회로MOSFET 스위치: MCU로 큰 부하를 켜는 표준 방법
게이트에 전압을 걸어 채널을 엽니다. 문턱 전압의 함정, Rds(on), 로직 레벨 MOSFET 고르기.
전자회로OP 앰프 기초: 가상 단락으로 계산하기
피드백이 걸린 OP 앰프는 두 입력 전압이 같아지도록 출력을 움직입니다. 이 한 줄로 반전·비반전 증폭기를 계산합니다.
MCU 펌웨어GPIO: 핀 하나의 모든 설정
입력과 출력, 푸시풀과 오픈드레인, 풀업, 속도, 대체 기능. STM32 GPIO 레지스터 하나하나가 회로의 어떤 부분인지 정리했습니다.
MCU 펌웨어클럭 트리: 클럭이 어디서 와서 어떻게 나뉘나
HSE, PLL, 프리스케일러. 시스템 클럭과 버스 클럭, 타이머 클럭이 어떻게 정해지는지 따라갑니다.
MCU 펌웨어타이머: 정확한 주기와 시간 재기
타이머는 클럭을 세는 카운터입니다. 주기 인터럽트, 입력 캡처로 펄스 폭 재기, 엔코더 모드까지.
MCU 펌웨어인터럽트와 NVIC: 우선순위와 짧은 처리
우선순위 그룹, 선점과 서브 우선순위, 처리 함수를 짧게 유지하는 이유, 공유 변수를 안전하게 다루는 법.
MCU 펌웨어ADC: 단일, 연속, 타이머 동기 샘플링
STM32 ADC의 변환 모드, 샘플링 시간, 여러 채널 스캔, 타이머 트리거로 정확한 주기 샘플링을 하는 방법.
MCU 펌웨어부트로더: 펌웨어가 스스로 업데이트하는 구조
Flash를 부트로더와 앱으로 나누고, 새 펌웨어를 받아 검증한 뒤 앱으로 점프합니다. 점프 순서와 실패 대비.
통신 프로토콜SPI: 클럭에 맞춰 동시에 주고받기
SCK, MOSI, MISO, CS 네 선으로 빠르게 통신합니다. 네 가지 모드, 여러 슬레이브 연결, 실전 디버깅 포인트.
통신 프로토콜I2C: 선 두 가닥에 여러 칩 달기
SCL과 SDA 두 선, 7비트 주소, ACK, 풀업 저항. 센서 통신의 표준인 I2C의 동작과 막혔을 때 푸는 법.
통신 프로토콜CAN: 차량용 버스의 원리
차동 두 선에서 ID가 낮은 메시지가 충돌 없이 먼저 나갑니다. 중재, 프레임 구조, 비트 타이밍, 에러 처리.
RTOS태스크와 스케줄러
작업을 각자의 무한 루프를 가진 태스크로 나누고, 스케줄러가 CPU 시간을 나눠 줍니다. 태스크 상태와 틱의 개념.
RTOS세마포어와 뮤텍스: 공유 자원 지키기
두 태스크가 같은 UART나 변수를 동시에 건드리면 데이터가 섞입니다. 뮤텍스로 잠그고, 세마포어로 신호를 줍니다.
제어공학PID 제어: 현재, 과거, 미래의 오차
P는 현재 오차에, I는 쌓인 오차에, D는 오차의 변화 속도에 반응합니다. 각 항의 효과와 튜닝 순서.
모터 제어DC 모터와 H 브리지: 방향과 속도 제어
스위치 네 개로 전류 방향을 바꾸고 PWM으로 평균 전압을 조절합니다. 브레이크, 코스트, 전류 감쇠 모드까지.
모터 제어6스텝 구동: 여섯 조합으로 회전자 끌기
홀센서 세 개가 알려 주는 구간마다 두 상에만 전류를 흘려 회전 자기장을 만듭니다. 정류 표와 한계.
모터 제어FOC: 3상 전류를 두 개의 직류로
클라크, 파크 변환으로 회전하는 3상 전류를 회전자에 붙은 좌표의 d축, q축 직류 값으로 바꿔 토크를 직접 제어합니다.
01 기초
C 언어
12개- 01변수와 자료형int의 크기는 컴파일러마다 다릅니다. 임베디드에서 크기가 정해진 자료형을 쓰는 이유와 부호, 오버플로를 정리했습니다.
- 02연산자와 형변환정수 나눗셈, 암묵적 형변환, 연산자 우선순위. 컴파일은 되는데 값이 틀리는 코드의 원인을 정리했습니다.
- 03제어문if, switch, for, while로 흐름을 만들고, 임베디드 프로그램이 끝나지 않는 루프로 짜이는 이유를 봅니다.
- 04함수와 스코프함수 인자는 복사되어 전달됩니다. 지역 변수와 전역 변수의 수명, 그리고 MCU에서 재귀를 피하는 이유.
- 05배열과 문자열 심화배열은 메모리에 연속으로 놓인 같은 자료형의 묶음이고, 문자열은 널 문자로 끝나는 char 배열입니다.
- 06포인터 심화포인터는 주소를 담는 변수입니다. 특정 주소를 읽고 쓰는 것이 레지스터 제어의 전부라는 점을 정리했습니다.
- 07포인터 심화와 함수 포인터 심화포인터 연산, 이중 포인터, 그리고 콜백과 상태 머신에 쓰는 함수 포인터를 정리했습니다.
- 08구조체, 공용체, 비트필드 심화레지스터 묶음과 통신 패킷을 구조체로 표현하고, 메모리 정렬과 패딩이 왜 생기는지 확인합니다.
- 09비트 연산 심화AND로 지우고, OR로 켜고, XOR로 뒤집고, 시프트로 자리를 옮깁니다. 레지스터 제어의 기본 문법입니다.
- 10volatile, const, static 심화최적화를 막는 volatile, 값을 고정하는 const, 범위와 수명을 바꾸는 static. 임베디드에서 가장 자주 묻는 키워드 세 개.
- 11전처리기와 매크로#define, 조건부 컴파일, 헤더 가드. 매크로가 만드는 함정과 안전하게 쓰는 방법.
- 12빌드 과정전처리, 컴파일, 어셈블, 링크를 거쳐 실행 파일이 되는 흐름과 링크 오류를 읽는 방법.
자료구조와 알고리즘
8개- 01시간과 메모리 복잡도RAM 20KB, 클럭 72MHz인 MCU에서는 알고리즘을 고르기 전에 계산량과 메모리를 먼저 따져야 합니다.
- 02링 버퍼 심화UART로 들어오는 바이트를 잃지 않고 쌓아 두는 원형 큐. 인터럽트가 쓰고 메인 루프가 읽는 구조입니다.
- 03큐와 스택작업 대기열은 큐, 함수 호출은 스택입니다. 두 구조를 배열로 직접 구현하며 차이를 봅니다.
- 04연결 리스트와 메모리 풀malloc 없이 미리 잡아 둔 메모리 풀로 연결 리스트를 쓰는 방법. 단편화와 실패를 피하는 임베디드식 할당입니다.
- 05상태 머신 심화복잡한 동작 순서를 상태와 전이로 정리합니다. 플래그가 늘어나 if문이 얽히기 시작하면 상태 머신으로 바꿀 때입니다.
- 06탐색과 룩업 테이블정렬된 표에서 이진 탐색으로 빠르게 찾고, sin이나 센서 보정처럼 비싼 계산은 표로 미리 만들어 둡니다.
- 07CRC와 체크섬통신 중 비트가 뒤집혔는지 확인하는 계산. 단순 합 체크섬과 CRC의 차이, 그리고 구현 방법을 정리했습니다.
- 08고정소수점 연산FPU가 없는 MCU에서 소수를 빠르게 계산하는 Q 포맷. 스케일, 곱셈 후 시프트, 포화 처리를 정리했습니다.
디지털 논리
8개- 012진수, 16진수, 2의 보수레지스터 값은 16진수로 읽고, 음수는 2의 보수로 저장됩니다. 데이터시트와 디버거 화면을 읽기 위한 숫자 감각.
- 02논리 게이트와 불 대수AND, OR, NOT, XOR와 드모르간 법칙. 회로도와 C 코드의 조건식이 같은 규칙으로 움직입니다.
- 03조합 회로현재 입력만으로 출력이 정해지는 회로. MCU 안의 주소 해석, 핀 기능 선택, ALU가 모두 조합 회로입니다.
- 04플립플롭과 레지스터클럭 가장자리에서 값을 붙잡아 기억하는 플립플롭. 이것이 여러 개 모이면 MCU의 레지스터가 됩니다.
- 05카운터와 시프트 레지스터클럭을 셀 때마다 1씩 올라가는 카운터는 MCU 타이머의 원형이고, 비트를 한 칸씩 옮기는 시프트 레지스터는 SPI와 UART의 원형입니다.
- 06클럭과 타이밍플립플롭이 값을 제대로 붙잡으려면 클럭 전후로 입력이 가만히 있어야 합니다. 이 조건이 깨질 때 생기는 문제를 정리했습니다.
- 07논리 레벨과 인터페이스몇 V부터 1로 읽히는지, 푸시풀과 오픈드레인은 무엇이 다른지, 전압이 다른 칩을 어떻게 연결하는지 정리했습니다.
- 08FPGA 맛보기MCU는 명령어를 순서대로 실행하고, FPGA는 회로 자체를 바꿉니다. 둘의 차이와 FPGA가 필요한 순간을 정리했습니다.
컴퓨터구조
10개- 01폰 노이만과 하버드 구조코드와 데이터를 같은 길로 읽느냐, 따로 읽느냐. Cortex-M이 두 구조를 섞어 쓰는 이유까지 정리했습니다.
- 02CPU 내부 구조레지스터, ALU, 프로그램 카운터, 그리고 명령어를 가져와 실행하는 반복. CPU가 하는 일은 이 루프가 전부입니다.
- 03파이프라인빨래를 세탁, 건조, 개기로 나눠 겹쳐 하듯 CPU도 명령어 처리 단계를 겹칩니다. 분기가 느린 이유도 여기서 나옵니다.
- 04메모리 계층레지스터, 캐시, SRAM, Flash, 외부 메모리. 각 계층의 속도와 용량 차이를 알면 변수를 어디에 둘지가 보입니다.
- 05메모리 맵 심화코드는 Flash에, 변수는 SRAM에, 주변장치 레지스터도 정해진 주소에 있습니다. 데이터시트의 메모리 맵 읽는 법.
- 06버스와 주변장치CPU가 GPIO를 움직이는 방법은 메모리에 값을 쓰는 것과 같습니다. 주변장치를 잇는 버스 구조와 클럭 활성화가 필요한 이유.
- 07스택과 힙 심화함수를 부를 때마다 쌓이는 스택, 런타임에 빌려 쓰는 힙. 임베디드에서 스택 넘침과 힙 사용을 조심하는 이유.
- 08인터럽트와 예외 심화이벤트가 생기면 CPU가 상태를 저장하고 처리 루틴으로 뛰었다가 돌아옵니다. Cortex-M에서 그 과정이 어떻게 일어나는지 정리했습니다.
- 09DMA 심화메모리와 주변장치 사이의 복사를 하드웨어가 대신합니다. ADC 샘플링, UART 수신, SPI 디스플레이 전송이 빨라지는 원리.
- 10ARM Cortex-M 개요Cortex-M 코어별 차이와, ARM이 설계한 코어에 ST, NXP 같은 회사가 주변장치를 붙여 MCU 제품군을 만드는 방식.
02 하드웨어
회로이론
10개- 01전압, 전류, 저항전압은 두 점 사이의 차이이고, 그 기준점이 그라운드입니다. 회로를 읽는 세 가지 기본 양을 정리했습니다.
- 02옴의 법칙과 전력 심화V = IR로 전류를 계산하고, P = VI로 부품이 감당할 열을 계산합니다. LED 저항과 션트 저항 예제로 정리했습니다.
- 03키르히호프 법칙들어온 전류는 모두 나가고, 고리를 한 바퀴 돌면 전압의 합은 0입니다. 모든 회로 해석의 출발점입니다.
- 04직렬, 병렬, 전압 분배 심화저항 두 개로 전압을 나누는 분배 회로는 ADC 입력, 배터리 전압 측정, 레귤레이터 피드백에서 계속 나옵니다.
- 05테브난과 노턴 등가회로복잡한 회로를 전원 하나와 저항 하나로 줄입니다. 센서나 분배기가 다음 단을 얼마나 잘 구동할 수 있는지가 보입니다.
- 06중첩의 원리전원이 여러 개인 선형 회로는 하나씩만 남기고 풀어서 더하면 됩니다. 오프셋이 있는 센서 회로를 이해하는 도구.
- 07커패시터와 RC 시정수 심화커패시터는 전압이 갑자기 변하는 것을 막습니다. τ = RC는 63%까지 충전되는 시간이고, 5τ면 거의 다 찹니다.
- 08인덕터와 RL 회로인덕터는 전류가 갑자기 변하는 것을 막습니다. 릴레이와 모터를 끌 때 큰 전압이 튀는 이유와 대처법.
- 09교류와 임피던스커패시터와 인덕터의 저항은 주파수에 따라 달라집니다. 페이저와 임피던스로 교류 회로를 직류처럼 계산합니다.
- 10필터와 공진RC 저역통과 필터의 차단 주파수 1/(2πRC), 고역통과, 그리고 LC 공진. 센서 노이즈 제거와 전원 필터의 기본.
전자회로
12개- 01반도체와 PN 접합다이오드와 트랜지스터는 모두 PN 접합에서 출발합니다. 순방향 전압, 역방향 차단, 온도 특성의 원리.
- 02다이오드 종류이름은 모두 다이오드지만 쓰임이 전혀 다릅니다. 회로도에서 보이는 다섯 종류를 언제 쓰는지 구분합니다.
- 03BJT 스위치베이스에 작은 전류를 흘려 컬렉터의 큰 전류를 켜고 끕니다. 포화 상태와 베이스 저항 계산.
- 04MOSFET 스위치 심화게이트에 전압을 걸어 채널을 엽니다. 문턱 전압의 함정, Rds(on), 로직 레벨 MOSFET 고르기.
- 05게이트 드라이버와 하프 브리지MOSFET 두 개를 위아래로 쌓은 하프 브리지는 모터와 컨버터의 기본 단위입니다. 위쪽 스위치에 드라이버가 필요한 이유.
- 06OP 앰프 기초 심화피드백이 걸린 OP 앰프는 두 입력 전압이 같아지도록 출력을 움직입니다. 이 한 줄로 반전·비반전 증폭기를 계산합니다.
- 07OP 앰프 응용같은 OP 앰프로 저항과 커패시터 배치만 바꿔 여러 기능을 만듭니다. 센서 회로에서 자주 쓰는 네 가지.
- 08전류 센싱 회로션트 저항에 걸린 작은 전압을 증폭해 ADC로 읽습니다. 로우사이드와 하이사이드, 켈빈 연결, 오프셋 처리.
- 09선형 레귤레이터LDO는 입력과 출력의 차이만큼을 열로 버립니다. 드롭아웃 전압, 발열 계산, 커패시터 조건을 정리했습니다.
- 10스위칭 컨버터스위치를 빠르게 켜고 끄며 인덕터에 에너지를 담았다 내보내 전압을 바꿉니다. 벅과 부스트의 원리와 PCB 주의점.
- 11ADC와 DAC 회로분해능, 기준 전압, 샘플링 시간, 입력 RC 필터. ADC 값이 기대와 다를 때 확인할 회로 쪽 원인을 정리했습니다.
- 12보호 회로현장에서 보드가 망가지는 원인 대부분은 커넥터로 들어옵니다. TVS, 퓨즈, 역접 보호로 막는 방법.
실무 회로소자
8개- 01저항 고르기저항은 값만 맞으면 될 것 같지만 정격 전력, 공차, 온도 계수, 패키지까지 봐야 합니다.
- 02커패시터 종류같은 10µF라도 종류에 따라 크기, 수명, 주파수 특성이 다릅니다. 특히 MLCC는 DC 전압을 걸면 용량이 크게 줄어듭니다.
- 03인덕터와 페라이트 비드인덕터는 포화 전류와 DCR을, 페라이트 비드는 주파수별 임피던스를 봅니다. 둘은 생김새가 비슷해도 목적이 다릅니다.
- 04크리스털과 오실레이터내부 RC 발진기는 1~2% 오차가 있어 UART, USB, CAN에는 부족합니다. 크리스털 부하 커패시터 계산과 배치 방법.
- 05커넥터와 단자회로가 완벽해도 커넥터가 빠지거나 타면 끝입니다. 정격 전류, 핀 간격, 체결 방식, 극성 실수 방지.
- 06퓨즈와 보호 소자폴리퓨즈, 일반 퓨즈, TVS, 바리스터. 무엇을 막을지 먼저 정하면 고를 부품이 정해집니다.
- 07풀업, 풀다운, 디커플링떠 있는 입력 핀이 왜 문제인지, 풀업 저항이 무엇을 해결하는지, 값은 어떻게 고르는지 정리했습니다.
- 08데이터시트 읽는 법절대 최대 정격, 권장 동작 조건, 전기적 특성 표, 타이밍 그림. 수십 장의 데이터시트에서 먼저 볼 곳.
PCB 설계
8개- 01회로도 그리기KiCad 심볼, 넷 라벨, 계층 시트. 남이 봐도, 석 달 뒤의 내가 봐도 읽히는 회로도를 만드는 습관.
- 02부품 배치 전략배선보다 배치가 PCB 품질의 80%를 정합니다. 기구 제약, 전원 흐름, 고속부와 아날로그부 분리 순서로 배치합니다.
- 03배선 폭과 전류배선도 저항입니다. 구리 두께와 허용 온도 상승으로 배선 폭을 정하고, 부족하면 플레인과 비아로 보강합니다.
- 04그라운드와 전원 플레인모든 신호 전류는 그라운드로 돌아옵니다. 리턴 경로가 짧고 끊기지 않게 하는 것이 그라운드 설계의 전부입니다.
- 05디커플링 배치디커플링 커패시터는 칩이 순간적으로 당기는 전류를 공급합니다. 값보다 위치와 비아가 효과를 결정합니다.
- 06고속 신호와 임피던스USB, 이더넷, 고속 SPI는 배선이 전송선로처럼 동작합니다. 차동 배선, 임피던스 맞춤, 길이 맞춤의 기본.
- 07EMC 기초전자파 적합성은 인증 시험에서 처음 만나면 늦습니다. 설계 단계에서 들이는 습관 몇 가지로 대부분 막을 수 있습니다.
- 08거버 출력과 주문DRC, 거버와 드릴 파일, BOM, 실장 좌표 파일. 처음 주문할 때 빠뜨리기 쉬운 것들을 정리했습니다.
계측과 디버깅 장비
6개- 01멀티미터전압, 전류, 저항, 도통. 그리고 전류 측정에서 퓨즈를 날리는 흔한 실수까지 정리했습니다.
- 02오실로스코프트리거, 시간 축, 프로브 보정, 그라운드 클립. 멀티미터가 평균을 보여 준다면 오실로스코프는 시간에 따른 변화를 보여 줍니다.
- 03로직 분석기여러 디지털 신호를 동시에 기록하고 UART, SPI, I2C를 해석해 바이트로 보여 줍니다. 통신 디버깅의 첫 도구.
- 04전원 공급기와 전자 부하전류 제한으로 보드를 지키고, 전자 부하로 전원부를 시험합니다. 처음 전원을 넣는 순간을 안전하게 만드는 장비.
- 05디버거ST-LINK, J-Link로 펌웨어를 올리고 중단점, 변수 감시, 레지스터 보기로 문제를 찾습니다. printf보다 빠른 디버깅.
- 06납땜과 재작업SMD 납땜, 플럭스, 열풍기, 솔더 윅. 시제품을 고치는 손기술도 임베디드 개발자의 기본기입니다.
03 펌웨어
기계어와 어셈블리
8개- 01명령어 한 줄의 정체기계어는 CPU가 읽는 숫자이고, 어셈블리는 그 숫자에 붙인 이름입니다. C 한 줄이 몇 개의 숫자가 되는지 봅니다.
- 02Thumb 명령어 읽기Cortex-M이 쓰는 Thumb 명령어 집합에서 자주 나오는 MOV, LDR, STR, B, BL을 실제 디스어셈블 예로 읽어 봅니다.
- 03레지스터와 호출 규약인자는 r0~r3, 반환값은 r0, 돌아갈 주소는 lr, 스택 위치는 sp. 함수 경계에서 레지스터가 어떻게 쓰이는지 정한 약속.
- 04C와 어셈블리 대조간단한 C 함수를 디스어셈블해서 한 줄씩 맞춰 보고, -O0과 -O2가 같은 코드를 얼마나 다르게 만드는지 비교합니다.
- 05스타트업 코드리셋 직후 CPU는 .data를 RAM으로 복사하고 .bss를 0으로 채운 뒤에야 main을 부릅니다. startup.s를 한 줄씩 따라갑니다.
- 06링커 스크립트와 섹션.text, .rodata, .data, .bss가 Flash와 RAM의 어디에 놓이는지 정하는 파일. 맵 파일과 함께 읽는 법.
- 07벡터 테이블초기 스택 값과 리셋, 예외, 인터럽트 처리 함수의 주소가 차례로 놓인 표. 부트로더가 이 표를 옮기는 이유까지.
- 08하드폴트 분석하드폴트가 나면 스택에 저장된 PC와 LR, 그리고 폴트 상태 레지스터로 원인과 위치를 찾습니다.
MCU 펌웨어
12개- 01개발 환경STM32CubeIDE, 컴파일러, 디버거를 갖추고 첫 펌웨어를 올립니다. 첫 LED가 켜지면 툴체인 전체가 확인된 것입니다.
- 02레지스터 제어와 HAL레지스터를 직접 쓰면 빠르고 정확하고, HAL을 쓰면 빠르게 개발합니다. 둘을 섞어 쓰는 현업 방식.
- 03GPIO 심화입력과 출력, 푸시풀과 오픈드레인, 풀업, 속도, 대체 기능. STM32 GPIO 레지스터 하나하나가 회로의 어떤 부분인지 정리했습니다.
- 04클럭 트리 심화HSE, PLL, 프리스케일러. 시스템 클럭과 버스 클럭, 타이머 클럭이 어떻게 정해지는지 따라갑니다.
- 05타이머 심화타이머는 클럭을 세는 카운터입니다. 주기 인터럽트, 입력 캡처로 펄스 폭 재기, 엔코더 모드까지.
- 06PWM디지털 핀으로 LED 밝기와 모터 속도를 조절하는 PWM의 원리와 타이머 설정 계산법을 정리했습니다.
- 07인터럽트와 NVIC 심화우선순위 그룹, 선점과 서브 우선순위, 처리 함수를 짧게 유지하는 이유, 공유 변수를 안전하게 다루는 법.
- 08ADC 심화STM32 ADC의 변환 모드, 샘플링 시간, 여러 채널 스캔, 타이머 트리거로 정확한 주기 샘플링을 하는 방법.
- 09DMA 활용ADC 값을 순환 버퍼로 계속 채우고, UART로 길이를 모르는 패킷을 받는 실전 DMA 설정 두 가지.
- 10워치독과 저전력 모드프로그램이 멈추면 스스로 리셋하는 워치독, 배터리 기기를 위한 슬립, 스톱, 스탠바이 모드.
- 11Flash와 EEPROM 쓰기전원이 꺼져도 남아야 하는 값은 Flash나 EEPROM에 씁니다. 섹터 지우기, 쓰기 횟수, 전원 차단에 안전한 저장 방법.
- 12부트로더 심화Flash를 부트로더와 앱으로 나누고, 새 펌웨어를 받아 검증한 뒤 앱으로 점프합니다. 점프 순서와 실패 대비.
통신 프로토콜
12개- 01직렬통신 기초통신 이름을 외우기 전에 네 가지 기준을 잡으면 UART, SPI, I2C, CAN이 한 표에 정리됩니다.
- 02UARTUART가 클럭선 없이 통신할 수 있는 이유와 시작 비트, 데이터 비트, 정지 비트, 보레이트를 정리했습니다.
- 03RS-232, RS-422, RS-485같은 UART 프레임을 전압 레벨과 차동 신호로 바꿔 수십 m~1km까지 보냅니다. 세 규격의 차이와 RS-485 방향 제어.
- 04SPI 심화SCK, MOSI, MISO, CS 네 선으로 빠르게 통신합니다. 네 가지 모드, 여러 슬레이브 연결, 실전 디버깅 포인트.
- 05I2C 심화SCL과 SDA 두 선, 7비트 주소, ACK, 풀업 저항. 센서 통신의 표준인 I2C의 동작과 막혔을 때 푸는 법.
- 06CAN 심화차동 두 선에서 ID가 낮은 메시지가 충돌 없이 먼저 나갑니다. 중재, 프레임 구조, 비트 타이밍, 에러 처리.
- 07CAN FD중재는 기존 속도로, 데이터 구간은 더 빠르게. 8바이트 한계를 넘는 CAN FD의 변경점과 설계 주의점.
- 08LIN선 한 가닥, 최대 20kbps. 창문, 미러, 시트처럼 빠를 필요 없는 차량 장치를 싸게 연결하는 방법.
- 09USB 기초디스크립터, 엔드포인트, 클래스. MCU를 USB에 꽂으면 COM 포트로 보이게 하는 CDC까지.
- 10이더넷과 TCP/IPMAC, PHY, IP, TCP/UDP의 역할 분담과 STM32 + LwIP로 네트워크를 붙이는 구조.
- 11무선 통신거리, 속도, 전력, 인프라 네 가지로 비교하면 프로젝트에 맞는 무선 방식이 정해집니다.
- 12프로토콜 설계헤더, 길이, 명령, 데이터, CRC. 바이트 흐름에서 패킷을 안정적으로 잘라 내는 통신 규칙을 설계합니다.
RTOS
8개- 01슈퍼루프의 한계while(1) 하나로 모든 일을 돌리면 가장 느린 작업이 전체 반응 속도를 정합니다. RTOS로 넘어갈 신호들.
- 02태스크와 스케줄러 심화작업을 각자의 무한 루프를 가진 태스크로 나누고, 스케줄러가 CPU 시간을 나눠 줍니다. 태스크 상태와 틱의 개념.
- 03우선순위와 선점선점형 스케줄러는 더 높은 우선순위 태스크가 준비되는 즉시 CPU를 넘깁니다. 우선순위를 정하는 기준.
- 04세마포어와 뮤텍스 심화두 태스크가 같은 UART나 변수를 동시에 건드리면 데이터가 섞입니다. 뮤텍스로 잠그고, 세마포어로 신호를 줍니다.
- 05큐와 이벤트 그룹전역 변수 대신 큐로 데이터를 넘기고, 이벤트 그룹으로 여러 조건을 한꺼번에 기다립니다.
- 06우선순위 역전낮은 태스크가 잡은 뮤텍스 때문에 높은 태스크가 멈추고, 그 사이 중간 태스크가 CPU를 차지합니다. 화성 탐사선도 겪은 문제.
- 07메모리와 스택 관리태스크마다 스택 크기를 정해야 하고, 넘치면 다른 태스크의 메모리를 망가뜨립니다. 스택 크기를 재고 넘침을 잡는 방법.
- 08FreeRTOS 실습STM32에서 FreeRTOS로 IMU 읽기, 제어, UART 로그를 태스크로 분리하는 구조 예. 처음 구성할 때 지킬 순서.
펌웨어 설계와 품질
8개- 01계층 구조HAL, 드라이버, 서비스, 애플리케이션으로 나누고 의존 방향을 한쪽으로 정합니다. 칩이 바뀌어도 위쪽 코드가 살아남는 구조.
- 02모듈화와 인터페이스.h는 바깥에 보여 줄 것만, .c는 내부를 숨깁니다. static, 불투명 타입, 초기화 함수로 모듈을 설계하는 방법.
- 03코딩 규칙자동차와 산업 펌웨어에서 쓰는 MISRA C가 무엇을 금지하는지, 그리고 그 이유를 정리했습니다.
- 04단위 테스트PID, 파서, 상태 머신처럼 하드웨어와 무관한 로직은 PC에서 테스트합니다. Unity, 목(mock), 테스트 가능한 구조.
- 05정적 분석컴파일러 경고를 최대로 켜고, cppcheck와 clang-tidy로 코드를 실행하지 않고 결함을 찾습니다.
- 06버전 관리브랜치, 커밋 단위, 릴리스 태그, 그리고 펌웨어 바이너리에 버전을 새기는 방법.
- 07로그와 디버그 출력printf 디버깅부터 링 버퍼 로그, SWO/RTT 실시간 트레이스까지. 실시간 동작을 망치지 않고 내부를 보는 방법.
- 08펌웨어 업데이트출시 후에도 버그를 고치려면 업데이트 경로가 필요합니다. A/B 슬롯, 서명 검증, 롤백으로 벽돌을 피하는 구조.
04 응용
제어공학
10개- 01개루프와 폐루프결과를 다시 재서 입력에 반영하는 것이 피드백입니다. 개루프와 폐루프의 차이를 모터 속도 예로 정리했습니다.
- 02시스템 모델링모터 속도, RC 회로, 온도는 1차 시스템으로, 스프링-질량과 위치 제어는 2차 시스템으로 표현합니다.
- 03라플라스 변환과 전달함수미분방정식을 s의 곱셈과 나눗셈으로 바꾸는 도구. 전달함수 하나로 시스템의 반응을 읽는 방법.
- 04블록선도직렬, 병렬, 피드백 연결의 계산 규칙 세 가지로 복잡한 제어 구조를 하나의 전달함수로 줄입니다.
- 05시간 응답계단 입력을 줬을 때의 응답 모양으로 제어 성능을 말합니다. 사양서에 적히는 숫자들의 의미.
- 06PID 제어 심화P는 현재 오차에, I는 쌓인 오차에, D는 오차의 변화 속도에 반응합니다. 각 항의 효과와 튜닝 순서.
- 07안정도극점이 오른쪽 반평면으로 넘어가면 시스템이 발산합니다. 게인, 지연, 안정 여유의 관계.
- 08주파수 응답과 보드 선도사인파를 넣었을 때 출력의 크기와 위상이 주파수에 따라 어떻게 변하는지 그린 그래프. 위상 여유와 이득 여유로 안정성을 판단합니다.
- 09디지털 제어MCU에서 돌아가는 제어기는 연속 시간이 아니라 정해진 주기의 계산입니다. 샘플링 주기 정하기와 구현의 함정.
- 10상태 공간 맛보기위치와 속도, 각도와 각속도처럼 여러 상태를 행렬 하나로 다루는 현대 제어. 밸런싱 로봇과 칼만 필터로 이어지는 출발점.
센서와 신호처리
8개- 01센서 기초물리량이 전압이나 데이터로 바뀌는 원리와, 센서를 고를 때 비교하는 범위, 분해능, 정확도, 응답 속도.
- 02샘플링과 앨리어싱신호를 띄엄띄엄 재면 빠른 변화가 느린 가짜 신호로 둔갑합니다. 나이퀴스트 주파수와 샘플링 전 필터가 필요한 이유.
- 03디지털 필터측정값의 노이즈를 MCU 계산으로 줄입니다. 가장 많이 쓰는 1차 IIR 필터 한 줄과 필터를 고르는 기준.
- 04칼만 필터 기초모델로 예측한 값과 센서로 잰 값을 각각의 불확실성에 따라 섞어 더 정확한 추정을 얻습니다. 1차원 예로 원리를 잡습니다.
- 05IMU와 센서 퓨전가속도계는 오래 보면 정확하지만 진동에 약하고, 자이로는 빠르지만 오래 쓰면 흘러갑니다. 둘을 섞는 상보 필터.
- 06엔코더와 홀센서증분형 엔코더의 A/B상, 홀센서 세 개로 BLDC 위치 알기, 타이머 엔코더 모드와 속도 계산 방법.
- 07거리 센서소리와 빛이 왕복하는 시간이나 반사 세기로 거리를 잽니다. 방식별 원리와 한계, 고르는 기준.
- 08FFT로 주파수 보기시간 영역 신호를 주파수 성분으로 바꿔 진동과 노이즈가 어느 주파수에 몰려 있는지 봅니다. MCU에서 FFT를 쓰는 방법.
전력전자
8개- 01스위칭의 원리이상적인 스위치는 켜졌을 때 전압이 0, 꺼졌을 때 전류가 0이라 전력을 소모하지 않습니다. 이 성질이 전력전자의 출발점입니다.
- 02벅 컨버터 설계12V를 5V로 내리는 벅 컨버터를 예로 듀티비, 인덕터 리플 전류, 출력 커패시터를 계산합니다.
- 03부스트와 벅부스트인덕터에 에너지를 모았다가 입력 위에 얹어 내보내면 전압이 올라갑니다. 부스트, 벅부스트, 그리고 배터리 기기에서의 선택.
- 04손실과 발열도통 손실과 스위칭 손실을 더하고, 열저항으로 온도 상승을 계산합니다. MOSFET이 견딜 수 있는지 확인하는 순서.
- 05인버터하프 브리지와 풀 브리지로 직류에서 교류를 만듭니다. 모터 구동, 태양광, UPS가 같은 원리를 씁니다.
- 06배터리와 BMS리튬 배터리의 전압 범위, 직렬 셀 밸런싱, 과충전·과방전·과전류 보호. 배터리 기기를 설계할 때의 기본.
- 07절연과 안전고전압 회로와 사람이 만지는 저전압 회로를 분리하는 절연. 절연 거리, 절연형 게이트 드라이버, 작업 안전.
- 08전력 회로 측정차동 프로브, 전류 프로브, 짧은 그라운드로 스위칭 노드와 상전류를 측정하는 방법. 측정이 만든 가짜 신호 구분하기.
모터 제어
10개- 01전자기 기초자기장 속 도선에 전류가 흐르면 힘이, 도선이 움직이면 전압이 생깁니다. 모든 모터는 이 두 식으로 움직입니다.
- 02DC 모터와 H 브리지 심화스위치 네 개로 전류 방향을 바꾸고 PWM으로 평균 전압을 조절합니다. 브레이크, 코스트, 전류 감쇠 모드까지.
- 03스텝 모터코일에 차례로 전류를 넣어 1.8°씩 움직입니다. 풀스텝, 마이크로스텝, 탈조와 정전류 드라이버.
- 04서보 모터취미용 서보는 PWM 펄스 폭으로 각도를 정하고, 산업용 서보는 엔코더와 3중 제어 루프로 정밀하게 움직입니다.
- 05BLDC 구조브러시 DC 모터의 정류자를 인버터와 센서로 바꾼 모터. 내전형과 외전형, 극수, 전기각과 기계각.
- 066스텝 구동 심화홀센서 세 개가 알려 주는 구간마다 두 상에만 전류를 흘려 회전 자기장을 만듭니다. 정류 표와 한계.
- 073상 인버터MOSFET 여섯 개, 게이트 드라이버, 데드타임, 부트스트랩, DC 링크 커패시터. 모터 드라이버 보드의 구성 요소.
- 08상전류 센싱로우사이드 션트, 인라인 션트, 홀 센서의 차이와, PWM 주기의 정해진 순간에 ADC를 트리거하는 이유.
- 09FOC 심화클라크, 파크 변환으로 회전하는 3상 전류를 회전자에 붙은 좌표의 d축, q축 직류 값으로 바꿔 토크를 직접 제어합니다.
- 10전류, 속도, 위치 루프모터 제어는 전류 루프를 가장 안쪽에, 속도와 위치 루프를 바깥에 둔 캐스케이드 구조입니다. 대역폭 배분과 튜닝 순서.
임베디드 리눅스
8개- 01리눅스와 셸 기초임베디드 리눅스 보드를 다루려면 파일 시스템, 권한, 프로세스, 셸 스크립트가 손에 익어야 합니다. 자주 쓰는 명령 정리.
- 02크로스 컴파일성능이 좋은 PC에서 다른 아키텍처용 실행 파일을 만드는 툴체인. sysroot와 라이브러리 버전이 맞아야 보드에서 돕니다.
- 03부트 과정부트 ROM, U-Boot, 리눅스 커널, 루트 파일 시스템, init 순서로 올라옵니다. 어디서 멈췄는지 알면 문제가 좁혀집니다.
- 04디바이스 트리어떤 장치가 어떤 주소와 핀에 붙어 있는지 적은 파일. 같은 커널이 여러 보드에서 돌 수 있는 이유.
- 05디바이스 드라이버커널 안에서 하드웨어를 다루는 코드. 가장 단순한 모듈부터 플랫폼 드라이버, I2C 드라이버의 구조까지.
- 06사용자 공간 I/O드라이버를 직접 만들지 않고 /dev, sysfs, ioctl, libgpiod로 GPIO, I2C, SPI, UART를 다루는 방법.
- 07Yocto와 Buildroot부트로더, 커널, 루트 파일 시스템, 내 앱까지 하나의 이미지로 재현 가능하게 빌드하는 도구.
- 08실시간 리눅스리눅스도 실시간에 가까워질 수 있지만 MCU와는 다릅니다. 지연 측정 방법과 MCU에 맡길 일을 정하는 기준.
자동차 소프트웨어
8개- 01차량 전장 구조기능마다 ECU를 하나씩 달던 분산 구조에서 도메인 컨트롤러, 그리고 존 아키텍처와 중앙 컴퓨터로 가는 흐름.
- 02차량 네트워크속도, 비용, 실시간성에 따라 차량 안에서 쓰는 네트워크가 나뉩니다. 각 네트워크가 맡는 영역과 게이트웨이의 역할.
- 03AUTOSAR 개요자동차 소프트웨어 표준 구조. 하드웨어에 가까운 BSW와 기능을 담은 SWC를 RTE가 이어 주는 방식.
- 04진단 통신정비소 진단기가 ECU와 대화하는 표준 UDS. 서비스 ID, 고장 코드(DTC), 세션과 보안 접근, 펌웨어 플래싱.
- 05기능 안전전기·전자 시스템 고장이 사람을 다치게 하지 않도록 하는 표준. 위험 분석, ASIL 등급, 안전 메커니즘.
- 06V-모델 개발왼쪽으로 내려가며 요구사항과 설계를 쪼개고, 오른쪽으로 올라가며 각 단계와 짝이 되는 시험으로 검증합니다.
- 07MIL, SIL, HIL 테스트모델, 소프트웨어, 실제 하드웨어 순서로 검증 범위를 넓혀 갑니다. 실차 전에 대부분의 문제를 찾는 방법.
- 08차량 사이버보안연결된 차량은 공격 대상입니다. 위협 분석, 보안 부팅, 메시지 인증, 진단 보안의 기본.