Open9
Raspberry Pi Pico調査
Raspberry Pi Picoの使い始め
Resource
- Web site
-
https://www.raspberrypi.org/documentation/pico/getting-started/
- https://datasheets.raspberrypi.org/pico/pico-datasheet.pdf
- https://datasheets.raspberrypi.org/rp2040/rp2040-datasheet.pdf
- https://datasheets.raspberrypi.org/rp2040/hardware-design-with-rp2040.pdf
- https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf
- https://datasheets.raspberrypi.org/pico/raspberry-pi-pico-c-sdk.pdf
- https://datasheets.raspberrypi.org/pico/raspberry-pi-pico-python-sdk.pdf
- https://rptl.io/pico-doxygen
-
https://www.raspberrypi.org/documentation/pico/getting-started/
- Raspberry Pi Pico SDK
- Others
- tools
- MicroPython
PCからVisual Studio Codeでデバッグするには、Picoprobeを使う。
つまり、Raspberry Pi Picoが2個必要。
生成物
- uf2
- USB接続してマスストレージにコピーする
- BOOTSELボタンを押しながらUSB接続する
- elf
- デバッグ用
CMakeを追う
Topの共通CMake
-
pico_sdk_import.cmake
をinclude
する- 環境変数
PICO_SDK_PATH
で設定されたSDKをCMake内変数にコピー。なかったらGitから取得する - pico_sdkの
pico_sdk_init.cmake
をinclude- この中で
pico_sdk_init
が定義されている。
- この中で
- 環境変数
-
pico_sdk_init
を呼ぶ- pico-sdk本体を
add_subdirectory
する
- pico-sdk本体を
- 各プロジェクトを
add_subdirectory
する
各プロジェクトのCMake
-
add_executable
で実行ファイルを作る -
target_link_libraries
でpico_stdlib
をリンクする -
pico_add_extra_outputs
でbin, hex, map, uf2ファイルを作る- 実際には、
objcopy
、objdump
を呼んでいる - 処理は、rp2_common.cmake、pico-sdk/tools/CMakeLists.txt
- 実際には、
-
example_auto_set_url
- cmakeの
target_compile_definitions
によって、PICO_PROGRAM_URLを付与。自分のプロジェクトではなくても良いはず
- cmakeの
printf
- printfで使うインターフェイス(USB(CDC)/UART)の切り替え
pico_enable_stdio_usb(hello_usb 1)
pico_enable_stdio_uart(hello_usb 0)
- ボーレート
- 115200
電源周り
- 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に落とす
プログラムメモリ
- プログラムは2MByte Flash(QSPI)に書き込まれ、実行時はそこから読み出される。
- XIP (eXecute In Place) という仕組みによってキャッシュされている。なので、速度は大丈夫そう
- XIPのキャッシュサイズは16kByte
- プログラムをFlashメモリではなく、SRAMから読む場合
cmake -DPICO_NO_FLASH=1
- 速度的にはこっちの方が有利? だけど貴重な264kByteのSRAMを使ってしまう。
-
PICO_COPY_TO_RAM
というのもあった
int幅
printf("%d\n", sizeof(int));
⇒
4