diff --git a/subsys/bluetooth/controller/ll_sw/ull_conn.c b/subsys/bluetooth/controller/ll_sw/ull_conn.c index a1560b0d7f7..f260c71eb5d 100644 --- a/subsys/bluetooth/controller/ll_sw/ull_conn.c +++ b/subsys/bluetooth/controller/ll_sw/ull_conn.c @@ -1652,12 +1652,18 @@ void ull_conn_done(struct node_rx_event_done *done) #endif /* CONFIG_BT_CTLR_LE_PING */ #if defined(CONFIG_BT_CTLR_DF_CONN_CTE_REQ) - if (conn->llcp.cte_req.req_expire != 0U) { + /* Check if the CTE_REQ procedure is periodic and counter has been started. + * req_expire is set when: new CTE_REQ is started, after completion of last periodic run. + */ + if (conn->llcp.cte_req.req_interval != 0U && conn->llcp.cte_req.req_expire != 0U) { if (conn->llcp.cte_req.req_expire > elapsed_event) { conn->llcp.cte_req.req_expire -= elapsed_event; } else { uint8_t err; + /* Set req_expire to zero to mark that new periodic CTE_REQ was started. + * The counter is re-started after completion of this run. + */ conn->llcp.cte_req.req_expire = 0U; err = ull_cp_cte_req(conn, conn->llcp.cte_req.min_cte_len,