マイコン工作実験日記

Microcontroller を用いての工作、実験記録

MATRIX-M24SR

2014-04-27 18:13:44 | Weblog
ISO14443BとFelicaタグの読み出し実験はやってみたので、次に ISO14443Aも試してみたいと思っていました。この規格はどうやら欧州では広く使われているようですが、Wikipediaによれば日本での代表的な使用例はtaspoであるらしい。しかしながら、わたしは10年前にタバコを止めてしまって、taspoカードももっていません。そこで、この際 Type Aのタグチップを買ってしまおうと思い、M24SRを買うことに。アンテナ作るのは面倒だし、適当な評価ボードがないかと探したら STがMATRIX-M24SRというボードを出していました。




形状や大きさの異なるアンテナがつながったM24SRのボードが10枚で1シートになっており、これで2500円ほど。とってもお買い得感のある値段に強く惹かれてしまい、到底10枚も使うアテなどないのに買ってしまいました。




PCBアンテナは片面のものや両面のもの、大きさの違うものなど7種類。ひとつはインダクタをアンテナコイルとして使うものになっています。残る2枚は、自作のアンテナをつなげるようにパッドが出ているだけになっています。

こうして綺麗に並んでいるのを見ると、それだけで所有欲が満たされて幸せな気分になれます。なんだか切り離すのがとっても惜しい気がしてきました。

Type BタグのNDEFを読んでみる

2014-04-20 20:09:34 | Weblog
前回記事ではPASMOの残高を読んでみたので、今回はType BタグのNDEFを読んでみます。Type Bタグとしては検知の実験は免許証でやってみたのですが、調べてみるとその読み取りのためには暗証番号入力が必要であるとのこと。おまけに3回間違えると、ロックされてしまうらしい。かみさんの免許証でそんな危険を犯すわけにはいかないので、残念ながら免許証の読み取りは断念。RF430CL330Hの載ったブースターパックを使って、ISO14443 Type BタグのNDEF読み取りを行ってみました。



TRF7970Aは、ISO14443 Type Bに対応しているので、そのタグの読み取りも可能なのですが、NDEFデータを直接読み取ってくれるような便利なコマンドを用意しているわけではありません。NDEFデータを読み取るためには、NFC Forumが定めるNDEFのデータ構造を適切なISO 14443 Type Bコマンドを用いて読み取って解釈してやる必要があります。具体的な手順の詳細については、ISOとNFC Forumの標準資料の両方を読まなければならず、わたしのような初心者にはちょっと敷居が高いです。そんな状況で非常に助かったのがRF430CL330HのデータシートのFigure 8に記載されている、コマンドと応答のやり取りの図です。この図を引用させていただいたものを下図に示します。

もともとPICC側(RF430CL330H側)の動きを説明するための図ですがPCD側(リーダ側)の動きも図示されていますので、TRF7970AではこのPCD側の動きを実装してやればいいことになります。対応するNFC Forum手順ならびに、参照すべきドキュメントの章番号まで記載されていますので、この図の意味を読み解くべく資料に目をとおせば良いのです。

この図からも見てとれるように、NDEFのデータを読み取るには、何度もタグに対してコマンドを送って、その応答を受信する必要があります。これはNDEFの定める論理的なファイル情報の構造にしたがって、目的の情報が配置されている位置や、その大きさを調べてからでないと、目的とする情報にアクセスすることができないためです。したがって、これらの複数のコマンドがやりとりされる間、リーダとタグ側が正常に通信できるようにタグをリーダに近づけた状態を維持していなければなりません。

こうして読み取ったRF430CL330HのNDEFメッセージ・データ部分をダンプしてみた際の動作ログです。



答え合わせのために、TagInfoでの読み取り結果と比較。最初の1バイトと、最後のバイトに挟まれたデータ部分が一致しているので、正しく読み取れていることが確認できました。



PASMOの残額表示

2014-04-14 21:58:13 | Weblog
ちょっと調べてみたら、PASMO/Suicaの残額表示はとっても簡単なことがわかったので、実験してみました。出だしは良かったのですが、その後でしばらく悩むことに。。

PASMO/Suicaでは、利用履歴サービスという情報を参照すれば20件までの履歴情報がわかるというファイル構造になっています。それぞれの履歴レコードの11バイト目と12バイト目がその時点での残額を示しているので、最新の履歴1件の11,12バイト目の部分さえ見れば。現在の残高が調べられるというとってもわかりやすい作りになっているのでした。つまりは、何も考えないで、ファイルの特定の箇所さえ読めばいいようなものです。

