2015年1月19日

[nrf51]nRF51 SDK v7から提供方法が変わった!

久々にNordicのnRF51822ページを見ると、IoT SDKなるものが入っていた。
IPv6どうのと書いてあるが、とりあえずダウンロードしておこう。
(まだ、そういうレベルまで追いついていない。。)

ついでに、インストールしているSDKが新しくなっていないかを、My pageで確認した。
うん、6.1.0が最新のようだ。

新しいSDKは、BLEのシーケンス図とかが載っていないのでつらいんだよなー、とNordicのドキュメントページを見ると、なんと図が付いているではないか!
URLを見ると、v7.2.0になっている。
v7.2.0 ??

URLを上までたどっていくと、nRF51 SDKのページにたどりついた。
こんなページは知らなかった・・・。
よくよくnRF51822ページを見ると、HowToDownload_nRF51_SDK.txtというテキストファイルも加わっていた。
そこに、このページのことが書かれていた。


なんか、いろいろと変わったようだ。
SDKが変わったというよりも、とにかく提供方法が変わったみたい。
今までのMSIインストーラはやめて、CMSIS packにするとのこと。
KEILで使われているパッケージ形式なのかな。

gccのようにKEILを使わない人用にもSDKは用意されていた。
よかったよかった。
・・・と言いたいところだが、まだ先があった。
SDKのフォルダ構成が変わっているのだ!

image

こんな感じだ。
ソースファイルとインクルードファイルが同じフォルダに置かれるようになったみたいなのと、examplesなどからgccのMakefileが消えた(armccはあるが)ことから、今回のSDKをgccに置き換えるのは一苦労しそうだ。
あ、"armcc"じゃなくて"armgcc"というフォルダ名だった。
armccだとARM社が出してるコンパイラだけど、armgccは単にARM版のgccじゃないかな?
そう期待しておこう。


IoT SDKのドキュメントをちょっと見たら、nRF51 SDK v7.1.0をベースにしているとのこと。
やはり、v6系は捨ててv7系に行くのがよいのか。

v7.2.0のリリースノートを見ると、gccはgcc-arm-embedded 4.7 2013q1で確認しているとのこと。
SoftDeviceはS110 7.1.0をサポートしているようなので、現状でよさそうだ。
サポートしているボードは、PCA10028, PCA10031, WT51822(S110)で、それ以外はドキュメントを読むかSDK V6.x.xを使え、とある。
まったく、悩ませるやつだ・・・。

今日はこれだけ調べるだけで疲れ果てたので、また後日。

2015年1月17日

[win]ソース埋め込み用NDEFバイナリ出力アプリ

ソースファイルに、NDEFを埋め込みたいことがときどきある。
書込む値が最初から決まっている場合とか。
Excelとかでも作れそうなのだが、Windowsアプリで作った。

https://sites.google.com/site/hiro99ma/nfc/files/windows/NdefBinary.zip?attredirects=0&d=1

image

まあ、あまり需要はないと思うが。

[android]未フォーマットのFeliCa LiteをNDEFとして検出してしまう

あまり調査できてないのだが、Android 5.0.1でFeliCa Lite未フォーマットのカードをかざすと、intentをgetTag()して取得したTagがNDEFとして見られているような感じがする。

public void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Tag tag = getTag(intent);
    if (Ndef.get(tag) != null) {
        //NDEFの処理
    }
}

こんな感じのコードにしていたのだが、if文の中に入ってしまったのだ。
でもNDEFじゃないので、何かするとTag Lostで例外に飛んでしまう。
以前はそうじゃなかったような気がするんだけど・・・。

NdefFormatterがうまく動かないので、NDEFかどうかの判定よりも先に、NFC-Fかどうかの判定をして、NFC-FだったらNDEFフォーマットだろうと未フォーマットだろうと、とにかく未フォーマット時の処理をするようにした。
バグかな?という気もするけど、Androidアプリに慣れていないので単なる実装ミスのような気もしてしまう。

それと、Nexus7(2013)でFeliCa Liteカードの読み込みがあまりよろしくない。
昔からそうだったのかもしれないけど、TagInfoですぐエラーになってしまう。
調子がよいときもあるので、単にかざし方がよくないだけのようにも思うが、もうちょっとがんばってくれてもよいような気がする。

なんか、技術的に弱みがあると「気がする」が多くなってしまうな。。。

[android]HCEの動作確認を今さら行った

HCEのサンプルを作っておいたまま、Androidでの動作確認をしないままでいた。
hiro99ma blog: [nfc]HCEのサンプルを作った

NXP TagInfoアプリのことを調べた際に、このアプリはNFC Reader Modeでの動作ができることがわかった。
なので、Nexus5にHCEサンプルを、Nexus7(2013)にTagInfoを入れてタップした。
うん、URIのNDEFとして認識してくれたようだ。
ロック画面が表示されたときにも読めたので、期待通りに動いているようだ。

まあ、HCEでNDEF動作をエミュレーションしてもあまり意味はないんだけどね。

2015年1月15日

