技適対応で、入手しやすい LoRaWAN対応無線モジュール Rhino WAN。
https://www.cyrola.co.jp/product-9.html
Grasshopper LoRaWAN Development Board の クローン品ということもあり、
https://www.tindie.com/products/tleracorp/grasshopper-lorawan-development-board/
Arduinoフレームワークベースライブラリ
https://github.com/kriswiner/CMWX1ZZABZ/tree/master/Grasshopper
を使う分には問題ないが、
下記のライブラリを使おうとしてハマるケースが多いイメージだ。
1)LoRaWAN software expansion for STM32Cube (UM2073)(日本対応版)
https://www.stmcu.jp/design/sw_dev/firmware/55524/
2)LoRaWAN software expansion for STM32Cube (UM2073)
https://www.st.com/en/embedded-software/i-cube-lrwan.html
3)LoRaWAN end-device stack implementation and example projects
https://github.com/Lora-net/LoRaMac-node
RHINO(GRASSHOPPER)ボードは、村田製作所の CMWX1ZZABZ-078 というモジュールを利用しており。
CMWX1ZZABZ-091を利用している STMicro製ボード B-L072Z-LRWAN1 と AES関連機能以外での互換性がある。
村田製作所の公式サイトの FAQ にも、互換性があると明記されている。
(実際、同じバイナリで問題なく動作した)
■ ハマるポイント1:「GPIO PH1ピンを TCXO VCCとして利用している」
PH1 は他のGPIOと同様に初期化しても GPIO として機能してくれないケースがあるのだ。
PH1 を GPIO として利用するには、
クロック制御レジスタ(RCC_CR)の HSEBYP と HSEON が有効になっている必要がある。
詳細は、STMicroの「RM0367 リファレンスマニュアル」などの、「HSE クロック」について参照のこと。
PH1は、OSC_OUT と 同じピンなので、
クロックソースを外部クロックにして、OSC_OUT の機能を無効化する必要がある。
そのための設定が、クロック制御レジスタ(RCC_CR)の HSEBYP と HSEON だ。
■ ハマるポイント2:上記「3)LoRaWAN end-device stack implementation and example projects」限定だが、ライブラリが「GPIO H」の利用を想定していない
ライブラリのソースコードを追ってみるとわかるのだが、
gpio-board.c の GpioMcuInit() 関数にて、
GPIOHを指定しても __HAL_RCC_GPIOH_CLK_ENABLE() が呼ばれないので、PH1が利用できない。
コードを修正する必要がある。
上記、2点が抑えられれば RHINO(GRASSHOPPER)ボードで、各種ライブラリがr動作するようになる。