Sigfox BRKLSM100で上り600bps通信ができるのか？

2024年5月にUnabiz者がリリースした[UnaBiz upgrades Sigfox 0G Technology, reducing device energy consumption by up to 18X](https://www.sigfox.com/unabiz-upgrades-sigfox-0g-technology-reducing-device-energy-consumption-by-up-to-18x/)に書かれているSigfoxのオープンソースライブラリとして提供しているSigfox End Point Libraryを実装すれば、通常上り100bpsが600bpsへ、リピート回数も3回固定から指定回数に変更することができ、バッテリーのライフサイクルが約18倍になりますよという内容が気になったので、（おそらく対応しているであろう）LSM100Aモジュールをベースに開発ボード化しているSigfox Breakout Board [BRKLSM100]を購入して、試してみました。
![画像1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/1689be89-735a-4274-453b-c29dfd1f35f7.jpeg)

### SigfoxとLoRaのモード切替
`AT+MODE=X`のXを0でSigfox、1でLoRaに切り替えられる。
AT+MODE=0でSigfoxに切り替えられるのだが、応答は”OK”だけなので、本当に切り替わったかは、`AT+MODE=?"で確認した方が良い。

```Sigfox
-----------------------------
     SEONGJI INDUSTRIAL CO., LTD.    
-------------------------------------
>> Device : LSM100A					
>> Mode   : Sigfox                 
>> IAP_VERSION : V1.0.0              
-------------------------------------
>> APP_VERSION:        V1.0.3
>> MW_SIGFOX_VERSION:  V1.7.0
>> MW_RADIO_VERSION:   V1.2.0
>> TXPOWER MODE :   LOWPOWER 
>> SIGFOX SUPPORT RC TYPE: VD
>> SIGFOX sfx_rc : RC3C 
>> SIGFOX APPLICATION READY
-------------------------------------
```

```LoRa
-----------------------------
     SEONGJI INDUSTRIAL CO., LTD.    
-------------------------------------
>> Device : LSM100A					
>> Mode   : LoRa					
>> IAP_VERSION : V1.0.0              
-------------------------------------
>> APP_VERSION:        V1.0.3
>> MW_LORAWAN_VERSION: V2.4.0
>> MW_RADIO_VERSION:   V1.2.0
>> TXPOWER MODE :   LOWPOWER 
>> L2_SPEC_VERSION:     V1.0.4
>> RP_SPEC_VERSION:     V2-1.0.1
------ OTAA ------
>> AppKey:      
>> NwkKey:      
------ ABP  ------
>> AppSKey:     
>> NwkSKey:     
------ IDs  ------
>> DevEui:      
>> AppEui:      
>> DevAddr:     
-------------------------------------
```

### Sigfox Radio Configurationの変更
デフォルトで設定されているRCは欧州を意味する1になっているため、日本向けRC3Cに変更する必要があります。
`AT$RC=3C`でRC3Cに変更できます。これも同じく、AT$RC=?で変更確認しましょう。

:::note warn
`AT$TM=3C,0`でRCZを切り替えるという記載を見ることがありますが、これをやっても、おそらく、コマンドを受け付けていないのでしょう。下記ATコマンドエラーが戻ってきます。
ERROR 0x50
AT_ERROR
:::

### 600bpsのアップリンク通信はできるのか？
通常のメッセージ送信コマンド`AT$SF`コマンドでは、600bpsを指定するパラメターはありません。
ただ、Local test用として、`AT$SL=freq,datarate,count`というコマンドがあります。これをすると、例えば`AT$SL=922400000,600,5`というコマンドを叩けば、しばらくして下記応答が得られます。

```AT$SL=922400000,600,5.
FREP[922400000] dataRate[600]
715s848:Wait For End of Tx
716s172:OnTxDone
716s172:End Of Tx
716s635:Wait For End of Tx
716s959:OnTxDone
716s959:End Of Tx
717s423:Wait For End of Tx
717s748:OnTxDone
717s748:End Of Tx
718s210:Wait For End of Tx
718s535:OnTxDone
718s535:End Of Tx
718s999:Wait For End of Tx
719s323:OnTxDone
719s323:End Of Tx
OK
```
よくわかないので、600bpsのところを100bpsにしてみました。

```AT$SL=922400000,100,5.
FREP[922400000] dataRate[100]
802s037:Wait For End of Tx
803s454:OnTxDone
803s454:End Of Tx
803s916:Wait For End of Tx
805s333:OnTxDone
805s333:End Of Tx
805s796:Wait For End of Tx
807s213:OnTxDone
807s213:End Of Tx
807s676:Wait For End of Tx
809s093:OnTxDone
809s093:End Of Tx
809s556:Wait For End of Tx
810s973:OnTxDone
810s973:End Of Tx
OK
```

なんか、時刻のようなものが返ってくるので、比較をしてみたところ、600bpsの時は、3.475s、100bpsの時は、8.936sと約2.5倍の違いがありました。
なんとなく、600bpsになっているんじゃないかという気にさせる結果です。

正直、[LSM100Aのユーザーマニュアル](https://www.kccs.co.jp/sigfox/solution/product/device71/pdf/LSM100A_UserManual.pdf)の記載が少ないこと、現場から離れて時が経っており、[Sigfox End Point Library](https://github.com/sigfox-tech-radio/sigfox-ep-lib)の実装内容がよくわからないということもあり、実際のところはわかりません。また、調べます。

最後に、ATコマンド一覧を載せておきます。
```at.
AT+<CMD>?        : Help on <CMD>
AT+<CMD>         : Run <CMD>
AT+<CMD>=<value> : Set the value
AT+<CMD>=?       : Get the value
ATZ: Trig a MCU reset
AT$RFS: Restore EEPROM Factory Settings
AT+VER: Get the FW version
AT$ID: Get the ID
AT$PAC: Get the PAC
ATS410: 0:Private Key 1:Public Key
ATS411: Payload Encryption 0:Off 1:On
AT$SB=<Bit>,<Opt downlink>,<Opt TxRepeat><CR>. Send a bit to the sigfox network
AT$SF=<Payload>,<Opt downlink>,<Opt TxRepeat><CR>. Send a ASCII frame to the sigfox network
AT$SH=<PayloadLength>,<Payload>,<Opt downlink>,<Opt TxRepeat><CR>. Send a Hex frame to the sigfox network
AT$CW=<frequency><CR> frequency in Hz or in MHz. Run CW Test mode
AT$PN=<frequency>,<bitrate><CR> frequency in Hz or in MHz, bitrate=[100, 600]. Run PRBS9 BPBSK Test mode
AT$TM=<rc>,<mode><CR> mode=[0..12]. Run Sigfox Test mode
AT+BAT: Get the battery Level in mV 
ATS302=<power>,<CR>  power in dBm=[0..20]. Set Radio output power in dBm
ATS300: send an out of band message once.
ATS400=<param1><param2><param3>,<param4><CR>. Configure specific variables for standard.
AT$RC<param1><CR> param1=[1:7]. Set/Get the Regional Config zones.
AT$RSSICAL=<param1><CR> param1=rssi value in dB. Set/Get the rssi calibration value in dB.
ATE=<param1><CR> [0,1]. Set/Get the echo state.
AT+VL=<param1><CR> [0:3]. Set/Get the Verbose Level with integer from 0(VLEVEL_OFF) to 3(VLEVEL_H)
AT+MODE LoRa/SigFox Select 0:SigFox, 1:LoRa
AT$RL Starts listening for a local loop 
AT$SL Send Tx packet for a local loop 
AT$SSWVER Get SW Version 
```