タッチレス技術で改札口を通過するビジネスマン

NFC/FeliCaの通信技術は、Suicaのような交通系ICカードや運転免許証をはじめ、マイナンバーカードや身分証など、様々な用途で使用されています。

本記事では、μC3/Compact(以下μC3)とμC3に付属のUARTドライバを使用して、FeliCaリーダ(RC-S620/S)を制御し、ICカードの識別情報(IDm、PMm)を読み取る方法についてご紹介します。

概要

評価ボード(STM32L496G-DISCO)で識別情報(IDm、PMm)を読み取る

本記事において作成するアプリケーションは上図の通りです。

ICカードをFeliCaリーダにかざすと、評価ボード(STM32L496G-DISCO)で識別情報(IDm、PMm)を読み取ります。読み取った識別情報は、評価ボードからホストPCへシリアル通信で送信し、ホストPCのターミナルソフトに表示されます。

開発環境

評価ボード STM32L496G-DISCOの開発環境

今回のアプリケーションを開発する際に使用した、ハードウェアおよびソフトウェアについてご説明します。

ハードウェア

項目 説明
評価ボード
STM32L496G-DISCO
STマイクロエレクトロニクス社製 STM32L496AG搭載の評価ボードです。
https://www.st.com/ja/evaluation-tools/32l496gdiscovery.html
Felicaリーダ
RC-S620/S
ソニー社製 FeliCaリーダです。
https://www.sony.co.jp/Products/felica/business/products/reader/RC-S620.html
RC-S620/Sピッチ変換
基板セット
Felicaリーダをブレッドボードに接続するための変換ケーブル(FFC-6)です。
https://www.switch-science.com/catalog/1029/
ブレットボード、ジャンパケーブル 評価ボードとFelicaリーダの接続に使用します。
USB TypeA-microBケーブル 評価ボードとPCの接続に使用します。

評価ボードのコネクタCN2とRC-S620/Sの接続は、以下の通りです。

評価ボードのコネクタCN2とRC-S620/Sの接続

評価ボードとRC-S620/S間の通信は、UART(Universal Asynchronous Receiver/Transmitter)によるシリアル通信を使用します。各ピンの機能は以下の通りです。

ケーブルの色 STM32L496G-DISCO RC-S620/S
CN2-2: UART1_TX 2: RXD
CN2-3: UART1_RX 3: TXD
CN2-5: GND 4: GND
CN2-6: +5V 1: VDD

ソフトウェア

項目 説明
リアルタイムOS(RTOS) eForce社製 μC3/Compact Cortex-M4 STM32L4/L4+シリーズ EWARM評価版 (Release 2.1.1)
以下より無償評価版をダウンロードできます。
https://www.eforce.co.jp/processors/#st
開発環境(IDE) IARシステムズ社製 IAR Embedded Workbench for Arm (EWARM) 8.11.3
※無償評価版も提供されています。
https://www.iar.com/jp/products/architectures/arm/iar-embedded-workbench-for-arm/
ST-LINKドライバ 評価ボードに搭載のオンボードデバッガST-LINK/V2-1を使用するために、ドライバが必要な場合があります。
https://www.st.com/ja/development-tools/stsw-link009.html
ターミナルソフト Tera Term (v4.105)
https://ja.osdn.net/projects/ttssh2/

NFC/FeliCaの概要

NFCとは

NFCとはNear Field Communicationの略称で、13.56 MHzの周波数を利用する通信距離10cm程度の近距離無線通信技術です。NFC-A、NFC-B、FeliCa(NFC-F) などの規格があります。

出典:ソニー株式会社 FeliCa「NFCの定義」

FeliCaとは

FeliCaとは、NFCの規格のひとつです。SuicaやPASMOなどの交通系ICカードにも採用されています。

FeliCaのICカード識別情報

FeliCaで使用されるICカードの識別情報として、製造ID(IDm)と製造パラメータ(PMm)があります。

製造ID(IDm)
  • カードを識別するためのID(8バイト)
  • 上位2バイト:製造者コード
  • 下位6バイト:カード識別番号
製造パラメータ(PMm)
  • カードの種別、性能を識別するためのパラメータ(8バイト)
  • 上位2バイト:ICコード(ICチップの種類を識別するためのコード)
  • 下位6バイト:最大応答時間パラメータ

出典:ソニー株式会社 FeliCa「FeliCa技術方式の各種コードについて」

FeliCaリーダ(RC-S620/S)の通信仕様

まず、FeliCaリーダ(RC-S620/S)の通信仕様や通信手順についてご説明します。今回のアプリケーションで使用するコマンドの詳細は後述します。

RC-S620/Sの通信仕様


