MediaTek MT3620 M4 Driverを(ざっくり)調べた

Azure Sphere MT3620のCortex-A7(HLApp)に対しては、Azure Sphere SDKライブラリが含まれていますが、Cortex-M4(RTApp)に対してはライブラリが提供されていません。軽く作るならgithubに公開されているサンプルコードを流用、ちゃんと作るならNDA契約の下、M4データシートを入手して様々なレジスタと格闘することになります。

そんな状況がしばらく続いていましたが、先日、MT3620を製造するMediaTekから、M4向けライブラリがオープンソースで(!)公開されました。

techcommunity.microsoft.com

そこで、このMediaTek MT3620 M4 Driverがどんな雰囲気のものなのか調べました。

提供されているもの

MediaTekから、これらが提供されていて、誰でも見ることができます。

APIリファレンスマニュアルは、まぁよくあるAPI別の説明です。後に書きますが、MT3620_M4_Driverの一部が書かれています。

M4ソフトウェアは、BSP, Driver, Sample Codeです。git cloneしてVisual StudioでSample Codeをビルドできるように構成されているようです。

M4ソフトウェア(β)

M4ソフトウェア(β)の呼び出し階層を調べて、図にしました。

f:id:matsujirushix:20200115215437p:plain

大きく、BareMetal(図の左側)とFreeRTOS(図の右側)に分かれていました。BareMetalとFreeRTOSで使うコードの違いは、サンプルコードのApplication、OS_HALと、BSPのFreeRTOS有無でした。(細かいことを言えば、ifdefで処理を切り替えているといったものがありますが。)

例えば、BareMetalではApplicationがOS_HALを呼び出して、OS_HALがMHALを呼び出して、、、最終的にハードウェアを操作しています。

HDLの中に、OSAIというAPI群があって、これでBareMetalやFreeRTOSの違いを吸収しています。OS Abstract Interfaceの略かな?

気になったこと

OS_HALを使うべきか否か

APIリファレンスマニュアルには、赤線部分のMHALが書かれています。というか、MHALしか書かれていません。
ApplicationはOS_HALを呼び出しているので、OS_HALのマニュアルが必要なのでは?という気がしますが、、、現時点は存在しません。
OS_HALがSample Code扱いというのもなんだか、、、ちょっと意図が読み取れない感じです。
OS_HALを使うか否か判断が必要そうです。

自プロジェクトへのマージ方法

ライブラリとサンプルコードを合わせたgithub配布です。
ライブラリの部分だけをnugetで配布(←技術的に可能なのか知りません)してくれると、自プロジェクトへのマージが簡単で美しい(?)と思うのですが。
自プロジェクトを別リポジトリにして、CMakeLists.txtで参照するというのが妥当か。

C言語...

C++言語向けに提供してほしいと思うのは私だけなんだろうか...

総じて

好印象。
CMSIS-CoreやFreeRTOSは必要なものに絞られているし、CM4のかなりの範囲をカバーしたライブラリになっています。
もちろん、直接レジスタ叩くコーディングするよりも断然楽チンw
動作の具合は、、、後日、試してみてブログに書きたいと思います。

宣伝

平日夜ですが、Azure Sphereだけのイベントをやります。
スペシャリストと直接話ができる機会なので、興味ある方はご参加くださいませ。

algyan.connpass.com