
DMA를 사용하는 Raspberry Pi에서 더 많은 LED 스트립 실행
Raspberry Pi는 컴팩트한 폼 팩터를 갖춘 강력한 컴퓨터로 모든 방식의 프로젝트에 매우 유용합니다. 그러나 일반적인 마이크로 컨트롤러에서 볼 수 있는 IO 기능 중 일부가 부족합니다. 이는 주소 지정이 가능한 LED 스트링을 실행할 때 가장 분명하게 드러납니다. 일반적으로 이는 Pi의 PWM 또는 오디오 출력을 사용하여 수행되며 몇 개의 짧은 문자열로 제한됩니다. 그러나 [Jeremy P Bentham]은 Pi의 하드웨어를 활용하여 이러한 한계를 극복하는 방법을 찾았습니다.
비결은 거의 문서화되지 않은 Raspberry Pi의 보조 메모리 인터페이스를 사용하는 것입니다. SMI 하드웨어를 사용하면 Pi는 DMA(직접 메모리 액세스)를 사용하여 빠르고 정확한 타이밍으로 데이터를 8개 또는 16개 I/O 핀으로 병렬로 이동할 수 있습니다. 이는 NeoPixels라고도 알려진 WS2812B LED에서 사용되는 것과 같은 신호를 생성하는 데 적합합니다.
[Jeremy]의 코드와 올바른 지원 하드웨어를 사용하면 Raspberry Pi에서 임의 길이의 LED 스트립을 최대 16개까지 실행할 수 있습니다. [Jeremy]는 WS2812B LED에서 사용하는 데이터 형식부터 잘못된 데이터를 방지하기 위해 캐시를 처리해야 하는 방식까지 모든 것을 다루면서 모든 작동 방식을 훌륭하게 설명합니다. 이 해킹은 평범한 Pi Zero부터 강력한 Pi 4까지 모든 Pi에서 작동합니다. DMA 사용 덕분에 이 기술은 CPU에 과부하를 주지 않으므로 전반적으로 성능이 좋아야 합니다.
물론 수많은 LED를 구동하는 다른 방법도 있습니다. 예를 들어 ESP32에서 20,000개가 실행되는 것을 보았습니다.
[팁을 주신 Petiepooo에게 감사드립니다!]

