人生の暇潰し

暇つぶしの記録

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

環境構築

  • 環境導入
    1. git clone -b nrf52 https://github.com/sekigon-gonnoc/qmk_firmware.git ble_micro_pro
    2. NRF_SDKを追加
    3. .zshrcにpathを追加
    4. tmk-coreのnrf.mkのusb_serialをusb-serialに変換
  • python2.7系切り替え
    1. pyenv install 2.7.16
    2. pyenv local 2.7.16
    3. 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