Open9

Raspberry Pi Pico調査

iwatakeiwatake

PCからVisual Studio Codeでデバッグするには、Picoprobeを使う。
つまり、Raspberry Pi Picoが2個必要。

iwatakeiwatake

生成物

  • uf2
    • USB接続してマスストレージにコピーする
    • BOOTSELボタンを押しながらUSB接続する
  • elf
    • デバッグ用
iwatakeiwatake

CMakeを追う

Topの共通CMake

  • pico_sdk_import.cmakeinclude する
    • 環境変数 PICO_SDK_PATH で設定されたSDKをCMake内変数にコピー。なかったらGitから取得する
    • pico_sdkの pico_sdk_init.cmake をinclude
      • この中でpico_sdk_init が定義されている。
  • pico_sdk_init を呼ぶ
    • pico-sdk本体をadd_subdirectory する
  • 各プロジェクトをadd_subdirectory する

各プロジェクトのCMake

  • add_executable で実行ファイルを作る
  • target_link_librariespico_stdlib をリンクする
  • pico_add_extra_outputs でbin, hex, map, uf2ファイルを作る
    • 実際には、objcopyobjdumpを呼んでいる
    • 処理は、rp2_common.cmake、pico-sdk/tools/CMakeLists.txt
  • example_auto_set_url
    • cmakeのtarget_compile_definitions によって、PICO_PROGRAM_URLを付与。自分のプロジェクトではなくても良いはず
iwatakeiwatake

printf

  • printfで使うインターフェイス(USB(CDC)/UART)の切り替え
    • pico_enable_stdio_usb(hello_usb 1)
    • pico_enable_stdio_uart(hello_usb 0)
  • ボーレート
    • 115200
iwatakeiwatake

電源周り

  • GPIO: 電圧レベルは3.3V
  • VBUS: [IN]USBの5V電源に接続されている
    • USBから電源入力する場合は何も入力しないでよい
    • 通常、外部電源を接続する場合はこっちには入力しない。ただし、PicoをUSB Host modeで使う場合のみ、こっちに5Vを入力する
  • VSYS: [INOUT]電源入力 (1.8V ~ 5.5V)
    • USBから電源入力する場合は何も入力しないでよい
    • 外部電源を接続する場合はこっちに入力する
      • 念のため、ショットキーバリアダイオード経由の方が良い
        • 電源 -> DIODE -> VSYS
    • VBUSからショットキーバリアダイオード経由でつながっている
      • VBUS -> DIODE -> VSYS
      • なので、VBUSを接続している場合は、VSYSも5Vになる
    • picoを2台使ってデバッグする場合には、デバッガとターゲットのpicoのVSYSを接続する
  • 3V3: [OUT]3.3V電源
    • 最大300mA
    • ボード上で生成される
    • 電源を入力してはいけない
  • 3V3_EN: 3V3を使うかどうか。VSYSにプルアップされている(en)
  • ADC_VREF: Picoによって多少綺麗な3.3Vが供給されている。R7を外すことで、外部から参照電圧を入力することも可能。
  • AGND: [IN]Ground reference. Groudにつなぐ
  • RUN: 3.3Vにプルアップされている。リセットするときはlowに落とす
iwatakeiwatake

プログラムメモリ

  • プログラムは2MByte Flash(QSPI)に書き込まれ、実行時はそこから読み出される。
  • XIP (eXecute In Place) という仕組みによってキャッシュされている。なので、速度は大丈夫そう
    • XIPのキャッシュサイズは16kByte
  • プログラムをFlashメモリではなく、SRAMから読む場合
    • cmake -DPICO_NO_FLASH=1
    • 速度的にはこっちの方が有利? だけど貴重な264kByteのSRAMを使ってしまう。
    • PICO_COPY_TO_RAM というのもあった