v2.5.2: nRF52810 HCI-SPI to nRF9160: Not advertising.

Hello,

Developing a custom board with nRF9160 as application CPU and nRF52810 as BLE Controller. Connected via SPI + reset + irq lines to the 52810. The design is a copy of the manual's reference design for the 52810, with an external antenna to an u.FL connector.

Host code is based on peripheral_hr and Controller code is plain hci_spi without modifications: https://github.com/zephyrproject-rtos/zephyr/blob/zephyr-v3.4.0/samples/bluetooth/hci_spi/src/main.c

The host says it's advertising and output when it's working normally is as belows, however using e.g. "BLE Scanner" on iPhone, it's not showing a device named "Zephyr Heartrate Sensor".

32 MHz Xtal: https://jlcpcb.com/partdetail/YangxingTech-XL7EL89CKI_111YLC32M/C2965582

12pf caps (5% instead of 2%, maybe that's a problem): https://jlcpcb.com/partdetail/1899-0402CG120J500NT/C1547

Host output:

*** Booting nRF Connect SDK v2.5.2 ***

[00:00:00.460,021] <inf> hwtest: bluetooth: initializing
[00:00:00.465,759] <dbg> bt_conn: bt_conn_prepare_events:
...repeats 19 times...
[00:00:01.920,776] <dbg> bt_smp: bt_smp_init: LE SC enabled
[00:00:01.927,429] <dbg> bt_conn: bt_conn_prepare_events:
[00:00:[00:00:01.934,539] <inf> bt_hci_core: Identity: DC:9C:F0:BA:35:43 (random)
[00:00:01.941,864] <inf> bt_hci_core: HCI: version 5.4 (0x0d) revision 0x1168, manufacturer 0x0059
[00:00:01.951,324] <inf> bt_hci_core: LMP: version 5.4 (0x0d) subver 0x1168
Bluetooth initialized
01.933,715] [00:00:01.962,402] <dbg> bt_conn: bt_conn_prepare_events:
<dbg> bt_gatt: bt_gatt_attr_read: handl[00:00:01.972,198] <dbg> bt_conn: bt_conn_prepare_events:
e 0x0000 offset 0 length 2
[[00:00:01.981,262] <dbg> bt_smp: bt_smp_pkey_ready:
00:00:01.981,109] <dbg> bt_gatt: b[00:00:01.990,478] <dbg> bt_conn: bt_conn_prepare_events:
t_gatt_att[00:00:01.997,528] <dbg> bt_conn: bt_conn_set_state: disconnected -> connecting-adv
[00:00:02.005,645] <dbg> bt_conn: bt_conn_ref: handle 0 ref 1 -> 2
r_read[00:00:02.013,000] <dbg> bt_conn: bt_conn_prepare_events:
: handle 0[00:00:02.020,019] <dbg> bt_conn: bt_conn_unref: handle 0 ref 2 -> 1
Advertising successfully started
[00:00:02.029,785] <inf> hwtest: bluetooth: init done
[00:00:02.035,308] <inf> hwtest: All hardware initialized
x0000 offset 0 length 5
0:00:02.048,980] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.059,783] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.067,993] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 2
[00:00:02.076,232] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.084,625] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.093,048] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.101,257] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 2
[00:00:02.109,680] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.117,889] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 2
[00:00:02.126,312] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.134,521] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.142,913] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 2
[00:00:02.151,153] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.164,703] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.173,095] <dbg> bt_gatt: bt_gatt_attr_read: handle 0x0000 offset 0 length 5
[00:00:02.181,488] <dbg> bt_gatt: db_hash_gen: Hash:
2b 0a 59 29 b8 ab 31 07 61 3b dc 65 5c 47 ad 2f |+.Y)..1. a;.e\G./

prj-controller.conf

# for debugging
#CONFIG_LOG=y
#CONFIG_CONSOLE=y
#CONFIG_SERIAL=y
#CONFIG_PRINTK=y
# for release (for updating via mcuboot from nrf91)
CONFIG_LOG=n
CONFIG_CONSOLE=n
CONFIG_SERIAL=n
CONFIG_PRINTK=n

CONFIG_LOG_MODE_DEFERRED=n
CONFIG_LOG_MODE_IMMEDIATE=y
CONFIG_HWTEST_LOG_LEVEL_INF=y

# stack profiling: makes no difference if it's enabled or not.
CONFIG_THREAD_NAME=y
CONFIG_THREAD_ANALYZER_AUTO=y
CONFIG_THREAD_ANALYZER_RUN_UNLOCKED=y
CONFIG_THREAD_ANALYZER_AUTO_INTERVAL=10

CONFIG_SIZE_OPTIMIZATIONS=y
CONFIG_SPI=y
CONFIG_SPI_SLAVE=y
CONFIG_I2C=n
CONFIG_GPIO=y
CONFIG_BT=y
CONFIG_BT_HCI_RAW=y
CONFIG_BT_HCI_CORE_LOG_LEVEL_INF=y
CONFIG_BT_HCI_DRIVER_LOG_LEVEL_INF=y
CONFIG_BT_LOG_LEVEL_INF=y

CONFIG_BT_CTLR=y
CONFIG_BT_SPI=y
CONFIG_MAIN_STACK_SIZE=1024
CONFIG_BT_TINYCRYPT_ECC=n

CONFIG_BT_BUF_CMD_TX_COUNT=10
CONFIG_BT_DEBUG_NONE=y
CONFIG_BT_ASSERT=n
CONFIG_BT_DATA_LEN_UPDATE=n
CONFIG_BT_PHY_UPDATE=n
CONFIG_BT_GATT_CACHING=n
CONFIG_BT_GATT_SERVICE_CHANGED=n
CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS=n
CONFIG_BT_HCI_VS=n
CONFIG_BT_CTLR_PRIVACY=n
CONFIG_BT_CTLR_PHY_2M=n
CONFIG_BT_BUF_EVT_RX_COUNT=2

prj-host.conf: (only relevant parts)

CONFIG_BT=y
CONFIG_BT_LOG_LEVEL_DBG=y
CONFIG_BT_CTLR=n

CONFIG_BT_HCI=y

CONFIG_BT_SPI=y
CONFIG_BT_DIS=y
CONFIG_BT_DIS_PNP=n
CONFIG_BT_BAS=y
CONFIG_BT_HRS=y
CONFIG_BT_DEVICE_NAME="Zephyr Heartrate Sensor"
CONFIG_BT_DEVICE_APPEARANCE=833

CONFIG_BT_PERIPHERAL=y

CONFIG_BT_SMP=y
CONFIG_PRINTK=y

CONFIG_BT_HCI_TX_STACK_SIZE_WITH_PROMPT=y
CONFIG_BT_HCI_TX_STACK_SIZE=2048
CONFIG_BT_HCI_CORE_LOG_LEVEL_INF=y
CONFIG_BT_HCI_DRIVER_LOG_LEVEL_INF=y

Related