pynrfjprog 10.15.4 fails with -254 INTERNAL_ERROR

I am so happy the latest command line tools finally support the Apple M1 chip natively. Thanks again!

Now I was updating our production scripts to python3 and the latest pynrfjprog too, but it kept failing,

So I checked if the examples work, and the LowLevel ones failed very early on:

Python 3.9.7 (default, Oct 12 2021, 22:38:23) 
[Clang 13.0.0 (clang-1300.0.29.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from pynrfjprog import LowLevel
>>> api = LowLevel.API('NRF52')
>>> api.open()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/homebrew/lib/python3.9/site-packages/pynrfjprog/LowLevel.py", line 185, in open
    raise APIError(result, error_data=self.get_errors())
pynrfjprog.APIError.APIError: An error was reported by NRFJPROG DLL: -254 INTERNAL_ERROR.

However HighLevel seems to work well:

from pynrfjprog import HighLevel

api = HighLevel.API('NRF52')
snrs = api.get_connected_probes()
print(snrs)

[81480416]

Any ideas? 

By the way, your documentation here needs to be updated: infocenter 

The fourth line fails:

from pynrfjprog import HighLevel
api = HighLevel.API(‘NRF52’)
api.open()
api.connect_to_emu_without_snr()

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'API' object has no attribute 'connect_to_emu_without_snr'

I assume that was supposed to be a LowLevel.API() example?

Parents
  • Update: I read another similar thread with the recommendation to downgrade to 10.15.0.

    I was hesitant to try given 10.15.4 natively supports M1 now, but it seems to work!
    I would have thought you'd fix something like this with a version bump ;-) 

    Does pynrfjprog actually package a nrfjprog binary, or does it find the installed command line tool and wrap that?

  • Hello,

    That is unfortunate - I will forward this information to our nrfjprog developers, thanks for letting us know! :)

    thefool said:
    Does pynrfjprog actually package a nrfjprog binary, or does it find the installed command line tool and wrap that?

    It is strictly a wrapper for the Segger JLink nrfjprog dynamic link libraries, which it depends on to handle the low level communication with the device.
    The pynrfjprog does indeed bundle binaries in the pip-package.

    Best regards,
    Karl

  • Thanks!

    It is strictly a wrapper for the Segger JLink nrfjprog dynamic link libraries, which it depends on to handle the low level communication with the device.

    Excellent. Then installing nRF Command line tools 10.15.4 and pynrfjprog 10.15.0 is still a good workaround that works on the M1 natively ;-) 

    pip install pynrfjprog==10.15.0

    for anyone else reading this.

  • Hello thefool,

    After looking into this some more it seems my previous comment was not correct - pynrfjprog does bundle binaries in the pip-package, I have amended my previous comment.
    Could it be that your jlinkarm_nrf_worker was not correctly marked as an executable in the package you received? The error suggests it, but I am not certain how/why this would be the case.

    Best regards,
    Karl

  • It looks like I have three of these workers on my Mac:

    /Applications/Nordic\ Semiconductor/bin/jlinkarm_nrf_worker_osx 

    /Applications/Nordic\ Semiconductor/python/pynrfjprog/lib_x64/jlinkarm_nrf_worker_osx

    /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_x64/jlinkarm_nrf_worker_osx

    and indeed, the last one does not have a executable permission:

     ls -ll /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_x64/            
    total 63632
    -rw-r--r--  1 root  admin       20 Mar 15 21:31 __init__.py
    drwxr-xr-x  3 root  admin       96 Mar 15 21:31 __pycache__
    -rw-r--r--  1 root  admin   604888 Mar 15 21:31 highlevelnrfjprog.dll
    -rw-r--r--  1 root  admin  1412352 Mar 15 21:31 jlinkarm_nrf_worker.exe
    -rw-r--r--  1 root  admin  6795704 Mar 15 21:31 jlinkarm_nrf_worker_linux
    -rw-r--r--  1 root  admin  4800720 Mar 15 21:31 jlinkarm_nrf_worker_osx
    -rw-r--r--  1 root  admin  2232816 Mar 15 21:31 libhighlevelnrfjprog.dylib
    -rw-r--r--  1 root  admin  2569976 Mar 15 21:31 libhighlevelnrfjprog.so
    -rw-r--r--  1 root  admin  5308592 Mar 15 21:31 libnrfjprogdll.dylib
    -rw-r--r--  1 root  admin  7258176 Mar 15 21:31 libnrfjprogdll.so
    -rw-r--r--  1 root  admin  1565400 Mar 15 21:31 nrfjprog.dll


    what's also interesting is that in the folders for the other architectures, there's no _osx version of the file:

    % ls -ll /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_x86 
    total 6056
    -rw-r--r--  1 root  admin       20 Mar 15 21:31 __init__.py
    drwxr-xr-x  3 root  admin       96 Mar 15 21:31 __pycache__
    -rw-r--r--  1 root  admin   509144 Mar 15 21:31 highlevelnrfjprog.dll
    -rw-r--r--  1 root  admin  1191168 Mar 15 21:31 jlinkarm_nrf_worker.exe
    -rw-r--r--  1 root  admin  1392344 Mar 15 21:31 nrfjprog.dll
    
    % ls -ll /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_arm64 
    total 30800
    -rw-r--r--  1 root  admin       16 Mar 15 21:31 __init__.py
    drwxr-xr-x  3 root  admin       96 Mar 15 21:31 __pycache__
    -rw-r--r--  1 root  admin  6325840 Mar 15 21:31 jlinkarm_nrf_worker_linux
    -rw-r--r--  1 root  admin  2649608 Mar 15 21:31 libhighlevelnrfjprog.so
    -rw-r--r--  1 root  admin  6785056 Mar 15 21:31 libnrfjprogdll.so
    
    % ls -ll /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_armhf 
    total 21968
    -rw-r--r--  1 root  admin       16 Mar 15 21:31 __init__.py
    drwxr-xr-x  3 root  admin       96 Mar 15 21:31 __pycache__
    -rw-r--r--  1 root  admin  4467304 Mar 15 21:31 jlinkarm_nrf_worker_linux
    -rw-r--r--  1 root  admin  1946312 Mar 15 21:31 libhighlevelnrfjprog.so
    -rw-r--r--  1 root  admin  4824504 Mar 15 21:31 libnrfjprogdll.so

    is there a universal binary in the lib_x86 folder?

    I just installed 10.15.0 again and lo and behold:

    ls -ll /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_x64/ 
    total 216720
    -rw-r--r--  1 root  admin       20 Mar 16 11:17 __init__.py
    drwxr-xr-x  3 root  admin       96 Mar 16 11:18 __pycache__
    -rw-r--r--  1 root  admin   604376 Mar 16 11:17 highlevelnrfjprog.dll
    -rw-r--r--  1 root  admin  1560792 Mar 16 11:17 jlinkarm_nrf51_nrfjprog.dll
    -rw-r--r--  1 root  admin  1559768 Mar 16 11:17 jlinkarm_nrf52_nrfjprog.dll
    -rw-r--r--  1 root  admin  1559768 Mar 16 11:17 jlinkarm_nrf53_nrfjprog.dll
    -rw-r--r--  1 root  admin  1560280 Mar 16 11:17 jlinkarm_nrf91_nrfjprog.dll
    -rw-r--r--  1 root  admin  1402112 Mar 16 11:17 jlinkarm_nrf_worker.exe
    -rwxr-xr-x  1 root  admin  6885016 Mar 16 11:17 jlinkarm_nrf_worker_linux
    -rwxr-xr-x  1 root  admin  4732656 Mar 16 11:17 jlinkarm_nrf_worker_osx
    -rw-r--r--  1 root  admin  1560792 Mar 16 11:17 jlinkarm_unknown_nrfjprog.dll
    -rwxr-xr-x  1 root  admin  2232816 Mar 16 11:17 libhighlevelnrfjprog.dylib
    -rw-r--r--  1 root  admin  2624096 Mar 16 11:17 libhighlevelnrfjprog.so
    -rwxr-xr-x  1 root  admin  4745632 Mar 16 11:17 libjlinkarm_nrf51_nrfjprogdll.dylib
    -rw-r--r--  1 root  admin  7219520 Mar 16 11:17 libjlinkarm_nrf51_nrfjprogdll.so
    -rwxr-xr-x  1 root  admin  4781760 Mar 16 11:17 libjlinkarm_nrf52_nrfjprogdll.dylib
    -rw-r--r--  1 root  admin  7219520 Mar 16 11:17 libjlinkarm_nrf52_nrfjprogdll.so
    -rwxr-xr-x  1 root  admin  4799392 Mar 16 11:17 libjlinkarm_nrf53_nrfjprogdll.dylib
    -rw-r--r--  1 root  admin  7219520 Mar 16 11:17 libjlinkarm_nrf53_nrfjprogdll.so
    -rwxr-xr-x  1 root  admin  4883408 Mar 16 11:17 libjlinkarm_nrf91_nrfjprogdll.dylib
    -rw-r--r--  1 root  admin  7215424 Mar 16 11:17 libjlinkarm_nrf91_nrfjprogdll.so
    -rwxr-xr-x  1 root  admin  4677440 Mar 16 11:18 libjlinkarm_unknown_nrfjprogdll.dylib
    -rw-r--r--  1 root  admin  7246120 Mar 16 11:18 libjlinkarm_unknown_nrfjprogdll.so
    -rwxr-xr-x  1 root  admin  3380992 Mar 16 11:18 libnrfdfu.dylib
    -rw-r--r--  1 root  admin  6146424 Mar 16 11:18 libnrfdfu.so
    -rwxr-xr-x  1 root  admin  5274848 Mar 16 11:18 libnrfjprogdll.dylib
    -rw-r--r--  1 root  admin  7312512 Mar 16 11:18 libnrfjprogdll.so
    -rw-r--r--  1 root  admin   938200 Mar 16 11:18 nrfdfu.dll
    -rw-r--r--  1 root  admin  1560280 Mar 16 11:18 nrfjprog.dll
    
    % ls -ll /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_x86 
    total 21208
    -rw-r--r--  1 root  admin       20 Mar 16 11:18 __init__.py
    drwxr-xr-x  3 root  admin       96 Mar 16 11:18 __pycache__
    -rw-r--r--  1 root  admin   508632 Mar 16 11:18 highlevelnrfjprog.dll
    -rw-r--r--  1 root  admin  1392344 Mar 16 11:18 jlinkarm_nrf51_nrfjprog.dll
    -rw-r--r--  1 root  admin  1391832 Mar 16 11:18 jlinkarm_nrf52_nrfjprog.dll
    -rw-r--r--  1 root  admin  1391320 Mar 16 11:18 jlinkarm_nrf53_nrfjprog.dll
    -rw-r--r--  1 root  admin  1391832 Mar 16 11:18 jlinkarm_nrf91_nrfjprog.dll
    -rw-r--r--  1 root  admin  1185536 Mar 16 11:18 jlinkarm_nrf_worker.exe
    -rw-r--r--  1 root  admin  1392344 Mar 16 11:18 jlinkarm_unknown_nrfjprog.dll
    -rw-r--r--  1 root  admin   795352 Mar 16 11:18 nrfdfu.dll
    -rw-r--r--  1 root  admin  1391832 Mar 16 11:18 nrfjprog.dll

    and there is no lib_arm64 or lib_armhf folders

    is that difference expected?

    also: 10.15.0 seems to be a universal binary already, if I'm checking correctly:

    otool -h /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_x64/jlinkarm_nrf_worker_osx 
    /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_x64/jlinkarm_nrf_worker_osx (architecture x86_64):
    Mach header
          magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
     0xfeedfacf 16777223          3  0x00           2    20       2344 0x00a18085
    /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_x64/jlinkarm_nrf_worker_osx (architecture arm64):
    Mach header
          magic  cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
     0xfeedfacf 16777228          0  0x00           2    20       2424 0x00a18085
    


    Nonetheless, is there something I can/should try with 10.15.4? Or will you need to update the package?

  • OK, I was able to verify your suspicion:

    sudo chmod +x /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_x64/*.dylib 
    sudo chmod +x /opt/homebrew/lib/python3.9/site-packages/pynrfjprog/lib_x64/jlinkarm_nrf_worker*

    fixed the issue and 10.15.4 now works. I guess you can rebuild the pip package with update permissions ;-) 

    Thanks again for following up! 

  • Hello again,

    thefool said:
    fixed the issue and 10.15.4 now works. I guess you can rebuild the pip package with update permissions ;-)

    Great, I am glad to hear that this resolved the issue, and that it is now working as expected!
    I have updated the internal ticket so that the team can look into how this happened in the first place.

    Thank you for updating us! :) 

    Best regards,
    Karl

Reply Children
No Data
Related