BC-11AH-Aでの10% dutyの設定

Posted by: otsuka

BC-11AH や BC-11AH-A をお使いいただいている皆さんはすでによくご存知かと思いますが、
11ah で使われる 920MHz 帯は日本国内では主にRFID、スマートメーター、センサーネットワークといった
小電力無線システムに使われてきました。

このうち出力が比較的強く電波が遠くまで飛ぶ後者の二つについては
ARIB STD-T108 という文書の中で規定されていて、この電波帯域を使用する際には
複数の機器が同じ周波数帯で互いに干渉する確率を低く保ちながら通信する技術として
以下の二つのいずれかを使うことが必須とされています。
・Low Duty Cycle(LDC)
・周波数ホッピング Frequency Hopping(FH)

Wifi の派生技術ながらこの周波数帯を使用する 11ah もこの制限を受け、
日本国内では「1時間(=3600秒)あたり360秒しか電波を出してはいけない」というルールがあり、
これを 10% duty とか Duty比10%制限 などと呼ばれます。

BC-11AH や BC-11AH-A を使う際にこの 10% duty を設定するにはどうするか、を以下に説明します。

1. cli_app コマンドで設定する方法

BC-11AH を使用する際に必要になる nrc7292_sw_pkg
BC-11AH-A を使用する際に必要な nrc7293_sw_pkg の 1.2.2 までの version では
11ah インタフェースを AP や STA として設定して up させるためのスクリプト start.py には
10% duty を設定する機能はありません。

これらの環境ではセットアップ完了後 ~/pi/nrc_pkg/sclipt/ に配置される cli_app を使って設定します。

cli_app は newracom の11ah 無線チップ設定のためのコマンドラインアプリケーションで、
ファームウェアに関する基本情報を確認したり、チャネル品質を監視することができます。
たとえば、受信信号強度指標(RSSI)や信号対雑音比(SNR)の確認、送信電力の調整、
そして 無線チップ を特定の動作条件で実行するように設定することが可能です。
duty 比を設定するのもこの設定の一つです。
cli_app の詳細は
nrc7292_sw_pkg 内の cli_app に関するドキュメント UG-7292-007-Commnad line application.pdf
nrc7292_sw_pkg 内の cli_app のソースコード

nrc7394_sw_pkg 内の cli_app に関するドキュメント UG-7394-007-Commnad line application.pdf
nrc7394_sw_pkg 内の cli_app のソースコード
をご覧ください。

$ ./start.py 1 0 JP などのオプションで AP として、
あるいは $ ./start.py 0 0 JP などのオプションで STA として起動したあとで
./cli_app set duty on {duty window in usec} {tx duration in usec}
で duty を有効にします。
例えば 10秒ごとに1秒電波を出すよう設定するなら、
duty window 10000000 (10sec)
tx duration 1000000 (1sec)
なので
$ ./cli_app set duty on 10000000 1000000
と実行します。
pi@raspberrypi:~/nrc_pkg/script $ ./cli_app set duty on 10000000 1000000
Duty cycle			 : on
Duty window			 : 10000000
Tx duration			 : 1000000
OK
設定状況の確認は
$ ./cli_app show duty
で行います。
pi@raspberrypi:~/nrc_pkg/script $ ./cli_app show duty 
Duty cycle			 : on
Duty window			 : 10000000
Tx duration			 : 1000000
Remain tx duration		 : 375320
Duty error			 : 0
OK
start.py を実行した後別途上記コマンドを実行しないで済むよう、
start.py の中の関数 run_ap、 run_sta の末尾に以下のようなコードを追加し
start.py から cli_ap を実行することもできます。
# set 10% duty
os.system('/home/pi/nrc_pkg/script/cli_app set duty on 10000000 1000000')
time.sleep(3)
print("[9] set 10% duty")
os.system('/home/pi/nrc_pkg/script/cli_app show duty')

2. start.py

BC-11AH-A を使用する際に必要な nrc7394_sw_pkg の v1.3 から
start.py に duty 比を設定する項目が追加されました。
こちらは kernel module nrc.ko を insmod する際に nrc.ko に渡す option の一つとして
duty 比を設定します。

start.py の 166行から169行の duty_cycle_* に値を設定します。
例えば 10秒ごとに1秒電波を出すよう設定するなら、
# Duty cycle configuration
167 duty_cycle_enable = 1      # 0 (disable) or 1 (enable)
168 duty_cycle_window = 10000000
169 duty_cycle_duration = 1000000
と設定してから start.py を実行します。