본문 바로가기

RaspberryPi/W55RP20

[W55RP20 SSM] 개발환경 설정 - Pico C SDK 2.0(윈도우11 초간단 셋업)

W55RP20은 RP2040이 코어이기 때문에 기존 RP2040 개발 환경 및 코드를 그대로 사용할 수 있을거라 생각 했는데...

기본 MCU 사용 방법은 동일 한데 W5500의 연결 방식이 변경되었다고 한다.

 

W55RP20에서 W5500은 PIO SPI를 이용하여 연결하고 있다.
RP2040의 SPI핀을 사용하지 않고 PIO로 SPI신호를 만들면 장단점이 있을것 같은데…

일단 아쉬운 점을 보면 기존 코드를 사용할 수 없다. 치명적인데…
SPI 속도에서 이득이 있나? -> (W55RP20 TCP/IP iperf 전송률 테스트 참고)
제조사 입장에서 보면 RP2040+W5500을  사용하는것보다 장점이 있어야 칩을 많이 팔수 있으니 이런 구조를 택하지 않았을까 싶기도 한데 아무튼 기존 코드를 재사용 할 수 없으니 새로운 환경을 세팅해 봐야 할것 같다.

 

 

GPIO17, GPIO20, GPIO21, GPIO22, GPIO23, GPIO24, GPIO25는 보드 내부 연결되어 있다고 한다.


W55RB20 은 메인 코어가 RP2040이기 때문에 기존 RP2040 개발환경(https://nexp.tistory.com/3800) 에서 개발 가능하다. 하지만 W5500은 기존의 SPI 인터페이스 방식이 아니라 PIO로 SPI 신호를 만들어 주어야 한다고 한다.

 

그래서 Wiznet 에서 제공하는 라이브러리를 컴파일 해 보니 pads_bank0_hw 가 정의되어 있지 않다는 에러가 발생한다. 

wiznet_spi_handle_t wiznet_spi_pio_open(const wiznet_spi_config_t *spi_config) {
    spi_pio_state_t *state;
:
    pio_sm_config sm_config = SPI_PROGRAM_GET_DEFAULT_CONFIG_FUNC(state->pio_offset);

    sm_config_set_clkdiv_int_frac(&sm_config, state->spi_config->clock_div_major, state->spi_config->clock_div_minor);
    hw_write_masked(&pads_bank0_hw->io[state->spi_config->clock_pin],
                    (uint)PADS_DRIVE_STRENGTH << PADS_BANK0_GPIO0_DRIVE_LSB,
                    PADS_BANK0_GPIO0_DRIVE_BITS
    );
    hw_write_masked(&pads_bank0_hw->io[state->spi_config->clock_pin],
                    (uint)1 << PADS_BANK0_GPIO0_SLEWFAST_LSB,
                    PADS_BANK0_GPIO0_SLEWFAST_BITS
    );

 

 

문서를 자세히 살펴 보면 SDK 버전 2.0기준으로 작성되어 있다고 한다.

 

 

SDK 2.0을 설치 해야 하나?

일단 에러 나는 부분만 SDK 1.5.1 기준으로 수정해 보자



컴파일은 된다.

 

하지만 W5500레지스터에 값을 읽어 오는 부문에서 멈춰 있다.

정말 SDK  버전 문제 인가?

 

SDK 버전을 2.0으로 바꿔 보자


SDK 2.0으로 변경하려고 하니 수정해야 할것들이 많다. 좀더 쉬운 방법이 없을까?

확인해 보니 Visual Studio Code Extention으로 "Raspberry Pi Pico" 가 있다.

 

 

 

설치후 새로운 프로젝트를 생성하면 SDK2.0으로 개발 가능하다. 뿐만 아니라 SDK1.5로도 변경이 쉽게 가능하므로 기존 코드를 호환해서 쉽게 개발 할 수 있을것 같다.

 

우선 가장 간단한 [W55RP20 SSM] 보드에 실장된 LED를 제어 해 보자

 

W55RP20 SSM 보드의 LED는 GP9에 할당되어 있다.

#include "pico/stdlib.h"

#define PICO_DEFAULT_LED_PIN 9

int main() {
#ifndef PICO_DEFAULT_LED_PIN
#warning blink example requires a board with a regular LED
#else
    const uint LED_PIN = PICO_DEFAULT_LED_PIN;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    while (true) {
        gpio_put(LED_PIN, 1);
        sleep_ms(250);
        gpio_put(LED_PIN, 0);
        sleep_ms(250);
    }
#endif
}

 

컴파일하고 다운로드 하면 Pico SDK 2.0 예제가 정상적으로 잘 동작하는것을 확인 할 수 있다.

반응형