XBeeモジュールの使い方(フラッシュメモリとRAM容量)


 今回はXBee 3のフラッシュメモリとRAM容量に関して解説します。DigiによるとXBee 3モジュールは、1MBのフラッシュメモリと96KBのRAMを搭載しています。

1.RAM

まずRAMについてMicriPython Terminalで以下の2点について確認していきます。

(1)メモリ空き容量の確認方法

print(“Free RAM:”, gc.mem_free(), “bytes”)

(2)GC(ガベージコレクション)の呼び出し

 以前も解説しましたが、書き込み後などにgc.collect()を手動で呼び出すことで、メモリを効率的に使用できます。

import gc

gc.collect()

print(“Free RAM:”, gc.mem_free(), “bytes”)

上記のコードをMicroPython Terminalで実行した結果を以下に示します。

 トータルの RAM は 96KBですが、システム領域(RTOS、スタック、通信バッファ等)で約60〜66KB程度を占有しており、残り約30KBをユーザが使用することができます。

2.フラッシュメモリ

 それでは次にフラッシュメモリの容量を確認するため、以下のコードをMicroPython Terminalで実行します。

import os
stat = os.statvfs("/flash")
total = stat[0] * stat[2]
free = stat[0] * stat[3]
used = total - free
print("【/flash Capacity Information】")
print("Total capacity: {} bytes".format(total))
print("Used: {} bytes".format(used))
print("Free space: {} bytes".format(free))

結果を以下に示します。

 この結果では全容量が約6.258MB、使用領域が約4kB、空き領域が6.254MBと表示され、XBee3の仕様と矛盾する結果が表示されています。XBee3の1MBフラッシュのうち、一部はMicroPythonファイルシステム用、あるいはファームウェア本体や設定領域に使用されています。また、MicroPythonは内部的にファイルシステム領域をRAM上または一時的な仮想領域としてマウントすることがあり、それがstatvfs()で確認した際に6MBと見えています。実際には、6MBをユーザが使えるわけではありません。それではユーザが使用できる容量はどの程度なのでしょうか。これを確認するため、以下のコードを実行します。このコードは約1KBずつ書き込みをどこまで書き込みが可能か確認するコードです。

i = 0
try:
    with open("/flash/testfile", "w") as f:
        while True:
            f.write("0123456789ABCDEF" * 64)  # 1KBずつ書き込み
            i += 1
except Exception as e:
    print("Write stopped at:", i * 1024, "bytes")
    print("Exception:", e)

実行して10数秒経過すると以下の結果が表示されます。

 フラッシュメモリの容量は1MBですが、ユーザが使用可能な要領は約386KBであることを確認することができます。

XBee3 のフラッシュメモリは以下のように使われています。

領域用途容量の目安備考
無線スタック・OS・ブートローダThreadX RTOS及び Zigbee/DigiMeshスタックなどのファームウェア本体の領域500〜600KB程度無線プロトコル、ATコマンド処理、OTA、セキュリティ機能など含む
MicroPython インタプリタ + ランタイムMicroPython のコードと関連データの領域数十KB〜100KB程度
設定・NVM 領域             ATパラメータ、キー、証明書などの領域数十KB程度書き換え可能だがユーザから直接アクセスできない
OTA 領域(ファームウェア更新用)ファームウェアの新旧切り替え用として使用数十KB〜数百KB程度デバイスをリモート更新するために使う
/flash ファイルシステムユーザデータとしてMicroPythonスクリプトやファイル300〜400KB程度MicroPythonのosから操作可能

 ここで、ThreadX RTOS(リアルタイムオペレーティングシステム)とは、マイクロソフトが提供する組み込みシステム向けのリアルタイムOSです。