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

NRF52840 issue with IOS 5.0 Devices

Okay, this is a fairly involved issue, so I will try to simplify as best as I can.

In short, my new Ipad Mini 5 cannot connect to an NRF52840 running the NUS peripheral ( SDK15.3, SD-140-6.1.1). The Ipad Mini 5 can successfully connect to a nrf52832 running the NUS peripheral (SDK15.3, SD-132-6.1.1).

My older IOS devices can connect to both no problem.

I can see that the GAP layer connects from the RTT with the Ipad Mini 5 and the 52840, but the Ipad Mini 5 never hits the didConnect peripheral callback and thus no GATT services discovery is performed.

I see this problem both on my custom IOS apps and the Nordic NRFConnect App on the app store.

Device Chip SoftDevice SDK Can Connect
Ipad Mini 5 52832 6.1.1 15.3 YES
Ipad Mini 5 52840 6.1.1 15.3 NO
Ipad Mini 4 and Older IOS devices 52832 6.1.1 15.3 YES
Ipad Mini 4 and Older IOS devices 52840 6.1.1 15.3 YES


My only guess is that there is some BLE setting on the nrf52840 that is telling the newer 5.0 devices something incorrect ( 2.0 mbps? Long-range?).

Any other ideas what could be going on here?  Can someone test the nrf52840 example with a newer IOS 5.0 device?

This problem seems to be the same as what others are reporting with the nRF-Connect App - https://github.com/NordicSemiconductor/IOS-nRF-Connect/issues/50

Parents
  • I figured out the problem.  I was porting a project from an old S132 project and this GAP request event was not being handled:

            case BLE_GAP_EVT_PHY_UPDATE_REQUEST:
            {
                NRF_LOG_DEBUG("PHY update request.");
                ble_gap_phys_t const phys = {
                    .rx_phys = BLE_GAP_PHY_AUTO,
                    .tx_phys = BLE_GAP_PHY_AUTO,
                };
                err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys);
                APP_ERROR_CHECK(err_code);
            }
            break;
    
Reply
  • I figured out the problem.  I was porting a project from an old S132 project and this GAP request event was not being handled:

            case BLE_GAP_EVT_PHY_UPDATE_REQUEST:
            {
                NRF_LOG_DEBUG("PHY update request.");
                ble_gap_phys_t const phys = {
                    .rx_phys = BLE_GAP_PHY_AUTO,
                    .tx_phys = BLE_GAP_PHY_AUTO,
                };
                err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys);
                APP_ERROR_CHECK(err_code);
            }
            break;
    
Children
No Data
Related