Translate

ページ

2015年1月31日土曜日

BLE nano ピンヘッドとソケットをひっくり返した

BLE nanoの使いにくいところ

  1. ブレッドボードに挿すとオンボードLEDが見えない。
  2. ブレッドボードに挿したときに、何のピンか分かりにくい。
  3. PC接続用のUSBモジュールMK20に接続するとき、向きが分かりにくい
  4. なぜかnano本体のピンは6x2なのに、なぜかMK20のソケットは7x2
  5. nanoの横に出ているGPIOピンが使いにくい

というわけで、次のように改造しました。
  1. ピンヘッダとソケット一旦取り外し
  2. 裏返しに新しく取り付け
  3. ソケットはどうせ使わないので6x2に変更
  4. nanoの横に出ているGPIOピンにもソケット半田付け(ROBOMICブログを参考に)


組み合わせるときも、対応するピンがシルク印刷上で確認できるので、間違いが減ります。

ブレッドボードに挿した時も指した状態で各ピンの意味が分かります。


一番の問題はノートPC等で下に出っ張ってしまうこと。

こんなケーブルが欠かせなくなります。


2015年1月30日金曜日

mergehex無しでのmbed環境でのNodic SDK使用 (mbed HRM1017)

nrf51822ベースのmbedデバイス(mbed HRM1017BLE nanoなど)を使うとき、通常はSoftdeviceとプログラムを結合したhexファイルを使って書き込みます。
しかし、この結合に利用するプログラムmergehexが使えない場合、どうやって書き込むば良いのか?Flash Memoryに書き込むデータは実はそのまま残っているのではないか?そう考えて調査してみました。(詳細はPDF版参照)
mergehexを使えないケースの例。

結局、Softdevice→プログラムの順でhexファイルを書き込めば結合しなくても書き込めることが分かりました。ただし、プログラムのhexファイルのアドレス指定の調整が必要な場合があります。
全てのケースでうまく行くかどうかは分かりませんが、Nordic IoT SDK 0.7.0ipv6_icmpS110使用のSDK上でarm gccでコンパイルした別のプログラムで試したところ、以下でうまく行きました。

  • コンパイラにKeilを使っている場合はそのまま書き込めば動く
    • まずSoftdevice hexファイルをDrag&Dropで書き込む
    • 次にプログラムhexファイルをDrag&Dropで書き込む。


  • コンパイラにarmgccを使っている場合はアプリケーションのhexファイルのアドレス指定を変更すれば動く
    • まずSoftdeviceを書き込む。
    • 次に以下の文字列変換を行う。(I32HEXに準拠させる。)
:020000021000EC -> :020000040001F9
:020000022000DC -> :020000040002F8
:020000023000CC -> :020000040003F7
:020000024000BC -> :020000040004F6



たとえば、1行目は次の様に変換される。

:020000021000EC
:1080000000400020B5BC0100FDBC0100FFBC010028
:108010000000000000000000000000000000000060
:020000040001F9
:1080000000400020B5BC0100FDBC0100FFBC010028
:108010000000000000000000000000000000000060

  • もっとしっかり変換したい場合は、スクリプトなどで処理する必要があります。Pythonで作るとこうなりました
  • 修正後のプログラムhexファイルをDrag&Dropで書き込む。

mbed I/FのFirmwareで形式(02)にも対応してくれると良いのですが...


How to use Nordic base mbed device without mergehex (mbed HRM1017, BLE nano kit)

Usually, when you use nrf51822 based mbed device (mbed HRM1017, BLEnano etc.), the firmware will written as a merged hex file of the softdevice and users program.
With off-line compile environment, you will use mergehex program which is included in nrf51-Tools. But when you can’t use mergehex, you can write the firmware without mergehex as following.
l  Write the softdevice hex by Drag and Drop.
l  Write program hex by Drag and Drop.
Ø  It should accordance with I32HEX. The hex file by Keil5 will be O.K. as is. But, the hex file by arm-gcc (objdump) should be modified. Following string conversion will easy way to conversion.
:020000021000EC -> :020000040001F9 (Usually at 1st line of HEX file.)

:020000022000DC -> :020000040002F8
:020000023000CC -> :020000040003F7
:020000024000BC -> :020000040004F6



Or, you can use script like this.
https://github.com/takafuminaka/fixhex32/tree/master/python

2015年1月26日月曜日

mbed HRM1017でIPv6 (Rev.1)


といっても、BLEデバイス相手にping出来ただけ。
mbed HRM1017とRaspberry PiとUSBドングルとWin.dows PCがあれば、特別なライセンスソフト無しで、Nordic IoT SDK 0.7.0で遊べるという実験の紹介です。


手順概略は以下のとおり。詳細はPDF版参照。
It decribes how to try Nordic IoT SDK 0.7.0 with mbed HRM1017 user. (Just try ping6 to device.) 
It can be applied to other mbed platform with nrf58122 like BLE nano with small modification.
If you need an English version of this page and PDF instruction, please request me.  (naka.takafumi@gmail.com or tweet to @NakaTakafumi)


Great Thanks to ARM, Nordic, Switch Science and many experts on my TL!!
 I'm enjoing mbed life.