[n7]Nexus7 2012(Android 5.0.2)で、TagInfoがタグを読まない

Nexus7 2012がいつの間にかAndroid 5.0.2になった。
それと関連しているのかどうかわからないが、NXPのTagInfoアプリ(NFCのタグを読むアプリ)がタグを読んでくれない。

読まずにどうなるかというと、通常時にタグを読んだのと同じ動作をしてしまうのだ。
Nexus7 2013(5.0.1)とNexus5(5.0.1)では同じアプリでもタグを読んでくれるのに。
うーむ。

考えられるのは、ForegroundDispatchがうまく動作していない、なんだけど、そんなことってあるのかい?
私が以前作ったNDEFフォーマットアプリは動作しているようだから、そうではなさそうだ。

 

TagInfoアプリの設定で「NFC reader mode」のチェックを外すと、動くようになった。
NFC reader modeは最近付いたモードだったと思うが、Nexus7 2012はNFC周りがNXPでNCIに対応しておらず、さらに言えばHCEにも対応していないので、NFC reader modeが動作しないということだろうか?

API仕様を見る限りでは、特にそういう制限はなさそうだ。
しかしアプリを作るのであれば、もしNFC reader modeが有効ならForegroundDispatchは使わないだろうし、NFC reader modeを使わないんだったらForegroundDispatchを有効にするように思う。

ここで深追いすると勉強になるんだろうけど、弱気なのでやめておこう。

[android]使うならせめてリフレクションにしよう

反省だ。
「@hideのAPIを使うのは避けるべきだが、使うのならせめてリフレクションで使おう」。

 

以前、EjectSDというAndroidウィジェットを作ってAndroid Market(今はGoogle Playか)に置いていた。
単にSDカードのマウント・アンマウントをウィジェットで行えるだけのアプリだ。
経緯は忘れたが、たぶんアンマウントするのにメニューが深くて嫌だったから作ったんだろう。

hiro99ma blog: [app]「Eject SD」を公開しました
hiro99ma blog: アプリからmount/umountさせる
hiro99ma blog: EjectSDをAndroid4でビルドし直す

当時の私はリフレクションなど知らなかったので、Androidのプラットフォームを落としてきて、その組込みアプリとしてビルドしてapkを作り、それに署名だけしてアップしていたようなのだ。
そのためか、このソースやapkが手元に残っていないのだ・・・。
私のことだから、「Windowsでソースを作る→Linuxにファイルを転送→Linuxでビルド→エラーが出たのでLinuxで編集&ビルド→その場でapkに署名→apkのアップもLinuxで行う」とやって、残っていないんだろう。
Linux側は、ごたごたして、ぜーんぶフォーマットしてしまったので、何も残っていない気がする。。。

もし私がリフレクションを知っていたら、こういうOSを行き来せずに済んだのに、という反省だ。
まあ、そうじゃなくてもソースをちゃんと管理していればよいだけの話ではあるが。

 

なんで急にこの話をしたかというと、"4.1.2にインストールしたけど動かないみたい"というメールが来たからだ。
Google Playを見ると、EjectSD4は4.1.1までの対応になっているらしい。
4.1.2まではAPI16で同じだと思ったんだけど・・・。

ん、よく読むと「インストールはできたけどアプリ一覧に出てこない」と言われているようだ。
Nexus5でアプリ一覧を見てみたが、スマホ系はアプリしか出てこないのだな(タブレット系はウィジェットも次のタブとして表示される)。
ウィジェットから探すようにお願いしてみるか。
こういうやりとりをもっと楽しめるようになれば、私の英語力ももう少し高まるかもしれんな。

2015年1月13日

[N5]急に電池がなくなった

Nexus5 Android 5.0.1なのだが、昼に触ってみるとえらく温かく、電池は切れていた。
家に帰ってから確認すると、なぜか急激に消耗したみたいだ。

image

なんだろうね?

2015年1月11日

[arm]DHCSR (1)

nRF51系というか、Cortex-M0系というか、ARMv6-MアーキテクチャにはDHCSRというレジスタがあることを知った。
ねむいさんのぶろぐ | Discovery系基板を中心とした小ネタいろいろ

世の中知らないことばかりですな。
PDFはこちらで、C1.6.3(p.331)から説明がある。
ARMv6-M Architecture Reference Manual - DDI0419C_arm_architecture_v6m_reference_manual.pdf

0x07は、(C_STEP | C_HALT | C_DEBUGEN)にビットを立てたことになる。

  • C_DEBUGENを1にすると、このレジスタの内容が意味を持つ。
  • C_HALTを1にすると、Debugステートを維持する(C_STEP, C_MASKINTSはN/A)。
  • C_STEPを1にすると、Debugステートを抜けて次の命令を実行し、HALTする。

ということからすると、Debugステートを維持したいのであれば0x05でよいようだ。

しかし、「Debugステートを維持」と「次の命令を実行してHALT」の違いは何だろう?
HALTすると、何か例外が発生するまで次に進めない
そもそも、Debugステートってのは何だろうか。
いつも「JTAGデバッガを使うとブレークポイントに止まってくれて助かる」くらいにしか思っていないが、なんか曖昧なことしか知らないのだった。

