PAwR Synchronization Fails on nRF5340 Tag (peripheral_esl) While Same Firmware Syncs Successfully on nRF52840 Tag

We are working with Nordic's official Peripheral_esl and Central_esl samples from nrf-esl-bluetooth, using nRF Connect SDF v3.0.2 and Toolchain 3.0.2.

Our setup is aimed at testing PAwR synchronization between ESL Access Point (AP) and multiple ESL Tags, following the standard ESL architecture.

Our goal is to validate consistent PAST and PAwR synchronization behavior across nRF52840 and nRF5340 based Tags.


Setup:

Role Board Application Status
Access Point nRF5340dk Central_esl Working
ESL TAg A nRF52840dk Peripheral_esl Successfully Syncs
ESL Tag B nRF5340dk Peripheral_esl Fails to Sync

Behaviour of the Tags-

1- The nRF52840 Tag pairs, configures and complete PAST and gets Synchronized with the AP successfully.

>> ENTERED esl_advertising_fn(): adv_mode = 0
>> Scheduling LED indicator during advertising
>> Calling bt_le_adv_start()...
<< Advertising started successfully.
bt_esl_init (err 0)
>> Registering bt_conn_auth_cb...
>> bt_conn_auth_cb_register returned: 0
>> Registering bt_conn_auth_info_cb...
>> bt_conn_auth_info_cb_register returned: 0
>> connected() called, err = 0
>> Connected to F5:D0:08:45:90:78 (random)
>> Cleared ESL_UPDATE_COMPLETE_SET_BIT
>> Stored conn pointer: 0x20006890
>> Not synchronized, connect_from = ACL_FROM_SCAN
>> Resetting LED indication for connection event...
[00:00:20.653,320] <inf> peripheral_esl: Pairing completed: F5:D0:08:45:90:78 (random), bonded: 1
[00:00:20.653,656] <inf> bt_esl: Security changed: F5:D0:08:45:90:78 (random) level 2
Calling esl_create_pawr_sync() after encryptionPAST subscribe result: 0
CP: Notifications ON
[00:00:46.951,080] <inf> bt_esl: new esl_addr 0x0101
#ABS_TIME: 112209
#CONFIGURED:1
GOT read request for Display Information CHRC. len 242, off 0
ECP: OP_UPDATE_COMPLETE received
ECP: configuring_state bit set
#UPDATE_COMPLETE:1
#CONFIGURED:1
enter configured
#CONFIGURED:1
ECP: resp_op=0x10 src=0
ECP: built resp len=5
TAG: BASIC_STATE about to send: val=0x00000002 bytes=02 00 00 00
TAG: ECP notify (op=0x10) total_len=5 : 10 02 00 00 00
ECP: notify len=5 conn=0x20006890
ECP notify cb: (no data)
[00:01:17.460,021] <inf> bt_esl: PER_ADV_SYNC[0]: [DEVICE]: 0E:77:E2:77:BD:72 (random) synced, Interval 0x0580 (1408), PHY 2, sync info sid 8, service_data 0x1857 num_events 128, sub_int 11, resp delay 8, resp spacing 3
#SYNC:1
[00:01:17.960,723] <err> bt_adv: No valid legacy adv
[00:01:17.960,723] <inf> bt_esl: TAG synchronized and disconnected cleanly from AP
CP: Notifications OFF
Disconnected: F5:D0:08:45:90:78 (random) (reason 0x16)#DISCONNECTED:0x16
PAWR: esl_pawr_sync_work_fn entered, enc_len=18
>>> esl_parse_sync_packet: enter (buf_len=7)
>>> esl_parse_sync_packet: hdr_len=6 payload_len=5
>>> esl_parse_sync_packet: after pull, cur=0, first byte=0x01 (group)
>>> esl_parse_sync_packet: group OK, start TLV parse
>>> esl_parse_sync_packet: TLV#0 at cur=1: op=0x20 tag=0x00 len=4 esl_id=0xff
>>> esl_parse_sync_packet: TLV#0 is for us (id=0xff) [BCAST]
>>> esl_parse_sync_packet: submit ecp_work
ECP: resp_op=0x11 src=1
ECP: built resp len=3
TAG: ECP notify (op=0x11) total_len=3 : 11 00 00
>>> esl_parse_sync_packet: ecp_work finished
>>> esl_parse_sync_packet: advance cur=5
>>> esl_parse_sync_packet: set_pawr_response (rsp_slot=-1)
[00:03:18.911,315] <inf> bt_esl: All broadcast TLV or no addressed TLV, no need replied
>>> esl_parse_sync_packet: tlv_count=0 rsp_slot=-1
[00:03:18.911,376] <inf> bt_esl: tlv counts 0 rsp_slot -1
>>> esl_parse_sync_packet: exit
[00:03:18.911,407] <inf> bt_esl: Renew unsycned timeout 3600 seconds
PAWR: decrypted payload len=7 (rc=0)



