Azure Sphere MT3620のCortex-A7(HLApp)に対しては、Azure Sphere SDKにライブラリが含まれていますが、Cortex-M4(RTApp)に対してはライブラリが提供されていません。軽く作るならgithubに公開されているサンプルコードを流用、ちゃんと作るならNDA契約の下、M4データシートを入手して様々なレジスタと格闘することになります。
そんな状況がしばらく続いていましたが、先日、MT3620を製造するMediaTekから、M4向けライブラリがオープンソースで(!)公開されました。
そこで、このMediaTek MT3620 M4 Driverがどんな雰囲気のものなのか調べました。
提供されているもの
MediaTekから、これらが提供されていて、誰でも見ることができます。
- APIリファレンスマニュアル@Web
- M4ソフトウェア(β)@github
- MT3620_M4_BSP (←Board Support Packageの略)
- MT3620_M4_Driver
- MT3620_M4_Sample_Code
APIリファレンスマニュアルは、まぁよくあるAPI別の説明です。後に書きますが、MT3620_M4_Driverの一部が書かれています。
M4ソフトウェアは、BSP, Driver, Sample Codeです。git cloneしてVisual StudioでSample Codeをビルドできるように構成されているようです。
M4ソフトウェア(β)
M4ソフトウェア(β)の呼び出し階層を調べて、図にしました。
大きく、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だけのイベントをやります。
スペシャリストと直接話ができる機会なので、興味ある方はご参加くださいませ。