macOSからPi Picoを使う - その14 [Pi Pico]
と、ここまで書いたんだけど、書いてしまってからなんだかすごくダサい気がしてきた。典型的なWorkaroundで、しかし一旦これを使い始めると結局そのままになって、そしてある日突然互換性の問題で動かなかくなってあたふたと慌てる、というのが目に見えている。おお、僕には未来が見える、自分のやることに関してだけは。
どうせならやっぱりvendor specificなクラスでやろう、と思いなおした....
まあ、とりあえずPi PicoにはTinyUSBしかないので、これを真面目に見ていこうと思う。
僕はPi PicoをUSBのhostとして使うことは考えていないので、これ以降はdeviceだけをみることにする。
にまるごとgithubのリポジトリがクローンされる。TinyUSBのドキュメントはほとんどなくてgithubのREADME.mdに概要と、そのdoc/getting_started.mdぐらいしか情報がない。
概要はもういいとして、getting_started.mdにあるexampleをビルドしてみよう。
にあるcdc_mscをビルドしている。そもそもこのサンプルが何をするのかもこれだけではわからない。ソースを見るとどうやらCDC(Cmmunication device class)とMSC(Mass storage class)を同時に持つようなデバイスを記述しているようである。
まず、このディレクトリに行って
もうmakeすればいいらしい。makenの引数にBOARD変数を定義してやることで、そのベアメタル用のコードを吐くようになっている。ボード変数は
ディレクトリの中にあるプロダクト名か、あるいは同じプロダクトでも複数の定義に分かれている場合は、その中にあるboardsディレクトリの中のモデル名別になっているディレクトリの名前を指定する。例えば具体的にはPi Picoの場合のmake引数は
などとすると
と言うディレクトリにお馴染みのファイルたちができている。
でもこれだけではどうすればTinyUSBをプログラムできるのか全然わからない。
で、あまり深くない。classディレクトリにはUSBのdevice classごとに分かれている。commonディレクトリには
がある。deviceとhostはそれぞれUSBのホストコントローラとデバイスのファイルになっている。deviceディレクトリには
などがある。
osalはOSがある場合の抽象化レイヤ用のファイルで、portableはボード固有の記述が入っている。
どうせならやっぱりvendor specificなクラスでやろう、と思いなおした....
15 TinyUSB
そうするとPi Pico側はTinyUSBを理解しないといけないし、macOS側はI/O Kitがいずれユーザ空間から呼べなくなることを見越してIOUSBHostが使えるようにならないといけない。macOSはとりあえずずっと親切で簡単なlibusbでやり過ごすことができる。でもいずれlibusbの開発メンバがAppleに愛想をつかしてmacOSのサポートをやめてしまうような気もするので、未来永劫というわけにはいかないと思える。まあ、とりあえずPi PicoにはTinyUSBしかないので、これを真面目に見ていこうと思う。
僕はPi PicoをUSBのhostとして使うことは考えていないので、これ以降はdeviceだけをみることにする。
15.1 pico-sdkのtinyusb
pico-sdkにTinyUSBは組み込まれていて、${PICO_SDK_PATH}/lib/tinyusb
概要はもういいとして、getting_started.mdにあるexampleをビルドしてみよう。
15.1.1 cdc_msc example
getting_started.mdにはサンプルコードをビルドするやりかたが書いてある。tinyusb/examples/device/cdc_msc/
まず、このディレクトリに行って
cd examples/device/cdc_msc
hw/msp
$ make BOARD=raspberry_pi_pico all
$ ls _build/raspberry_pi_pico CMakeCache.txt cdc_msc.elf.map CMakeDoxyfile.in cdc_msc.hex CMakeDoxygenDefaults.cmake cdc_msc.uf2 CMakeFiles cmake_install.cmake Makefile elf2uf2 cdc_msc.bin generated cdc_msc.dis pico-sdk cdc_msc.elf $
でもこれだけではどうすればTinyUSBをプログラムできるのか全然わからない。
15.2 TinyUSBのソース
というわけでソースを見るしかない。Doxygenのファイルもあるけど、ソースにはDoxygen形式のコメントはほとんどない。しかし少し見ればわかるように手動で非常に綺麗に成形されたソースになっていて、独特の言い回しの英語のコメントがついている。Doxygenは便利かもしれないけど、ソースを見る時には冗長でかえって読みづらくなってしまうが、このひとのはそのままで読みやすい。僕はこういうほうが好き。逆に言えばDoxygenあまり好きではない。どうしてもこれを使え、と言われればそうするけど。15.2.1 TinyUSBのディレクトリツリー
まずソースファイルがどうなっているかを見る。src ├── class │ ├── audio │ ├── bth │ ├── cdc │ ├── dfu │ ├── hid │ ├── midi │ ├── msc │ ├── net │ ├── usbtmc │ └── vendor ├── common ├── device ├── host ├── osal └── portable ├── dialog │ └── da146xx │ . . ├── tusb.c ├── tusb.h └── tusb_option.h
tusb_common.h tusb_error.h tusb_timeout.h tusb_verify.h tusb_compiler.h tusb_fifo.h tusb_types.h
dcd.h usbd.c usbd.h usbd_control.c usbd_pvt.h
osalはOSがある場合の抽象化レイヤ用のファイルで、portableはボード固有の記述が入っている。
2021-07-01 21:01
nice!(0)
コメント(0)
コメント 0