Hello,
We are working on a custom solution that uses iPhones (iOS 15.x) configured as peripherals, to advertise themselves and then connect to a central. We are facing an issue when trying to communicate two iPhones with the same central simultaneously. The connection between the central and 1 iPhone is ok, however, as soon as we try to communicate two devices, the second iPhone would not respond to MTU Request and the connection does not go through.
Attached the sniffer logs where we can see that the last exchanged packet (before the empty PDUs) is a LL_REJECT_IND_EXT from the BLE Central to the iPhone, because of procedure collision.
If we look at the previous message sent by the Central, it is an LL_CONNECTION_UPDATE_IND. Inside this procedure, an “Instant” is given to the iPhone: instant 14
That means that the new parameters will be effective on event counter 14.
According to the BLE spec, while a procedure with instant is ongoing, another procedure with instant must not be initiated.
However, as you can see, the iPhone initiates a PHY Req at instant 9.
Our undestanding is tha the iPhone should not send this request as this is out of spec. This is why the Central sends the rejection message. The iPhone is probably in a wrong state that would explain why it doesn’t answer to the MTU request.
As a workaround, would it be possible to disable Phy 2M on the iPhone to avoid this reported issue?
Thanks a lot for your support. Regards.