💎

ZephyrRTOS+RasPiPicoで快適なネットワーク生活を送る。

2022/06/12に公開

これは何?

ZephyrRTOSのRaspberryPi PicoのSPIのドライバのプルリクを出したので、
まだマージされてないけど、これを使ってENC28J80のモジュールを動かしてEthernetにつないでみる。

https://github.com/zephyrproject-rtos/zephyr/pull/45131#pullrequestreview-999445826

材料

  1. RaspberryPi Pico。

    言わずもがな。

    https://akizukidenshi.com/catalog/g/gM-16132/

  2. ENC28J60のモジュール

    こんなの。RJ-45の口が出ていて、SPIの線が引き出されていれば同種のモジュールでも代用可能

    https://www.amazon.co.jp/dp/B010SHKIRE

  3. 適当な配線材を少々

    ブレッドボードやジャンパワイヤーなど。

配線

以下のように配線する。

module pico
SO GP16 (SPI0 RX)
CS GP17 (SPI0 CSn)
SCK GP18 (SPI0 SCK)
ST GP19 (SPI0 TX)
INT GP21
RST RUN
5V VSYS
GND GND

モジュールのシルク印刷の表記が怪しい奴があるかもしれない。

こちらのページの解説がわかりやすい。
https://ht-deko.com/arduino/ether_spi.html

設定

boards/arm/rpi_pico/rpi_pico_defconfigに以下の設定を追加。
理解っている人はprj.confとか好きなところで設定してもOK。

CONFIG_SPI=y
CONFIG_NET_L2_ETHERNET=y
CONFIG_ETH_ENC28J60=y
CONFIG_ETH_ENC28J60_0=y

boards/arm/rpi_pico/rpi_pico.dts
以下のエントリーを追加。
SPI0にenc28j60を接続する設定。
ChipSelectはGP17、割り込みの線はGP21に接続する設定。
理解っている人はoverlay作って設定してもOK。

&spi0 {
       status = "okay";

       cs-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;

       eth0: enc28j60@0 {
               compatible = "microchip,enc28j60";
               reg = <0x0>;
               local-mac-address = [00 00 00 01 02 03];
               spi-max-frequency = <2000000>;
               int-gpios = <&gpio0 21 GPIO_ACTIVE_LOW>;
               label = "ETH_0";
       };
};

サンプルを動かす

samples/net/dhcpv4_client/ あたりがLANの動作確認にはよさそう。

west -v build -p -b rpi_pico -d ../pico_dhcpv4 samples/net/dhcpv4_client/

できたら、

cp ../pico_dhcpv4/zephyr/zephyr.uf2 [USB MassStorageのマウントポイント]

DHCP動いてるネットワークにつなぐと、こんな感じでIPをもらったログがUARTから出力される。

uart:~$ *** Booting Zephyr OS build zephyr-v3.0.0-3979-g1681f60a2e0c  ***


[00:00:00.003,000] <inf> eth_enc28j60: ENC28J60 Initialized
[00:00:00.009,000] <inf> net_dhcpv4_client_sample: Run dhcpv4 client
[00:00:06.024,000] <inf> net_dhcpv4: Received: 192.168.0.181
[00:00:06.024,000] <inf> net_dhcpv4_client_sample: Your address: 192.168.0.181
[00:00:06.024,000] <inf> net_dhcpv4_client_sample: Lease time: 7200 seconds
[00:00:06.025,000] <inf> net_dhcpv4_client_sample: Subnet: 255.255.255.0
[00:00:06.025,000] <inf> net_dhcpv4_client_sample: Router: 192.168.0.1

まとめ

多分PR通るので、これが通るとZephyrRTOS+ラズピコで色々遊べるようになる。
ラズピコはこの価格帯のマイコンの平均の10倍ぐらいのSRAMが乗ってる、TCP/IPのスタックを
組み込んだ程度ではまだまだ帰りの鞄に余裕がある状態。

Memory region         Used Size  Region Size  %age Used
      BOOT_FLASH:         256 B        256 B    100.00%
           FLASH:       90804 B    2096896 B      4.33%
            SRAM:       30248 B       264 KB     11.19%
        IDT_LIST:          0 GB         2 KB      0.00%

TCP/IPでいい感じに遊べそう。

Discussion