NuttX for Raspberry Pi Picoで有線LAN接続


NuttX for Raspberry Pi PicoでSPIが使用できるようになったので、以下のSPI接続のネットワークモジュールを使ってネットワークに接続します。
デバイス側からの割り込みを受けられる必要があるので、GPIOドライバに割り込み対応を追加しました。

接続

Raspberry Pi PicoとENC28J60を以下のようにつなぎます。

この記事 などでも触れられていますが、Amazon等で売られている上記のENC28J60モジュールはシルク印刷の端子の表記が一部おかしいので注意が必要です。

ENC28J60 Pico端子 Pico ピン番号
GND GND 3, 38 などのGNDピンのどれか
3.3 (Q3) 3V3 36
SI (ST) GP15 (SPI1 TX) 20
SCK GP14 (SPI1 SCK) 19
CS GP13 (SPI1 CSn) 17
SO GP12 (SPI1 RX) 16
INT (LNT) GP11 15
RST GP10 14

NuttXのビルド

コンフィグレーションにraspberrypi-pico:enc28j60を指定してビルドします。
ENC28J60、SPIの他に、ネットワーク周りの機能が有効にされています。

$ git clone https://github.com/apache/incubator-nuttx.git nuttx
$ git clone https://github.com/apache/incubator-nuttx-apps.git apps
$ cd nuttx
$ ./tools/configure.sh raspberrypi-pico:enc28j60
$ make

ENC28J60の接続先は、.configの以下の箇所で設定します。これらを変更することで、接続するSPI、GPIOピン番号を変えることができます。

CONFIG_RP2040_ENC28J60_SPI_CH=1
CONFIG_RP2040_ENC28J60_INTR_GPIO=11
CONFIG_RP2040_ENC28J60_RESET_GPIO=10

ネットワーク周りは、以下のような設定になっています。

  • IPアドレスはDHCPで取得
  • DNSサーバはGoogle Public DNS (8.8.8.8)を使用
  • NTPクライアントを起動して時刻取得

それぞれ、.configの以下の箇所で設定されています。

CONFIG_NETINIT_DHCPC=y
CONFIG_NETINIT_DNS=y
CONFIG_NETINIT_DNSIPADDR=0x08080808
CONFIG_SYSTEM_NTPC=y

起動

NuttXを起動して、ネットワーク周りをいろいろ操作してみます。
(起動時にDHCPでアドレスを取得しているため、最初のプロンプトが出るまで少しかかります)