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?

  • Hi,

    ds755 said:
    Any ideas?

    I tried to reproduce the error shown in your previous reply, but I was not successful in doing that. There must be something that we are doing differently. Could you provide all necessary steps (detailed instructions) for reproducing the issue?

    Best regards,
    Dejan

Reply Children
Related