After updating from SDK V2.1.3 OTA to SDK V2.9.0, iOS cannot correctly read data such as the model number, but Android can read it normally.

Turn off Bluetooth in the system, turn it back on, and it can be read normally after connecting.
After updating from SDK V2.1.3 OTA to SDK V2.9.0, iOS cannot correctly read data such as the model number, but Android can read it normally.

Turn off Bluetooth in the system, turn it back on, and it can be read normally after connecting.
IOS BLE seems to be using the stale GATT cache after your OTA. Are you enabling the Service changed indication . I think this behavior is different with differen OSes. Enable the Service changed indication characteristic so that the phone knows that the GATT cache needs to be updated with the new ATT table.
Hi Susheel,
Thank you!
I have already configured CONFIG_BT_GATT_SERVICE_CHANGED=y, but this problem still occurs.
Can you also check if you have all the below set?
CONFIG_BT_SETTINGS=y CONFIG_BT_GATT_SERVICE_CHANGED=y CONFIG_BT_GATT_CACHING=y CONFIG_BT_SETTINGS_CCC_STORE_ON_WRITE=y
Make sure that the service changed indication goes from the server to the phone after the OTA is complete.
All these settings have been set to 'y'. It seems that the app (iOS) needs to reacquire the service?
Hello,
Can you check whether the device actually restores the bond data and the CCCD when the new firmware boots? Are you seeing a new pairing dialog after the OTA/reboot?
I see that you have enabled CONFIG_BT_SETTINGS=y, but in the application, after enabling Bluetooth, you also need to call settings_load(). This call restores the bonds and CCCDs, see this here.
Try enabling the logs CONFIG_BT_LOG_LEVEL_DBG and CONFIG_SETTINGS_LOG_LEVEL_DBG and check if there are any log messages indicating that CCCD data is being loaded from flash after boot.
Kind regards,
Abhijith