페이지

글목록

레이블이 nordic인 게시물을 표시합니다. 모든 게시물 표시
레이블이 nordic인 게시물을 표시합니다. 모든 게시물 표시

2017년 2월 27일 월요일

[nordic BLE] J-Link f/w 복구 방법

간만에, nordic nRF51-DK (PCA10028) 을 사용하게 됐는데,
KEIL 에서 어찌어찌 하다보니 JLINK 가 업데이트 되고나서 LD5(LED)가 빨리 깜박이면서,
동작이 안됐습니다.

예전에도 한 번 같은 일을 겪었었는데, 기억이 하나도 안나서 구글에서 검색해서 겨우 알았습니다.
(더우기, 제 USB-HUB 는 가끔 USB 장치를 인식하지 못하는 경우가 많아서, 
컴퓨터의 일반 USB 포트에 연결해야 정상 동작을 하는 놈이여서 엄청 고생을 했네요)

J-LINK 복구 방법은 간단합니다.

1. NORDIC 홈페이지에서 nRF5x-OB-JLINK-IF 를 눌러서 J-LINK Firmware 를 다운 받습니다.



2. PCA10028 보드의 리셋 버튼을 누르고 USB 전원을 연결(POWER ON RESET)하면, 
   LD5(LED)가 약간 늦은 주기로 플래슁한다.

3. 이와 동시에 USB Drive 가 1개 생성되면, 1번과정에서 받아둔 J-LINK Firmware 를 copy-to-paste 한다.
4. 복구 끝.

2016년 12월 14일 수요일

[da1458x] 최신 SDK 내용은 다루지 않겠습니다.

da14583 최신 SDK로 dsps를 정리해 보려 했다가,

그냥 예전 버전의 dsps 프로그램을 사용하기로 했습니다.

이유는 제가 BLE를 처음 시작한 칩이 dialog 칩이었는데, 
특별히 좋은 점이 없었습니다.

작은 칩이여서 썼는데, otp 타입이고 외부 Flash를 추가하면 전체적으로 더 큽니다.
플레쉬 타입(da14583)은 5x5mm 로 노르딕 wlcsp 타입보다 큽니다.
또 보드어드레스도 따로 구입해서 집어 넣어야 하는데, 노르딕은 들어 있습니다.
아마도 다른 칩들은 다 들어 있는듯 합니다.

싸이프레스 psoc4도 괜찮은데, BLE-to-UART 정식 Profile이 없고 Custom Profile만 있으니,
부족한 부분이 좀 있는 것 같고...

계속해서 BLE를 사용한다면 그냥 노르딕 nrf51822 을 쓸 예정인데,
그것도 esp32 칩으로 BLE 를 뚫으면 안 쓸 예정입니다.

아마도 ESP32 가 Wireless 칩으로는 가성비가 갑인듯 합니다.
BLE 값에 Wifi도 같이 되고, 듀얼코어라서 CPU로도 사용할 수 있으니 말입니다.
단점은 제가 리눅스를 잘 몰라서 개발환경을 아직도 구축을 못하고 있네요.

얼른 환경 구축해서 사용해 봐야겠네요.

2016년 6월 7일 화요일

[nordic BLE] PCA10028 내부 LCLK(32KHz)로 변경 방법

개발키트인 PCA10028 은 32KHz Crystal 이 회로에 내장되어 있지만,
프로차일드에서 판매하는 BLE 모듈인 PBLN51822 모듈에는 32KHz 크리스탈이 내장되어 있지 않습니다.

그래서 같은 프로그램을 PBLN51822 모듈에 다운로드했을 때,
아무 동작도 하지 않아서 노르딕 FA 에 문의를 해서 알게된 내용입니다.

다음의 main.c 파일에 있는 ble_stack_init()함수의 내용을 그 아래와 같이 변경해 주시면 됩니다.

static void ble_stack_init(void)
{
    uint32_t err_code;
   
    nrf_clock_lf_cfg_t clock_lf_cfg = NRF_CLOCK_LFCLKSRC;
   
    // Initialize the SoftDevice handler module.
    SOFTDEVICE_HANDLER_APPSH_INIT(&clock_lf_cfg, true);
   :
   :
}

아래와 같이 변경..

