📡

W5500-EVB-PICO2上のFuzixでEthernetに接続する話

2024/12/17に公開

はじめに

本稿は、「W5500-EVB-PICO2やRaspberry pi pico2でFuzixを起動する話」の続きになりますので、先にそちらのページを参考にして、Fuzixのビルドができる環境を整えてください。

https://zenn.dev/kazueda/articles/ba41bc8f15cfda

FuzixをEthernetにつなぐ方法としてWiznetのW5500Ethernetアダプタが利用されています。Z180CPUを使ったSC111ボード、Raspberry pi picoやESP8266等に用いられています。
 SC111ボードには「Getting a Z80 computer on the internet」の説明があります。

https://maidavale.org/blog/z80-on-the-internet/

Raspberry pi picoには「Fuzix OSでW5500とRaspberry Pi Picoを使用してEthernetを使用する方法」の説明があります。

https://qiita.com/WIZnet/items/a6fc610bd9babf774c13

ESP8266はFuzixの作者Alan CoxさんのmastodonでのつぶやきとFuzixレポジトリのREADME.MDの説明があります。

https://github.com/EtchedPixels/FUZIX/tree/6c2600e04ca284813e8582f9604df0867c3e9200/Kernel/platform/platform-esp8266

いずれの場合もEthernetアダプタをSPI接続でボードに接続します。ジャンプワイヤなどの配線材で接続します。
 これらに対し、Wiznetの商品として、W5500チップとRP2350CPUを搭載したW5500-EVB-PICO2が販売されており、これを使うと配線の必要がありません。

https://wiznet.io/products/evaluation-boards/w5500-evb-pico2
 
このボードでは、基板上でW5500とRP2350がSPI接続されています。
 本稿では、W5500-EVB-PICO2上で動作するEthernet接続可能なFuzixのビルド方法を紹介します。
 使用するW5500-EVB-PICO2はJapanese Raspberry Pi User Groupに提供していただいたボードです。感謝です。

https://www.raspi.jp/

Ethernet接続のための準備

Raspberry pi pico、pico_w、pico2用のレポジトリには、W5500関連の設定やソースファイルなどが存在しません。先ほど紹介した「Fuzix OSでW5500とRaspberry Pi Picoを使用してEthernetを使用する方法」を参考に、足りないものを準備します。
 以下のレポジトリの「3 commits ahead of」をクリックすると、修正箇所が表示されます。
https://github.com/wiznetmaker/FUZIX/tree/rpipico-eth-w5500

  • Ethernet enable on rpipico via W5500
  • Increase clock speed, Update missing Makefile
  • Add missing files
    上記の説明によると、7個のファイルの修正と2個のファイルの追加が行われています。
    ・修正されたファイル
    Kernel/platform-rpipico/CMakeLists.txt
    Kernel/platform-rpipico/Makefile
    Kernel/platform-rpipico/config.h
    Kernel/platform-rpipico/devices.c
    Kernel/platform-rpipico/devsdspi.c
    Kernel/platform-rpipico/main.c
    Kernel/platform-rpipico/update-flash.sh
    ・追加されたファイル
    Kernel/platform-rpipico/wiznet.c
    Kernel/platform-rpipico/wiznet.h

これらの修正を、「W5500-EVB-PICO2やRaspberry pi pico2でFuzixを起動する話」で用いた環境の「platform-rpipico」ディレクトリのファイルに適用し、「wiznet.c」と「wiznet.g」を「platform-rpipico」ディレクトリに追加します。
 Makefileでのクロックアップの指定は、現時点で反映できていません。

ネットワークの設定

「Kernel/dev/net_w5x00.c」内の「void netdev_init(void)」の下あたりに

	ipa = ntohl(0xC0A80001); // IP address、この例では、192.168.0.1
	iga = ntohl(0xC0A800FE); //gateway、この例では、192.168.0.254
	igm = ntohl(0xFFFFFF00); //subnet mask、この例では、255.255.255.0

がありますので、ネットワーク環境にあわせてカッコ内の16進数を修正します。
 例えば、カッコ内の「0xC0A80001」のうち、「0x」は16進数であることを表していて、C0A80001」がIPアドレスの16進数表示です。
 IPアドレス変換ツールがインターネット上に存在するので、そのツールを活用するとよいでしょう。
 追記、修正が完了したら、ビルドして、W5500-EVB-PICO2でFuzixが動作するようファイルを書き込みます。

ネットワーク接続実験

起動後に、「ifconfig」コマンドを実行して、事前に設定した、IPアドレス、ネットマスク、ゲートウェイが表示されるか確認します。
 さらに、telnetサーバーへのtelnet接続や、Webサーバーから「htget」コマンドを使ったファイルの取得を確認します。

おわりに

RP2350で動作するFuzixでも、Ethernet接続に成功しました。Fuzix上のネットワークツールは限られており、また、テキストベースの表示なので、インターネットのリソースを十分に利用することができない状態です。ネットワーク経由でLチカができないか、試す予定です。
 Lチカ用プログラムのように、PICO-SDKでビルド可能なネットワークコマンドを移植するのは、マイクロコントローラ用やUNIX用プログラミングの勉強に役立つような気がします。
 これまでの記事を通して、RP2040とRP2350上でFuzixを動作することができました。これらの環境のベンチマークテストを行いたいところです。
 最後になりましたが、「W5500-EVB-PICO2やRaspberry pi pico2でFuzixを起動する話」と「W5500-EVB-PICO2上のFuzixでEthernetに接続する話」は、Japanese Raspberry Pi User Groupご提供のW5500-EVB-PICO2を用いて行いました。W5500-EVB-PICO2を利用する機会を与えてくださった、Japanese Raspberry Pi User Groupの皆様に、あらためて感謝いたします。

Discussion