1.MDK-ARM Lite (Keil5)インストール
2.MDK Version 5 - Legacy Support (Cortex-M support)インストール
3.nRF51-IoT-SDK-zip (0.7.0)展開
4.LED光らせたい場合

  • mbed HRM1017のLED1、LED2にLEDを接続
    • GPIO電流値制限(0.5mA)があるので、FET使うとか、赤いLEDを3.9KΩ位を挟んで使うとか。
  • (IOT SDK)\nrf51\examples\bsp\nrf6310.hを調整(適当。無駄な設定もあるかも。)
    • #define LED_START      18
    • #define LED_0          18
    • #define LED_1          19
    • #define LED_2          21
    • #define BSP_LED_0_MASK    (1<<BSP_LED_0)
    • #define BSP_LED_1_MASK    (1<<BSP_LED_1)
    • #define BSP_LED_2_MASK    (1<<BSP_LED_2)
    • #define LEDS_NUMBER    3
    • #define BUTTONS_MASK 0x08830000
    • #define LEDS_MASK        0x000C0000
    • #define LEDS_INV_MASK  0x00000000
    • #define SER_CONN_ASSERT_LED_PIN     LED_2

5.IoTサンプルプログラムコンパイル

  • (IoT SDK)\nrf51\examples\iot\ipv6_icmp\boards\nrf6310\arm\app_ipv6_icmp_nrf6310.uvproj を開く
  • Applicationの下のmain.cを開き、650行目付近を以下のように直す。(mbed HRM1017用に内部クロック使用設定)
        // Initialize the SoftDevice handler module.
        // SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_XTAL_20_PPM, true);
           SOFTDEVICE_HANDLER_INIT(NRF_CLOCK_LFCLKSRC_RC_250_PPM_4000MS_CALIBRATION, false);
  • ビルドする。
  • Drag & Dropで以下をmbed HRM1017に書き込む
    • (IoT SDK)\nrf51\components\softdevice\s1xx_iot\s1xx-iot-prototype2_softdevice.hex
    • (IoT SDK)\nrf51\examples\iot\ipv6_icmp\boards\nrf6310\arm\_buid\nrf51422_xxaa_s1xx_iot.hex
  • LED1つないでいれば、ここで光る。
6.Raspberry Pi環境構築
Raspberry Pi B+
USB BLE I/F (Princeton PTM-UBT7)装着
bluez_4.99-2_armhf.deb, libcap-ng0_0.6.6-2_armhf.deb, radvd_1.8.5-1_armhf.deb
raspbian-kernel-zip by Nordic
IoT添付DocumentUser Guides Setting up Raspberry Pi as routerに沿って環境構築
(IoT SDK)\ Documentation\iot\html\a00039.html

 7.テスト

  • 6LoWPANコネクトしてから、デバイスのIPv6アドレスに対してping6実行して応答あり
  • LED2つないでいれば、コネクトした時に光る。LED1は消える。



2015年1月20日火曜日

BLE Nano の MK20 USB を HRM1017BLEモジュールピッチ変換基板(Break Out)で使う

BLE nano付属のMK20 USB boardを使って、HRM1017BLEモジュールピッチ変換基盤に書き込むことが出来る。

リボンケーブルをブレッドボードに差すために、SWD breakout を使用


TsuboLinkIIにてBLE nano書き込み

BLEnanoをTsubolinkIIで書き込む場合はこのように配線すれば良い。


BLE nano ブレッドボード作業用配線

BLE nano をブレッドボードに差したまま、書き込み用のモジュールMK20 USBを使うには、こういう配線をすればよい。

  • 下の両脇2本が電源(GND, VDD)
  • 上の2本が書き込み用の信号(SWDIO, SWCLK)
  • 下の真ん中の2本がUART(RXD, TXD)

2015年1月1日木曜日

mbed HRM1017でBLE central (softdevice S120) (メモ書き)

※ 別途Step by Stepの手順は作成します。(ずっと作ってないですね。すいません。)

Step 1 :
  • nordic nRF51822のDownloadページからnrf51SDK v6.xを入手する
    • ARMgccベースのオフライン開発環境が構築される
  • BLE nanoのチュートリアルに沿って、nrf51SDKを使えるようにする
    • nrf51822\Board\nrf6310\s110\ble_app_hrs
    • main.cのSOFTDEVICE_HANDLER_INIT行を内部クロック使用に変更
    • BLE readyなiOSあるいはAndroidデバイスから、nrf ToolboxのHRM等で動作確認
    • ここで作ったble_app_hrsはStep2で使うのでそのまま保存するか、別のデバイスにble_app_hrsを書き込んで使えるようにしておく
Step 2
  • GNU make , coreutils (for windows)をsetup版でインストール
  • C:\Program Files (x86)\GnuWin32\binにパスを通す
  • softdevice S120 V1をダウンロードし、s120*.hexファイル(softdevice)を準備
  • SDKのnrf51822\Includeの下
    • boards.hを編集し、HRM10171用のエントリを追加
    • boards\hrm1017.hを作成。ピン割り当てを編集
  • SDKのnrf51822\Board\nrf6310\s120\ble_app_hrs_cの下
    • main.cのSOFTDEVICE_HANDLER_INIT行を内部クロック使用に変更
    • gcc/makefileのCFLAGSへの-DBOARD_NRF6310行を-DBOARD_HRM1017に変更する。(ASMFLAGSは変更しない)
  • makeし、mergehexでsoftdeviceと結合し、Drag and Dropでmbed HRM1017に書き込む
  • これで動作するはず。
Step 3 : 動作確認
  • Step 2で作ったble_app_hrs_c(Central)を書き込んだデバイスを起動する。
  • Step 1で作ったble_app_hrs(Peripharal)を書き込んだデバイスを起動したり、停止したりする
        • LED0, LED1に割り当てたLEDの点灯が切り替わることで動作確認
        • 対応したLCDをつないでおけば、何か表示されるはず
        • UARTでデータを受けるためには、プログラムの改造が必要(未実施)