static void ble_stack_init(void)
{
    uint32_t err_code;
    
    //nrf_clock_lf_cfg_t clock_lf_cfg = NRF_CLOCK_LFCLKSRC;
    
    nrf_clock_lf_cfg_t clock_lf_cfg;
    
    clock_lf_cfg.source = NRF_CLOCK_LF_SRC_RC;
    clock_lf_cfg.rc_ctiv = 1;
    
    // Initialize the SoftDevice handler module.
    SOFTDEVICE_HANDLER_APPSH_INIT(&clock_lf_cfg, true);

   :
   :
}


[nordic BLE] PCA10028 BLE-to-UART(SPP)예제 20-Byte 구분 char 변경

nordic BLE 를 사용하면서 좀 이상한 점은,
APP 에서 20-Byte 이상은 한번에 전송되지 않는다는 점과 
20-Byte 마다 또는 전송이 끝날 때 마다 구분용 char('\n') UART RxD로 출력된다는 점입니다.

다이얼로그에서는 이런 현상이 없었는데, 좀 다른 점이 있네요.
제가 얼핏 보기로는 BLE 는 모두 20-Byte 단위로 전송이 이루어 지고 연속으로 보내지는 것 처럼 보이는 것은 APP에서
20 Byte 전송 데이터 사이마다 딜레이를 줘서 연속으로 전송되는 것 처럼 보이는 것이라 들었습니다.

확실히 모르는데, 앱 개발자가 한 말이고 제가 앱을 모르니까 그런가 보다 하고 있습니다. ^^

nRF51 디바이스에서 20-Bte 마다 또는 전송이 끝날 때마다 구분자를 출력하는 부분은 다음과 같이 정의되어 있습니다.
main.c 파일의 nus_data_handler 함수에서 처리합니다.


전송이 완료되면 '\n' 이 출력되도록 디폴트 설정이 되어 있는데,
일반적으로 아무것도 출력하지 않고 사용하더군요.

뭐, 취향에 맞게 다른 값으로 고치셔도 되고.. 
만약 아예 안나오도록 하려면 다음과 같이 주석처리를 하시면 됩니다.

static void nus_data_handler(ble_nus_t * p_nus, uint8_t * p_data, uint16_t length)
{
    for (uint32_t i = 0; i < length; i++)
    {
        while(app_uart_put(p_data[i]) != NRF_SUCCESS);
    }
    //while(app_uart_put('\n') != NRF_SUCCESS);
}

[nordic BLE] PCA10028 BLE-to-UART(SPP)예제 페어링 Time 변경

현재 SPP 프로젝트의 동작을 보면,
2초 간격으로 180초 동안 페어링을 하고 있습니다.

그리고 180초 이후에는 Sleep 모드로 빠져서 BLE 장치를 리셋하거나, 
WAKEUP 시키는 버튼을 눌러서 재시작하도록 되어 있습니다.

혹시, 중간에 sleep 모드로 빠져서 문제가 있는 경우 
1. Timeout 값을 조정하거나,
2. 필요할 때 마다 리셋 핀을 통해서 리셋을 하거나,
3. 입력핀에 wakeup 신호를 줘서 restart 하거나,
4. 아예 Timeout 시간을 없애서 계속 살아 있어서 페어링을 계속 진행하는 방법이 있습니다.

이 중에서 1,4번 은 같은 파라메터값을 조정해서 변경 가능합니다.
main.c 파일에서 APP_ADV_TIMEOUT_IN_SECONDS 값을 바꾸면 페어링 시간을 1초 단위로 조정할 수 있습니다.
그리고 값을 0으로 하면 sleep mode로 빠지지 않고 무한하게 페어링을 할 수 있습니다.

번 리셋 핀은 h/w 에서 리셋 핀을 ON/OFF 하거나 BLE 모듈의 전원을 ON/OFF 하면 됩니다.

3번 현재 개발키트의 버튼 4개 중에 1개인데, 기억이 안나네요. 찾아보면 메뉴얼이 있으니 필요한 분은 찾아보시길 바랍니다.

[nordic BLE] PCA10028 BLE-to-UART(SPP)예제 device name 변경

maiin.c 파일의 DEVICE_NAME 을 변경해 주면 됩니다.
(가장 짧은 게시글이 될 것 같네요 ^^)

[nordic BLE] PCA10028 BLE-to-UART(SPP)예제 Baudrate 변경

