2017年12月13日

NUCLEO-F767ZI ethernet driver for MicroPython

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

https://github.com/boochow/micropython/tree/stm32-ethernet

ビルド手順は以下の通りです。(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
posted by boochow at 01:09| Comment(0) | stm32 | このブログの読者になる | 更新情報をチェックする

2017年12月09日

NUCLEO-F767ZIのMicroPython用Ethernetドライバが動きました

ether02.png

先日着手したNUCLEO-F767ZIのオンボードイーサネットをMicroPythonで動かすためのドライバですが、ようやく動きました。
少しコードを整理したら公開する予定です。
追記:公開しました

途中で少しデバッグに苦労しましたが、基本的には自分のミスや知識不足が原因で、終わってみればあまり厄介なポイントは無かったように思います。

技術資料としてはUM1974が必須です。この資料のP28-29にEthernet周りのI/Oが記載されています。
CPUにはMAC層は内蔵されていますがPHYチップは外付けで、ドライバはCPUとPHYチップの結線およびPHYチップの仕様に従わなければなりません。もっとも、そのコード自体はSTM32CubeMXに付属するサンプルに含まれています(といってもサンプルは一つしか入っていないのですが)。今回もそのコードを参照しました。

また、TCP/IPとしてLwIPを使っていますので、その資料としてUM1713が有用です。LwIPそのものについての解説も付属しています。

この資料にあるとおり、LwIPにはRaw、NetConn、Socketという3種のAPIがあり、Raw以外の2つはスレッド機能を持つOSが必要となります。MicroPythonはLwIPをRaw APIで使用しています。(上記のSTM32CubeMX付属のサンプルはNetConnを使っています。)
LwIPをEthernetと接続するには、パケットが到着したかどうかをポーリングし、届いたパケットをLwIPに渡す処理を定期的に行う必要がありますが、このあたりは既にWIZNet用ドライバのお手本があります。

ですので、結局は初期化とパケットの読み書きを、STM32CubeMXのサンプルを参考に書くだけです。
・・・という見通しは実は初期段階から見えていたのですが、実際に着手してみると、ちゃんと動くようになるまで何日もかかりました。
やはりマイコンはデバッグがなかなかしんどいなあとあらためて思いました。
ラベル:MicroPython
posted by boochow at 23:03| Comment(0) | stm32 | このブログの読者になる | 更新情報をチェックする

NUCLEO-F767ZIのMicroPython用Ethernetドライバが動きました

ether02.png

先日着手したNUCLEO-F767ZIのオンボードイーサネットをMicroPythonで動かすためのドライバですが、ようやく動きました。
少しコードを整理したら公開する予定です。
途中で少しデバッグに苦労しましたが、基本的には自分のミスや知識不足が原因で、終わってみればあまり厄介なポイントは無かったように思います。

技術資料としてはUM1974が必須です。この資料のP28-29にEthernet周りのI/Oが記載されています。
CPUにはMAC層は内蔵されていますがPHYチップは外付けで、ドライバはCPUとPHYチップの結線およびPHYチップの仕様に従わなければなりません。もっとも、そのコード自体はSTM32CubeMXに付属するサンプルに含まれています(といってもサンプルは一つしか入っていないのですが)。今回もそのコードを参照しました。

また、TCP/IPとしてLwIPを使っていますので、その資料としてUM1713が有用です。LwIPそのものについての解説も付属しています。

この資料にあるとおり、LwIPにはRaw、NetConn、Socketという3種のAPIがあり、Raw以外の2つはスレッド機能を持つOSが必要となります。MicroPythonはLwIPをRaw APIで使用しています。(上記のSTM32CubeMX付属のサンプルはNetConnを使っています。)
LwIPをEthernetと接続するには、パケットが到着したかどうかをポーリングし、届いたパケットをLwIPに渡す処理を定期的に行う必要がありますが、このあたりは既にWIZNet用ドライバのお手本があります。

ですので、結局は初期化とパケットの読み書きを、STM32CubeMXのサンプルを参考に書くだけです。
・・・という見通しは実は初期段階から見えていたのですが、実際に着手してみると、ちゃんと動くようになるまで何日もかかりました。
やはりマイコンはデバッグがなかなかしんどいなあとあらためて思いました。
ラベル:MicroPython
posted by boochow at 23:03| Comment(0) | stm32 | このブログの読者になる | 更新情報をチェックする

Raspberry Pi ZeroとPico Hat Hackerが届きました

rpi-zero.jpg

英国にPimoroniという電子工作関連のオンラインショップがありますが、先日セールをやっていたのでRaspberry Pi Zero(と、カメラモジュールとか細々としたもの)を買いました。
すぐ使用する予定は無いのですが、なぜか日本では品薄でなかなか購入できないので、この機会にまとめ買いです。
以前Pi Zero Wもこのショップで購入しています。
購入した品物は大体2週間以内には届きますので、感覚的にはAliexpressよりも対応が早いです。

上の写真の中央がPi Zero、左がPi Zero Wです。
並べてみると、サイズは同じですがZero Wはラズベリーのロゴがない代わりにWiFi/BLEのチップが追加されています。

右はオマケでついてきたPico Hat Hackerです。GPIOに他のHatをつけるとGPIOにアクセスできなくなってしまいますが、このボードを挟めば大丈夫!という代物です。
ただ、ネットを見ていると「Pi Zeroの40本のピンヘッダをハンダづけするのが辛い!」という声もあるようなので、その倍の本数をハンダ付けしないといけない本品はちょっとマニアックかもしれませんね。
posted by boochow at 16:01| Comment(0) | Raspberry Pi | このブログの読者になる | 更新情報をチェックする

2017年12月01日

NUCLEO-F767ZIのMicroPython用Ethernetドライバ

ether01.png

昨日はサンプルアプリのWebサーバを動かしてみたNUCLEO-F767ZIですが、やはりMicroPythonからインターネット接続できるようにしたいところです。

しかし、以前も探してみたことがあったのですが、MicroPythonでNUCLEO-F767ZIのオンボードイーサネットを使うドライバは、現時点ではまだ無いようです。
だめもとで、先日のWIZnet5K+LwIPのドライバと、STM32CubeMXに付属のサンプルコードをを参考に、自分で作ってみることにしました。

中身がまだよく分かっていませんが、これらのコードを適当に切り貼りした結果、どうやらnetworkモジュールの下にEthernetドライバクラスを追加することはできました。
といっても、オブジェクトが生成できただけで、まだまともに動いてはいないのですが。
ラベル:MicroPython
posted by boochow at 00:57| Comment(0) | stm32 | このブログの読者になる | 更新情報をチェックする
人気記事