임베디드 레시피 정리 2편 – 트랜지스터·레지스터·메모리·CPU까지 한 번에 이어보기
「임베디드 레시피」 하드웨어 파트를 기반으로 개인적으로 공부한 내용을 정리.
2편 범위:
- 트랜지스터 1% (스위치 관점)
- Pull-up / Pull-down / Open-Collector(Open-Drain)
- RLC와 스위칭 파형 감각
- 논리회로로의 확장 (게이트, 조합·순차 논리)
- IC 기본 개념
- 레지스터(Register)의 역할
- 클럭(Clock)과 버스(Bus) 전송 메커니즘
- 타이밍과 Spec 읽기 (Setup/Hold 등)
- 메모리 선정과 XIP
- RAM(SRAM/DRAM)의 물리적 동작 감각
- CPU 동작 원리와 파이프라인
1. 트랜지스터 1% – 전자 스위치 감각
트랜지스터를 완벽히 이해할 필요는 없고,
임베디드 개발자 입장에서 “전자 스위치"라는 감각만 잡아도 실무에 충분.
1-1. 디지털에서의 트랜지스터
MCU의 GPIO 핀 내부를 단순화하면:
- 출력 HIGH
- 내부 MOSFET가 ON → 출력이 VCC에 연결
- 출력 LOW
- 다른 MOSFET가 ON → 출력이 GND에 연결
정리하면:
- 트랜지스터 = 전압으로 ON/OFF하는 전자 스위치
- MCU는 이 스위치를 켰다 껐다 하면서
- LED, 드라이버 IC, 센서 등 주변 회로를 제어
1-2. 왜 MOSFET을 많이 쓰는가
- BJT: 베이스 전류로 제어 (전류 구동)
- MOSFET: 게이트 전압으로 제어 (전압 구동, 게이트 전류 거의 0)
MCU 주변에서는:
- 3.3V/5V 출력만으로 MOSFET 게이트를 제어할 수 있고
- 모터, 릴레이, 램프 등 고전류 부하 스위칭에 적합
1-3. MCU가 직접 부하를 못 켜는 이유
MCU GPIO 예:
- 출력 전압: 3.3V
- 최대 전류: 몇 mA 수준
부하 예:
- 12V 릴레이, 모터, 자동차 램프 등
- 수백 mA ~ 수 A 필요
그래서 구조는 보통:
- MCU GPIO → MOSFET 게이트
- 전원(12V 등) → 부하 → MOSFET → GND
MCU는 신호만, MOSFET은 실제 전류 스위칭 담당.
2. Pull-up / Pull-down / Open-Collector(Open-Drain)
2-1. Floating 입력과 풀업/풀다운
입력 핀을 아무 데도 안 연결하면:
- 공중에 떠 있는 상태(floating)
- 노이즈에 따라 전압이 들쭉날쭉
- 0/1이 랜덤하게 바뀔 수 있음
이 문제를 막기 위해 사용하는 것이 Pull-up / Pull-down 저항.
- Pull-up
- 입력을 저항으로 VCC 쪽에 연결
- 기본 상태: 1
- Pull-down
- 입력을 저항으로 GND 쪽에 연결
- 기본 상태: 0
버튼 예시(풀업 + 스위치 to GND):
- 버튼 X → 입력은 풀업 때문에 1
- 버튼 O → 입력이 GND로 직접 연결 → 0
2-2. Open-Collector / Open-Drain
일반 Push-Pull 출력:
- 내부에 VCC 스위치 + GND 스위치
- 스스로 0도 만들고 1도 만듦
Open-Collector/Open-Drain 출력:
- GND 쪽 스위치만 있음
- VCC 쪽은 외부 Pull-up 저항이 담당
상태:
- 트랜지스터 OFF → 출력은 떠 있음 → 풀업 저항이 VCC로 끌어올림 → 1
- 트랜지스터 ON → GND로 강하게 당김 → 0
장점:
- 여러 디바이스가 한 라인을 공유 가능
- 누군가 0으로 당기면 전체가 0 (Wire-AND 구조)
대표 예:
- I²C SDA/SCL 라인
- 여러 장치의 인터럽트 OR-ing
3. RLC와 스위칭 파형 감각
R, L, C와 트랜지스터가 섞이면 파형이 현실적으로 어떻게 찌그러지는지를 이해해야 한다.
3-1. 빠른 스위칭과 링잉
MOSFET이 아주 빠르게 ON/OFF 될 때:
- 전류 변화량 ΔI/Δt가 매우 큼
- 배선/패턴에는 기생 인덕턴스 L
- 패턴·부하에는 기생 커패시턴스 C
→ L과 C 조합으로 공진
→ 파형에 링잉(ringing), 오버슈트/언더슈트 발생
문제점:
- 일시적으로 전압이 스펙을 넘을 수 있음
- 통신 신호 왜곡, EMI 문제로 이어짐
3-2. 실무에서의 대처
- 직렬 저항(Series R)
- 신호 에지를 완만하게 만들어 링잉 감소
- RC 스너버(Snubber)
- 특정 주파수 대역 에너지 흡수
- 레이아웃 최적화
- GND 리턴 경로 짧게
- 루프 면적 최소화
- 디커플링 캐패시터를 IC 근처에 배치
“통신 라인에 22Ω, 33Ω 같은 작은 저항이 왜 있지?”
→ 대부분 에지 완화, 링잉/EMI 억제용이라고 보면 된다.
4. 논리회로로의 확장
트랜지스터 여러 개를 묶으면 논리 게이트가 된다.
기본 게이트:
- NOT, AND, OR, NAND, NOR, XOR …
이 게이트들을 조합하면:
- 조합 논리: 디코더, 멀티플렉서, ALU 일부
- 순차 논리: 플립플롭, 레지스터, 카운터, 상태기계
임베디드 개발자 관점:
- MCU 내부 주변회로(타이머, 인터럽트 컨트롤러, GPIO 로직 등)는
- 결국 논리 게이트 + 플립플롭의 큰 조합이다.
- 디지털 회로도 아날로그 위에서 돌아가므로
- 전압 레벨, 노이즈 마진, 타이밍이 중요.
5. IC 기본
IC(Integrated Circuit)는:
- 수많은 트랜지스터와 수동 소자가
- 하나의 실리콘 다이 위에 집적된 것
임베디드에서 자주 보는 IC:
- MCU / MPU
- 전원 IC (PMIC, LDO, DC-DC)
- 센서 IC (IMU, 온도, 압력 등)
- 모터/LED 드라이버
- 통신 PHY / 트랜시버 (CAN, Ethernet, RS-485 등)
데이터시트에서 특히 볼 것:
- Absolute Maximum Ratings
- 절대 넘으면 안 되는 한계 (전압, 전류, 온도)
- Recommended Operating Conditions
- 정상 동작이 보장되는 범위
- Pin Description
- 각 핀의 기능, 전원·GND, 입력/출력, Open-Drain 여부
- Electrical Characteristics
- 입력 임계 전압, 출력 전류, 누설 전류, 소비 전류
- Timing Characteristics / Diagram
- 셋업/홀드, 지연 시간, 클럭 관련 타이밍
- Register Map (MCU/주변장치)
- 어떤 주소의 어떤 비트가 무슨 기능을 하는지
IC는 “검증된 회로 블록”이라,
데이터시트를 잘 읽고 전원·핀 연결·레지스터 초기화만 맞추면 많은 걸 가져다 쓸 수 있다.
6. 레지스터(Register) – 제어 포인트
레지스터 = CPU가 읽고 쓸 수 있는 하드웨어 제어용 메모리 위치.
예:
- GPIO 모드 설정 레지스터
- 타이머 설정 레지스터
- UART 보레이트/패리티 설정 레지스터
- 인터럽트 Enable/Status 레지스터
특징:
- 주소가 정해진 Memory Mapped I/O
- 비트 단위로 의미가 나뉨
- 예: bit0 = Enable, bit1~2 = Mode, bit3 = Interrupt Enable …
- 읽기 전용(RO), 쓰기 전용(WO), 읽기/쓰기(RW), 1 쓰면 클리어(W1C) 등 속성 존재
임베디드 개발자는:
- 레퍼런스 매뉴얼의 레지스터 맵을 보고
- C 코드로 해당 주소를 매핑하고
- 비트 연산으로 기능을 켜고 끄는 사람.
7. 클럭(Clock) – 시스템의 박자
클럭은 디지털 시스템의 공통 박자.
역할:
- CPU가 언제 명령을 가져오고 실행할지 결정
- 플립플롭이 언제 데이터를 샘플링할지 결정
- 타이머, UART, SPI 등의 동작 속도 기준 제공
클럭 소스:
- 내부 RC 오실레이터
- 외부 크리스털/오실레이터
- PLL로 증배, Divider로 분주
클럭이 높을수록:
- 더 많은 연산을 수행할 수 있지만
- 소비 전력이 늘고
- 타이밍 여유가 줄어듦
클럭 트리(Clock Tree) 다이어그램을 이해하면:
- System Clock
- Bus Clock
- Peripheral Clock
관계를 한눈에 볼 수 있어,
속도·전력·타이밍을 조절하는 데 도움이 된다.
8. 버스(Bus) 전송 메커니즘
버스(Bus)는 CPU, 메모리, 주변장치 사이에서
주소, 데이터, 제어 신호를 주고받는 통로.
구성:
- Address Bus
- 어느 주소/장치를 접근할지 지정
- Data Bus
- 실제 데이터를 실어 나름
- Control Signal
- Read/Write, Chip Select, Ready/Wait 등
동작 예:
- CPU가 어떤 레지스터에 값을 쓰고 싶다.
- Address Bus에 해당 주소를 올린다.
- Data Bus에 쓸 값을 올린다.
- Write 신호를 활성화한다.
- 해당 슬레이브(주변장치)가 그 값을 받아 레지스터를 갱신한다.
ARM 기반 MCU에서 자주 보는 예:
- AHB, APB 버스
- 외부 SDRAM/NOR Flash 인터페이스 버스 등
9. 타이밍과 Spec 읽기
디지털 회로는 논리 값(0/1)뿐 아니라
“언제 값이 유효한지”도 중요하다.
대표 타이밍 파라미터:
- Setup Time (tSU)
- 클럭 에지 전에 데이터가 안정되어 있어야 하는 최소 시간
- Hold Time (tH)
- 클럭 에지 후에도 데이터가 유지되어야 하는 최소 시간
- Propagation Delay
- 입력이 바뀌고 출력이 바뀔 때까지 걸리는 시간
데이터시트 타이밍 다이어그램을 볼 때:
- 기준 신호는 무엇인지 (보통 클럭)
- 데이터가 그 기준에 대해 언제 안정되어야 하는지
- 최소/최대 시간 조건이 무엇인지
를 확인해야 한다.
SPI, I²C, 외부 메모리 인터페이스 등에서:
- 허용된 최대 클럭 속도를 넘겨 쓰면
- Setup/Hold 조건을 깨고
- 간헐적인 오동작이 발생할 수 있음.
10. 메모리 선정과 XIP
임베디드 시스템에서 메모리를 고를 때 보는 요소:
- 용량
- 속도
- 가격
- 전력
- 인터페이스
- 코드 실행 방식(XIP 여부) 등
10-1. NOR vs NAND
NOR Flash
- 주소를 주면 바로 읽을 수 있어
- 랜덤 읽기에 유리
- 코드 저장 및 XIP에 적합
- 용량당 가격이 비싸고 대용량에 불리
NAND Flash
- 페이지/블록 단위 접근
- 대용량 저장에 유리, 가격 저렴
- 코드를 직접 실행하기보다는
- 부트로더가 RAM으로 옮겨서 실행하는 방식에 적합
10-2. XIP (eXecute In Place)
XIP = 플래시를 메모리 공간에 매핑해
CPU가 그 자리에서 직접 코드를 실행하는 방식.
장점:
- 코드 전체를 RAM으로 복사할 필요 없음
- RAM 요구량 감소
- 부팅 속도 단축 가능
단점:
- 플래시 접근 속도에 의존
- 고성능 코어에서는 캐시/프리페치 설계가 중요
작은 MCU 기반 시스템은
내장 플래시에서 XIP하는 구조가 일반적이다.
11. RAM의 물리적 동작 – SRAM vs DRAM
11-1. SRAM
- 플립플롭(또는 래치) 구조로 비트를 저장
- 리프레시(refresh) 불필요
- 빠르고 단순하지만 면적/비용이 큼
- MCU 내부의 내장 RAM 대부분이 SRAM 계열
11-2. DRAM / SDRAM / DDR
- 커패시터에 전하를 저장하는 구조
- 시간이 지나면 전하가 새서 주기적인 리프레시 필요
- 셀 구조가 간단해 대용량 구현에 유리
- 컨트롤러가 Row/Column, Bank, Refresh를 관리해야 함
임베디드에서:
- 소형 MCU → 내부 SRAM만 사용
- 고성능 MPU/SoC → 외부 DDR SDRAM 연결, 컨트롤러 초기화 필요
12. CPU 동작 원리 – How CPU Works
지금까지의 재료:
- 논리 게이트
- 플립플롭
- 레지스터
- 버스
- 메모리
- 클럭
이게 합쳐지면 CPU가 된다.
CPU의 기본 동작 사이클:
- Fetch
- Program Counter(PC)가 가리키는 주소에서 명령을 읽어옴
- Decode
- 명령어 비트를 해석해 어떤 연산인지 결정
- Execute
- ALU 연산, 메모리 접근, 분기 등 실제 작업 수행
- Write Back
- 결과를 레지스터나 메모리에 기록
- PC 업데이트
임베디드 관점에서 중요한 레지스터:
- 일반 목적 레지스터 (R0, R1, …)
- PC(Program Counter)
- SP(Stack Pointer)
- LR(Link Register, ARM 계열)
- 상태 레지스터(플래그 비트: Carry, Zero 등)
C 코드 한 줄이 결국
이 Fetch → Decode → Execute → Write Back 과정으로 쪼개져 실행된다고 보면 된다.
13. CPU 파이프라인 – 동시에 여러 명령 처리하기
현대 CPU는 대부분 파이프라인 구조를 사용.
아이디어:
- 명령어 처리를 여러 단계로 나누고
- (예: IF, ID, EX, MEM, WB)
- 각 단계에서 서로 다른 명령어를 동시에 진행
비유:
- 세탁소:
- 세탁 → 건조 → 다림질
- 파이프라인이 없으면 한 손님의 옷을 세탁부터 다림질까지 끝내야 다음 손님 처리
- 파이프라인이 있으면
- 손님1 옷 세탁 중
- 손님0 옷 건조 중
- 손님-1 옷 다림질 중
- → 전체 처리량 증가
임베디드/실시간 관점에서 주의점:
- 분기(Branch)로 인해 파이프라인이 깨질 수 있음
- 메모리 접근 지연, 캐시 미스, 데이터 의존성 등으로
- 실제 실행 시간이 일정하지 않을 수 있음
하드 실시간 시스템에서는:
- 파이프라인/캐시 구조를 이해하고
- 최악 실행 시간(WCET)을 고려한 설계가 필요.
14. 2편 정리
핵심 정리:
- 트랜지스터는 전자 스위치로 이해하고,
- MCU는 작은 신호, MOSFET은 큰 전류 스위칭을 담당.
- Pull-up / Pull-down / Open-Drain 구조를 이해하면
- 버튼·I²C·인터럽트 라인 동작이 자연스럽게 보인다.
- RLC + 스위칭이 만드는 링잉/노이즈/EMI를 감안해
- 직렬 R, 스너버, 레이아웃이 설계되는 것.
- IC는 데이터시트의 핀, 전기 특성, 타이밍, 레지스터 맵으로 이해.
- 레지스터는 하드웨어 제어 포인트이자, 비트 단위로 기능이 정의된 메모리 주소.
- 클럭과 버스 구조를 알면, 시스템 속도와 데이터 흐름이 보인다.
- 타이밍 스펙(Setup/Hold 등)은 “최대 클럭”과 직결되는 중요한 조건.
- 메모리는 NOR/NAND, XIP 여부, SRAM/DRAM 특성을 알고 선택.
- CPU는 Fetch–Decode–Execute–Write Back 루프 위에
- 파이프라인을 얹어 처리량을 높인 구조.
1편 + 2편을 묶어서 보면,
보드 블록 → 신호/RLC → 트랜지스터/논리 → 레지스터/메모리 → CPU/파이프라인까지
임베디드 하드웨어를 한 번에 큰 그림으로 보는 데 도움이 된다.
'Embedded > 임베디드 레시피' 카테고리의 다른 글
| 1장 - HW Collage(상) (0) | 2025.11.16 |
|---|