Micropythontは多くのファームウェアを提供していますが、私のハードウェア環境に合わない場合もあります。
そのような場合、必要なファームウェアを自作する方法をご紹介します。
- この投稿はWIZnetのW5300用 network.WIZNET5K(WIZnet network module)カスタムを基にしていますが、適切に使用すれば他のモジュールにも役立ちます。
1. Gitからダウンロード
Micropythonの公式Gitアドレスは以下の通りです:
サブモジュールなどもあるため、zip Downloadよりもgit cloneでダウンロードしてください!
2. コードの構造
まずは構造を簡単に把握しましょう!
主要な説明はメインのREADMEに記載されています。
この中で必要な部分は ports
、lib
、extmod
です。
ports
あなたのデバイスやMCUを選択できます。
通常、ports/{MCUname}/boards/{board name}
の構造になっています。
- 例1: Stm Nucleoボード:
ports/stm32/boards/NUCLEO_Fxxx
- 例2: W5500-EVB-PICO:
ports/rp2/boards/W5500_EVB_PICO
各MCUの動作(GPIO、SPI、I2Cなど)を修正・追加したい場合はports/{MCUname}
にあるコードを修正・追加してください。
Make構造によっては、新しいファイルを追加する場合にCMakeLists.txt
にもファイルを含める必要があることがあります。
各プログラムのメイン機能は通常、このディレクトリ内のmain.c
にあります。初期化に関する部分を追加したい場合は、この部分を修正します。
Lib
MCUやモジュールのSDKやライブラリを管理します。
このディレクトリには、サードパーティの低レベルCライブラリやSDKが含まれています。MCU関連のSDKについては、ほとんどのコードが既に含まれているため、大きな追加は必要ありません。
LCD、センサーなどのモジュールを追加する場合、関連するライブラリはこのディレクトリで管理してください。
WIZnetの場合、LibディレクトリにioLibraryがリンクされています。
extmod
C言語で実装された追加(非コア)モジュールです。
Micropythonのコマンドが動作する部分をC言語で実装したものと考えてください。
構造は Micropython: コマンド – extmod: コマンド処理 – lib: モジュール動作
というように見ることができます。
-
例1:
network_wiznet5k.c
: SPI通信 => Bus(FMC)
元々SPI通信用に書かれたコードをFMC通信用に修正します。
-
例2:micropython => C
通常、Micropythonのコマンドに対応する関数があります。特定のコマンドを修正する必要がある場合は、その対応する関数を中心に修正すればよいです。
このmicropython exampleの場合,
Import network
self.nic = network.WIZNET5K()
self.nic.active(True)
Micropythonでnetwork.WIZNET5K
は network_wiznet5k.cの mp_obj_t wiznet5k_make_new(...)
関数と、
active(True)
は wiznet5k_active(...)
関数と対応するため、これらの部分を修正します。
このように必要な部分を一つずつ修正することで、Micropythonがサポートしていない機能も追加することができます。
今年はMicropythonのライブラリ関連の作業が多いです。
現在、microbitボードでWIZNET5Kを使用できるようにポーティング作業を行っています。来月には完成する見込みです。
完成次第、またアップデートします。