ARMv6-Mでデバッグ機能が使用できる場合、以下のようなことができる。

  • プロセッサのHALT
  • シングルステップ
  • プロセッサのコアレジスタへのアクセス
  • ResetおよびHardFaultベクタキャッチ
  • 無制限のソフトウェアブレークポイント
  • システムメモリへの完全なアクセス

また、デバッグオプションには以下が含まれることがあるとのこと。

  • ハードウェアブレークポイント(1~4)
  • ウォッチポイント(1~2)

うーん、これはCorTex-M0のマニュアルを読んで書き写しているだけなのだが、それだけでも難解だ。
「より根源をたどれ!」という私と、「どうせそこまで理解してもデバッガでできる以上のことはやらんだろう」という私がせめぎ合っている。

とりあえず今回は「デバッグは奥が深い」という底の浅い言葉で終わろう。

2015年1月10日

[ble]geckoタグが届いた

image

geckoタグという、BLEのタグが届いた。
Gecko - Make your Smartphone smarter

Indiegogoに出ていたものの1つで、Gigazineに記事があったので開発者向けので出資?していたのだ。
2014年の7月に出荷状態になったまま届かず、でもメールだけは届いていて「最終出荷が終わった」みたいなのがあったので、「うちはどうなってんの?」とメールしたら届いたのだ。
下手な英語メールでも、単語さえそれっぽく並んでいれば理解してくれるのだろう、うんうん。

大きさは上の画像を参照。
左から順に、単3電池、BVMCNDT52、gecko、SensorTagだ。
まあ、そんなに大きくはないですな。
厚みもなく、キーホルダーになるくらい。

アプリは、AndroidはGooglePlayに、iOSはAppStoreにそれぞれあがっている。
Android版は・・・今ひとつか。
うちがOS5.1のNexus5だからか、よくアプリ自体が死ぬ。それに、Nexus7(2013)だとインストールできない。
iOS版の方が動きはよいのだが、iPad miniではアイコンがデフォルトだし、なんだかなぁ。

そういう文句を言うなら自分で作りなさい、ということで開発者向けにはdeveloperサイトがあり、アカウントも案内されて用意があるのだけど、いつの間にかログインできなくなった。。。
パスワードを忘れたのかと思って「forgot password」したいのだが、gecko用に作ったYahooアカウントへはSMTP接続に失敗するというエラーが出てどうにもできない。

やむなく、また下手な英語メールを出したところだ。
ネットで探しても日本語で「買った」みたいなのが見つからないので、やはりマイナーなのか。。。

[nrf51]gcc+eclipseでの開発(2015/01/09)

nRF51822を無料の開発環境で使いたいとなったとき、Keil(制限有り)かgcc+gdbになるだろう。
私はgcc+gdbなのだが、環境を作る情報がはっきりしない。
Nordic社のPDFが正しいのだろうと思っていたけど、どうもそれではうまく行きにくい。

それを懸念したのかどうかわからないが、Nordic Developer Zoneのブログに記事が出ていた。
Documentation and Resources for Eclipse Development

ただ、この記事は現状のまとめみたいなもので、「ここにはこう書いてあるけど、最新の情報ではない」とか「こっちはこういう感じだ」と書かれているだけで、どうもはっきりしない。


nAN-29 Development with GCC and Eclipse

  • Windows向けに書かれているので、LinuxやOS Xの人は読み替えしていく必要あり
  • GNU ARM Eclipse Plug-insを使っていないし、SEGGER J-Link Eclipse pluginを使っていない。managed buildではなくmakefileを使っている
  • SDK 7.1.0向けにアップデートされていない

 

Tools for OS X Development

  • OS X上でEclipseを使うのであれば、ツールのリストは役に立つだろう

 

Development with Eclipse and GCC

  • nAN-29を参照しているが、多少アップデートされている。SEGGER J-Link pluginを使うようにしているところがよい。
  • managed buildではなくmakefileを使っている
  • SDK 7.1.0向けにアップデートされていない
  • Windows用のコマンド(“make flash”など)はOS Xでは使えない

 

Getting started with nRF51 development on Mac OS X

  • Eclipseについて書かれている記事ではないが、MacでGCC + makefileで開発する際のよい情報が書かれている
  • SDK7.0.0向けにアップデートされている
  • OS X上でSEGGER J-Link toolsを使ったFLASH書き込みについて書かれている

 

Software Development with nRF51 Series Bluetooth® Low Energy SoC

  • nRF51-DKではなく、IMM-NRF51822モジュールでの使用方法が書かれている
  • SEGGER J-LinkではなくOpenOCDを使うようになっている
  • サードパーティのEHALソースツリーを使っている(なぜそれが必要なのかわからない)


こんな感じで書かれているので「こうやるとよいのだよ」というのは出てこない。

うちは、こういう環境で使っている(2015/01/09)。

  • gccは、CodeBenchから最新版を取ってきた
  • eclipseは、LUNA
  • eclipse pluginなどはこちら