banner

소식

Jun 13, 2023

라즈베리 파이 RP2040: 손

RP2040 마이크로컨트롤러를 탑재한 Raspberry Pi Foundation의 Raspberry Pi Pico 보드 출시는 지난 몇 달 동안 제조업체 커뮤니티에서 큰 파장을 일으켰습니다. 많은 사람들이 두 개의 PIO(Programmable I/O) 상태 머신 주변 장치를 사용하여 DVI 비디오 생성기 및 기타 디지털 주변 장치를 만드는 방법을 시연했습니다.

이러한 흥분과 함께, 이것이 STM32, SAM 및 기타 Cortex-M 기반 MCU를 사용하는 우리에게 큰 격변을 일으킬지 여부에 대한 의문이 제기됩니다. RP2040이 일부 프로젝트에 유효한 옵션이 될까요? RP2040은 듀얼 Cortex-M0+ 프로세서 MCU이므로 현재 32비트 ARM MCU 분야의 주요 업체 중 하나인 ST Microelectronics의 제품과 정면으로 대결하는 것이 공정해 보입니다.

Raspberry Pi Foundation pipsqueak이 ST의 엔지니어들에게 그것이 어떻게 수행되었는지 보여줄 수 있었습니까, 아니면 전자가 그들의 가정 중 일부를 다시 검토해야 합니까? 그리고 STM32에서 RP2040으로 하위 수준 코드를 이식하는 것이 얼마나 어려울까요?

간단히 말해서, RP2040이 내 눈을 사로잡은 후 내 C++ 기반 STM32 프레임워크를 이 새로운 MCU에 이식하는 것이 흥미로울 것이라고 생각했습니다. 하지만 듀얼 Cortex-M0+ 코어에는 그다지 많지 않습니다. STM32H7 듀얼 코어(M4 및 M7) MCU가 있기 때문에 더 많은 I/O를 남겨서 RP2040을 쉽게 능가할 수 있습니다. 가장 흥미로웠던 것은 자세히 살펴볼 가치가 있는 RP2040의 PIO(상태 기계 주변 장치)였습니다.

STM32에 대한 내 경험을 바탕으로 일부 파일을 빠르게 포팅하고 프로젝트에 새로운 'RP' 아키텍처 브랜치를 생성한 후 경주에 착수할 수 있다고 생각했습니다. Cortex-M은 Cortex-M이겠죠? 새로운 ARM 기반 MCU의 일반적인 절차는 데이터시트, 참조 매뉴얼 및 CMSIS 장치 파일을 얻는 것입니다. 그 후에는 새로운 주변 장치 이름 지정 및 레지스터 레이아웃을 사용하도록 하위 수준 코드를 쉽게 적용할 수 있으며, 코어 수준 장치(SysTick, NVIC 등)는 동일하게 유지됩니다.

아마도 순진하게도 CMSIS 지원을 확인하거나 참조 매뉴얼을 살펴보기도 전에 Raspberry Pi Pico 보드를 주문했을 것입니다. 놀랍게도 CMSIS 지원이나 Cortex-M 생태계의 나머지 부분과의 상호 운용성조차 아직 주목받지 못하고 있다는 사실을 발견했습니다. 다만, RP2040 MCU용 SVD 파일은 'Pico SDK'에 제공되며, 이를 통해 장치 헤더를 생성할 수 있습니다. RP2040으로 CMSIS를 부트스트래핑하려는 Chris Hockuba의 노력 덕분에 결국 함께 작동하는 솔루션을 얻을 수 있었습니다.

STM32 프로젝트의 경우 대상 MCU에서 베어 메탈 프로젝트가 작동하도록 하려면 몇 가지 항목이 필요합니다. 여기에는 환경의 일부 기본 설정을 수행하는 시작 코드와 인터럽트 핸들러용 벡터 테이블이 포함됩니다. 모든 비트가 올바른 메모리 오프셋에서 끝나도록 보장하는 링커 스크립트도 있습니다. 부팅 시 MCU가 기본 주소의 플래시 ROM에서 펌웨어 이미지를 로드하므로 이 모든 것은 상당히 최소화됩니다.

RP2040의 첫 번째 장애물은 연결된 부트로더 프로세스를 이해하는 것입니다. 예전의 부팅 가능한 플로피 디스크나 PC의 HDD/SSD와 마찬가지로 외부 QSPI 플래시 ROM은 본질적으로 MCU에 의해 잠재적인 부팅 장치로 처리됩니다. 첫 번째 단계 부트로더는 부팅 ROM(주소 0x0000 0000)의 MCU에 통합되어 있으며, 부팅 시 QSPI 인터페이스를 확인하여 256바이트를 로드합니다. 이는 유효한 CRC32 해시 일치를 확인하고 일치하는 경우 두 번째 단계 부트로더로 간주됩니다.

이 두 번째 단계 부트로더가 수행할 수 있는 작업과 필요한 작업이 많이 있습니다. 지금은 SPI ROM을 사용하는 GigaDevices의 I-can't-believe-it's-not-a-genuine-STM32 클론과 같은 일부 유명한 STM32 클론과 비교할 때 RP2040의 전체 프로세스가 다음과 같다고만 말하면 충분합니다. 직관적이지도, 문서화도 잘 되어 있지도, 투명하지도 않고, 걸림돌도 많습니다.

RP2040 데이터시트를 파헤치고 STM32의 주변 장치 클럭 관리자가 RP2040 시스템 아키텍처에 어떻게 매핑되는지 알아보기 위해 꽤 많은 시간이 걸렸습니다. 알고 보니 RP2040의 버전은 RESETS라고 불리며 기본적으로 역으로 작동합니다. 즉, 블록에 대한 클럭을 활성화하려면 블록의 재설정 조건을 설정 해제해야 합니다. GPIO 클록을 활성화하려면 RESETS_RESET(PADS_BANK0)에서 비트 8을 토글해야 합니다.

공유하다