質問: spresenseに関する初歩的な質問です。拡張ボードを使ってSPI通信する確認を行っています。 menuconfigでSPIを有効にしました。 CXD56xx Configuration ---> [*] SPI [*] SPI4 nshで/devを確認したところ特に変化は見られなかったのですが、SPI4を使用する準備はこれ以外に何か必要なのでしょうか?
回答: NuttX の Driver Model では、一般的に i2c, spi のような bus driver をそのまま "/dev" に出すのではなく、実際に SPI 通信を使用する「物理センサーデバイス」側のドライバで、"/dev/センサ" という /devインタフェースを作成します。 具体例として、SPI を使った3軸ジャイロセンサ L3GD20 のドライバがこちらにあります。 ``` int l3gd20_register(FAR const char *devpath, FAR struct spi_dev_s *spi, FAR struct l3gd20_config_s *config) ``` このドライバの登録関数が "devpath" で渡された /dev を作成して、 open, close, read, write, ioctlといった POSIX インターフェースを提供しています。実体は、引数に渡された spi_dev_s を通して、このドライバ内部で SPI_XXX() を使用して SPI 通信を行っています。 これは Spresense SDK の場合でも同じ構成になっていると思います。 以下に、BMI160 SPI の例を見つけました。 ``` spi = cxd56_spibus_initialize(bus); ret = bmi160_register("/dev/accel0", spi); ``` 1. cxd56_spibus_initialize(bus) に SPI 番号を渡してSPIを初期化した後に 2. その spi と "/dev/accel0" という名前で bmi160 ドライバに渡しています。 ですので、回答としては、SPI4 を使用する Configuration としては合っているけど、それだけで /dev/spi が作成されるわけではないので、実際に SPI で通信するドライバを登録してはじめて "/dev/xxx" が作られるということになるかと思います。