NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE error when trying to connect via Bluetooth using the bt_nus_shell.py script on Windows

Hello everyone,

I am having trouble using the bt_nus_shell.py script and a NRF52840 development board to send shell commands. I am trying to follow the instructions mentioned here. I reverted to an older version of Python (3.7) because the BLE driver (pc-ble-driver-py) will not work with a new Python version. Right now I have installed pc-ble-driver-py v0.17.0, as well as all the dependencies of the bt_nus_shell.py script by typing:

pip install --user -r scripts/shell/requirements.txt

The issues start after I connect the NRF52840 development board to my PC. I connect it and then type the following command to run the script:

python bt_nus_shell.py --name BT_NUS_shell --com COM237 --family NRF52 --snr 1050278085

I get the following message:

PS C:\ncs\v2.3.0\nrf\scripts\shell> python bt_nus_shell.py --name BT_NUS_shell --com COM237 --family NRF52 --snr 1050278085
Flashing connectivity firmware...
Connectivity firmware flashed.
Socket created
Socket bind complete
Socket now listening

Then I open Putty, set the Connection Type to Raw and the Destination Address to 127.0.0.1:8889. Then I get the following error:

Starting BLESerial failed. Error: Failed to open. Error code: NRF_ERROR_SD_RPC_H5_TRANSPORT_STATE
SOCKET CLOSED

This is my problem and I do not know how to get past this error.

While looking online for a possible solution, I found a forum topic that suggested to disable the mass storage class on J-Link. So, I opened the J-Link commander app and connected to the nRF52840 development board (Device: NRF52, Interface: SWD, Speed: 4000). I typed "MSDDisable" and the J-Link app responded that the command was accepted. However, when I power-cycled the development board, and tried to run the python script again, I got this error:

PS C:\ncs\v2.3.0\nrf\scripts\shell> python bt_nus_shell.py --name BT_NUS_shell --com COM237 --family NRF52 --snr 1050278085
Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Roaming\Python\Python37\site-packages\pc_ble_driver_py\ble_driver.py", line 3207, in call_cmd
    return subprocess.check_output(argstr, stderr=subprocess.STDOUT, shell=True)
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.7.9\lib\subprocess.py", line 411, in check_output
    **kwargs).stdout
  File "C:\Users\Administrator\.pyenv\pyenv-win\versions\3.7.9\lib\subprocess.py", line 512, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command 'nrfjprog --snr 1050278085 --memrd 327680 --w 8 --n 24 --family nrf52' returned non-zero exit status 16.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "bt_nus_shell.py", line 222, in <module>
    flash_connectivity(args.com[0], args.snr[0])
  File "bt_nus_shell.py", line 173, in flash_connectivity
    if flasher.fw_check():
  File "C:\Users\Administrator\AppData\Roaming\Python\Python37\site-packages\pc_ble_driver_py\ble_driver.py", line 3160, in fw_check
    fw_struct = Flasher.parse_fw_struct(self.read_fw_struct())
  File "C:\Users\Administrator\AppData\Roaming\Python\Python37\site-packages\pc_ble_driver_py\ble_driver.py", line 3183, in read_fw_struct
    data = self.call_cmd(args)
  File "C:\Users\Administrator\AppData\Roaming\Python\Python37\site-packages\wrapt\decorators.py", line 470, in _synchronized
    return wrapped(*args, **kwargs)
  File "C:\Users\Administrator\AppData\Roaming\Python\Python37\site-packages\pc_ble_driver_py\ble_driver.py", line 3212, in call_cmd
    raise RuntimeError(f"{e.__str__()}\n{e.output}")
RuntimeError: Command 'nrfjprog --snr 1050278085 --memrd 327680 --w 8 --n 24 --family nrf52' returned non-zero exit status 16.
b"[error] [ Client] - Encountered error -90: Command read_device_info executed for 15 milliseconds with result -90\r\n[error] [ Worker] - Access protection is enabled, can't read device version.\r\n[error] [ Client] - Encountered error -90: Command read_memory_descriptors executed for 15 milliseconds with result -90\r\n[error] [ Worker] - Can't read memory descriptors, ap-protection is enabled.\r\n[error] [ Client] - Encountered error -90: Command read executed for 370 milliseconds with result -90\r\n[error] [ Worker] - Access protection is enabled, can't access memory.\r\nERROR: The operation attempted is unavailable due to readback protection in\r\nERROR: your device. Please use --recover to unlock the device.\r\nNOTE: For additional output, try running again with logging enabled (--log).\r\nNOTE: Any generated log error messages will be displayed.\r\n"

