Raspberry Pi Pico(RP2040) 에 대한 연산 처리 성능을 측정해봤습니다.
|
항목
|
내용 | |
| 일반 | 보드 이름 | Raspberry Pi Pico |
| SoC (칩) | RP2040 | |
| 아키텍처 | ARM Cortex-M0+ (32-bit RISC) | |
| 코어 수 | 2 (Dual-core) | |
| 클럭 속도 | 최대 133 MHz (기본 125 MHz) | |
| 명령어 세트 | ARMv6-M | |
| FPU (부동소수점 연산기) | ❌ 없음 (소프트웨어 처리) | |
| 파이프라인 구조 | 2-stage pipeline, in-order execution | |
| 메모리 / 저장장치 |
SRAM | 264 KB (전용 버스 6개로 분할) |
| ROM | 16 KB (USB 부트로더 및 표준 라이브러리 포함) | |
| Flash | 외부 2 MB QSPI Flash (보드 기본 탑재) | |
| 외부 Flash 확장 | 최대 16 MB까지 가능 (SPI/QSPI 지원) | |
| EEPROM | ❌ 없음 (Flash에 저장해야 함) | |
| 주변 장치 | GPIO | 총 30개 (26개 사용자 접근 가능) |
| ADC | 12-bit, 3채널 (GPIO26~28) | |
| Temperature Sensor | ✅ 내장 (ADC4 채널 사용) | |
| PWM | 16채널 (8쌍) | |
| UART | 2개 | |
| SPI | 2개 | |
| I²C | 2개 | |
| PIO (Programmable I/O) | ✅ 2개 블록 × 4 state machine = 총 8개 | |
| USB | ✅ USB 1.1 Controller (Device/Host 지원) | |
| Timer | 4개 (64-bit 타이머 포함) | |
| RTC | ✅ 내장 (외부 크리스털 연결 가능) | |
| Watchdog | ✅ 하드웨어 포함 | |
| Interrupt Controller | Nested Vector Interrupt Controller (NVIC) | |
| 전원 / 전력 소모 |
동작 전압 (Vdd) | 1.8V ~ 5.5V |
| 입력 전원 | USB (5V), VSYS 핀 (1.8~5.5V) | |
| 전압 변환기 | RT6150B 정전류 스텝다운 컨버터 내장 | |
| 전력소모 (Typical) | 동작 시 약 30~50 mA | |
| Sleep 모드 전류 | 약 1 µA 이하 | |
| 출력 전원 핀 | 3V3 출력 핀 제공 (최대 300mA) |

1. GPIO 토글 주기
1-1. 함수 명령과 레지스터 제어 와의 성능 차이를 측정해봤고, 레지스터 제어 방식이 약 15배 빠릅니다.
| 함수 호출 | 레지스터 제어 |
| void setup() { pinMode(0, OUTPUT); } void loop() { digitalWrite(0, HIGH); digitalWrite(0, LOW); } |
#define SIO_BASE 0xD0000000 // GPIO Output Set 레지스터 (해당 비트에 1을 쓰면 HIGH) #define SIO_GPIO_OUT_SET (volatile uint32_t*)(SIO_BASE + 0x00000014) // GPIO Output Clear 레지스터 (해당 비트에 1을 쓰면 LOW) #define SIO_GPIO_OUT_CLR (volatile uint32_t*)(SIO_BASE + 0x00000018) // GPIO Output Enable Set 레지스터 (해당 비트에 1을 쓰면 출력 활성화) #define SIO_OE_SET (volatile uint32_t*)(SIO_BASE + 0x00000020) // GPIO 0번 핀에 해당하는 비트 마스크 #define GPIO0_MASK (1UL << 0) void setup() { pinMode(0, OUTPUT); } void loop() { *SIO_GPIO_OUT_SET = GPIO0_MASK; *SIO_GPIO_OUT_CLR = GPIO0_MASK;
|
*신호 분석: Logic Analyzer(LA2016) 200MHz Sampling
| 함수 호출 | ![]() |
| 레지스터 제어 | ![]() *다른 MCU 에 비해 펄스 주기가 균일하지 못합니다. 20ns ~ 30ns 불규칙 적이네요. |
지금까지 Arduino MEGA328P 16MHz, ESP8266, ESP32-C3 제품들과 비교할 때 가장 높은 성능을 나타냅니다.
2. 연산 처리 능력
약 1초 간 루프 문 안에서 반복적으로 카운트(덧셈)하는 연산으로 시험인데, PC 에서 Serial 출력을 받기 위해서는 USB CDC on Boot 옵션을 Enable 로 설정해야 합니다.
unsigned long start, end;
volatile unsigned long count = 0;
void setup() {
Serial.begin(9600);
start = micros();
while (micros() - start < 1000000) { // 1초 동안
count++;
}
end = micros();
Serial.print("Count per second: ");
Serial.println(count);
}
void loop() {}
결과는 3,212,886회 로 Arduino Uno(203,905회)대비 약 15.7배의 성능이고 ESP32-C3(1,152,194회) 보다 약 2.7배 빠릅니다.
'하드웨어 > 테스트' 카테고리의 다른 글
| [RPi-3B+] 전원 공급 후 GPIO 신호 변화 측정 (0) | 2025.10.18 |
|---|---|
| 릴레이(Relay)는 얼마나 빠를까? 고속 신호 반응 테스트 (0) | 2025.10.16 |
| ESP8266 NodeMCU 성능 측정 (0) | 2025.10.13 |
| ESP32-C3 성능 측정 (0) | 2025.10.13 |
| Arduino 3종 성능 측정 (0) | 2025.10.09 |