nRF51 SDK 의 예제 중에서 다음의 위치에서 Keil MDK 프로젝트 파일을 더블 클릭하면,
KEIL 컴파일러가 자동으로 실행됩니다.

[예제 위치]
..nRF5_SDK_11.0.0_89a8197\examples\ble_peripheral\ble_app_uart\pca10028\s130\arm5_no_packs

main.c 의 uart_init() 함수의 파라메터를 수정하면 UART 관련 설정을 조정할 수 있습니다.
보레이트를 다른 값으로 조정하려고 하면, nrf51_bitfields.h 파일에 정의되어 있는 여러가지 보레이트를 
uart_init 함수에서 파라메터를 바꿔 줌으로써 변경 가능합니다.

현재 default 설정으로 hw flow control이 설정되어 있는데, 위의 예제에서 저는 다음과 같이 수정해서 hw flow control 기능을 제거했습니다.

        //APP_UART_FLOW_CONTROL_ENABLED,
APP_UART_FLOW_CONTROL_DISABLED,


여러가지 변경해서 테스트 해 보시기 바랍니다.

[nordic BLE] PCA10028 개발키트 프로그램 다운로드 방법

1. Keil MDK 툴 최신 버전을 받아서 설치합니다.

2. nRF BLE 칩의 stack 과 프로그램을 다운로드 할 수 있는 툴인 nRFGO Studio 툴을 다운로드 받아서 설치합니다.
Complete 버전으로 설치합시다. 안그러면 PCA10028 개발툴의 연결 안 되는 경우가 있습니다.

3. nRF51 SDK 를 다운로드 합니다. 여기에 각종 예제 파일과 soft device(stack 개념) 및 soft device+예제파일이 컴파일된 HEX 파일등이 들어 있습니다.

4. PCA10028 개발키트와 PC를 USB 케이블로 연결합니다.

5. 프로그램을 다운로드 해서 동작 시키는 방법은 여러가지가 있습니다. 3가지 정도 말씀드려 보겠습니다.
(제가 해본 내용은 Soft device를 설치해야 하는 BLE 예제만 동작 시켜 봤습니다.)

5-1. 각 예제 중에서 1개를 선택해서, 내부 폴더를 열면
hex 폴더가 있고 그 안에 ~pca10028.hex 로 끝나는 softdevice 와 application 프로그램이 통합된 파일이 있습니다.
이 hex 파일을 드래그해서 PCA10028 개발키트에 드롭해 주면 프로그램이 들어가서 자동 리셋된 후에 실행 됩니다.
(최근의 segger 디버거의 기능인듯 한데, PC에 연결하면 USB 드라이브가 1개 생기는데 이 드라이브에 hex 파일을 copy 해서 paste 해주면 프로그램이 다운로드되는 기능이 생겼습니다.)

5-2. nRFGO Studio 툴로 프로그램하는 방법.
- nRFGO Studio를 실행하면 왼쪽 아래의 Device manager 에서 segger debugger 를 선택하면, nRF51422 이 표시되는지 확인합니다.



- 우측 위의 Program Softdevice를 선택합니다. 나머지 작업은 그림에 써져 있네요.


- Program Application 탭을 선택하고 Keil MDK 컴파일러에서 컴파일된 hex 파일을 선택합니다.
여기서 hex 파일은 5-1 의 hex 파일과 다릅니다. 5-1의 hex 파일은 softdevice 가 포함되어 있고, 5-2의 hex 파일은 softdevice 파일이 포함되어 있지 않습니다. 주의하시기 바랍니다.
나머지 과정은 그림 내에 포함되어 있네요.


이렇게 하면 자동으로 리셋 후, 프로그램이 동작합니다.


5-3. KEIL MDK 컴파일러에서 직접 application program만 다운로드하는 방법.
이 방법은 Softdevice 가 먼저 설치되어 있어야 합니다. 5-2 의 Program Softdevice 까지는 똑같이 nRFGo Studio로 진행해 주시기 바랍니다.
그리고 나서 NRF51 SDK 의 Keil 예제 BLE 프로젝트 파일을 열어서(아무 것도 건드리지 말고) 컴파일 해서 프로그램 버튼을 눌러 주면 Application 만 특정 영역에 Update 됩니다.

[Keil MDK ver5 프로젝트 파일 위치]

[다운로드 버튼 : 컴파일 한 후, 다운로드 버튼을 눌러 주세요]