UHF帯RFID EM4325 を使用したセンサータグの作成

# はじめに
UHF 帯 RFID タグ(以下, RFID) である EM4325 を用いたセンサタグについて記載します.

:::note info
本記事では RFID についての説明は省略, 下記の記事が参考になります.
[RFID UHF帯とは？UHF帯のRFIDリーダーを使用するには登録申請が必要？](https://imagers.co.jp/contents/233/)
[RFIDタグのフラグとセッションとは？](https://imagers.co.jp/contents/837/)
[RFIDアプリ開発の前に知りたかった5つの事](https://qiita.com/javasparrow/items/cdfabf2078522c03d6cb "RFIDアプリ開発の前に知りたかった5つの事")
:::

本記事ではセンサとして SPI 通信でデータが取得できる MPL115A1 を採用しております.
RFID の温度, 湿度などのセンサータグは既に存在し, 本記事の内容では下記の点 RFID 本来の利点を損なっています.
* 価格
  通常のパッシブタグよりも高価な EM4325 を使用, また MCU(STM32L010F4P6) やセンサを別途使用しているため安価な部品を使用したとしても, 多数使用する前提の RFID ではそれなりに高価になってしまう.
* 寿命
  パッシブタグはバッテリーによる寿命は存在せず, アンテナの破壊や物理的な破壊が無い限り半永久的な寿命を持つ.
  本記事で作成したタグは, バッテリーとして CR2302 を使用しているため使用回数に影響した寿命が存在する.

# 構成
下記に回路図及び写真, 主要部品のリストを記載をします.
STM32L010F4P6 用のコードを github にて公開. 現在(2022-05-12), 消費電力について考慮していないため今後改善が必要です.
[EM4325Experiment/Controller/ctrl4325](https://github.com/Livenga/EM4325Experiment/tree/main/Controller/ctrl4325 "ctrl4325")
## 回路図
必要最低限の要素, 確認用 LED と IC 同士を繋げた簡単な回路. LED は消費電力が大きいので点灯させないほうが望ましいです.

| 回路図 | 実装 |
| :---: | :---: |
| ![em4325.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33399/ef4d2a98-b0c7-b8b2-12bc-1f9816104231.png) | ![PXL_20220512_025320647~2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33399/9c98fef3-2017-9d4e-ec3d-e91face1d971.jpeg) |

アンテナは一応上手くいったパターンを用いているだけで最適な設計がされているわけではございません.
データシートに周波数に応じた入力インピーダンスの値が記載されているため, それらを参考に設計を行っていください.

## 主要部品一覧
| Symbol | 名称 | 注釈 |
| :--- | :--- | :--- |
| U$1  | [EM4325](https://www.emmicroelectronic.com/product/epc-and-uhf-ics/em4325 "EM4325") | RFID IC |
| U$2  | [STM32L010F4P6](https://akizukidenshi.com/catalog/g/gI-15689/ "STM32L010F4P6") | MCU |
| U$3  | [MPL115A1](https://akizukidenshi.com/catalog/g/gI-06078/ "MPL115A1") | 大気圧センサー |
| | バッテリー | CR2302 |

大気圧センサを採用した主な理由はありません. 温湿度センサを利用したバッテリーレスのタグが存在することや EM4325 と共通の SPI でセンサと通信を行うことで MCU が使用するピン数を減らす為手元にあった大気圧センサを使用しました.
MCU に A/D コンバータが実装されているので出力がアナログなセンサを用いることも可能です.

# EM4325
EM4325 ピンの説明をデータシートより参照, SPI Slave モードとして使用するための図を更に下に示します.
![EM4325 Pin Layout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33399/5975014d-5c28-7b1b-6200-4decec6ff6b2.png)
![EM4325 SPI Slave Mode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33399/6b803ab5-872b-1d82-d52a-f566294fa624.png)
このピンとメモリ設定で電源を除き EM4325 P[0-3] ピンは SPI として使用され, それ以外の AUX は電波検知時の一瞬だけ立ち上がります.
電波検知時の AUX の電圧を MCU 側で検出することで, RFID リーダから電波が照射されたときのみセンサの値を取得し, RFID タグへデータ操作を行うようにしています.
タグメモリへの不要な書き込み処理を減らすことでタグの寿命を伸ばすことと消費電力を最小限にすることを目的としています.
また, タグのセッションやフラグ状態に依存しますがリーダからタグへ電波が照射される際, 複数回タグが電波を検知する可能性が高いです.
そのため, EM4325 AUX の電圧が短期間で On / Off を繰り返し, MCU でも同じ回数割り込みが発生します.
センサよりデータを取得した時刻(MCU 起動後より LPTIM1 を用いた経過秒)を記録し, 特定時間経過後に再度センサの値を取得するように実装しました.

## 独自レジスタ
RFID タグによってはユーザが自由に使用できる User 領域確保されているタグがあります.
EM4325 では物理アドレス (0xEB - 0x2C) がそれに該当します. これ以降のメモリはタグの設定で使用されているか EEPROM 上に記録されないものとなっています.

下記の EM4325 のアドレスと値を独自のレジスタとして設定しております.
アドレス: 0x10, 物理アドレス: 0x3C
既定値: 0x0000 0000

| ビット | 用途 | 備考 |
| :--- | :--- | :--- |
| 17-16 | 書き込み領域 | 未実装 (0b00: Reserved, 0b01: Epc, 0b10: Tid, 0b11: User) |
| 15-8 | 書き込み位置 | 未実装 |
| 7-0 | センサデータ取得間隔[s] | 値が 0 の場合, 5[s] を使用する |

センサデータのアクセスを容易にするため, 取得したデータを EPC 領域末尾 32bit の記録していますが
独自レジスタを拡張して書き込み先の領域と書き込み位置を任意に設定できるようにする等の用途が考えられます.

## EM4325 備考
:::note warn
EM4325 自体がバッテリーアシスト無しで温度センサとして動作することができます.
:::

ただし, バッテリーアシスト無しで温度データを取得するにはタグに対してカスタムコマンドが発行できるリーダでないといけません.
バッテリーアシスト有りの状態では温度センサのデータが取得することは可能です.
EM4325 をバッテリー駆動させたからと言ってアクティブタグになることはありません.

# 動作結果
[rr.Inventory](https://github.com/Livenga/EM4325Experiment/tree/main/Reader/RxxxReader/rr.Inventory) の実行結果を下図に示します. 左側がリーダからの応答, 右側が MCU の USART 通信内容(初期化, 初検出状態で止めています)です.
![動作結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33399/9194fa48-6d2f-02eb-b99b-ad1fdc7ff95c.png)

不特定のタグを検出, リーダからの応答に含まれる Tid を元に EM4325 を検出し気圧センサのデータに変換を行っています.
Tid にはメーカやタグモデル番号などが記録されているため EM4325 を確実に分類することが可能です. 詳細は [Mask Designer ID (MDID) Assignment](https://www.gs1.org/epcglobal/standards/mdid) をご覧ください.

# まとめ
本当に限定的な用途出ない限り, 本記事の様に RFID に対してセンサを付けることは推奨できません.
遠隔地でセンサの値が必要な場合は, EPS32 シリーズなどの Wi-Fi モジュールを取り付けてリアルタイムで監視をした方が理にかなっていると存じます.

この記事では監視するタイミングが点検時や入出庫の様に人が介在するリアルタイム性でない任意の場合であったり, 多数のタグを不特定な場所で検査する場合などが有効だと考えます.