JESFS -Joの組み込みシリアルファイルシステム
標準(シリアル)ノーフラッシュ用
言語データのような非常にシンプルなことを考えてみてください:「非常に小さな」埋め込まれたデバイス(埋め込まれたLinuxのような「大きな」ではなく、長年にわたって小さなバッテリーで実行できるもの):一般的に「コードのどこか」統合されています。
変更が難しい!ただし、言語データがファイルにある場合、変更は簡単です。グラフィック、セットアップ、すべてについても同じことができます。これにより、多くの異なるソースから埋め込まれたデバイス上のファームウェアを変更することもできます。
埋め込まれたデバイスを考えてください。たとえば、wifi、モバイルインターネット、Bluetooth、uart、radio-linkなど
突然、すべてのオプションが開いています!そして、あなたがセキュリティについて懸念を持っている場合:心配しないでください:あなたが後で見るように、問題はすでに解決されています。
「非常に小さなデバイス」の主な問題は、今まで「ファイルシステム」でした。誰もが「脂肪」、「NTFS」を知っています。またはCPUの内部でさえ?適切なソフトウェアでは問題ありません。これが私が書いた理由です
「JESFS - ジョーの組み込みシリアルファイルシステム」

[画像:2x3 mmの4MB JESFS]
私の毎日の仕事はIoTです。私は本当に実用的な解決策を見つけられなかったので、私は自分のものを作成することにしました。 「堅牢性」、「セキュリティ」、「小さなフットプリント」が私の設計上の制約でした。
JESFSは、「現実の世界」で使用し、NRF52840-DK、NRF52832、CC13XX/CC26XXランチパッドで使用されるM25Rシリーズなどの標準的なシリアルノーフラッシュメモリで使用するために設計されました。
JESFについてのいくつかの基本:
- ウルトラスマルRAMとコードフットプリント:8KBYTEプログラムメモリ以下の最小MCUで使用できます(有名なMSP430シリーズなど、ほぼすべての32ビットアームコア(M0、M3、M4、…。…。))。たった200バイトのRAMで十分です!
- 完全にオープンソース、無料で標準Cで書かれています。
- 8kbyteから16mbyteまでのシリアルノーフラッシュ(2gbyteまでのオプト)で動作しますが、CPUインターナルノーフラッシュでも使用できます。
- 非常に小さいJESFSBOOTセキュアブートローダーと連携して動作
- 最適化された摩耗レベリング(メモリの最大寿命のため)が含まれます。
- 非常に高速なデータ転送(例: Files:NRF52840の3.7MB/SEC )。
- 特にデータ収集、イベントレポート、ジャーナリングの妥当性のために、数百万の書き込みサイクルを可能にするために特別なモードが追加されました。
- JESFSは永続的です:電力損失またはリセットに関するデータ損失はありません。
- (ほぼ)すべての状況のために設計されています。また、メモリも使用できません(ブロックのみが削除できるもの(0-> 1)と書かれたもののみが書かれています。
- テスト:Macronix MX25RXX、Gigadevices GD25WDXX、GD25WQXX、...
- 厳密には、超低電力埋め込みシステムにテイラー化されました
- 基礎となるRTOの利点を使用するように設計されていますが、スタンドアロンも使用できます。
- NRF52840/NRF52832-DK、LaunchPads CC13XX/26XX、ATMEL SAMD20、Windows-PCなどのサンプルアプリケーション(ドキュメントPDF:JESFS.PDF)
- 直感的なAPIで使いやすい:
int16_t fs_open(FS_DESC *pdesc, char* pname, uint8_t flags);
int32_t fs_read(FS_DESC *pdesc, uint8_t *pdest, uint32_t anz);
int16_t fs_write(FS_DESC *pdesc, uint8_t *pdata, uint32_t len);
int16_t fs_close(FS_DESC *pdesc);
int16_t fs_delete(FS_DESC *pdesc);
int16_t fs_rewind(FS_DESC *pdesc);
int16_t fs_rename(FS_DESC *pd_odesc, FS_DESC *pd_ndesc);
uint32_t fs_get_crc32(FS_DESC *pdesc);
int16_t fs_check_disk(void cb_printf(char *fmt, ...), uint8_t *pline, uint32_t line_size);
int16_t fs_format(uint32_t f_id);
int16_t fs_start(uint8_t mode);
void fs_deepsleep(void);
int16_t fs_info(FS_STAT *pstat, uint16_t fno);
void fs_sec1970_to_date(uint32_t asecs, FS_DATE *pd);
changelog(jesfs_main.c)
- V1.0 CC13XX/CC26XXおよびWindows
- V1.5(NRF52)NRF52840ポート
- V1.51(NRF52)NRF52840サポートディープスリープ/ウェイクアップ(RTCアクティブおよびフルRAM保持の深い睡眠<3UA)
- v1.6 'fs_disk_check()'を追加しました:慎重なディスクチェック
- V1.61(NRF52)ソース化粧品とデフォルトのSPIMクロックをNRF52840で16MHzに減らしました(SoftDeviceなしでのみ推奨されます)
- V1.7(NRF52)は、u-blox nina-b3の定義を追加しました
- v1.8「!」で設定された時間を追加しましたおよびuart-rx-error
- v2.0(nrf52)は、tb_toolsで複数使用するためにuartドライバーをapp_uartに変更しました
- V2.01(NRF52)はSDK17に変更されました(SDK17のnrf_clock()の問題、docuを参照)
- V2.02(NRF52)はSDK17.0.2およびSES 5.10Bに変更されました(SDK17.0.2では修正されていないSDK17.0.2のnrf_clock()の問題、docuを参照)
- V2.10(NRF52)は、NRF52832のサポートを追加しました
- V2.20(NRF52)NRF52832(U-Blox ANNA-B112-Module用のI/O構成)のサンプルを追加しました
- V2.30(NRF52)JESFS_MAIN.Cでの分析のためにフラッシュIDの印刷を追加しました
- v2.54(nrf52)tb_tools.cに 'tb_get_runtime()'を追加しました
- V2.55(NRF52)はSDK17.1.0およびSES 5.42ABに変更されました(SDK17.0.2で固定されていないSDK17.0.2のnrf_clock()の問題、docuを参照)
- V2.60(NRF52)グローバルマクロ$ sdk_rootを使用します
- v2.61(samd20)atmel samd20が寄稿しました( kudos !)
- v2.70は_feature supply_voltage_check()を追加しました。
- V2.71すべてのグローバルFS_-Functions Check _supply_voltage_Check()エントリをチェックします
- V2.72 JESFS_HL.C(ファイルv1.91)
JESFSの使用 - Blackbox-Demo
自宅で使用するためのフライトレコーダー
多くの技術的なデバイスは何年もの間信頼でき、誰もそれらを気にしません。しかし、彼らが失敗した場合、常に問題があります:何が問題になったのですか?
これは、JESFSが非常に有用になる可能性がある場所です。
続きを読む:blackbox_eval.pdf
ハードウェア
いくつかのテストされたシリアルフラッシュチップ
広い電圧範囲(1.6V-3.6V)および超低電力スタンバイ:
- Macronix MX25Rシリーズ(MX25RXX)
- Gigadevices GD25Wシリーズ(GD25WD80C、GD25WQ64E、...)
NRF52-CPUで使用します:


CC13xx/26xx-cpusで使用:

インストール(NRF52 CPUの場合):
SES(v6.22a( ))とSDK 17.1.0( :後のバージョンが変更されたプロジェクト設定が必要です!!!)で構築されています!!!)
Macro $ sdk_rootをSES-> tools-> options-> building:eg: "sdk_root = c: nordic nrf5_sdk_17.1.0_ddde560" "
I/Oピンでプラットフォームマクロを設定します(tb_tools.hを参照)
オプションでnrf_clock()で問題を修正します(docu tb_tools_nrf52.c/.hを参照)