DMA (Direct Memory Access): MCU의 부담을 줄이는 데이터 전송 기술
페이지 정보

본문
지난 시간에는 UART, I2C, SPI 통신을 통해 MCU가 다양한 외부 장치들과 데이터를 효율적으로 교환하는 방법을 알아보았습니다. 로봇의 MCU는 센서 데이터를 수집하고, 통신 데이터를 처리하며, 메모리 간 데이터를 복사하는 등 끊임없이 데이터를 전송합니다. 이러한 데이터 전송 과정은 기본적으로 CPU가 직접 관여하여 처리하지만, 대량의 데이터를 고속으로 전송해야 할 경우 CPU의 부담을 가중시키고 시스템의 전체적인 성능을 저하시킬 수 있습니다. 이때 MCU의 부담을 줄이고 데이터 전송의 효율성을 극대화하는 강력한 기술이 바로 **DMA (Direct Memory Access)**입니다.
DMA는 "CPU의 개입 없이 주변장치(센서, 통신 모듈 등)와 메모리(RAM, 플래시) 간에 데이터를 직접 전송하는 메커니즘"입니다. CPU가 데이터 전송 작업을 처리하는 동안 다른 중요한 제어 알고리즘이나 고차원 연산에 집중할 수 있도록 함으로써, 로봇 시스템의 실시간성과 효율성을 비약적으로 향상시킵니다. 로봇의 고속 센서 데이터 수집, 대용량 통신 데이터 처리, 메모리 간 이미지 데이터 복사 등 높은 데이터 처리량이 요구되는 모든 로봇 시스템에서 DMA는 핵심적인 역할을 합니다. 이 설명을 통해 DMA가 무엇이며, 어떻게 MCU의 부담을 줄이는 데이터 전송 기술이 되는지, 그 기본 원리와 작동 방식, 그리고 로봇 개발에서의 활용은 무엇인지 자세히 파헤쳐 보겠습니다.
로봇이 "고속으로 데이터를 쏟아내는 LiDAR 센서로부터 주변 환경 정보를 받아 RAM에 저장하고, 동시에 이미지 센서에서 들어오는 비디오 데이터를 플래시 메모리에 기록하며, 그 와중에 CPU는 모터의 PID 제어 알고리즘을 수행해야 하는" 것과 같은 상황이라면, DMA는 CPU가 이러한 모든 데이터 전송 작업에 관여할 필요 없이, 스스로 데이터를 처리하여 CPU의 부하를 획기적으로 줄여줍니다.
1. DMA (Direct Memory Access)란 무엇인가?
DMA (Direct Memory Access)는 "마이크로컨트롤러(MCU) 또는 마이크로프로세서(CPU) 시스템에서, CPU의 직접적인 개입 없이 **주변장치(Peripherals)**와 메모리(Memory) 간에 데이터를 직접 전송할 수 있도록 하는 하드웨어 기능"입니다.
배경: 대량의 데이터를 전송할 때 CPU가 데이터의 각 바이트를 읽고 쓰는 작업에 계속 관여해야 한다면, CPU는 이 작업에 대부분의 시간을 할애하게 됩니다. 이는 CPU가 다른 중요한 연산이나 제어 작업을 수행할 수 없게 만들어 시스템의 전체 성능을 저하시킵니다. DMA는 이 문제를 해결하기 위해 고안되었습니다.
핵심 아이디어: 데이터 전송이라는 단순 반복 작업을 CPU가 아닌 DMA 컨트롤러라는 전용 하드웨어 모듈이 담당하도록 하여 CPU를 자유롭게 해주는 것입니다.
2. DMA의 작동 원리: CPU의 부담을 줄이는 방법
DMA의 작동은 DMA 컨트롤러(DMAC, DMA Controller)라는 전용 하드웨어 모듈에 의해 관리됩니다.
DMA 전송 설정:
펌웨어(CPU)는 DMA 컨트롤러에 전송할 데이터에 대한 정보를 설정합니다.
소스 주소 (Source Address): 데이터가 시작되는 메모리 또는 주변장치 레지스터의 주소.
목적지 주소 (Destination Address): 데이터가 기록될 메모리 또는 주변장치 레지스터의 주소.
전송할 데이터 크기 (Data Count): 전송할 바이트 또는 워드의 총 개수.
전송 방향: 메모리 -> 주변장치, 주변장치 -> 메모리, 메모리 -> 메모리.
전송 모드: 단일 전송, 블록 전송, 순환(Circular) 모드 등.
DMA 전송 요청 (DMA Request):
데이터 전송이 필요한 주변장치(예: ADC, UART, SPI)는 DMA 컨트롤러에게 데이터 전송을 요청하는 신호를 보냅니다. (예: "ADC 변환이 완료되었으니 데이터를 메모리에 옮겨줘", "UART 송신 버퍼에 데이터가 있으니 보내줘")
버스 중재 및 제어권 확보 (Bus Arbitration & Control):
DMA 컨트롤러는 CPU에게 버스(Bus) 제어권(Bus Master)을 요청합니다.
CPU는 이 요청을 수락하고 일정 시간 동안 버스 제어권을 DMA 컨트롤러에게 넘겨줍니다. 이 시간 동안 CPU는 버스를 사용하지 않고 내부 연산에만 집중할 수 있습니다.
데이터 직접 전송 (Direct Data Transfer):
버스 제어권을 얻은 DMA 컨트롤러는 CPU의 개입 없이 소스 주소에서 목적지 주소로 데이터를 직접 전송합니다. 이 전송은 매우 빠르게 이루어집니다.
데이터 전송은 설정된 전송 크기만큼 이루어집니다.
DMA 전송 완료 알림 (Transfer Complete Interrupt):
설정된 양의 데이터 전송이 완료되면, DMA 컨트롤러는 CPU에게 전송 완료 인터럽트를 발생시킵니다.
CPU는 인터럽트를 통해 전송 완료를 인지하고, 필요하다면 전송된 데이터를 처리하거나 다음 DMA 전송을 설정합니다. (다시 버스 제어권을 되찾아 원래 작업을 수행합니다.)
3. DMA의 주요 특징 및 장점
3.1. CPU 부하 감소 (Reduced CPU Overhead):
가장 큰 장점입니다. CPU가 데이터 전송 작업에 관여할 필요가 없어 다른 중요한 연산(제어 알고리즘, 고차원 처리)에 집중할 수 있게 됩니다. 이는 시스템의 전체적인 성능과 효율성을 크게 향상시킵니다.
3.2. 데이터 전송 속도 향상 (Increased Data Transfer Speed):
전용 하드웨어인 DMA 컨트롤러가 직접 데이터를 전송하므로, 소프트웨어적인 CPU 개입에 비해 훨씬 빠른 속도로 데이터 전송이 가능합니다.
3.3. 실시간성 개선 (Improved Real-time Performance):
CPU가 데이터 전송 작업으로 인해 지연되는 것을 방지하여, 시스템의 실시간 응답성(Deterministic Behavior)을 향상시킵니다. 이는 로봇의 제어 주기 안정화에 기여합니다.
3.4. 전력 효율 증가 (Increased Power Efficiency):
CPU가 데이터 전송에 사용되는 시간을 줄여 전력 소모를 감소시킵니다. 특히 저전력 MCU 기반 시스템에서 유용합니다.
4. 로봇 개발에서 DMA의 활용: 효율적인 데이터 처리
DMA는 높은 데이터 처리량과 실시간성이 요구되는 로봇 시스템의 거의 모든 저수준 하드웨어 인터페이스에서 활용될 수 있습니다.
4.1. 고속 ADC 데이터 수집:
여러 채널의 ADC에서 고속으로 샘플링되는 데이터를 CPU의 개입 없이 DMA를 통해 RAM으로 직접 전송합니다. CPU는 DMA 전송 완료 인터럽트만 받아서 전송된 대량의 데이터를 한 번에 처리할 수 있습니다. (예: 모터의 전류/전압 실시간 측정, 다수의 센서 데이터 동시 수집)
4.2. 통신 데이터 처리 (UART, SPI, I2C):
수신: 외부 장치(GPS 모듈, LiDAR 센서, 카메라 모듈 등)에서 UART, SPI, I2C 통신을 통해 수신되는 대량의 데이터를 DMA를 통해 메모리로 직접 전송합니다. CPU는 데이터가 모두 수신된 후에만 처리하면 됩니다.
송신: CPU가 미리 전송할 데이터를 메모리에 준비해두면, DMA가 이를 통신 주변장치(TX 버퍼)로 직접 전송합니다.
이점: CPU가 통신 바이트 하나하나를 처리하는 오버헤드를 줄여주고, 통신 지연을 최소화합니다.
4.3. PWM 제어 주기 동기화:
CPU가 주기적으로 PWM 레지스터 값을 변경하는 대신, 타이머와 DMA를 연동하여 CPU 개입 없이 자동으로 PWM 듀티 사이클을 변경하도록 설정할 수 있습니다. (예: 여러 채널의 PWM을 동시에 제어)
4.4. 메모리 간 데이터 복사 (Memory-to-Memory Copy):
펌웨어 내부에서 대량의 데이터를 한 메모리 위치에서 다른 메모리 위치로 복사해야 할 때, memcpy()와 같은 CPU 기반 함수 대신 DMA를 사용하면 CPU 부하를 줄이고 고속으로 복사를 수행할 수 있습니다. (예: 이미지 처리 시 프레임 버퍼 복사)
4.5. 디스플레이 데이터 전송:
로봇에 내장된 LCD/OLED 디스플레이에 이미지를 출력할 때, CPU가 픽셀 데이터를 일일이 전송하는 대신 DMA를 사용하여 메모리에서 디스플레이 컨트롤러로 직접 데이터를 고속 전송할 수 있습니다.
5. DMA 사용 시 고려사항
설정 복잡성: DMA를 설정하는 과정은 CPU 레지스터 직접 제어와 유사하게 다소 복잡할 수 있습니다. DMA 채널, 전송 방향, 소스/목적지 주소, 전송 크기, 전송 모드, 인터럽트 설정 등 많은 파라미터를 정확히 설정해야 합니다.
버스 경합 (Bus Contention): DMA 컨트롤러가 버스 제어권을 요청했을 때, CPU와 다른 DMA 컨트롤러(멀티 채널 DMA) 간에 버스 사용을 위한 경합이 발생할 수 있습니다. 우선순위 관리가 중요합니다.
데이터 일관성 (Data Coherency): 캐시 메모리를 사용하는 시스템의 경우, DMA가 메모리에 직접 데이터를 쓰거나 읽을 때 캐시 일관성 문제가 발생할 수 있습니다. 이를 방지하기 위한 추가적인 처리(캐시 플러시/인밸리데이트)가 필요할 수 있습니다. (일반적인 MCU에서는 큰 문제가 되지 않을 수 있음)
DMA (Direct Memory Access)는 "CPU의 직접적인 개입 없이 주변장치와 메모리 간에 데이터를 직접 전송하는 하드웨어 기능"입니다. DMA 컨트롤러가 데이터 전송 작업을 대신함으로써 CPU 부하를 획기적으로 줄이고, 데이터 전송 속도를 향상시키며, 시스템의 실시간성과 전력 효율을 개선합니다.
DMA의 기본 원리와 작동 방식, 그리고 로봇 개발에서의 활용(고속 ADC 데이터 수집, 통신 데이터 처리, 메모리 간 데이터 복사 등)을 완벽하게 이해하고 로봇 시스템에 적용하는 것은 로봇의 고차원 연산이나 복잡한 제어 알고리즘을 CPU가 전담할 수 있도록 하여, 시스템의 전체적인 성능과 효율을 극대화하는 데 필수적인 역량이 될 것입니다. 로봇에게 '효율적인 데이터 흐름'을 선물하여 더욱 강력하고 정밀하게 작동하는 자율 로봇 시스템을 만들어가시기를 응원합니다!
- 이전글펌웨어 디버깅: 임베디드 시스템 문제 해결사의 필수 도구 26.01.01
- 다음글UART, I2C, SPI 통신: 임베디드 시스템의 필수 통신 프로토콜 26.01.01
댓글목록
등록된 댓글이 없습니다.
