Ubuntu 16.04 데스크탑 버전을 설치하고 쉘스크립트를 바탕화면에 단축아이콘으로 만들어 놓으면 더블클릭으로 실행이 안되고 vim은 편집기로 보기 모드로 뜬다.
이럴때는 우분투의 탐색기 같은 Files를 실행하고 메뉴의 Edit->Preference에서
Behavior탭에서 Run executable text files when they are opened로 선택한다.
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);
그리고 나서 빌드 후 테스트를 하는데 또 문제가 발생했다. 이번엔 플래시 다운로드에서 문제 였다.
부트로더는 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/