분류 전체보기 18

DMA(Direct Memory Access) 에 대해서

임베디드 시스템에서의 DMA — CPU를 임베디드 시스템은 제한된 자원 속에서 동작해야 한다. CPU의 연산 능력, 메모리 용량, 전력 소모 등 모든 요소가 제약을 받기 때문에, 가능한 한 효율적인 리소스 활용이 필수다. 이 상황에서 DMA(Direct Memory Access)는 매우 유용한 수단이 된다.⸻DMA가 필요한 이유일반적인 데이터 전송은 CPU가 직접 처리한다. 예를 들어, 센서에서 데이터를 읽어 RAM에 저장하려면 CPU가 다음 작업을 수행해야 한다: 1. 센서로부터 데이터를 읽는다. 2. 해당 데이터를 버퍼에 저장한다. 3. 이 작업을 계속 반복한다.문제는 이 과정에서 CPU가 다른 일을 하지 못한다는 점이다. 특히 데이터 전송이 빈번하거나 대량인 경우, CPU의 대부분을 이 작업에 소비..

임베디드 2025.04.19

Flash 제어 및 동작 방식

MCU나 SoC에서 외부 NOR/NAND 플래시를 제어할 때 어떤 명령어 흐름으로 동작하는지에 집중해서 정리한다. 아래는 일반적인 SPI NOR Flash 기준이지만, NAND나 병렬 NOR에서도 기본 개념은 유사하다.⸻Flash Device는 레지스터 기반이 아닌, 명령어(command)를 SPI 또는 병렬 버스를 통해 전송해서 제어한다. 따라서 플래시를 제어하려면 특정 커맨드 시퀀스를 정확히 따라야 한다. 각 동작별 기본적인 명령 흐름은 다음과 같다.⸻1. 읽기(Read)목적: 특정 주소에서 데이터를 읽는다.시퀀스:[READ CMD] + [ADDRESS] → [데이터 수신] • 일반적인 커맨드: 0x03 (Standard Read), 0x0B (Fast Read) • 입력: 3 or 4바이트 주소 •..

임베디드 2025.04.17

Trace32 디버깅에 대해서

임베디드 시스템을 개발할 때, 코드 디버깅은 필수적인 과정이다. 특히, 실시간 운영체제(RTOS) 기반의 시스템이나 멀티코어 환경에서는 단순한 소프트웨어 디버거로는 한계가 있다. 이때 Lauterbach의 Trace32 같은 강력한 하드웨어 디버거가 필요하다.이번 글에서는 Trace32의 개념, 주요 기능, 실전 활용법을 다룬다.⸻1. Trace32란 무엇인가?Trace32는 독일 Lauterbach사가 개발한 하드웨어 디버거 및 트레이스 분석 도구다. 특히 임베디드 시스템, 멀티코어 프로세서, RTOS 기반 시스템을 디버깅할 때 강력한 성능을 발휘한다. • JTAG 디버깅: 칩 내부를 직접 제어하여 레지스터 및 메모리를 분석 • 트레이스(Trace) 기능: 프로그램 실행 흐름을 기록하고 분석 • RTO..

임베디드 2025.03.23

GDB 디버깅에 대해서

소프트웨어 개발에서 디버깅은 필수적인 과정이다. 특히 시스템 프로그래밍이나 저수준 개발을 할 때는 강력한 디버깅 도구가 필요하다. GNU Debugger(GDB)는 C, C++, 그리고 어셈블리 수준의 디버깅을 지원하는 가장 강력한 도구 중 하나다. 이번 글에서는 GDB의 기본 개념부터 실전 활용까지 다룬다.1. GDB란 무엇인가?GDB(GNU Debugger)는 프로그램 실행을 제어하며, 오류를 분석하고 문제를 해결하는 데 사용되는 디버거다. 주요 기능은 다음과 같다. • 브레이크포인트 설정: 특정 지점에서 실행을 멈추고 상태를 확인 • 단계별 실행(Step-by-step execution): 코드 한 줄씩 실행하며 흐름을 분석 • 메모리 및 변수 검사: 변수 값, 레지스터, 스택 상태 확인 • 어셈블..

임베디드 2025.03.22

Endianess란 무엇일까? Big-Endian 과 Little-Endian

오늘은 컴퓨터 과학에서 자주 등장하는 개념 중 하나인 Endianess에 대해 이야기해보려고 한다. 이름이 조금 낯설게 들릴 수도 있지만, 사실 이건 우리가 컴퓨터로 데이터를 다룰 때 아주 중요한 역할을 하는 개념이다. 그럼 천천히, 쉽게 풀어서 알아보자.1. Endianess가 뭔데?Endianess는 컴퓨터가 데이터를 메모리에 저장하거나 읽을 때, 바이트 순서(byte order)를 어떻게 처리하는지를 나타낸다. 특히 숫자 같은 데이터를 여러 바이트로 쪼개서 저장할 때, 그 바이트들을 어떤 순서로 배치하느냐가 바로 Endianess의 핵심이다.예를 들어, 숫자 0x1234를 생각해보자. 이건 16진수로 표현된 2바이트(16비트) 숫자인데, 바이트 단위로 보면 12와 34로 나뉜다. 이제 이걸 메모리에..

