Co-authored-by: Takashi Toyoshima <toyoshim@google.com> Co-authored-by: Shun Ikejima <ikejima@google.com>
5.3 KiB
ファームウェア開発ガイド
キーボードの組み立て全体についてはビルドガイドを参照してください。
ディレクトリ一覧
- prebuilt/ : 各ボード向けに事前にビルドしたファームウェア
- common/ : 各ボード共通で用いられるライブラリのソースファイル
- main/ : 9ダイヤル版メインチップ用のソースファイルとプロジェクト
- sub/ : 9ダイヤル版サブチップ用のソースファイルとプロジェクト
- one_dial/ : 1ダイヤル版 Raspberry Pi Pico用のソースファイルとプロジェクト
事前にビルドしたファームウェア
prebuilt/以下に事前にビルドしたファームウェアを収めていますので、変更が不要の場合はこれらをそのまま用いることができます。
9ダイヤル板はmain.uf2とsub.uf2を、1ダイヤル板はone_dial.uf2を使用します。
それぞれセンサに内部pull-upを使わないmain_no_pull.uf2、sub_no_pull.uf2、one_dial_no_pull.uf2も用意しています。詳しくはセンサの調整についてをご覧ください。
ダイヤルの回転方向が逆だった場合にはbackwardの名前がついたものを使用してみてください。同じ型番の製品でも出荷時期により回転方向が異なるようです。
独自のファームウェア開発の手引き
Visual Studio Code をインストールし、Raspberry Pi Pico拡張 を追加します。
Activity BarのRaspberry Pi Pico Projectsの拡張機能からImport Projectを使い、各プロジェクトのディレクトリを開いてください。
拡張をはじめて使う場合、開発環境のインストールが始まります。プロジェクトが取り込まれると、Activity BarのCMakeやRun and Debugを使って開発できるようになります。
公式のPicoシリーズボードに搭載されているように、9ダイヤル板でも基板上にSWC/Dと書かれたSWCLKとSWDIOのランドペアがそれぞれのチップごとに用意されています。公式のDebug Probe等のSWDをサポートした開発機材を用意する事で、エディタ上でステップ実効等が可能です。
標準出力について
9ダイヤル板では基板上にメインチップ用のTX1、サブチップ用のTX2と書かれたランドが用意されており、標準の設定では標準出力はこれらのピンから速度115200のUARTとして出力されています。
一方でCMakeLists.txtのpico_enable_stdio_uartを0に、pico_enable_stdio_semihostingを1に変更する事で、出力をデバッガ経由に切り替える事ができます。TXを配線せずに済むので便利ですが、デバッガのサポートを有効にしないと出力のところで動作停止するので注意が必要です。デバッガがアタッチされていない時も同様に停止するので、リリースビルドには使えません。デバッガのサポートはmonitor arm semihosting enableで有効に出来ますが、デバッガ起動ごとに毎回設定するのは大変なので、.vscode/launch.jsonの各コマンド設定内に以下のように登録しておくと便利です。
"postLaunchCommands": [
"monitor arm semihosting enable"
]
PICO WやPICO 2 (W)の利用
1ダイヤル板は公式のRaspberry Pi Picoボードを使うように設定してありますが、CMakeFiles.txt内のset(PICO_BOARD pico CACHE STRING "Board type")のところでボード設定をpicoからpico_w、pico2、pico2_w等に変更する事で他のボードにも対応できるかと思います。3rd party製のボードについてもnone等で対応できるかと思います。
EEPROMについて
9ダイヤル版はボード設定をnoneにしているので、EEPROMについては汎用のドライバが分周4で組み込まれます。これでだいたいのEEPROMで動作するはずです。リファレンスの部品を使っている場合は、公式ボードと同様にW25Q080用のドライバが分周2で動作する事を確認しています。~/.pico-sdk/sdk/2.2.0/src/boards/include/boards/にボード名.hを作成し、その中で
#define PICO_BOOT_STAGE_2_CHOOSE_W25Q080 1
#define PICO_FLASH_SPI_CLKDIV 2
などを定義し、CMakeFiles.txtのボード設定で指定する事で、キャッシュミス時のQSPI経由でのEEPROMアクセスを最適化し、さらなる性能を引き出す事も可能です。
センサの調整について
標準ではセンサは内部抵抗でpull-upされています。外部抵抗によりpull-upで調整したい場合、photo_sensor.ccのPhotoSensor::PhotoSensor()内にあるgpio_pull_up(gpio);をgpio_disable_pulls(gpio);に変更してください。
あるいは、内部抵抗を有効にしたまま外部抵抗との合成抵抗でpull-upする事も可能です。この場合、内部抵抗は公称値で50-80KΩ、外部抵抗とは並列接続になります。
詳細は基板組立ガイドを確認してください。