This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

JLink Fails to Connect using nrfjprog inside Windows Subsystem Linux 2

Hello,

I'm unable to flash code to my nRF52840 board with my JLink Edu debugger after my project builds.  Currently I have my development environment setup with VS Code + nRF Connect running on Windows 10, but all the libraries, toolchains etc. exist remotely on my Ubuntu WSL2 machine.  I recently added USB support to WSL2 so I can attach my JLink debugger and FTDI USB to Serial converter to Ubuntu.  When I run lsusb in Ubuntu I can see the devices show up in the terminal so I know they are being attached correctly.  Furthermore, I've setup a serial port and read data from the FTDI cable no problem, and when I open the nRF Connect extension, I can see the debugger as a connected device (board # shows up).  My issue is when I try to flash code using the attached JLink debugger I receive the following errors (log.log):


[2021-Dec-12 21:21:09] [ info] nrfjprog version 10.15.1 external
[2021-Dec-12 21:21:09] [ info] --------------------------------------------------------------------------------
[2021-Dec-12 21:21:09] [ info] Load library at /opt/nrf-command-line-tools/lib/libnrfjprogdll.so.
[2021-Dec-12 21:21:09] [ info] Library loaded, loading member functions.
[2021-Dec-12 21:21:09] [ info] Member functions succesfully loaded.
[2021-Dec-12 21:21:09] [debug] [ Client] - open
[2021-Dec-12 21:21:09] [debug] [ Client] - start
[2021-Dec-12 21:21:09] [ info] [ Client] - stdout: Jlinkarm nRF Worker ready. Handling sequence 529d65ce-a142-4335-b4c7-d6a35f60030e.
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - Logger sink registered in Segger backend logger
[2021-Dec-12 21:21:09] [debug] [  JLink] - Logger sink registered in JLink logger
[2021-Dec-12 21:21:09] [debug] [  nRF52] - open
[2021-Dec-12 21:21:09] [debug] [  nRF52] - just_check_family
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - open_dll
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - No J-Link DLL path was provided. Attempting to auto detect.
[2021-Dec-12 21:21:09] [ info] [SeggerBackend] - Load library at /opt/SEGGER/JLink/libjlinkarm.so.7.
[2021-Dec-12 21:21:09] [trace] [ Client] - Command open executed for 34 milliseconds with result 0
[2021-Dec-12 21:21:09] [debug] [ Client] - enum_emu_snr
[2021-Dec-12 21:21:09] [ info] [SeggerBackend] - Library loaded, loading member functions.
[2021-Dec-12 21:21:09] [ info] [SeggerBackend] - Member functions succesfully loaded.
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - dll_version
[2021-Dec-12 21:21:09] [ info] [SeggerBackend] - Segger dll version 7.58.e loaded.
[2021-Dec-12 21:21:09] [trace] [ Worker] - Command open executed for 33 milliseconds with result 0
[2021-Dec-12 21:21:09] [debug] [  nRF52] - enum_emu_con_info
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - is_connected_to_emu
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - enum_emu_con_info
[2021-Dec-12 21:21:09] [trace] [ Client] - Command enum_emu_con_info executed for 23 milliseconds with result 0
[2021-Dec-12 21:21:09] [debug] [ Client] - connect_to_emu_with_snr
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - is_connected_to_emu
[2021-Dec-12 21:21:09] [trace] [ Worker] - Command enum_emu_con_info executed for 22 milliseconds with result 0
[2021-Dec-12 21:21:09] [debug] [  nRF52] - connect_to_emu_with_snr
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - is_connected_to_emu
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - connect_to_emu_with_snr
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - is_connected_to_emu
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - ---just_enum_emu_snr
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - ---just_get_num_emus
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - ---just_connect_to_emu_with_snr
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - ---just_connect_to_emu_without_snr
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - Segger logging enabled.
[2021-Dec-12 21:21:09] [trace] [ Client] - Command connect_to_emu_with_snr executed for 84 milliseconds with result -102
[2021-Dec-12 21:21:09] [trace] [  JLink] -    ***** Error: 
[2021-Dec-12 21:21:09] [trace] [  JLink] - Cannot connect to J-Link.
[2021-Dec-12 21:21:09] [trace] [  JLink] - - 12.898ms returns "Cannot connect to J-Link."  
[2021-Dec-12 21:21:09] [trace] [  JLink] - JLINK_HasError()  
[2021-Dec-12 21:21:09] [error] [SeggerBackend] - JLinkARM.dll Open returned error 'Cannot connect to J-Link.'
[2021-Dec-12 21:21:09] [trace] [  JLink] - JLINK_OpenEx(...)  
[2021-Dec-12 21:21:09] [trace] [  JLink] - - 0.057ms returns "Failed to open DLL"  
[2021-Dec-12 21:21:09] [trace] [  JLink] - JLINK_HasError()  
[2021-Dec-12 21:21:09] [error] [SeggerBackend] - JLinkARM.dll Open returned error 'Failed to open DLL'
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - is_connected_to_emu
[2021-Dec-12 21:21:09] [trace] [  JLink] - JLINK_IsOpen()  
[2021-Dec-12 21:21:09] [trace] [  JLink] - - 0.004ms returns 0x00  
[2021-Dec-12 21:21:09] [trace] [  JLink] - JLINK_HasError()  
[2021-Dec-12 21:21:09] [trace] [ Worker] - Command connect_to_emu_with_snr executed for 84 milliseconds with result -102
[2021-Dec-12 21:21:09] [debug] [  nRF52] - close
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - is_connected_to_emu
[2021-Dec-12 21:21:09] [trace] [  JLink] - JLINK_IsOpen()  
[2021-Dec-12 21:21:09] [trace] [  JLink] - - 0.008ms returns 0x00  
[2021-Dec-12 21:21:09] [trace] [  JLink] - JLINK_HasError()  
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - close
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - disconnect_from_emu
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - is_connected_to_emu
[2021-Dec-12 21:21:09] [trace] [  JLink] - JLINK_IsOpen()  
[2021-Dec-12 21:21:09] [trace] [  JLink] - - 0.004ms returns 0x00  
[2021-Dec-12 21:21:09] [trace] [  JLink] - JLINK_HasError()  
[2021-Dec-12 21:21:09] [debug] [SeggerBackend] - Segger Backend closed.
[2021-Dec-12 21:21:09] [debug] [  nRF52] - nRF family DLL closed
[2021-Dec-12 21:21:09] [trace] [ Client] - Command close executed for 10 milliseconds with result 0
[2021-Dec-12 21:21:09] [debug] [ Client] - terminate
[2021-Dec-12 21:21:09] [trace] [ Client] - Command terminate executed for 0 milliseconds with result 0
[2021-Dec-12 21:21:09] [trace] [ Worker] - Command close executed for 10 milliseconds with result 0
[2021-Dec-12 21:21:09] [trace] [ Worker] - Command terminate executed for 0 milliseconds with result 0
[2021-Dec-12 21:21:09] [trace] [ Worker] - Executed 5 commands for 149 milliseconds
[2021-Dec-12 21:21:09] [debug] [ Client] - Worker process exited with code: 0
[2021-Dec-12 21:21:09] [debug] [ Client] - Worker process exited with code: 0
[2021-Dec-12 21:21:09] [debug] [ Client] - Tried to wait on already ended process: wait error: No child processes
[2021-Dec-12 21:21:09] [debug] [ Client] - Child process terminated with result 0
[2021-Dec-12 21:21:09] [trace] [ Client] - Executed 5 commands for 151 milliseconds
[2021-Dec-12 21:21:09] [debug] [ Client] - terminate

I know the hardware setup and debugger is good, since I can switch to Windows and flash without a hitch.  Furthermore, I've spoken to other developers using WSL2 and JLink debuggers and they've had the exact same problem.  Others using STLink for example have been able to flash code to ST parts no problem from WSL2.  This may be more of a segger issue, but any ideas on what could be happening?

Cheers,

Parker

Related