BC-11AH-S1 の使い方
Posted by: otsuka
BC-11AH-S1 を発売しました。
この BC-11AH-S1 は nrc7394 をホストモードでなく
スタンドアローンモードで使用することを前提にした 11ah 通信用モジュールです。
ホストモードは Raspberry Pi HAT 形式の BC-11AH-A/A2 のように
Raspberry Pi OS から spi 経由でファームウェアを nrc7394 chip 上にダウンロードして使用する状態のことで、
スタンドアローンモードはボード上に登載されている eeprom に書き込んだファームウェアを
nrc7394 SoC に登載されている ARM Cortex-M3 で実行し、
あらかじめ設定しておいた動作を行う状態を指します。
この単体で起動して動作するスタンドアローンモード用のファームウェアをビルドするためには
nrc7394_sdk を使用する必要があります。
詳細は
nrc7394_sdk
のドキュメント
NRC7394 Evaluation Kit User Guide (Standalone)
をご覧ください。
FreeRTOS で起動した上で用意された様々な API を利用したアプリケーションが動作する
ファームウェアバイナリをビルドして使用することになります。
どのような API が利用できるかは、
NRC7394 Evaluation Kit User Guide (Standalone SDK API)
をご覧ください。
https://github.com/newracom/nrc7394_sdk/tree/v1.3.4/package/sdk/apps
に、用意された API を使用したファームウェアのサンプルのソースコードがあります。
例えば、
「定期的に 11ah の AP に接続してセンサーから取得した値をアップロードする動作を繰り返す」
といったファームウェアを作成することができます。
自分でビルドしたファームウェアは nrc7394_sdk に同梱の
FirmwareFlashTool.exe
で eeprom に書き込みます。
.exe となっていますが、java アプリケーションなので Linux 上でも動作します。
ファームウェアの書き込み方法は
BC-11AH-S1 への FirmwareFlashTool.exe によるファームウェア書き込み手順のページ
をご覧ください。
出荷段階では UART から ATコマンドを送信することでユーザーが操作ができる
nrc7394_standalone_xip_ATCMD_UART_2M.bin
を書き込んであります。
使用できる ATコマンドは
NRC7394 Evaluation Kit User Guide (AT Command)UG-7394-006-AT_Command.pdf
をご覧ください。
BC-11AH-S1 を使用する際の接続は、ハードウェアに関する説明書
BC-11AH-S1 説明書
に従って 3.3V の給電と2系統の RX、TX への配線を行なってください。
以下の例では秋月電子の AE-FT2322 シリアル2ch変換モジュールを使って作成したブレイクアウトボードで
USB シリアル化して Raspberry Pi に接続して操作しています。
BC-11AH-S1 のコネクタ2にピンヘッダをハンダ付けして
写真のようにブレイクアウトボードに接続し、
USB ケーブルを操作用 PC に接続すると2つの UART が見えます。
(Windows であれば仮想 COM ポートが二つ増えます。Linux などであれば /dev/ttyUSB* が二つ増えます。)
片方が ATコマンドの入力を待ち受けるコンソール、
もう片方が FreeRTOS のコンソールになっています。
それぞれをターミナル(Windows なら TeraTerm、Linux や Mac なら minicom や screen など)で開いて
ブレイクアウトボード経由で BC-11AH-S1 電源を投入すると
FreeRTOS のコンソールの方に以下のように nrc7394_standalone_xip_ATCMD_UART_2M.bin の起動ログが表示されます。
FW is OK. Jump to 0x10000 Cold Boot!! Clear all info in retent Info (Total: 3908 Byte Cleared) [POR]Initial CAL is done Selecting the first valid RF calibration data. RF calibration flash sector data index 0 chosen. wim: 0 MAC ADDR: a0:8a:06:35:03:67 wim: 0 sta type (STA) wim: 0 Delete All Key wim: 0 S1G agent successfully initialized(type: 0) wim: 0 RF: on pb : PreallocBuffer is not activated wim: 0 supported ch width: 1/2/4MHz wim: 1 MAC ADDR: a0:8a:06:35:03:68 wim: 1 sta type (STA) wim: 1 Delete All Key wim: 1 S1G agent successfully initialized(type: 0) wim: 1 RF: on pb : PreallocBuffer is not activated wim: 1 supported ch width: 1/2/4MHz [ATCMD] FLASH: 2M, profile1 [ATCMD] BUILD: NRC7394,CM3,IPv4 (15:21:06, Apr 30 2025) [ATCMD] VERSION: 1.26.11 (SDK-1.3.4) [ATCMD] TASK_PRIORITY: 2 (3) [ATCMD] MSG_LEN: min=2 max=128 [ATCMD] DATA_LEN: max=4096 [ATCMD] BUFFER_SIZE: tx=4096 rx=4096 [ATCMD] PROMPT_OFF [ATCMD] ECHO_OFF [ATCMD] LINEFEED_ON [ATCMD] EVENT_SOCKET_SEND [ATCMD] MAX_SOCKET_OPEN: lwip=10 atcmd=10 [ATCMD] RF_CAL_INFO: cal_use=1 country=JP id=1 Target RF calibration data country code = JP, ID = 1 RF calibration flash sector data index 0 chosen. Target RF calibration data country code = JP, ID# 32KHz external XTAL is working [592] = 1 RF calibration flash sector data index 0 chosen. [ATCMD] wifi_init: JP 12 1M_BW: 9210 9230 9240 9250 9260 9270 2M_BW: 9235 9245 9255 9265 4M_BW: 9245 9255 [ATCMD] UART Open: channel=1 baudrate=115200 hfc=off [ATCMD] UART FIFO: rx=65536, tx=0 [ATCMD] UART Enable: channel=1 badurate=115200 data=8 stop=1 parity=none fifo=2,0 hfc=off [ATCMD] UART Enable: rx_irq=off tx_irq=off [ATCMD] DMA_ENABLE [ATCMD] UART_RX_DMA: mem_addr=0x1045eb90 mem_size=65536 slot_size=128 [ATCMD] DMA_CONFIG: channel=0 type=P2M [ATCMD] DMA_START: channel=0 [ATCMD] UART Open: success [ATCMD] Boot_Reason: POR (0x1)起動したらもう一方の、 ATコマンドを待ち受ける方のコンソールでATコマンドを入力します。 (改行は CR+LF なので Linux や Mac で実行する場合は注意してください。 例えば minicom で開いていたら "AT" と改行を入力後 Ctl+J で CR を送出)
OKと反応が返ってきたら正常に動作しています。 (ローカルエコーがないので自分の入力した ATコマンドも確認したい場合は ターミナルソフトの側でローカルエコーを有効にしておかないと 上記のように ATコマンドの実行結果しか表示されません。 ATコマンドでの操作を試すには上記のように直接ターミナルから入力することもできますが、 自身の入力とそれに対する反応を確認しやすくする Tool として Raspberry Pi OS など Linux 上で動作する CLI アプリケーション raspi-atcmd-cli が用意されています。 https://github.com/newracom/nrc7394_sdk/tree/master/package/atcmd/host/raspi-atcmd-cli インストールや使用法の詳細は NRC7394 Evaluation Kit User Guide (AT Command) の p.108〜 「8 Test Application」 をご覧ください。 ここからはこの raspi-atcmd-cli で AT コマンドによって操作する実行例を紹介します。 STA として動作させてみるので接続先として BC-11AH-A2 で AP を立ち上げておきます。 以下のように raspi-atcmd-cli を起動します。
$ sudo ./raspi-atcmd-cli -U -D /dev/ttyUSB1 -b 115200 [ UART ] - device: /dev/ttyUSB1 - baudrate : 115200入力待ち受け状態になっているので AT コマンドに正しく反応するか確認します。
# AT SEND: AT RECV: OK反応しているので AT コマンドの Version を確認してみます。
# AT+VER? SEND: AT+VER? RECV: +VER:"1.3.4","1.26.11" RECV: OK接続できる 11ah の AP をスキャンします。
# AT+WSCAN SEND: AT+WSCAN RECV: +WSCAN:"08:33:ed:e7:93:a1",923.5@2,-91,"[ESS]","halow_demo" RECV: OKssid を指定して AP に接続します。
# AT+WCONN="halow_demo" SEND: AT+WCONN="halow_demo" RECV: OK接続状態を確認します。
# AT+WCONN? SEND: AT+WCONN? RECV: +WCONN:"halow_demo","08:33:ED:E7:93:A1","open","","connected" RECV: OKこのとき接続した AP 側で AP を起動するため start.py 1 0 JP を実行したコンソールのログを見ると 以下のように接続したことを確認できます。
Dec 16 18:29:08 raspberrypi python3[1172]: wlan0: STA a0:8a:06:35:03:67 IEEE 802.11: authenticated Dec 16 18:29:08 raspberrypi hostapd[1172]: wlan0: STA a0:8a:06:35:03:67 IEEE 802.11: authenticated Dec 16 18:29:08 raspberrypi hostapd[1172]: wlan0: STA a0:8a:06:35:03:67 IEEE 802.11: associated (aid 1) Dec 16 18:29:08 raspberrypi python3[1172]: wlan0: STA a0:8a:06:35:03:67 IEEE 802.11: associated (aid 1) Dec 16 18:29:08 raspberrypi python3[1172]: wlan0: AP-STA-CONNECTED a0:8a:06:35:03:67 Dec 16 18:29:08 raspberrypi python3[1172]: wlan0: STA a0:8a:06:35:03:67 RADIUS: starting accounting session 426F9B6BBC64D985 Dec 16 18:29:08 raspberrypi hostapd[1172]: wlan0: STA a0:8a:06:35:03:67 RADIUS: starting accounting session 426F9B6BBC64D985dhcp で IP アドレスを取得します。
# AT+WDHCP SEND: AT+WDHCP RECV: +WDHCP:"192.168.0.162","255.255.255.0","192.168.0.254",43200 RECV: OKdhcp アドレスを払いだした AP の先のルーターに ping を打ってみます。
# AT+WPING="192.168.0.254",5 SEND: AT+WPING="192.168.0.254",5 RECV: +WPING:64,"192.168.0.254",1,255,87 RECV: +WPING:64,"192.168.0.254",2,255,22 RECV: +WPING:64,"192.168.0.254",3,255,24 RECV: +WPING:64,"192.168.0.254",4,255,23 RECV: +WPING:64,"192.168.0.254",5,255,39 RECV: OKAP との接続を切断します。
# AT+WDISCONN SEND: AT+WDISCONN RECV: OKAP 側のログを見ると確かに切断されています。
Dec 16 18:44:59 raspberrypi python3[1172]: wlan0: AP-STA-DISCONNECTED a0:8a:06:35:03:67raspi-atcmd-cli を抜けます。
# exit拡張された ATコマンドで 11ah のアクセスポイントに接続し ping を送れることが確認できました。 毎回このように一つ一つ ATコマンドを入力して操作していては大変なので raspi-atcmd-cli では -s オプションで上記のような一連の動作を記述したスクリプトを指定して AT コマンドを実行することができます。 scripts ディレクトリの中にサンプルスクリプトが55ファイル用意されていますが、 日本国内向けのものがないので wifi-connect-open-dhcp-auto-us をコピーし 日本向けに編集して実行します。
pi@raspberrypi:~/raspi-atcmd-cli/scripts $ cp wifi-connect-open-dhcp-auto-us wifi-connect-open-dhcp-auto-jpscript 内の COUNTYR を JP に、 ssid を AP で設定しているもの(ここでは halow_demo)に変更し、 以下のようにします。
pi@raspberrypi:~ $ vim raspi-atcmd-cli/scripts/wifi-connect-open-dhcp-auto-jp AT+WCOUNTRY="JP" AT+WCOUNTRY? AT+WTXPOWER? AT+WDISCONN ECHO "Run an AP in OPEN." ECHO " - SSID : halow_demo" ECHO " - IP : 192.168.0.150" HOLD AT+WSCAN AT+WDHCP=1 AT+WCONN="halow_demo" AT+WCONN?変更した script を指定して rasp-atcmd-cli を実行します。
pi@raspberrypi:~/raspi-atcmd-cli $ sudo ./raspi-atcmd-cli -U -D /dev/ttyUSB1 -s scripts/wifi-connect-open-dhcp-auto-jp [ UART ] - device: /dev/ttyUSB1 - baudrate : 115200 CALL: scripts/wifi-connect-open-dhcp-auto-jp SEND: AT+WCOUNTRY="JP" RECV: OK SEND: AT+WCOUNTRY? RECV: +WCOUNTRY:"JP" RECV: OK SEND: AT+WTXPOWER? RECV: +WTXPOWER:13,0,"auto",30 RECV: OK SEND: AT+WDISCONN RECV: OK ECHO: Run an AP in OPEN. ECHO: - SSID : halow_demo ECHO: - IP : 192.168.0.150 HOLD: Press ENTER to continue.enter を入力すれば接続を開始するところまで設定が行われて 入力待ち受け状態になりました。 enter を入力します。
SEND: AT+WSCAN RECV: +WSCAN:"08:33:ed:e7:93:a1",923.5@2,-86,"[ESS]","halow_demo" RECV: OK SEND: AT+WDHCP=1 RECV: OK SEND: AT+WCONN="halow_demo" RECV: OK SEND: AT+WCONN? RECV: +WCONN:"halow_demo","08:33:ED:E7:93:A1","open","","connected" RECV: OK DONE: scripts/wifi-connect-open-dhcp-auto-jp # RECV: +WEVENT:"DHCP_START"AP への接続と dhcp による IP 取得・設定までが実行されました。 BC-11AH-S1 をマイコンから操作する方法は ESP32 + 11ah モジュールを用いた Wi-Fi HaLow 通信デモ で紹介しています。 こちらも併せてご覧ください。