#新キーボード, NISSE BLE版のファームウェア #1
--
ようやくこの投稿もBLE版のNISSEで書き込めるくらいまでファームウェアの開発が進んで来ました。ときどきファームウェアがフリーズすることがあって少しはまっていたのでした。最後はgdbに頼ることに(笑):

Program received signal SIGSEGV, Segmentation fault.
0x000006b0 in ?? ()
(gdb) bt
#0  0x000006b0 in ?? ()
#1  <signal handler called>
#2  0x0001a5ca in sd_ble_gatts_hvx (conn_handle=0, p_hvx_params=0x20003f08)
    at ../../../../../Include/s110/ble_gatts.h:470
#3  0x0001bf64 in ble_hids_inp_rep_send (p_hids=0x20003368 <m_hids>, rep_index=0 '\000', len=8,
    p_data=0x20002e3c " ") at ../../../../..//Source/ble/ble_services/ble_hids.c:1237
(略)
#7  0x00017d28 in gpiote_event_handler (event_pins_low_to_high=0, event_pins_high_to_low=268435456)
    at ../nisse.c:405
#8  0x0002151c in GPIOTE_IRQHandler () at ../../../../../Source/app_common/app_gpiote.c:132
#9  <signal handler called>

gpiote のイベントハンドラ内から ble_hids_inp_rep_send() を使ってキーボード入力レポートを直に送信しようとするとソフトデバイス内でSEGVが発生する、ということのよう。nRF51822のソフトデバイス側のソースコードは公開されていないので細かい部分は謎です。このあたりはしばらくnRF51 SDKを使いながら慣れていけるといいな、と。ここはタイマーで回避しました。

写真は開発中の様子。NISSE BLEの制御基板から繋がっているのは、CMSIS-DAPデバッグアダプタのTSUBOLink-II(もともとはHRM1017用)と、UART-USBシリアル変換のスケッチを書き込んだArduino leonardo。ファームウェアはnRF51 SDKベースなのですが、そのまわりでmbedやarduinoが動いているのでした。 :-)

※ gdb のセットアップ手順は次の記事が分かりやすかったです:
  http://prog.quarklink.org/embedded-firmware/mbed/pyocd/
pyOCDはnrf51はサポート済なので、ボードにTSUBOLink-II(1017)を追加するだけで大丈夫でした。
Photo
Shared publiclyView activity