BlueZ PHY CODED scan via HCI UART on nRF52840_pca10056 #ble #nrf52840 #uart #hci


piotr@...
 
Edited

Hi,

I'm trying to force a nRF52840-pca10056 DK to scan for BLE advertisements with PHY set to CODED via HCI and BlueZ 5.50 but keep getting rejected by the hci_uart from Zephyr examples (master branch). I have few scanners and advertisers written on top of nRF15.3 SDK which work so right now I'm trying to test how PHY_CODED works with HCI.
I might (for sure I am) be doing something wrong but I haven't found any good resources on doing that and was thinking that someone on this mailing list has already solved this problem.

What happens is while sending:

$ hcitool cmd 08 41 00 00 04 

the command is correctly recognized by btmon as 

@ RAW Open: hcitool (privileged) version 2.22                {0x0003} [hci0] 5244.434886
< HCI Command: LE Set Extended Scan Para.. (0x08|0x0041) plen 3  #157 [hci0] 5244.435025
        Own address type: Public (0x00)                                                 
        Filter policy: Accept all advertisement (0x00)                                  
        PHYs: 0x04                                                                      
        Entry 0: LE Coded                                                               
          Type: Reserved (0x02)                                                         
          Interval: 13.750 msec (0x0016)                                                
          Window: 0.625 msec (0x0001)                                                   
> HCI Event: Command Complete (0x0e) plen 4                      #158 [hci0] 5271.619061
      LE Set Extended Scan Parameters (0x08|0x0041) ncmd 1                              
            Status: Unknown HCI Command (0x01)                                     


When debugging with GDB i could not send any breakpoints beyond this function call: https://github.com/zephyrproject-rtos/zephyr/blob/21358baa72cea9c23be57444eb91444774842f97/subsys/bluetooth/controller/hci/hci.c#L2235 - for some reason the debugger never stopped anywhere in  https://github.com/zephyrproject-rtos/zephyr/blob/21358baa72cea9c23be57444eb91444774842f97/subsys/bluetooth/controller/hci/hci.c#L1576 


When looking through hci_uart .hex features list I found nothing suspicious:

                                                                         
# BT_HCI_OP_READ_LOCAL_FEATURES           BT_OP(BT_OGF_INFO, 0x0003) 
$ hcitool cmd 04 03                                                          

< HCI Command: Read Local Supported Featu.. (0x04|0x0003) plen 0  #115 [hci0] 865.674540 
> HCI Event: Command Complete (0x0e) plen 12                      #116 [hci0] 865.675121 
      Read Local Supported Features (0x04|0x0003) ncmd 1                                 
        Status: Success (0x00)                                                           
        Features: 0x00 0x00 0x00 0x00 0x60 0x00 0x00 0x00                                
          BR/EDR Not Supported                                                           
          LE Supported (Controller)                                                      


# BT_HCI_OP_READ_SUPPORTED_COMMANDS       BT_OP(BT_OGF_INFO, 0x0002) 
$ hcitool cmd 04 02                                                          
 

