This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF8001 doesn't acknowledge LL_VERSION_IND

Hi,

We are using an nRF8001 with bonding.

We tested the use case were a bond has been established with an iOS app. Then the connection was terminated by closing the iOS app.

Now we establish a new bond with a different device. Again we close the connection.

Now we try to re-connect to the iOS app, where the iPhone still has the old bonding information, but the nRF8001 has a new (wrong) bonding information.

In this case, the iOS sends a LL_VERSION_IND packet, which the nRF8001 fails to acknowledge even after multiple retries. See sniffer trace nrf8001-ios-wrong-bond.pcapng. During this, there are no ACI events generated by the nRF8001, so on the peripheral side there is no way for us to know when this behaviour occurs.

If, instead of establishing a different bond, we simply delete the bonding information on the nRF8001, the behaviour is different: The connection will be setup but of course the encryption will fail. See sniffer trace nrf8001-ios-no-bond.pcapng

With Android, we do not have the problem even when the wrong bonding information is present on the nRF8001 (possibly because Android doesn't sent an LL_VERSION_IND packet). See sniffer trace nrf8001-android-wrong-bond.pcapng.

Is there anything we can do to handle the situation more gracefully? Of course the original bonding information is lost, but it would be nice if we could either restart the bonding process or indicate an error to the user.

Related