As suggested by the error message, I ran:

nrfjprog --snr 1050278085 --memrd 327680 --w 8 --n 24 --family nrf52

Which suggests to run:

nrfjprog --snr 1050278085 --recover

The latter command re-establishes communication with the development board but negates the effects of "MSDDisable". So, I'm back where I started.

Any ideas? I am a beginner in development so any help will be appreciated.

Parents
  • Hi,

    Are you sure that you have J-Link still connected to the device when you ran the script?
    Have you checked that you use proper COM port and serial number in your "python bt_nus_shell.py" command?

    Best regards,
    Dejan

  • Hi Dejan,

    I wasn't aware that I had to leave the J-Link connected to the development board while trying to connect. The guide mentions that we're supposed to power cycle the board. Maybe the guide needs an update.

    In any case, I have made some improvements and see a different error now.

    I connected the development board to my PC and checked the COM ports using the device manager. I saw two COM ports (COM7, COM8) assigned to the development board.

    So, then I ran the python script with COM7:

    python bt_nus_shell.py --name BT_NUS_shell --com COM7 --family NRF52 --snr 1050278085

    Then I opened the J-Link commander app, connected, and typed "MSDDisable". I kept the app open and did not power-cycle the development board.

    Then I opened Putty and tried to connect. This time I saw the following error:

    Successfully opened COM7. Baud rate: 1000000. Flow control: none. Parity: none.
    
    BLE: ble_enable with local ATT MTU: 247
    BLE: Scanning...
    ad_len is zero, discarding rest of ad_list
    ad_len is zero, discarding rest of ad_list
    ad_len is zero, discarding rest of ad_list
    ad_len is zero, discarding rest of ad_list
    ad_len is zero, discarding rest of ad_list
    ad_len is zero, discarding rest of ad_list
    Starting BLESerial failed. Error: Timeout. Target device not found.
    SOCKET CLOSED

    I also tried with COM8 and got the following error:

    Successfully opened COM8. Baud rate: 1000000. Flow control: none. Parity: none.
    Starting BLESerial failed. Error: Failed to open. Error code: NRF_ERROR_TIMEOUT
    SOCKET CLOSED

    Any ideas?

Reply
  • Hi Dejan,

    I wasn't aware that I had to leave the J-Link connected to the development board while trying to connect. The guide mentions that we're supposed to power cycle the board. Maybe the guide needs an update.

    In any case, I have made some improvements and see a different error now.

    I connected the development board to my PC and checked the COM ports using the device manager. I saw two COM ports (COM7, COM8) assigned to the development board.

    So, then I ran the python script with COM7:

    python bt_nus_shell.py --name BT_NUS_shell --com COM7 --family NRF52 --snr 1050278085

    Then I opened the J-Link commander app, connected, and typed "MSDDisable". I kept the app open and did not power-cycle the development board.

    Then I opened Putty and tried to connect. This time I saw the following error:

    Successfully opened COM7. Baud rate: 1000000. Flow control: none. Parity: none.
    
    BLE: ble_enable with local ATT MTU: 247
    BLE: Scanning...
    ad_len is zero, discarding rest of ad_list
    ad_len is zero, discarding rest of ad_list
    ad_len is zero, discarding rest of ad_list
    ad_len is zero, discarding rest of ad_list
    ad_len is zero, discarding rest of ad_list
    ad_len is zero, discarding rest of ad_list
    Starting BLESerial failed. Error: Timeout. Target device not found.
    SOCKET CLOSED

    I also tried with COM8 and got the following error:

    Successfully opened COM8. Baud rate: 1000000. Flow control: none. Parity: none.
    Starting BLESerial failed. Error: Failed to open. Error code: NRF_ERROR_TIMEOUT
    SOCKET CLOSED

    Any ideas?

Children
No Data
Related