RC-S620/Sは、FeliCaの他に、NFC-A, NFC-Bにも対応しています。

  • RC-S620/Sは、UARTインターフェースで制御が可能です。本記事でもUART通信を使用して、制御を行います。

RC-S620/Sとの通信手順

RC-S620/Sとの通信手順
ホストコントローラとRC-S620/S間の通信プロトコル

基本的な通信手順は、以下のようになります。

  1. ホストコントローラ(今回はSTM32L496)が、RC-S620/Sにホストコマンドパケットを送信する。
  2. パケットの内容に問題がなければ、RC-S620/SがACKフレームを返送する。
    ※チェックサムエラーなどの問題があった場合は、ACKフレームを返送しない。
  3. 続いて、RC-S620/Sがホストレスポンスパケットを返送する。
  4. ホストコントローラは、ACKを送信する(任意)。

出典:SONY株式会社 FeliCa「RC-S620/Sコマンドリファレンスマニュアル<簡易版>」

通信データのフォーマット

【ホストパケットの種類】

ホストコントローラとRC-S620/S間の通信に使用するデータをホストパケットといいます。ホストパケットのフォーマットには、以下の3種類が定義されています。

名称 用途
Normalフレーム ホストコマンドパケット、ホストレスポンスパケットの送信に使用する。
データ部のサイズが255バイトまで。
Extendedフレーム ホストコマンドパケット、ホストレスポンスパケットの送信に使用する。
データ部のサイズが256~265バイト。
ACKフレーム 主に受信データが問題ないことの通知に使用する。

【ホストパケットの中身】

各ホストパケットのフォーマットの中身は、以下のように定義されています。

ホストパケットのフォーマット

名称 説明 備考
Preamble フレームの先頭を示す 0x00 固定
Start Of Packet パケット本体の開始を示す 0x00 0xff 固定
2バイトフレーム識別用コード Extendedフレームを識別するためのデータ
LEN
LENEx
データ部の長さを示す
LCS
LCSEx
LEN, LENExのチェックサム
データ部 コマンドごとに定められた識別コードと、各種データが含まれる。
1バイト目:コマンドコード/レスポンスコード
2バイト目:サブコマンドコード/サブレスポンスコード
3バイト目以降:各種データ(リーダへの制御情報の設定、リーダが読み取った情報の取得など)
詳細は、RC-S620/S コマンドリファレンスマニュアル<簡易版>を参照ください。
DCS データ部のチェックサム
Postamble フレームの末尾を示す 00h 固定

使用する主な通信コマンド

ICカードの識別情報取得に使用する主な通信コマンドについてご説明します。

出典:SONY株式会社 FeliCa RC-S620/Sコマンドリファレンスマニュアル<簡易版>

Reset コマンド

Resetコマンドは、RC-S620/Sの状態を初期化するためのコマンドです。アプリケーション起動後、RC-S620/Sと通信を開始する際、最初に実行します。

Resetコマンドは、以下のように定義されています。

【ホストコマンドパケット】

名称 データ部の値
コマンドコード 0xd4
サブコマンドコード 0x18
Functio 0x01 固定

【ホストレスポンスパケット】

名称 データ部の値
レスポンスコード 0xd5
サブレスポンスコード 0x19

実際に通信するホストパケットとACKフレームの中身は、以下となります。

ホストパケットとACKフレームの中身

InListPassiveTarget コマンド

InListPassiveTarget コマンドは、ターゲット(ICカード)を捕捉して、ターゲットの識別情報を取得するコマンドです。RC-S620/Sで検知したターゲットの識別情報(IDm, PMm)の取得に使用します。

InListPassiveTarget コマンドは、以下のように定義されています。

【ホストコマンドパケット】

名称 データ部の値
コマンドコード 0xd4
サブコマンドコード 0x4a
MaxTg 0x01 固定
BRTY 通信プロトコルと転送速度の指定。今回は0x01を指定。
0x01 : ISO/IEC 18092 212 kbps(Passive communication mode)
0x02 : ISO/IEC 18092 424 kbps(Passive communication mode)
InitiatorData 0x00 0xff 0xff 0x00 0x00
※Pollingコマンドを発行。
詳細は、『FeliCaカード ユーザーズマニュアル 抜粋版』の「4.4.2 Polling」を参照

【ホストレスポンスパケット】

名称 データ部の値
レスポンスコード 0xd5
サブレスポンスコード 0x4b
NbTg Target IDの取得に成功したTargetの数。
取得できた場合:0x01
取得できなかった場合:0x00
TargetData ※Pollingコマンドのレスポンス。
1バイト目: Targetの論理番号(0x01)
2バイト目: 本データを含む以降のデータ長 (0x12)
3バイト目: レスポンスコード (0x01)
4~11バイト目: IDm (8バイト)
12~19バイト目: PMm (8バイト)

