やまどり
RP2354でLチカ(Pico SDK)

RP2354でLチカ(Pico SDK)

本記事では、RP2350のフラッシュ内蔵版であるRP2354の、Pico SDKを用いた開発環境構築からビルド、書き込みまでの使い方をまとめます。

はじめに

本記事では、RP2354をPicoSDKで使用する方法についてまとめています。

RP2354とは

RP2354は、Raspberry Pi Pico2に搭載されているRP2350のフラッシュ内蔵版です。

内蔵されているフラッシュはWinbondのW25Q16JVWIという2MBのQSPI NOR flashです。

データシート

現在はJLCPCB・LCSCで購入可能です。

RP2354A:https://www.lcsc.com/product-detail/C41378174.html

RP2354B:https://www.lcsc.com/product-detail/C39843328.html

環境

  • マイコンボード:Raspberry Pi Pico2からRP2350とフラッシュを取り除き、RP2354に乗せ換えたもの
  • Pico SDK:2.2.0
  • 開発環境:VS Code(Raspberry Pi Picoの拡張機能)

手順

VS CodeのRaspberry Pi Picoの拡張機能でblinkのExampleを使用してプロジェクトを作成します。

基本的にはPico2と変わらないのですが、フラッシュの容量がPico2は4MBなのに対し、RP2354は2MBしかないため、ボードの定義を変更する必要があります。

board.hというファイルを作成します。これはPico2のファイルのフラッシュのサイズを変更したものです。

board.h
/*
 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

// -----------------------------------------------------
// NOTE: THIS HEADER IS ALSO INCLUDED BY ASSEMBLER SO
//       SHOULD ONLY CONSIST OF PREPROCESSOR DIRECTIVES
// -----------------------------------------------------

// This header may be included by other board headers as "board.h"

// pico_cmake_set PICO_PLATFORM=rp2350

#ifndef _BOARDS_PICO2_2354_H
#define _BOARDS_PICO2_2354_H

// For board detection
#define RASPBERRYPI_PICO2_2354

// --- RP2350 VARIANT ---
#define PICO_RP2350A 1

// --- UART ---
#ifndef PICO_DEFAULT_UART
#define PICO_DEFAULT_UART 0
#endif
#ifndef PICO_DEFAULT_UART_TX_PIN
#define PICO_DEFAULT_UART_TX_PIN 0
#endif
#ifndef PICO_DEFAULT_UART_RX_PIN
#define PICO_DEFAULT_UART_RX_PIN 1
#endif

// --- LED ---
#ifndef PICO_DEFAULT_LED_PIN
#define PICO_DEFAULT_LED_PIN 25
#endif
// no PICO_DEFAULT_WS2812_PIN

// --- I2C ---
#ifndef PICO_DEFAULT_I2C
#define PICO_DEFAULT_I2C 0
#endif
#ifndef PICO_DEFAULT_I2C_SDA_PIN
#define PICO_DEFAULT_I2C_SDA_PIN 4
#endif
#ifndef PICO_DEFAULT_I2C_SCL_PIN
#define PICO_DEFAULT_I2C_SCL_PIN 5
#endif

// --- SPI ---
#ifndef PICO_DEFAULT_SPI
#define PICO_DEFAULT_SPI 0
#endif
#ifndef PICO_DEFAULT_SPI_SCK_PIN
#define PICO_DEFAULT_SPI_SCK_PIN 18
#endif
#ifndef PICO_DEFAULT_SPI_TX_PIN
#define PICO_DEFAULT_SPI_TX_PIN 19
#endif
#ifndef PICO_DEFAULT_SPI_RX_PIN
#define PICO_DEFAULT_SPI_RX_PIN 16
#endif
#ifndef PICO_DEFAULT_SPI_CSN_PIN
#define PICO_DEFAULT_SPI_CSN_PIN 17
#endif

// --- FLASH ---

#define PICO_BOOT_STAGE2_CHOOSE_W25Q080 1

#ifndef PICO_FLASH_SPI_CLKDIV
#define PICO_FLASH_SPI_CLKDIV 2
#endif

// pico_cmake_set_default PICO_FLASH_SIZE_BYTES = (2 * 1024 * 1024)
#ifndef PICO_FLASH_SIZE_BYTES
#define PICO_FLASH_SIZE_BYTES (2 * 1024 * 1024)
#endif
// Drive high to force power supply into PWM mode (lower ripple on 3V3 at light loads)
#define PICO_SMPS_MODE_PIN 23

// The GPIO Pin used to read VBUS to determine if the device is battery powered.
#ifndef PICO_VBUS_PIN
#define PICO_VBUS_PIN 24
#endif

// The GPIO Pin used to monitor VSYS. Typically you would use this with ADC.
// There is an example in adc/read_vsys in pico-examples.
#ifndef PICO_VSYS_PIN
#define PICO_VSYS_PIN 29
#endif

// pico_cmake_set_default PICO_RP2350_A2_SUPPORTED = 1
#ifndef PICO_RP2350_A2_SUPPORTED
#define PICO_RP2350_A2_SUPPORTED 1
#endif

#endif

次に、CMakeLists.txtを変更します。

CMakeLists.txt
set(PICO_BOARD pico2 CACHE STRING "Board type")

上記のようになっている部分を以下のように変えてください。

CMakeLists.txt
set(PICO_BOARD_HEADER_DIRS ${CMAKE_CURRENT_SOURCE_DIR})
set(PICO_BOARD board CACHE STRING "Board type")

これで設定は完了です。

あとはPico2と同じように使用できます。

おわりに

RP2354の登場で、フラッシュをなくすことができ、基板の小型化などが可能になりました。

ただ、現在は入手性があまりよくないので普及するまでは少し時間がかかりそうです。