叶鋼は午前1時に計算をする

電子工作と計算の記録

【BLEを使う】KeilとNordicのサンプルプログラムでHRM1017を開発する

The examples in the SDK does not include the softdevice merged into the .hex file, as the mbed projects does.

What you will have to do is to perform the same operation as an exported mbed project (to Keil uVision)

Problem on Keil 5 compiled nRF51 SDK sample, deploy to nRF51822-mKIT - Nordic Q&A - Nordic DevZone - Nordic DevZoneより引用

いままでの記事はこちらをご覧ください。

  

今回はKeilで作成したアプリケーションをmbed HRM1017で動かす方法について説明します。

アプリケーションはNordicが公開しているサンプルプログラムとソフトデバイスS110を流用します。

 

Nordicの公開サンプルをKeilでビルドしてhexファイルを作成し、そのhexファイルをmbedに書き込んでも動作しません。

何故なら、ソフトデバイスがhexファイルには含まれていないからです。  

Nordicのサンプルはソフトデバイス領域にソフトデバイスをあらかじめ書き込んであることを前提にしており、サンプルからビルドしたhexファイルはアプリケーション領域に書き込まれ、ソフトデバイス領域から必要な関数を呼び出して使用しています。

一方でmbed HRM1017のサンプルプログラムはソフトデバイスと一緒にhexファイルが作成されています。

Noridicのサンプルプログラムをmbed HRM1017で使用したければ、同じようにソフトデバイスも含めてhexファイルを作成しないといけません。
その方法は以下に書いてあります。

https://devzone.nordicsemi.com/question/12350/problem-on-keil-5-compiled-nrf51-sdk-sample-deploy-to-nrf51822-mkit/

念のため、上のサイトとまったく同じことを繰り返し説明します。

 

Projectsのrootフォルダを右クリックしてオプションを選択します。

f:id:yegang:20141023104313j:plain

オプションのUserタブのRun User Program After Bulid/RebuildのRUNをチェックし、以下を記述します。

mergehex -m !H \(ソフトデバイスの格納場所)/s110_nrf51822_6.0.0_softdevice.hex -o $H@H.hex

ソフトデバイスはNordicからダウンロードしたS110の最新版を選択しました。

f:id:yegang:20141023104242j:plain

 また、mbed HRM1017には外部クロックがないので、サンプルプログラムのmain.cにおいてクロック設定を内部クロックに変更します。

tatic void ble_stack_init(void)   
{   
    uint32_t err_code;  
    
    // Initialize the SoftDevice handler module.    
    //SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, false);   
    SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, false);   

nrf_sdm.hの構造体RF_CLOCK_LFCLKSRCSに他のクロック設定の定義もあるので、使用ボードに適したものを選択ください。

以上の変更後にビルドしたhexファイルをmbed HRM1017に書き込めば、サンプルプログラムがHRM1017でも動きます。