ESP32-C3 시리얼 통신 4종 — UART·SPI·I2C·I2S 분석
주변 디바이스와의 4대 통신. DMA 활용, 인터럽트 vs polling.
10개의 포스트
주변 디바이스와의 4대 통신. DMA 활용, 인터럽트 vs polling.
Linux DMA API — coherent·streaming·scatter-gather·IOMMU mapping·ATS·PRI·PASID·SVM·IOMMUFD.
UART, SPI, I2C — peripheral을 type-safe class로. Blocking, interrupt, DMA 패턴.
Cortex-A 보드의 카메라 캡처가 frame drop. CPU는 한가했고 진짜 범인은 DMA burst size와 AXI bus 효율이었다.
DMA setup overhead. CPU memcpy 최적화. Break-even size. 실측 데이터.
Burst size 최적화. Scatter-gather, chain. Cache clean/invalidate, double buffer.
DMA가 끝났음을 알려주는 세 가지 방식을 비교합니다. Interrupt, polling, completion ring과 IRQ coalescing의 trade-off를 정리합니다.
DMA buffer 할당 패턴을 coherent와 streaming, CMA, IOMMU, MPU non-cacheable 영역으로 나눠 정리합니다.
Channel·trigger·half/full complete·circular·memory-to-memory.
ARM memory barrier 실전. DMB/DSB/ISB 사용 시점. DMA·MMIO·self-modifying code.