作成するアプリケーションの詳細

処理の流れ

  1. μC3を起動しタスクを実行します。
  2. 通信タスク(TaskNfc)で、RC-S620/Sと通信を行い、ICカードの識別情報を読み取ります (通信にはUART1を使用)。
  3. ログタスク(TaskLog)で、読み取った識別情報をPCに出力します (通信にはUART2を使用)。

通信タスク(TaskNfc)の詳細

【メイン処理】

通信タスク(TaskNfc)の詳細

  1. RCS620S_initDevice で、UARTドライバ(UART1)を初期化します。Resetコマンドなどで、RC-S620/Sを初期化します。
  2. forループ内で、InListPassiveTarget コマンドを使用して、Target(ICカード)の捕捉を行います。
  3. Targetを捕捉できた場合は、識別情報(IDm、PMm)をログとして出力します。5秒後に再度、上記2.の処理を行います。
  4. Targetを捕捉できなかった場合は、1秒後に再度、上記2.の処理を行います。

【RCS620Sドライバ】

今回使用するRC-S620/Sドライバは、「FeliCa Developers’ Blog」で公開されている Arduino向けRC-S620/S制御ライブラリ を元に、μC3のUARTドライバで動作するように改変して作成しました。

各APIの動作は、基本的に上記ライブラリに従っています。 RC-S620/Sドライバの関数名は、RCS620S_XXXとしています。

【RCS620S_initDevice関数】

RCS620S_initDevice関数

  1. RCS620S_initSerial で、UARTドライバを下記設定で初期化します。
    • Data bit : 8 bits
    • Parity bit : none
    • Stop bit : 1 bit
    • Baud rate : 115,200 bps
  2. RCS620S_command(“\xd4\x18\x01″, 3, “\xd5\x19″, 2)でResetコマンドを実行し、RC-S620/Sを初期化します。
    引数の意味は、以下の通りです。

    • 第1引数:送信するホストコマンドパケット
    • 第2引数:送信するホストコマンドパケットのデータ長
    • 第3引数:期待するホストレスポンスパケット
    • 第4引数:期待するホストレスポンスパケットのデータ長
  3. 続いて、その他の必要な初期設定(RFConfiguration)を行います。
    • 「Arduino向けRC-S620/S制御ライブラリ」に従って、初期化シーケンスを実行しています。

出典:ソニー株式会社 FeliCa「RC-S620/Sコマンドリファレンスマニュアル<簡易版>」

【RCS620S_polling関数】

RCS620S_polling関数

1. InListPassiveTarget コマンドを実行します。
2. ホストレスポンスパケットresponseをチェックして、Target IDが取得できなかった場合(NbTg:0)は、0を返却します。
3. Target IDが取得できた場合は、識別情報(IDm, PMm)を変数に格納して、1を返却します。

【ログタスク(TaskNfc)の詳細】

ログタスク(TaskNfc)の詳細

1. UARTドライバ(UART2)の初期化を行い、タイトルメッセージを表示します。
2. 以降、他のタスクからログ関数(log_str, log_idm_pmm)が呼び出されるまで、待ち状態となります。ログ関数が呼び出されると、ログタスクは実行可能状態となり、メッセージボックス経由で受け取った文字列をシリアル(TeraTerm)へ出力します。

プログラムを変更して実行する場合

μC3コンフィグレータのタスク設定情報

本アプリケーションは、無償評価版「μC3/Compact Cortex-M4 STM32L4/L4+シリーズ EWARM評価版」で作成しています。μC3コンフィグレータの設定ファイル(*.3cf)を同梱しているので、以下のようにμC3コンフィグレータを利用し、タスクの設定情報などを変更することが可能です。

本記事で紹介した内容は、一部のコマンドのみでしたが、他のコマンドを使用することにより電子マネーの残高を読み取るなど応用が可能です。

また、eForceでは、μC3と組合せて使用する組み込みシステム向けのTCP/IPスタックμNet3を提供しており、ネットワークに接続することでIoT機器として活用ができます。

弊社製品「μC3(マイクロ・シー・キューブ)」のご紹介

μC3製品ロゴ

マイコン向け超軽量カーネルを採用したRTOS「μC3(マイクロ・シー・キューブ)/Compact」

μC3(マイクロ・シー・キューブ)/Compactは、マイコン内蔵の小さなメモリだけで動作するように最適化された、コンパクトなμITRON4.0仕様のRTOSです。

