Let's split を無線化して1年経ったので、少し設定を変えてみた話
Let's SplitをBLE化して、BMPの開発者のqmk_firmwareリポジトリににPRをマージしてもらってから1年がたった。
あれからエネループ3本で動作検証等をしたりして、全然記事にも書いていなかったけど、今回久々にファームを焼いたので記録を残しておく。
インターバルの設定
自宅のきれいな電波状態でも少し遅延を感じていたので、MAX_INTERVALを60まで下げた。チャタリングはしないので、BLE_HID_SLAVE_LATENCYは10のままで一旦で様子見する。
#define BLE_NUS_MIN_INTERVAL 30 #define BLE_NUS_MAX_INTERVAL 60 #define BLE_HID_MAX_INTERVAL 60 #define BLE_HID_SLAVE_LATENCY 10
環境構築
- 環境導入
- git clone -b nrf52 https://github.com/sekigon-gonnoc/qmk_firmware.git ble_micro_pro
- NRF_SDKを追加
- .zshrcにpathを追加
- tmk-coreのnrf.mkのusb_serialをusb-serialに変換
- python2.7系切り替え
- pyenv install 2.7.16
- pyenv local 2.7.16
- pip install urfutil
書き込み
make コマンドから書き込みまで実行する場合。基本的に全てこれで良い。 リセット状態(BOOT, GNDショート状態)でケーブルを差し込まないと、後述のリセット失敗の状態になる。
$ make lets_split_ble/master:hidekingerz:nrfutil $ make lets_split_ble/slave:hidekingerz:nrfutil
nrfutilツールで、シリアル番号指定で書き込むこともできる。
$ nrfutil dfu usb-serial -pkg lets_split_ble_master_hidekingerz.zip -snr DFEF72A24520 $ system_profiler SPUSBDataType Extra Operating Current (mA): 0 Nordic Semiconductor Open DFU Bootloader: Product ID: 0x521f Vendor ID: 0x1915 (Nordic Semiconductor ASA) Version: 1.00 Serial Number: DFEF72A24520 Speed: Up to 12 Mb/s Manufacturer: Nordic Semiconductor Location ID: 0x14310000 / 29 Current Available (mA): 500 Current Required (mA): 500 Extra Operating Current (mA): 0
リセットに失敗している場合の表示
リセット状態(BOOT, GNDをショート状態)でケーブルを差し込まないと、Nordicのチップとしてではなく書き込んだファームウェアとして認識されるため、nrf-utilで書き込もうとすると下記のエラーメッセージになる。
$ system_profiler SPUSBDataType nRF52 USB Demo: Product ID: 0x6060 Vendor ID: 0xfeed Version: 1.00 Serial Number: 000000000000 Speed: Up to 12 Mb/s Manufacturer: Nordic Semiconductor Location ID: 0x14210000 / 33 Current Available (mA): 500 Current Required (mA): 500 Extra Operating Current (mA): 0 Programming Started 2019-11-24 16:51:12,851 No trigger interface found for device with serial number: 000000000000, Product ID: 0x6060 and Vendor ID: 0xFEED Traceback (most recent call last): File "/Users/exthirix/.pyenv/versions/2.7.16/bin/nrfutil", line 11, in <module> load_entry_point('nrfutil==5.2.0', 'console_scripts', 'nrfutil')() File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/click/core.py", line 764, in __call__ return self.main(*args, **kwargs) File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/click/core.py", line 717, in main rv = self.invoke(ctx) File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/click/core.py", line 1137, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/click/core.py", line 1137, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/click/core.py", line 956, in invoke return ctx.invoke(self.callback, **ctx.params) File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/click/core.py", line 555, in invoke return callback(*args, **kwargs) File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/nordicsemi/__main__.py", line 1001, in usb_serial timeout) File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/nordicsemi/__main__.py", line 956, in do_serial dfu.dfu_send_images() File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/nordicsemi/dfu/dfu.py", line 129, in dfu_send_images self._dfu_send_image(self.manifest.application) File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/nordicsemi/dfu/dfu.py", line 90, in _dfu_send_image self.dfu_transport.open() File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/nordicsemi/dfu/dfu_transport_serial.py", line 217, in open self.__get_mtu() File "/Users/exthirix/.pyenv/versions/2.7.16/lib/python2.7/site-packages/nordicsemi/dfu/dfu_transport_serial.py", line 366, in __get_mtu self.mtu = struct.unpack('<H', bytearray(response))[0] TypeError: 'NoneType' object is not iterable make[1]: *** [nrfutil] Error 1 make: *** [lets_split_ble/master:nrfutil] Error 1