Ubuntu 16.04 데스크탑 버전을 설치하고 쉘스크립트를 바탕화면에 단축아이콘으로 만들어 놓으면 더블클릭으로 실행이 안되고 vim은 편집기로 보기 모드로 뜬다.


이럴때는 우분투의 탐색기 같은 Files를 실행하고 메뉴의 Edit->Preference에서
Behavior탭에서 Run executable text files when they are opened로 선택한다.


nRF51을 리눅스에서 프로그래밍 하기 위해서는 nrfjprog를 리눅스 버전으로 설치한다.


nordic사이트에서 nRF5x-Command-Line-Tools_9_0_0_Linux-x86_64.tar 를 다운로드 받아서 압축을 해제한다.


nrf_linux_tool$ tar xf nRF5x-Command-Line-Tools_9_0_0_Linux-x86_64.tar
simon@simon-desktop:nrf_linux_tool$ cd nrfjprog/
simon@simon-desktop:nrfjprog$ ls
DllCommonDefinitions.h                  libnrfjprogdll.so.9.0.0
libjlinkarm_nrf51_nrfjprogdll.so        nrf51_nrfjprogdll.h
libjlinkarm_nrf51_nrfjprogdll.so.9      nrf52_nrfjprogdll.h
libjlinkarm_nrf51_nrfjprogdll.so.9.0.0  nrfjprog
libjlinkarm_nrf52_nrfjprogdll.so        nrfjprogdll.h
libjlinkarm_nrf52_nrfjprogdll.so.9      nrfjprog.h
libjlinkarm_nrf52_nrfjprogdll.so.9.0.0  nrfjprog.ini
libnrfjprogdll.so                       nrfjprog_release_notes.txt
libnrfjprogdll.so.9
simon@simon-desktop:nrfjprog$ ./nrfjprog

Usage:
-------------------------------------------------------------------------------

 -q  --quiet                 Reduces the stdout info. Must be combined with
                             another command.

 -h  --help                  Displays this help.
....이렇게 쭈욱 설명이 나온다.


버전을 확인해볼려고 하면..

simon@simon-desktop:nrfjprog$ ./nrfjprog --version
ERROR: JLinkARM DLL not found. Please reinstall latest JLinkARM.
simon@simon-desktop:nrfjprog$


오마이갓...뭔가 설치해야 하나보다. 찾아보니 아래 J-link사이트에서 다운받아서 설치한다.


https://www.segger.com/downloads/jlink



위에 보면 J-Link Software and documentation pack for Linux, DEB Installer라고 있는데 OS에 맞게 설치하면 된다.


simon@simon-desktop:Downloads$ sudo dpkg -i jlink_6.0.3_x86_64.deb

~~~

/opt/SEGGER/JLink에 해당 소프트웨어가 설치되면 된다.


그리고 나서 버전을 확인해본다.

simon@simon-desktop:Downloads$ nrfjprog --version
nrfjprog version: 9.0.0
JLinkARM.dll version: 6.00c


오늘 오랜만에 nRF51822의 부트로더 개발을 다시 하게 되었다.

그런데 젠장 인간의 두뇌는 역시 한계가 있나보다 2년전에 분명히 잘되었던 것 같은데

SDK에서 부트로더 예제를 컴파일하고 플래시에 다운로드하니까 신호도 안뜨네 ^^;;


몇 시간 삽질 한 끝에 내가 만든 Custom PCB는 32khz 크리스탈이 없다. 기본적으로 SDK는 하드웨어에 32khz 크리스탈이 있다고 보고 만들었다. 만약 제품 개발을 위해 만든 nRF51822 보드에서 신호조차 뜨지 않는다면 아래 코드를 체크해야 한다.

이 부분에서 맨날 까먹고 고생한다. ㅎㅎㅎ


main.c에서


static void ble_stack_init(bool init_softdevice){...} 라는 함수가 있는데 BLE 스택을 초기화한다. 여기에서 아래처럼 32khz 크리스탈을 초기화 한다. 기본적으로 외부에 달려있는 크리스탈을 초기화 하도록 되어 있다.


    SOFTDEVICE_HANDLER_APPSH_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, true);


 이것을 칩 내부 RC 오실레이터로 변경한다. 적당히 Calibration 구간을 선택한다. 타이밍 이슈만 없다면 아래 플래그로 세팅하면 정상적으로 BLE 신호가 뜬다.
        SOFTDEVICE_HANDLER_APPSH_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_8000MS_CALIBRATION,true);


그리고 나서 빌드 후 테스트를 하는데 또 문제가 발생했다. 이번엔 플래시 다운로드에서 문제 였다.

부트로더는 Keil 개발환경 자체의 다운로드 방식을 사용하지 않고 외부 nrfjprog.exe를 사용해서 다운로드 하도록 되어 있다. 


그런데 잘 안된다. success라고 떴는데도 안되네...보드를 on/off해도 안되어서 사용법을 찾아 봤다.


그냥 리눅스 처럼 콘솔을 열어서 바이너리 경로로 찾아가서 직접 커맨드를 사용한다.


먼저 소프트디바이스를 플래시 다운로드한다. 이 때 칩을 모두 지우고 프로그래밍하도록 --chiperase를 한다.


nrfjprog.exe --family NRF51 --program s110_nrf51_8.0.0_softdevice.hex --chiperase --verify


부트로더를 다운로드한다.

nrfjprog.exe --family NRF51 --program bootloader.hex --verify


리셋한다. 리셋을 안하면 동작하지 않는다.


nrfjprog.exe --family NRF51 --reset


아래 포럼을 참고했다.

https://devzone.nordicsemi.com/question/56373/flashing-softdevice-with-the-latest-nrfjprog/



+ Recent posts