NUCLEO-F767ZI ethernet driver for MicroPython

先日動作確認した、NUCLEO-F767ZI用Ethernetドライバを追加したMicroPythonを以下で公開しました。

GitHub - boochow/micropython at stm32-ethernet
The MicroPython project. Contribute to boochow/micropython development by creating an account on GitHub.

ビルド手順は以下の通りです。(CROSS_COMPILE指定は各自の環境に合わせて変更してください)

git clone -b stm32-ethernet https://github.com/boochow/micropython.git
cd micropython
git submodule update --init
make -C mpy-cross
make -C ports/stm32 MICROPY_PY_ETH=RMII BOARD=NUCLEO_F767ZI CROSS_COMPILE=~/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-

ボード用のHAL設定ファイル(boards/NUCLEO_F767ZI/stm32f7xx_hal_conf.h)やリンカスクリプト(boards/stm32f767.ld)を修正していますので、NUCLEO-F767ZI以外のボードでは動作しません。
ですが、同じ構成(CPUがSTM32F7、PHYがLAN8742AでCPUとのインタフェースがRMII)であれば、同様の修正を施せば動作するのではないかと思います。

同じ構成になっていると思われるボードはNUCLEO-F746ZG, NUCLEO-H743ZI, STM32F746G-DISCOですが、STM32F746G-DISCOは使用しているGPIOが違う(TXD1がPG14)ため、ethernetif.c内の初期化コードを修正する必要があります。

ちなみに現状のコードではUM1974に記載されているGPIOを使っています。
記載は以下の通りです。

nucleo-ether-config.png

コメント

  1. forester3 より:

    初めまして、記事で勉強させて頂いています。
     STM32F746G-DISCOを購入し、MicroPythonのethernet driver追加に挑戦したいと思っています。(ほとんどこちらの成果のままではないかと思いますが…)
    「STM32F746G-DISCOは使用しているGPIOが違う(TXD1がPG14)ため、ethernetif.c内の初期化コードを修正する必要があります。」
    という記述について伺いたいのですが、
     「HAL_ETH_MspInit()内のポート初期化を変更する必要がある。」という意味なのでしょうか?ポート名は実質pyb_pin_RMII_MII_TXD1なので、ports/stm32/boards/BOARD_DIR/mpconfigboard.hに記述すれば指定されると思っています。
     それともその他の部分の変更が必要なのでしょうか?
    よろしくお願い致します。

  2. forester3 より:

    記事ありがとうございます。
    F7-discoの定義を追加して動作を確認しました。
    確認結果はMicroPython Japanに投稿しております。
    リポジトリは「https://github.com/forester3/micropython.git」
    ブランチ名は「stm32-ethernet-F7DISC」です。
    pullリクエストを出すべきものかよく分かっておりません。
    個人的には1.94?以降に最新にrebaseして今後も使って行きたいのですが、大変なものなのでしょうか?

  3. boochow より:

    すみません、コメント頂いたのに気付いていませんでした。
    コメントのメール通知は有効にしてあるのですが、なぜか全然通知が来ないようです。
    もし、今後また気付いてなさそうであれば、お手数ですがtwitterのほうへご連絡いただければと思います(こちらは通知が来ますので)。
    1つ目のコメントについて、もう解決されているようですが単純にピン指定の違いだけなのでmpconfigboard.hでの指定でOKだと思います。
    2つ目のコメントについては、ethernetif.c自体はlwIPの下層で動くものなので、MicroPythonの変更の影響はあまり受けないだろうと思います。
    ただ、githubのPRのコメントにも書きましたが、そもそもSTMicroが供給するethernetif.c自体が不安定というか挙動がよくわかならい部分がありますので(最新版は試していませんが)、そこがちょっと不安ではあります。