diff --git a/src/hci.c b/src/hci.c
index b705b91cb..93c7e7a1d 100644
--- a/src/hci.c
+++ b/src/hci.c
@@ -154,6 +154,7 @@
     X( SUPPORTED_HCI_COMMAND_LE_SET_ADDRESS_RESOLUTION_ENABLE      , 35, 1) \
     X( SUPPORTED_HCI_COMMAND_LE_SET_DEFAULT_PHY                    , 35, 5) \
     X( SUPPORTED_HCI_COMMAND_LE_SET_EXTENDED_ADVERTISING_ENABLE    , 36, 6) \
+    X( SUPPORTED_HCI_COMMAND_LE_READ_BUFFER_SIZE_V2                , 41, 5) \
 
 // enumerate supported commands
 #define X(name, offset, bit) name,
@@ -1880,7 +1881,11 @@ static void hci_initializing_run(void){
         case HCI_INIT_LE_READ_BUFFER_SIZE:
             if (hci_le_supported()){
                 hci_stack->substate = HCI_INIT_W4_LE_READ_BUFFER_SIZE;
-                hci_send_cmd(&hci_le_read_buffer_size);
+                if (hci_command_supported(SUPPORTED_HCI_COMMAND_LE_READ_BUFFER_SIZE_V2)){
+                    hci_send_cmd(&hci_le_read_buffer_size_v2);
+                } else {
+                    hci_send_cmd(&hci_le_read_buffer_size);
+                }
                 break;
             }
 
@@ -2400,6 +2405,14 @@ static void handle_command_complete_event(uint8_t * packet, uint16_t size){
             }
             break;
 #ifdef ENABLE_BLE
+        case HCI_OPCODE_HCI_LE_READ_BUFFER_SIZE_V2:
+            hci_stack->le_iso_packets_length = little_endian_read_16(packet, 9);
+            hci_stack->le_iso_packets_total_num = packet[11];
+            log_info("hci_le_read_buffer_size_v2: iso size %u, iso count %u",
+                     hci_stack->le_iso_packets_length, hci_stack->le_iso_packets_total_num);
+
+            /* fall through */
+
         case HCI_OPCODE_HCI_LE_READ_BUFFER_SIZE:
             hci_stack->le_data_packets_length = little_endian_read_16(packet, 6);
             hci_stack->le_acl_packets_total_num = packet[8];
@@ -2407,7 +2420,7 @@ static void handle_command_complete_event(uint8_t * packet, uint16_t size){
             if (HCI_ACL_PAYLOAD_SIZE < hci_stack->le_data_packets_length){
                 hci_stack->le_data_packets_length = HCI_ACL_PAYLOAD_SIZE;
             }
-            log_info("hci_le_read_buffer_size: size %u, count %u", hci_stack->le_data_packets_length, hci_stack->le_acl_packets_total_num);
+            log_info("hci_le_read_buffer_size: acl size %u, acl count %u", hci_stack->le_data_packets_length, hci_stack->le_acl_packets_total_num);
             break;
 #endif
 #ifdef ENABLE_LE_DATA_LENGTH_EXTENSION
diff --git a/src/hci.h b/src/hci.h
index 53d895405..d693350d6 100644
--- a/src/hci.h
+++ b/src/hci.h
@@ -945,6 +945,8 @@ typedef struct {
     uint8_t  synchronous_flow_control_enabled;
     uint8_t  le_acl_packets_total_num;
     uint16_t le_data_packets_length;
+    uint8_t  le_iso_packets_total_num;
+    uint16_t le_iso_packets_length;
     uint8_t  sco_waiting_for_can_send_now;
     bool     sco_can_send_now;