0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Micropython FW Custom: あなたのハードウェア用のカスタムファームウェア

Posted at

Micropythontは多くのファームウェアを提供していますが、私のハードウェア環境に合わない場合もあります。
そのような場合、必要なファームウェアを自作する方法をご紹介します。

  • この投稿はWIZnetのW5300用 network.WIZNET5K(WIZnet network module)カスタムを基にしていますが、適切に使用すれば他のモジュールにも役立ちます。

https://github.com/Wiznet/W5300-TOE-MicroPython

1. Gitからダウンロード

Micropythonの公式Gitアドレスは以下の通りです:

https://github.com/micropython/micropython/tree/master

サブモジュールなどもあるため、zip Downloadよりもgit cloneでダウンロードしてください!

2. コードの構造

まずは構造を簡単に把握しましょう!
主要な説明はメインのREADMEに記載されています。
image.png

この中で必要な部分は portslibextmod です。

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にあります。初期化に関する部分を追加したい場合は、この部分を修正します。

  • 例: STM NucleoFxxボードにWIZnet W5300バス機能を追加

    • fmc.cファイルを追加。
      image.png

    • CMakeLists.txtを追加する(halファイルを含む)

      image.png

      image.png

    • main.cファイルの変更
      image.png

Lib

MCUやモジュールのSDKやライブラリを管理します。

このディレクトリには、サードパーティの低レベルCライブラリやSDKが含まれています。MCU関連のSDKについては、ほとんどのコードが既に含まれているため、大きな追加は必要ありません。
LCD、センサーなどのモジュールを追加する場合、関連するライブラリはこのディレクトリで管理してください。
WIZnetの場合、LibディレクトリにioLibraryがリンクされています。

image.png

extmod

C言語で実装された追加(非コア)モジュールです。

Micropythonのコマンドが動作する部分をC言語で実装したものと考えてください。
構造は Micropython: コマンド – extmod: コマンド処理 – lib: モジュール動作 というように見ることができます。

  • 例1:network_wiznet5k.c: SPI通信 => Bus(FMC)
    元々SPI通信用に書かれたコードをFMC通信用に修正します。
    image.png

  • 例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を使用できるようにポーティング作業を行っています。来月には完成する見込みです。
完成次第、またアップデートします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?