LL_LENGTH_REQ & LL_LENGTH_RSP on nRF52840 with different TX and RX size

Hello!

I am building Central app to read data from not a fully conformant BLE devices.

When I connect to device with my Android or Windows app, the connection establishes immediately. Connecting with Zephyr default stack lead device into "broken connection" mode (all I know, the status LED starts fast-blinking instead of steady light as it should be).

I have ruled out all other options, and the issue is -- the device requires that central confirm it's LL_LENGTH_REQ:

Peripheral => Central:
Control Opcode: LL_LENGTH_REQ (0x14)
Max RX octets: 251
Max RX time: 2120 microseconds
Max TX octets: 27
Max TX time: 328 microseconds

Phone & windows & TI BLE stack does that with ease, but I am failing to configure project to get the same on nRF52840. 

No matter how I set parameters in prj.conf:

CONFIG_BT_BUF_ACL_RX_SIZE
CONFIG_BT_BUF_ACL_TX_SIZE
CONFIG_BT_CTLR_DATA_LENGTH_MAX
(I've tried varied settings of 27 and 251 there)
And in child_image/hci_rpmsg.conf:
CONFIG_BT_CTLR_TX_BUFFER_SIZE=27
CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
CONFIG_BT_RX_BUF_LEN=255
The generated response packet
Control Opcode: LL_LENGTH_RSP (0x15)
Max RX octets: 251
Max RX time: 2120 microseconds
Max TX octets: 251
Max TX time: 2120 microseconds

has RX and TX equals - either 251 or 27.

The current settings are:

CONFIG_BT=y
CONFIG_BT_CENTRAL=y
CONFIG_BT_SMP=y
CONFIG_BT_GATT_CLIENT=y
CONFIG_BT_GATT_DM=n
CONFIG_BT_CTLR_ADV_EXT=y
CONFIG_BT_CTLR_PHY_CODED=y
CONFIG_BT_USER_PHY_UPDATE=n
CONFIG_BT_SMP=y
CONFIG_BT_GATT_AUTO_UPDATE_MTU=n
CONFIG_BT_AUTO_PHY_UPDATE=n
CONFIG_BT_AUTO_DATA_LEN_UPDATE=n
CONFIG_BT_BUF_ACL_RX_SIZE=251
CONFIG_BT_BUF_ACL_TX_SIZE=27
CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
CONFIG_BT_USER_DATA_LEN_UPDATE=y
CONFIG_BT_CTLR=y

# hci_rpmsg.conf -- but I really think this one is unused

CONFIG_BT_EXT_ADV=y
CONFIG_BT_CTLR_ADV_EXT=y
CONFIG_BT_CTLR_PHY_CODED=y
CONFIG_BT_CTLR_TX_BUFFER_SIZE=27
CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
CONFIG_BT_RX_BUF_LEN=255
Related