【パワーメーター2019】mbed OS2 SDカードではまった<KenjiArai様へ感謝>

右クランクの基板とプログラムは暫定で完成させて、母艦のプログラム整備を始めました。2019年の計測システムは、精度を向上させて、今まで気づいてなかった現象まで解析できるように開発してます。そのため、測定データをシリアルプリントで転送するとmsecオーダーで時間を食ってしまうので、測定解析用のデータはSDカードに高速書き込みする方式をとってます。クランクの測定データクランク基板内のATMEGA328PでAduinoのマイクロSDカードシステムを設置してあります。母艦のNUCLEO F446REでもFlashAirのSDカードで全データをログする仕様となってますので、F446REでSDカードの高速書き込みができないいけません。しかし、F446REでは、従来のSDFilesystemライブラリーがコンパイルできませんでした。mbedバージョンとライブラリーバージョン違いだとおもうのですがOS5とOS2の違いをみて、どうするか決めないと始まりません。

●mbed OS5とOS2との違い
https://os.mbed.com/docs/mbed-os/v5.9/tutorials/major-releases.html

  • Mbed OS 5 is a superset of Mbed OS 2.
  • Mbed OS 5 is a combination of both Mbed OS 2 and Mbed-RTOS.
  • Mbed OS 2 and Mbed OS 5 both use the same mbed.h file.
  • Drivers are thread-safe in Mbed OS 5. Drivers are not thread-safe in Mbed OS 2.

RTOSを採用したということです。確かに、昔からマイコンでシ大規模システムを組みときは、リアルタイムOSもオリジナルで開発してからそのRTOS上で大規模OSを開発するという仕事の仕方をしてましたので、RTOS化しないと大規模なシステムは厳しいと思います。しかし、趣味の電子工作なら、RTOSまではいらないので余計なお世話と感じますが、ARM社のビジネスの方向性なので

●SDファイルシステムの変更点
OS5では個別のファイルシステムというくくりではなく、Storage全体というくくりでAPIを整備してます。
https://os.mbed.com/docs/mbed-os/v5.9/reference/storage.html

The storage APIs present in Arm Mbed OS are:

  • File system: a common interface for using file systems on block devices.
  • Block device: a common interface for block-based storage devices.
    ブロックデバイスとは聞き慣れない名前がでてきました。細分化されていて、ずいぶん下層にSDカードの解説がありました。
    わけがわからないので表にして備忘録します。

    Strorage
    File systems LittleFileSystem
    FATFilesystem
    LocalFilesystem
    Block devices SPIFBlockDevice Block device driver for NOR-based SPI flash devices that support SFDP. NOR-based SPI flash supports byte-sized read and writes, with an erase size of about 4kbytes. An erase sets a block to all 1s, with successive writes clearing set bits.
    DataFlashBlockDevice Block device driver for NOR-based SPI flash devices that support the DataFlash protocol, such as the Adesto AT45DB series of devices. DataFlash is a memory protocol that combines flash with SRAM buffers for a programming interface. DataFlash supports byte-sized read and writes, with an erase size of around 528 bytes or sometimes 1056 bytes. DataFlash provides erase sizes with and extra 16 bytes for error correction codes (ECC), so a flash translation layer (FTL) may still present 512 byte erase sizes.
    SDBlockDevice Block device driver for SD cards and eMMC memory chips. SD cards or eMMC chips offer a full FTL layer on top of NAND flash. This makes the storage well-suited for systems that require a about 1GB of memory. Additionally, SD cards are a popular form of portable storage. They are useful if you want to store data that you can access from a PC.
    HeapBlockDevice Block device that simulates storage in RAM using the heap. Do not use the heap block device for storing data persistently because a power loss causes complete loss of data. Instead, use it for testing applications when a storage device is not available.
    FlashIAPBlockDevice Block device adapter for the FlashIAP driver, which provides an in application programming (IAP) interface for the MCU’s internal flash memory.

となってますが、どなた様か、噛み砕いてないか検索すると、
例のごとくTy51822で知っていた KenjiArai様が解説記事を書いていてくれてありました。
 https://os.mbed.com/users/kenjiArai/notebook/sd-card-control-new/

「OS5では、sd-driverが不要になり、SDカード制御ではos5のみで全ての制御が成立するようになった。mbed_app.jsonが重要!!」

ということで、jsonというファイルが新たに加わったそうです。

「JSONとはJavaScript Object Notationの略で、XMLなどと同様のテキストベースのデータフォーマットです。」

「すでに主要なプログラミング言語にはJSONの生成や読み込みを行うライブラリが存在するため、JavaScriptに限らず言語をこえたデータ交換のためのデータフォーマットとしてJSONを利用することができます。」
ということで、mbedでのC++でも使うということと理解しました。
●KenjiArai様の「SD Card Control (New)」2019/6/4
4つのサンプルプログラムを提供されております。
main.cは、OS2とOS5共通で使えるそうです。
SDカードのUTILITYプログラムです。
F446REで組まれたプログラムなので、私の母艦そのままで
SPI1結線でそのまま動作しました。備忘録のために、記事を抜粋コピーさせていただきます。

 

SD_Card_Control

os2での動作で、下記結線準備が必要。

FatFs並びにSD用ライブラリーが必要。
=>出回っているSDfilesystemライブラリーではエラーがでるが
KenjiArai様の発行されているmbed OS2用ライブラリーだと動作しした。
どこをなんのために変更されたのか不明ですが、いまのところ
Nucleo F446REでmbedOS2で最近のmbedライブラリーでSDカードを
つかえるのはこれしか見つかってません。

このプログラムは、SDカードの管理ができるようなコマンドが用意されてます。

使ってみると

SD_Card_Control_on_OS5
os5での動作で、下記結線準備が必要。
os5内で全ての制御が完結するようになった。
=>これはコンパイルエラーでダメでした。
OS5がさっぱりわからないので、将来検討とします。

RAM_Disk_Control
これは、上記①の機能をSDカードでなくRAMディスク上で行えます。
これもコンパイルOKだが動作せず。

●以後
結局OS2で最新mbedライブラリーを使ってF446REを動作させることになりました。
①のSD_Card_Controlプログラムを学習して、プログラムつくります。

OSのバージョンアップで従来のプログラムが使えなくなるのが頻繁な業界ですが、
過去の環境を再現できるような配慮をしてもらわないと困ります。
ARMもRISCVなどから追い上げをくらって、mbedの顧客サポートまで手が回ってない感じがしてきましたので、mbedがどこかで破綻してしまう可能性もあると危機感をもってます。最近オンラインでなくオフラインココンパイラを推奨されているのもその傾向かもしれませんが、ARMのオフラインコンパイラCLIは使いかたがプロ向けのコマンドラインなので、ちかよりにくいです。

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です