From 8354eab2a9991a2b678e13914276cc44b5cad81c Mon Sep 17 00:00:00 2001 From: tychovrahe Date: Thu, 18 Apr 2024 16:45:10 +0200 Subject: [PATCH] fix spi and ble on zephyt --- .../arm/t3w1_nrf52833/t3w1_nrf52833-pinctrl.dtsi | 13 ++++++------- .../boards/arm/t3w1_nrf52833/t3w1_nrf52833.dts | 2 +- core/embed/ble_zephyr_fw/prj.conf | 6 ++++-- core/embed/ble_zephyr_fw/src/connection.c | 5 +++++ core/embed/ble_zephyr_fw/src/connection.h | 1 + core/embed/ble_zephyr_fw/src/main.c | 4 ++-- core/embed/ble_zephyr_fw/src/pb_comm.c | 3 ++- core/embed/ble_zephyr_fw/src/uart.c | 4 ++++ core/embed/ble_zephyr_fw/src/uart.h | 2 ++ 9 files changed, 27 insertions(+), 13 deletions(-) diff --git a/core/embed/ble_zephyr_fw/boards/arm/t3w1_nrf52833/t3w1_nrf52833-pinctrl.dtsi b/core/embed/ble_zephyr_fw/boards/arm/t3w1_nrf52833/t3w1_nrf52833-pinctrl.dtsi index fa0a6e79a..3edaaf41f 100644 --- a/core/embed/ble_zephyr_fw/boards/arm/t3w1_nrf52833/t3w1_nrf52833-pinctrl.dtsi +++ b/core/embed/ble_zephyr_fw/boards/arm/t3w1_nrf52833/t3w1_nrf52833-pinctrl.dtsi @@ -26,20 +26,19 @@ }; }; - spi0_default: spi0_default { group1 { - psels = , - , - ; + psels = , + , + ; }; }; spi0_sleep: spi0_sleep { group1 { - psels = , - , - ; + psels = , + , + ; low-power-enable; }; }; diff --git a/core/embed/ble_zephyr_fw/boards/arm/t3w1_nrf52833/t3w1_nrf52833.dts b/core/embed/ble_zephyr_fw/boards/arm/t3w1_nrf52833/t3w1_nrf52833.dts index 8221ec462..bad4aba4f 100644 --- a/core/embed/ble_zephyr_fw/boards/arm/t3w1_nrf52833/t3w1_nrf52833.dts +++ b/core/embed/ble_zephyr_fw/boards/arm/t3w1_nrf52833/t3w1_nrf52833.dts @@ -102,7 +102,7 @@ pinctrl-0 = <&spi0_default>; pinctrl-1 = <&spi0_sleep>; pinctrl-names = "default", "sleep"; - cs-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; + cs-gpios = <&gpio0 23 GPIO_ACTIVE_LOW>; reg_my_spi_master: spi-dev-a@0 { reg = <0>; }; diff --git a/core/embed/ble_zephyr_fw/prj.conf b/core/embed/ble_zephyr_fw/prj.conf index cc00decbe..a554d68c0 100644 --- a/core/embed/ble_zephyr_fw/prj.conf +++ b/core/embed/ble_zephyr_fw/prj.conf @@ -37,8 +37,10 @@ CONFIG_BT_SMP_SC_ONLY=y CONFIG_BT_FILTER_ACCEPT_LIST=y CONFIG_BT_BONDING_REQUIRED=y CONFIG_BT_PRIVACY=y -#CONFIG_BT_TINYCRYPT_ECC=y -#CONFIG_BT_LL_SW_SPLIT=y +CONFIG_BT_TINYCRYPT_ECC=y +CONFIG_BT_LL_SW_SPLIT=y + +#CONFIG_BT_DEBUG_SMP=y #PHY update needed for updating PHY request CONFIG_BT_USER_PHY_UPDATE=y diff --git a/core/embed/ble_zephyr_fw/src/connection.c b/core/embed/ble_zephyr_fw/src/connection.c index cd919a5a9..40212cd81 100644 --- a/core/embed/ble_zephyr_fw/src/connection.c +++ b/core/embed/ble_zephyr_fw/src/connection.c @@ -178,3 +178,8 @@ void pairing_failed(struct bt_conn *conn, enum bt_security_err reason) LOG_INF("Pairing failed conn: %s, reason %d", addr, reason); } + + +struct bt_conn * conn_get_current(void){ + return current_conn; +} diff --git a/core/embed/ble_zephyr_fw/src/connection.h b/core/embed/ble_zephyr_fw/src/connection.h index 7cef4269a..61505d4d0 100644 --- a/core/embed/ble_zephyr_fw/src/connection.h +++ b/core/embed/ble_zephyr_fw/src/connection.h @@ -27,3 +27,4 @@ void pairing_complete(struct bt_conn *conn, bool bonded); void pairing_failed(struct bt_conn *conn, enum bt_security_err reason); void num_comp_reply(bool accept); +struct bt_conn * conn_get_current(void); diff --git a/core/embed/ble_zephyr_fw/src/main.c b/core/embed/ble_zephyr_fw/src/main.c index a51789e74..904605632 100644 --- a/core/embed/ble_zephyr_fw/src/main.c +++ b/core/embed/ble_zephyr_fw/src/main.c @@ -236,8 +236,8 @@ void ble_write_thread(void) /* Wait indefinitely for data to be sent over bluetooth */ uart_data_t *buf = uart_get_data_ext(); - if (bt_nus_send(NULL, buf->data, buf->len)) { - LOG_WRN("Failed to send data over BLE connection"); + if (bt_nus_send(conn_get_current(), buf->data, buf->len)) { + LOG_WRN("Failed to send data over BLE connection: %d", buf->len); } k_free(buf); diff --git a/core/embed/ble_zephyr_fw/src/pb_comm.c b/core/embed/ble_zephyr_fw/src/pb_comm.c index 75896b420..4f1f13873 100644 --- a/core/embed/ble_zephyr_fw/src/pb_comm.c +++ b/core/embed/ble_zephyr_fw/src/pb_comm.c @@ -33,8 +33,9 @@ static K_FIFO_DEFINE(fifo_pb_tx_in); // data to send to trezor static K_FIFO_DEFINE(fifo_pb_tx_out); // data to send to host -void prepare_response_wait() { +void prepare_response_wait() { k_sem_reset(&pb_wait_for_ack); + uart_data_pb_flush(); } diff --git a/core/embed/ble_zephyr_fw/src/uart.c b/core/embed/ble_zephyr_fw/src/uart.c index b4a0e5fd6..223a26b4c 100644 --- a/core/embed/ble_zephyr_fw/src/uart.c +++ b/core/embed/ble_zephyr_fw/src/uart.c @@ -311,6 +311,10 @@ uart_data_t *uart_get_data_pb(void) return k_fifo_get(&fifo_uart_rx_data_pb, K_MSEC(100)); } +void uart_data_pb_flush(void){ + while(uart_get_data_pb() != NULL); +} + void uart_send(uart_data_t *tx) { int err = uart_tx(uart, tx->data, tx->len, SYS_FOREVER_MS); diff --git a/core/embed/ble_zephyr_fw/src/uart.h b/core/embed/ble_zephyr_fw/src/uart.h index 8ab2878b2..9d49c9e70 100644 --- a/core/embed/ble_zephyr_fw/src/uart.h +++ b/core/embed/ble_zephyr_fw/src/uart.h @@ -14,6 +14,8 @@ int uart_init(void); uart_data_t * uart_get_data_ext(void); uart_data_t * uart_get_data_int(void); uart_data_t * uart_get_data_pb(void); +void uart_data_pb_flush(void); + void uart_send(uart_data_t *data); void uart_send_ext(uart_data_t *tx);