μC3/Compactは、ソースコードに直接コンフィグレーションを行うのではなく、付属のコンフィグレータによりGUIベースでRTOS、TCP/IP、デバイスのコンフィグレーションからベースコードの自動生成まで行います。

小さいフットプリント
マイコンの小さなROM/RAMのみで動作するように最適化された最小2.4Kbyteのコンパクトなカーネル。メモリ容量が小さい安価なデバイスを使用する事ができます。
μC3/Configurator付属
選択・設定するだけでベースコードが生成できるコンフィギュレーションツール。開発時間の大幅な短縮やコーディングミスの減少が可能。RTOSの初心者でも簡単に開発をスタートできます。
豊富なCPUサポート
業界随一のCPUサポート実績があり、技術サポートも充実しています。CPUの選択肢を広げ、機会費用を抑える事ができます。業界随一のCPUサポート実績があり、技術サポートも充実。使用予定のデバイスで直ぐに開発着手が可能で、ご質問に対して24時間以内の1次回答を徹底しています。
省電力対応
デフォルトで省電力機能がついているため、システム全体の省電力に貢献します。

詳しい資料をご希望の方は、下記より製品ガイドをダウンロードしてください。

資料ダウンロード(無料)

μC3のライセンスの種類・詳細

ライセンスの種類

ライセンスの種類は3つあります。

  • 開発量産用プロジェクトライセンス
  • プラットフォームライセンス
  • 研究開発用プロジェクトライセンス

開発量産用プロジェクトライセンス

開発量産用プロジェクトライセンスは、研究開発から量産販売までが可能な標準的なライセンスとなります。開発量産用プロジェクトライセンスの対象製品の範囲には、1種類の製品型番だけでなく、その製品ファミリ(派生機種)が含まれます。

有償の保守契約に加入中の場合、プラットフォームライセンスのライセンス費用との差額でアップグレードが可能です。

プラットフォームライセンス

プラットフォームライセンスは、プロジェクトライセンスの対象範囲を広げたライセンスです。プラットフォームライセンスの対象製品は、1種類の製品ファミリだけでなく、複数の製品ファミリが範囲となります。サイトライセンスではございません。

研究開発用プロジェクトライセンス

研究開発用プロジェクトライセンスは、研究開発のみ可能なライセンスです。ライセンス購入時の段階で、製品化まで見えていない場合や、フィジビリティスタディの場合にお勧めです。

ライセンス費用は、開発量産用プロジェクトライセンスの60%の価格です。

有償の保守契約に加入中の場合、開発量産用プロジェクトライセンスのライセンス費用の40%オフの価格でアップグレードが可能です。

ポイント
  • 開発量産用プロジェクトライセンス:研究開発から量産販売までが可能な標準的なライセンス
  • プラットフォームライセンス   :1種類の製品ファミリだけでなく、複数の製品ファミリを範囲とするライセンス
  • 研究開発用プロジェクトライセンス:製品化まで見えていない場合や、フィジビリティスタディの場合にお勧めなライセンス

※弊社のライセンスはプロジェクトライセンスの形式を採っております。ご購入時に該当プロジェクトの名称をご登録いただく必要があり、その際、「計測機器」などの抽象的な名称ではなく、具体的な名称を頂戴しております。

お客様のご要望にあわせて適切な範囲で設定させていただきますので、まずは、担当営業にご相談下さい。

ライセンスの詳細

    • ライセンス費用の金額・計算方法:ライセンス購入時の固定の一括払いのみでご使用いただけます
    • 開発人数制限 :無(ただし同プロジェクト内)
    • 提供形態 :ソースコード
    • 使用範囲 :定義されたプロジェクト内
    • 使用CPU :型番固定ではなくCPUシリーズ(例:STM32F4シリーズ)
    • μC3/ConfiguratorはCPUシリーズ毎に用意されています

ライセンスの価格などの詳細については、下記より製品ガイドをダウンロードしてご覧ください。

資料ダウンロード(無料)

保守について

製品定価には契約日の翌月1日から6ヶ月分の無償保守が含まれています。

無償保守サービス終了後は有償での保守サービスとなります。そのまま継続でのご利用の場合、製品価格(研究開発用プロジェクトライセンスはプロジェクトライセンス価格)の20%、非継続の後に再加入をされたい場合は研究開発用プロジェクトライセンスはプロジェクトライセンス価格)の40%となります。

プロジェクトライセンスと1年間の保守サービスを同時にご購入いただいた場合は、初回に限り15%とさせていただきます。

保守サービスには以下が含まれています。

  • 製品の無償バージョンアップ対応
  • コンパイラのバージョンアップ対応
  • メールによる技術サポートサービス(1営業日以内に1次回答)