💎
ZephyrRTOS+RasPiPicoで快適なネットワーク生活を送る。
これは何?
ZephyrRTOSのRaspberryPi PicoのSPIのドライバのプルリクを出したので、
まだマージされてないけど、これを使ってENC28J80のモジュールを動かしてEthernetにつないでみる。
材料
-
RaspberryPi Pico。
言わずもがな。
-
ENC28J60のモジュール
こんなの。RJ-45の口が出ていて、SPIの線が引き出されていれば同種のモジュールでも代用可能
-
適当な配線材を少々
ブレッドボードやジャンパワイヤーなど。
配線
以下のように配線する。
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 |
モジュールのシルク印刷の表記が怪しい奴があるかもしれない。
こちらのページの解説がわかりやすい。
設定
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