実際にどのようなコマンドをカードに送ればいいのかについては、資料を見ればすぐにわかるのですが、このブログ記事には Arduinoのコードも出ており、わかりやすいです。この例では、Request Serviceを発行してサービスの確認をおこなっていますが、対象がPASMOだとわかっていればこれを省略してしまうこともできます。結論として、POLLINGでカード検出ができたなら、そのカードに対して適切な Read Without Encryptionコマンドを送ってやると、その応答として最新の利用履歴を示す16バイトのブロック・データが返ってきますので、その内容を解析すればいいだけです。実際に試して見た結果がこちら。



16進ダンプだけではわかりにくいので、履歴を簡単にデコードした結果も付け加えてあります。この例では2枚のカードの読み取り結果をしてしています。それぞれ、16進ダンプ表示の最初の行がPollingコマンドの応答内容、2番目の行がRead without Encryptionコマンドの応答内容を示しています。Read応答の最後の16バイトが実際に読み取った部分で、それぞれ40 01と62 0aの部分が(little endianなので)320円と2658円に相当します。

この例では2枚とも正しく読み取れていますが、当初は1枚のカードはちゃんと読めるものの、もう片方のカードはPollingには応答するものの、Read withtout Encryptionコマンドに応答しませんしませんでした。発行しているFelicaコマンドが間違っているわけではないので、動作しない原因は、2枚のカードの違いに起因するものであることは確実です。そこで、Nexus 7の助けを借りて Tag Ingoアプリを動かして調べてみると、残高照会ができるカード(A)とできないカード(B)には、こんな違いが。。。
  • ROM種別とIC種別が異なる。カードAは自販機で買ったカードなんですが、カードBはオートチャージ対応のカード。
  • カードAはデータ転送速度として212kbpsと424kbpsをサポート。カードBは212kbpsのみの対応。
カードの機能も購入時期も異なるので、使われているチップも異なっており、それが動作の違いの原因となっているようです。通信速度としては、リーダであるTRF7970Aの側で212kbpsを選択しているので、どちらのカードでも読めていいはずです。実際にPollingコマンドに対してはカードBも応答できているのに、どういうわけかRead without Encryptionは応答しないのです。

そこでISO Control Registerを 0x1aに設定してFeliCa 212kbpsを選択した後のレジスタを確認してみると、いくつか気になるところがあったので、次のように変更してみました。
  • RX Wait Time Registerが0xfaとなっており、時間長過ぎ。1に修正。
  • Modulator and SYS_CLK Control Registerが0x24となっており、ASK 13%が選択されていた。ASK 10%に対応する0x20に修正。
この2点の修正を加えたところ、カードBも正常に読み取れるようになったのでした。

GNU ARM Eclipse Plug-ins + Processor Expert = Kinetis Design Studio

2014-04-12 09:34:42 | Weblog
世間ではWindows XPのサポート期限切れが大きな話題になっておりまして、消費税アップ前の駆け込み買い替え需要も大きかったようです。わたしはすでにXPのマシンはほとんど使うこともなく、どうしてもWindowsが必要な時にはMBA上でWindows 7を立ち上げて使っているので、こうした騒ぎとは無縁のハズでした。ところが、3月の終わりになって、Win 7の画面上に「不正コピーを使用している」という主旨のメッセージが表示されるようになってしまいました。いろいろと検索して調べてみたものの修正できず、MSのサポートにメールで連絡して、指示された情報を取得して調べてもらいました。しかしながら、その結果も、「ライセンス関連ファイルが致命的に壊れており、修復不可。Win 7を再インストールしてください」との結論。あぁ、なんてことでしょう。

そんなわけで、Win 7環境はきれいさっぱり、すべて捨てて、最初から入れ直すことにしました。そんな作業をボチボチと進めていたら、FreescaleのKinetis用開発環境である Processor Expertがv10.4にアップデートされていることを発見。そしてGNU ARM Eclipse Plug-insも、Processor Expertとの相性が良くなったということなので、こちらも最新版をインストールしてみました。以下、スクリーンショット羅列してみます。




Eclipseで新たなプロジェクトを作る際に、Processor Expertのプロジェクトタイプを選ぶことができちゃいます。




Eclipseでのプロジェクト設定完了後に、引続きPE(Processor Expert)のWizardを開くことを指定できます。



Tool chainのパスを設定してFinishすると、続いてPEのWizardが開きます。




