본문 바로가기

Embedded/임베디드 레시피

1장 - HW Collage(하)

728x90
반응형

임베디드 레시피 정리 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 등

동작 예:

  1. CPU가 어떤 레지스터에 값을 쓰고 싶다.
  2. Address Bus에 해당 주소를 올린다.
  3. Data Bus에 쓸 값을 올린다.
  4. Write 신호를 활성화한다.
  5. 해당 슬레이브(주변장치)가 그 값을 받아 레지스터를 갱신한다.

 

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의 기본 동작 사이클:

 

  1. Fetch
    • Program Counter(PC)가 가리키는 주소에서 명령을 읽어옴
  2. Decode
    • 명령어 비트를 해석해 어떤 연산인지 결정
  3. Execute
    • ALU 연산, 메모리 접근, 분기 등 실제 작업 수행
  4. 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/파이프라인까지

임베디드 하드웨어를 한 번에 큰 그림으로 보는 데 도움이 된다.

728x90
반응형

'Embedded > 임베디드 레시피' 카테고리의 다른 글

1장 - HW Collage(상)  (0) 2025.11.16