< HCI Command: Read Local Supported Comma.. (0x04|0x0002) plen 0  #117 [hci0] 865.679037 
> HCI Event: Command Complete (0x0e) plen 68                      #118 [hci0] 865.680251 
      Read Local Supported Commands (0x04|0x0002) ncmd 1                                 
        Status: Success (0x00)                                                           
        Commands: 65 entries                                                             
          Disconnect (Octet 0 - Bit 5)                                                   
          Read Remote Version Information (Octet 2 - Bit 7)                              
          Set Event Mask (Octet 5 - Bit 6)                                               
          Reset (Octet 5 - Bit 7)                                                        
          Read Transmit Power Level (Octet 10 - Bit 2)                                   
          Set Controller To Host Flow Control (Octet 10 - Bit 5)                         
          Host Buffer Size (Octet 10 - Bit 6)                                            
          Host Number of Completed Packets (Octet 10 - Bit 7)                            
          Read Local Version Information (Octet 14 - Bit 3)                              
          Read Local Supported Features (Octet 14 - Bit 5)                               
          Read BD ADDR (Octet 15 - Bit 1)                                                
          Set Event Mask Page 2 (Octet 22 - Bit 2)                                       
          LE Set Event Mask (Octet 25 - Bit 0)                                           
          LE Read Buffer Size (Octet 25 - Bit 1)                                         
          LE Read Local Supported Features (Octet 25 - Bit 2)                            
          LE Set Random Address (Octet 25 - Bit 4)                                       
          LE Set Advertising Parameters (Octet 25 - Bit 5)                               
          LE Read Advertising Channel TX Power (Octet 25 - Bit 6)                        
          LE Set Advertising Data (Octet 25 - Bit 7)                                     
          LE Set Scan Response Data (Octet 26 - Bit 0)                                   
          LE Set Advertise Enable (Octet 26 - Bit 1)                                     
          LE Set Scan Parameters (Octet 26 - Bit 2)                                      
          LE Set Scan Enable (Octet 26 - Bit 3)                                          
          LE Create Connection (Octet 26 - Bit 4)                                        
          LE Create Connection Cancel (Octet 26 - Bit 5)                                 
          LE Read White List Size (Octet 26 - Bit 6)                                     
          LE Clear White List (Octet 26 - Bit 7)                                         
          LE Add Device To White List (Octet 27 - Bit 0)                                 
          LE Remove Device From White List (Octet 27 - Bit 1)                            
          LE Connection Update (Octet 27 - Bit 2)                                        
          LE Set Host Channel Classification (Octet 27 - Bit 3)                          
          LE Read Channel Map (Octet 27 - Bit 4)                                         
          LE Read Remote Used Features (Octet 27 - Bit 5)                                
          LE Encrypt (Octet 27 - Bit 6)                                                  
          LE Rand (Octet 27 - Bit 7)                                                     
          LE Start Encryption (Octet 28 - Bit 0)                                         
          LE Long Term Key Request Reply (Octet 28 - Bit 1)                              
          LE Long Term Key Request Neg Reply (Octet 28 - Bit 2)                          
          LE Read Supported States (Octet 28 - Bit 3)                                    
          LE Receiver Test (Octet 28 - Bit 4)                                            
          LE Transmitter Test (Octet 28 - Bit 5)                                         
          LE Test End (Octet 28 - Bit 6)                                                 
          Read Authenticated Payload Timeout (Octet 32 - Bit 4)                          
          Write Authenticated Payload Timeout (Octet 32 - Bit 5)                         
          LE Remote Connection Parameter Request Reply (Octet 33 - Bit 4)                
          LE Remote Connection Parameter Request Negative Reply (Octet 33 - Bit 5)       
          LE Set Data Length (Octet 33 - Bit 6)                                          
          LE Read Suggested Default Data Length (Octet 33 - Bit 7)                       
          LE Write Suggested Default Data Length (Octet 34 - Bit 0)                      
          LE Add Device To Resolving List (Octet 34 - Bit 3)                             
          LE Remove Device From Resolving List (Octet 34 - Bit 4)                        
          LE Clear Resolving List (Octet 34 - Bit 5)                                     
          LE Read Resolving List Size (Octet 34 - Bit 6)                                 
          LE Read Peer Resolvable Address (Octet 34 - Bit 7)                             
          LE Read Local Resolvable Address (Octet 35 - Bit 0)                            
          LE Set Address Resolution Enable (Octet 35 - Bit 1)                            
          LE Set Resolvable Private Address Timeout (Octet 35 - Bit 2)                   
          LE Read Maximum Data Length (Octet 35 - Bit 3)                                 
          LE Read PHY (Octet 35 - Bit 4)                                                 
          LE Set Default PHY (Octet 35 - Bit 5)                                          
          LE Set PHY (Octet 35 - Bit 6)                                                  
          LE Enhanced Receiver Test (Octet 35 - Bit 7)                                   
          LE Enhanced Transmitter Test (Octet 36 - Bit 0)                                
          LE Read Transmit Power (Octet 38 - Bit 7)                                      
          LE Set Privacy Mode (Octet 39 - Bit 2)                                         


# BT_HCI_OP_READ_LOCAL_EXT_FEATURES       BT_OP(BT_OGF_INFO, 0x0004) 
$ hcitool cmd 04 04                                                          

< HCI Command: Read Local Extended Features (0x04|0x0004) plen 0  #119 [hci0] 865.683100 
        invalid packet size                                                              
> HCI Event: Command Complete (0x0e) plen 4                       #120 [hci0] 865.684035 
      Read Local Extended Features (0x04|0x0004) ncmd 1                                  
        Status: Unknown HCI Command (0x01)                                               





I've wen't over ninja menuconfig options and all config options seem to be set correctly to enable BLE PHY changes, Bluez 5.50 doesn't seem to be the problem because it just passes the bytes back and forth so what else could be the key to enable BLE PHY CODED scanning and advertising in HCI UART example?


------
Update after more attempts.

I've tried this multiple times but can't get to PHY CODED BLE scanning or even any result when trying to change the radio settings. 
I'm on the master branch of Zephyr and Bluez, kernel 4.15 and nRF52840 running hci_uart example also from Zephyr master branch.
Even the btmgmt "phy" command fails when trying to do anything around coding:

@ MGMT Command: Set PHY Configuration (0x0045) plen 4    
        Selected PHYs: 0x6000
          LE CODED TX
          LE CODED RX
@ MGMT Event: Command Status (0x0002) plen 3             
      Set PHY Configuration (0x0045)
        Status: Unknown Command (0x01)


Config for the project is also in line with what I've found in this mailing list:

CONFIG_CONSOLE=n
CONFIG_STDOUT_CONSOLE=n
CONFIG_UART_CONSOLE=n
CONFIG_GPIO=y
CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_UART_0_NRF_FLOW_CONTROL=y
CONFIG_MAIN_STACK_SIZE=512
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512
CONFIG_BT=y
CONFIG_BT_HCI_RAW=y
CONFIG_BT_MAX_CONN=16
CONFIG_BT_TINYCRYPT_ECC=n
CONFIG_BT_CTLR_DTM_HCI=y
CONFIG_BT_CTLR_ASSERT_HANDLER=y
 
CONFIG_BT_CONN=y
CONFIG_BT_CTLR_PHY=y
CONFIG_BT_CTLR_PHY_CODED=y
CONFIG_BT_PHY_UPDATE=y
CONFIG_BT_AUTO_PHY_UPDATE=y
CONFIG_BT_CTLR_TX_BUFFER_SIZE=251
CONFIG_BT_RX_BUF_LEN=258
CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
 

Has anyone ever made this work?

Join users@lists.zephyrproject.org to automatically receive all group messages.