デバイスの種類を選択して、設定完了。ここでは、ピン数の異なるモデルのバリエーションまでは選択できないので、実際にはプロジェクト作成後に、PEのコンポーネント設定画面を開いて、ピン数を選択する必要があります。これまでは、プロジェクトを作成後、プロパティを開いて、いろいろと手作業で設定しなければならなかったので、「こんなにメンドイ作業、いちいち手作業でやってられるか!」という印象があったのですが、それが大幅に簡略化されており、ピン数選択くらいだったら許せちゃいます。

それでも良く見てみると。。



なぜか、ARM Family が M3になっています。KL25選択したんだから、これくらいm0-plusにしてくれたっていいじゃないですかねぇ。きっと、近い将来修正されることでしょう。これまでは、PEのコンポーネントとしてMQX-Liteを追加すると、それに関連するインクルードパスをいくつもプロパティに追加しなければならないのがとっても面倒だったのですが、それらのパスが全て自動的に設定されるようになったので、とっても使い易くなりました。

さて、このようにかなり使い易くなったと感心していたら、こちらのブログ記事が出ていました。GNU ARM plug-insとPEの組み合わせが、Freescale公式のKinetis Design Studioになるとのこと。KINETIS_SDKは、すでにβが始まっているようですが、対象デバイスが限定されています。HALはいいんですが、巨大化したり対象デバイスが増えたり、バージョンアップされる度に巨大化していったり、APIがコロコロ変わったりしないかが心配なところです。SDKにはミドルウェアも含まれているようですが、ここでもFatFSが採用されているのがスゴイですね。


PASMOの検知

2014-04-04 22:05:02 | Weblog
前回のNFC記事からかなり間が空いてしまいました。前回は ISO14443Bの代表的な用例である運転免許証を検知する実験をおこないましたが、今回はPASMOの検知を試してみました。



PASMOはSuicaと同じく、Felicaの代表的な応用例です。TRF7970AではISO Controlレジスタというレジスタの設定を変更するだけで対象とするNFCの種類 (ISO14443A, ISO14443B, ISO15693, Felica)を選択することができます。他にもパラメータを設定するレジスタはいろいろとあるのですが、とりあえずこのレジスタさえ設定すれば、その他の主要なレジスタはよろしく設定してもらえるらしい。複数の種類のカードを対象として検知するには、このレジスタの設定を切り替えながら、それぞれの種類に応じたポーリングコマンドを投げてみて、その応答有無を確認する必要があります。今回は、Felicaだけを対象に検知してみます。ISO14443BではREQBというコマンドを投げましたが、Felicaの場合にはPOLLINGというコマンドを投げて、その応答を確認します。



この例では、POLLINGコマンドにおいてシステムコード要求というオプションを付けてみました。2枚のPASMOで試してみたので、ちがう結果が得られています。Felicaの仕様については、Sonyが技術資料を開示してくれているので、コマンドや応答のフォーマットは、この資料で調べることができます。上の例では、最後の2バイトの 0x0003が要求したシステムコードに対応する部分で、この値は Suica/PASMO(ならびにその他の交通系カード)に共通のようです。

Suica/PASMOに関しては FelicaリーダやAndroid使って先人が調べた結果がネット上に豊富にあるようなので、これらを参照すれば、カード残額くらいは自分でも表示できそうな気がします。もう少し勉強して、挑戦してみようかな。

ちょっと遠くまで

2014-04-01 06:43:44 | Weblog
日曜に初めて秋月の八潮店に行ってきました。



時間的な都合から、午前中に買い物を済ませたのですが、秋月秋葉原店は日曜の営業は11時から。八潮は30分早い10:30から開いているので、ちょっと遠いけど八潮まで出かけてみることにしました。駅から徒歩で少々時間かかるものの、比較的容易に到達できました。駐車場にのぼりが何本も立ててあるのが、印象的でした。

店内はもちろん秋葉原店よりは広いのですが、バックヤードが広くとってある感じで、売り場面積は想像していたほど広くはなかったかな。秋葉原店よりも広くて客も多くはないので買い物はし易いはずなのですが、初めてなので、何がどこにあるのかがまったく把握できておらず、探しまわるのに時間を費やしてしまった感じ。

やはり少し遠くて、交通費がかかるのがネックですね。周囲に別の店も無いし。ゆったりと買い物できるし、支払いにカードが使えるのは便利なのですが、わざわざここまで出かけるにはそれなりの決意が必要ですね。