60671


spresenseに関する初歩的な質問です。拡張ボードを使ってSPI通信する確認を行っています。  
menuconfigでSPIを有効にしました。

CXD56xx Configuration --->

[*] SPI

[*] SPI4

nshで/devを確認したところ特に変化は見られなかったのですが、SPI4を使用する準備はこれ以外に何か必要なのでしょうか？


CC BY-SA 4.0
2019-10-25T03:49:08.727
59953
2020-01-02T13:15:43.863
36346
question
spresense
SPI通信に関する初歩的な質問


NuttX の Driver Model では、一般的に i2c, spi のような bus driver をそのまま "/dev"
に出すのではなく、実際に SPI 通信を使用する「物理センサーデバイス」側のドライバで、"/dev/センサ" という /devインタフェースを作成します。

具体例として、SPI を使った3軸ジャイロセンサ L3GD20 のドライバがこちらにあります。  
<https://github.com/sonydevworld/spresense-
nuttx/blob/master/drivers/sensors/l3gd20.c>

[code]

    int l3gd20_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
                        FAR struct l3gd20_config_s *config)
    
[/code]

このドライバの登録関数が "devpath" で渡された /dev を作成して、 open, close, read, write, ioctlといった
POSIX インターフェースを提供しています。実体は、引数に渡された spi_dev_s を通して、このドライバ内部で SPI_XXX() を使用して
SPI 通信を行っています。

これは Spresense SDK の場合でも同じ構成になっていると思います。

以下に、BMI160 SPI の例を見つけました。  
<https://github.com/sonydevworld/spresense/blob/master/sdk/bsp/board/common/src/cxd56_bmi160_spi.c>

[code]

      spi = cxd56_spibus_initialize(bus);
      ret = bmi160_register("/dev/accel0", spi);
    
[/code]

  1. cxd56_spibus_initialize(bus) に SPI 番号を渡してSPIを初期化した後に 
  2. その spi と "/dev/accel0" という名前で bmi160 ドライバに渡しています。

ですので、回答としては、SPI4 を使用する Configuration としては合っているけど、それだけで /dev/spi
が作成されるわけではないので、実際に SPI で通信するドライバを登録してはじめて "/dev/xxx" が作られるということになるかと思います。


CC BY-SA 4.0
2019-11-20T00:18:29.953
60671
2019-11-20T00:18:29.953
31378
59953
answer