I am trying to implement the LESC + numeric comparison using the multi-role lesc as reference. I am using nRF52840 and SDK 14.2.0 with soft device 5.0.0-2_alpha.
My central device is also nRF52840 DK. I am seeing that the peripheral gets into hard fault and does not complete pairing. Central device gets hard fault, but not always. I am not able to get a sniffer log, but this is a serial log messages.
Following is the log when central does not get a hard fault, but peripheral still gets a hard fault:
[CENTRAL_CLIENT]:~$ scan
[00000003] <info> app: Starting scan.
[00000849] <info> app: Device "NRF_XXXX_DEMO" found, sending a connection request.
[00002289] <info> app: Connected as a central.
[00002289] <info> app: conn_handle:0
[00002290] <info> app: Discovering GATT database...
[00002832] <info> app: ATT MTU exchange completed. MTU set to 247 bytes.
[00003079] <info> app: Data length updated to 251 bytes.
[00002730] <info> FCS: Comm service discovered at peer.
[00002731] <info> FCS: FCS discovered at peer.
[00002731] <info> app: PM_EVT_CONN_SEC_PARAMS_REQ
[00002998] <info> app: PM_EVT_CONN_SEC_PARAMS_REQ
[00003002] <info> app: CENTRAL: BLE_GAP_EVT_SEC_PARAMS_REQUEST
[00000191] <info> app: CENTRAL: BLE_GAP_EVT_LESC_DHKEY_REQUEST
[00000192] <info> app: Building public key!
[00000198] <info> app: Finished building public key: 0x00000000!
[00000198] <info> app: Key build result successful!
[00000813] <info> app: Calling sd_ble_gap_lesc_dhkey_reply on conn_handle: 0
[00002900] <info> app: Disconnected: reason 0x8.
[00002900] <info> app: Test terminated...
[CENTRAL_CLIENT]:~$
[PERIPH_SERVER]:~$
[00000000] <info> app: Initializing nrf_crypto.
[00000000] <info> app: Initialized nrf_crypto.
[00000000] <info> app: Generating key-pair
[00000000] <info> app: Converting to raw type
[00000000] <info> app: Key build result successful!
[00000003] <info> app: Starting peripheral device...
[PERIPH_SERVER]:~$ advon
[00000002] <info> app: Starting advertising.
[00000921] <info> app: Connected as a peripheral.
[00000921] <info> app: conn_handle:0
[00000942] <info> app: PHY update accepted. PHY set to 1 Mbps.
[00001462] <info> app: Data length updated to 251 bytes.
[00001697] <info> app: ATT MTU exchange completed. MTU set to 247 bytes.
[00001600] <info> app: PM_EVT_CONN_SEC_PARAMS_REQ
[00001603] <info> app: PERIPHERAL: BLE_GAP_EVT_SEC_PARAMS_REQUEST
[PERIPH_SERVER]:~
Following is the log when both central and peripheral gets a hard fault:
[CENTRAL_CLIENT]:~$
00000002] <info> app: Starting scan.
[00000708] <info> app: Device "NRF_XXXX_DEMO" found, sending a connection request.
[00002046] <info> app: Connected as a central.
[00002046] <info> app: conn_handle:0
[00002047] <info> app: Discovering GATT database...
[00002589] <info> app: ATT MTU exchange completed. MTU set to 247 bytes.
[00002836] <info> app: Data length updated to 251 bytes.
[00002488] <info> FCS: Comm service discovered at peer.
[00002488] <info> FCS: FCS discovered at peer.
[00002488] <info> app: PM_EVT_CONN_SEC_PARAMS_REQ
[00002756] <info> app: PM_EVT_CONN_SEC_PARAMS_REQ
[CENTRAL_CLIENT]:~$
[00000003] <info> app: Starting advertising.
[00000651] <info> app: Connected as a peripheral.
[00000652] <info> app: conn_handle:0
[00000673] <info> app: PHY update accepted. PHY set to 1 Mbps.
[00001193] <info> app: Data length updated to 251 bytes.
[00001428] <info> app: ATT MTU exchange completed. MTU set to 247 bytes.
[00001331] <info> app: PM_EVT_CONN_SEC_PARAMS_REQ
[00001334] <info> app: PERIPHERAL: BLE_GAP_EVT_SEC_PARAMS_REQUEST
[PERIPH_SERVER]:~$
Can you suggest what might be going wrong?
The peer_manager_init is same as in multi-role lesc example, except bonding is not enabled. The HW crypto is enabled in sdk_config.h