2- The nRF5340 Tag running the same exact source, pairs and configures correctly (including ESL Address, AP Sync Key. Response Key and Absolute Time Writes), However, after sending OP_UPDATE_COMPLETE command, the nRF5340 Tag transitions to #Configured:1 and then disconnects before any periodic sync event is observed.

>> ENTERED esl_advertising_fn(): adv_mode = 0
>> Scheduling LED indicator during advertising
>> Calling bt_le_adv_start()...
<< Advertising started successfully.
bt_esl_init (err 0)
>> connected() called, err = 0
>> Connected to F5:D0:08:45:90:78 (random)
>> Cleared ESL_UPDATE_COMPLETE_SET_BIT
>> Stored conn pointer: 0x2000f4f0
>> Not synchronized, connect_from = ACL_FROM_SCAN
>> Resetting LED indication for connection event...
[00:01:25.245,605] <inf> peripheral_esl: Pairing completed: F5:D0:08:45:90:78 (random), bonded: 1
[00:01:25.245,880] <inf> bt_esl: Security changed: F5:D0:08:45:90:78 (random) level 2
Calling esl_create_pawr_sync() after encryptionPAST subscribe result: 0
CP: Notifications ON
[00:01:38.608,825] <inf> bt_esl: new esl_addr 0x0101
#ABS_TIME: 52942
#CONFIGURED:1
GOT read request for Display Information CHRC. len 242, off 0
ECP: OP_UPDATE_COMPLETE received
ECP: configuring_state bit set
#UPDATE_COMPLETE:1
#CONFIGURED:1
enter configured
#CONFIGURED:1
ECP: resp_op=0x10 src=0
ECP: built resp len=5
TAG: BASIC_STATE about to send: val=0x00000002 bytes=02 00 00 00
TAG: ECP notify (op=0x10) total_len=5 : 10 02 00 00 00
ECP: notify len=5 conn=0x2000f4f0
ECP notify cb: (no data)
CP: Notifications OFF
Disconnected: F5:D0:08:45:90:78 (random) (reason 0x13)#DISCONNECTED:0x13
#CONFIGURED:1
>> bt_esl_adv_start(mode=0)
<< bt_esl_adv_start done (rescheduled adv work)
>> ENTERED esl_advertising_fn(): adv_mode = 0
Bonded AP               F5:D0:08:45:90:78 (random)
>> Scheduling LED indicator during advertising
>> Calling bt_le_adv_start()...
<< Advertising started successfully.


The nRF52840 Tag under identical test conditions, proceeds beyond UPDATE_COMPLETE, performs PAST successfully and syncs to AP PAwR train, The AP (nRF5340) logs confirm that PAST initiation is successful and the command is issued properly, but the nRF5340 Tag never syncs before dropping the ACL link.


we have verified the ESL code base ( esl_c, esl_client_c) across both targets, both are build using same SDK and Toolchain and we have verified the bonding, security level 2, control point notificatons all complete successfully.

Both are attempted without external display drivers/ SPI activity and behavior unchanged.



1- Are there any known PAwR or PAST limitations when using the nRF5340 as the ESL Tag (especially regarding controller timing or multi-core HCI scheduling)?
2- Is there any difference in synchronization or ACL handling between nRF52840 and nRF5340 Bluetooth controllers that might cause premature disconnect before PAST sync completion?
3- Are there recommended Bluetooth controller or Kconfig parameters (e.g., connection interval, PHY preference, or HCI split behavior) that differ for 5340-based Tags?
4- Any known issues or firmware patches related to PAwR synchronization stability on nRF5340?


We are seeking guidance to identify whether this is a firmware-level timing difference, a controller constraint, or a known issue in SDK 3.0.2 for PAwR on nRF5340-based Tags.


Thank you for your time and assistance.
Any insights or debugging recommendations would be highly appreciated.

  • Hi,

    The respository does not support nRF5340 in the tag role, but that is because there was no request for it at the time. It should be possible to take the child_image files from central_esl and copy over to peripheral_esl (also in a folder named child_image), and add borad files .conf and .overlay for nrf5340 DK in the same way as it was done for the other supported devices. (I have not tested this on my end and some adjustment may be needed, but I see no fundamental problems that should prevent this).

Related