Description
I am using xaomi thermometer with custom firmware https://github.com/pvvx/ATC_MiThermometer that is able to advertise over coded phy. I can find it in nrfconnect on my phone but I could never find it with Espruino on 52840 (with S140 6.0.0).
Now I tried with 6.1.1 (and 6.1.0) and just by updating softdevice it works with same espruino binary - suddenly the thermometer can be found!
with 6.0.0
NRF.findDevices(function(devices) { console.log(devices);}, { timeout : 7000, active : true, phy:"coded"});
=undefined
[ ]
with 6.1.1
>NRF.findDevices(function(devices) { console.log(devices);}, {timeout : 7000, active : true, phy:"coded"});
=undefined
[
BluetoothDevice: {
"id": "a4:c1:38:c9:52:1e public",
"rssi": -44,
"data": new Uint8Array([2, 1, 6, 18, 22, 26, 24, 30, 82, 201, 56, 193, 164, 235, 8, 245, 22, 237, 10, 85, 231, 4, 11, 9, 76, 89, 87, 83, 68, 48, 51, 45, 49, 69]).buffer,
"name": "LYWSD03-1E",
"serviceData": {
"181a": new Uint8Array([30, 82, 201, 56, 193, 164, 235, 8, 245, 22, 237, 10, 85, 231, 4]).buffer
}
}
]
I checked S140 6.1.0 release notes and it actually starts with
The main new feature for s140_nrf52_6.1.0 compared to s140_nrf52_6.0.0 is the full support for all mandatory LE Advertising Extensions features and qualified LE Coded PHY feature.
the "new features" section also mentions
- Qualified LE Coded PHY feature (DRGN-5702).
- Qualified LE Advertising Extensions feature (DRGN-7504)
- The scanner and initiator roles can now be configured to receive ADV_EXT_IND PDUs on both 1M and Coded PHY, using
a single call to sd_ble_gap_scan_start() or sd_ble_gap_connect() (DRGN-8668). - It is now possible to send and receive advertising packets with up to 255 bytes of payload (DRGN-9315).
- Privacy for Advertising Extensions is fully supported (DRGN-9340).
- The SoftDevice is now able to receive chained advertisements (DRGN-9734).
- The SoftDevice is now able to send chained advertisements. The advertising data fragmentation is handled autonomously
by the SoftDevice (DRGN-9802)
There is quite a lot of bugfixes and there is also migration document with code describing how to scan on both PHYs at once (basically double the interval) I am attaching both here
s140_nrf52_6.1.0_migration-document.pdf
s140_nrf52_6.1.0_release-notes.pdf
I also noticed one mentioned change which may be related to the 4096 block writing bug to internal flash, looks like maybe they reduced it too much :-)
The time reserved by the SoftDevice is reduced by 297 µs when performing a flash word write, and by 4.7 ms when
performing a flash page erase. This increases the probability of successfully scheduled flash operations (DRGN-9048).
So basically I am suggesting to eventually move to 6.1.0 or 6.1.1 to support coded phy/advertising extensions better. The only issue I see that need fixing with 6.1.x is reducing flash write block size from 4096 to 2048 as per that comment.