임베디드 2025.03.21

ARM Exception Level(EL) 알아보기(2): EL2(하이퍼바이저)와 EL3(보안 모드)

이전 글에서는 EL0(사용자 모드)와 EL1(커널 모드)에 대해 살펴보았다.이번 글에서는 EL2(하이퍼바이저 모드)와 EL3(보안 모드)의 역할과 동작 방식을 분석해보겠다.⸻1. EL2 – 하이퍼바이저 모드 (Hypervisor Mode)EL2는 가상화를 위한 특수 모드로, EL1에서 실행되는 OS를 여러 개 가상화할 수 있도록 관리한다.예시: KVM, Xen • EL1에서 실행되는 각 OS의 메모리 격리 및 CPU 스케줄링 관리 • EL1 커널이 EL2에 HVC(Hypervisor Call)을 통해 하이퍼바이저 기능을 요청⸻2. EL3 – 보안 모드 (Secure Monitor Mode)EL3는 ARM의 TrustZone 기술과 연계된 최상위 보안 실행 환경으로, 일반 OS가 접근할 수 없는 영역이다...

임베디드 2025.03.19

ARM Exception Level(EL) 알아보기(1): EL의 개념과 EL0~EL1 분석

ARM 아키텍처를 다룰 때 Exception Level(EL) 개념을 이해하는 것은 필수적이다. EL은 CPU의 실행 권한을 계층적으로 나누는 설계 방식으로, 운영체제(OS), 하이퍼바이저, 보안 펌웨어 등이 각자의 역할에 맞게 동작할 수 있도록 한다.이번 글에서는 ARM의 EL 구조를 개괄적으로 살펴보고, EL0(사용자 모드)와 EL1(커널 모드)에 집중하여 설명하겠다.⸻1. Exception Level(EL) 개요ARM 아키텍처(AArch64)에서는 총 4개의 Exception Level(EL0~EL3)을 제공하며, 숫자가 클수록 높은 권한을 갖는다.⸻2. EL0 – 사용자 모드 (User Mode)EL0는 애플리케이션이 실행되는 공간으로, 직접 하드웨어 리소스에 접근할 수 없다.운영체제(OS)가 제..

임베디드 2025.03.18

Flash 메모리: 대용량 비휘발성 저장 장치

임베디드 시스템에서 데이터를 저장하는 방식은 다양하지만, 대용량 데이터 저장과 빠른 읽기/쓰기 성능이 필요한 경우 가장 많이 사용되는 것이 Flash 메모리이다.Flash 메모리는 스마트폰, 자동차 ECU, 산업용 컨트롤러, IoT 기기 등 다양한 임베디드 시스템에서 핵심적인 역할을 한다. 이번 글에서는 Flash 메모리의 개념, 특징, 동작 원리, 그리고 임베디드 시스템에서의 활용 방안을 살펴보겠다.⸻1. Flash 메모리란?Flash 메모리는 전원이 꺼져도 데이터를 유지할 수 있는 비휘발성 메모리의 한 종류로, 빠른 읽기/쓰기 속도와 대용량 저장이 가능하다는 장점이 있다.EEPROM과 마찬가지로 Floating Gate MOSFET(플로팅 게이트 트랜지스터)을 기반으로 데이터를 저장하지만, 구조적으로..

임베디드 2025.03.17

EEPROM: 대표적인 비휘발성 메모리

임베디드 시스템에서 데이터를 저장할 때, 시스템이 전원을 꺼도 유지되어야 하는 정보들이 있다. 예를 들어, 장치의 설정 값, 로그 데이터, 고유한 식별 번호 등이 이에 해당한다. 이를 위해 사용되는 대표적인 비휘발성 메모리 중 하나가 EEPROM(Electrically Erasable Programmable Read-Only Memory)이다.이번 글에서는 EEPROM의 개념, 특징, 동작 원리, 그리고 임베디드 시스템에서의 활용 방안을 살펴보겠다.⸻1. EEPROM이란?**EEPROM(Electrically Erasable Programmable Read-Only Memory)**은 전기적으로 데이터를 지우고 다시 기록할 수 있는 비휘발성 메모리이다.과거에는 PROM(Programmable ROM)이나..

임베디드 2025.03.15

UART (Universal Asynchronous Receiver/Transmitter) 통신의 이해

임베디드 시스템에서 MCU와 주변 장치 간의 데이터를 주고받는 방식은 여러 가지가 있다. 그중에서 UART (Universal Asynchronous Receiver/Transmitter) 는 가장 기본적이고 널리 사용되는 비동기 직렬 통신 방식이다. 이번 글에서는 UART의 개념, 동작 방식, 프로토콜 구조, 그리고 실제 활용 사례를 살펴보자.⸻1. UART란 무엇인가?UART는 비동기식 직렬 통신 방식으로, 별도의 클럭 신호 없이 송신 장치와 수신 장치가 서로 동일한 전송 속도(baud rate) 로 데이터를 주고받는 방식이다.UART의 특징 • 클럭 신호 없이(비동기식) 데이터 전송 • 2개의 신호선(TX, RX)만 사용 • 1:1 연결 방식 (일반적으로 다중 장치 연결 불가능) • 풀 듀플렉스(F..

임베디드 2025.03.13