ゆるく楽しむプログラミング

RFID2ユニットで「セキュリティカードごっこ」やってみた

 M5Stack用RFID2モジュールで「セキュリティカードごっこ」をやってみました。
 GROVEコネクタですが、I2C接続のユニットですのでArduinoでも使用できます。

 通信ユニット本体には RF522が使用されているようです。
 RF522用のライブラリがそのまま使用できます。

M5Stack用WS1850S搭載 RFID 2ユニット



MFRC522は、13.56MHzでの非接触通信のための高度に統合されたリーダー/ライターICです。
MFRC522の内部送信機は、ISO/IEC 14443 A/MIFAREカードやトランスポンダとの通信を行うために設計されたリーダー/ライターアンテナを、追加のアクティブ回路なしで駆動することができます。
受信モジュールは、ISO/IEC 14443 A/MIFARE互換カードやトランスポンダからの信号を復調および解読するための堅牢で効率的な実装を提供します。
デジタルモジュールは、ISO/IEC 14443Aのフレーミングおよびエラー検出(パリティおよびCRC)の機能を完全に管理します。
と言う訳で、使用するのは MIFAREカードです。
非接触通信カードでは Suica等に使用されているFeliCaがメジャーですが、FeliCaとは通信方式が異なり互換性はありません。
※RFID-RC522ユニットではFeliCaにはアクセスできません。
方式名 推進企業 国内での利用実績(例)
ISO/IEC 14443 Type A NXPセミコンダクタ Taspo、Mifareカード
ISO/IEC 14443 Type B Motorola 住基カード、運転免許、パスポート
FeliCa SONY Suica、ICOCA、manaca、PASMO、Edy

--------------------------------------------------------------------
RC522ユニットはArduino用のライブラリが多数存在します。
今回は GithubCommunity版のRFID_MFRF522v2ライブラリを使用しました。

ArduinoIDEのライブラリマネージャーでRC522を検索。
GithubCommunity版のRFID_MFRF522v2をインストールします。



Mifareカードのフォーマット情報

Mifare 1K Standard
Sector Block 0 1 2 3 4 5 6 7 8 9 A B C D E F Description
0 0 Manufacture
1 Data Block
2 Data Block
3 KEY-A Access Bits KEY-B Sector Trailer
1 4 Data Block
5 Data Block
6 Data Block
7 KEY-A Access Bits KEY-B Sector Trailer
2 8 Data Block
・・・・・・・・・・・・
58 Data Block
59 KEY-A Access Bits KEY-B Sector Trailer
15 60 Data Block
61 Data Block
62 Data Block
63 KEY-A Access Bits KEY-B Sector Trailer
   Mifare Standard(Mifare1 S50)は1Kバイトの容量を持っています。
各カードには、4バイトのグローバルな固有識別子番号(USN/UID)があります。

Mifare1 S50の容量(1Kバイト)は16Byteのブロック64個で構成されます。
4ブロックで1セクタを構成します。

各セクタには、セクタの最後のブロックに配置された独立したパスワードとアクセス制御があります。
このブロックはセクタトレーラーとも呼ばれ、各セクタのブロック3です。
セクタ0、ブロック0(絶対アドレス0)はベンダーコードの保存に使用されます。
このコードは固定されており、変更できません。
残りはデータブロックであり、データの保存に使用することができます。

新しいカードのデフォルトパスワードは、
通常、パスワードAにはA0A1A2A3A4A5が、パスワードBにはB0B1B2B3B4B5が設定されています。
または、パスワードAとパスワードBの両方が6つのFFに設定されている場合もあります。
アクセス制御は、セクタ内の各ブロック(制御ブロック自体を含む)のアクセス条件を設定するために使用されます。

デフォルトでは、パスワードAまたはパスワードBを認証した後、データブロックへの読み書き操作が可能です。
また、パスワードAを認証した後、制御ブロックへの読み書き操作が可能です。
ただし、パスワードAは読み取ることができません。
パスワードAを認証することを選択し、パスワードAを忘れた場合、そのブロックは二度と読み取ることができなくなります。

初心者は制御ブロックの内容を変更しようとしないことを強くお勧めします。

Read/Writeはブロック単位で、16Byteずつ行います。
MFRC522ライブラリを使用した場合、Read/Writeはブロックの絶対アドレスを指定して行いますので、ブロック0とパスワードブロックには書き込まないように注意してください。
実験段階で、うっかりパスワードブロックに書き込んでしまったセクターは二度とアクセスできなくなってしまいました。

スケッチ

RFID-RC522v2 を M5Stack BASICで使用する「セキュリティカードごっこ」のスケッチです。
基本的に、MFRC522のサンプルスケッチの表示部分をM5Stack BASICのTFT液晶に表示するように変更しただけのお手軽スケッチです。

ライブラリ部分はArduinoUNO R3でテストしましたので、ライブラリ部分をマルっと持っていけば大抵のマイコンで動きます。(多分)

RC522_I2C.zip

・Arduino-1 - ArduinoUNO用 UIDを読み取るスケッチ
・M5Stack-2_Write - Mifeaカードに「セキュリティカードごっこ」用のデータ(ID番号と名前)を書き込むスケッチ
・M5Stack-1 - 「セキュリティカードごっこ」のスケッチ

著作権的な問題で顔写真に使用しているJPEGファイルの配付はできません。
160x120ドットのJpeg画像を MFRC522_0000.jpeg / MFRC522_0001.jpeg のファイル名で SDカードに保存してください。
Mifeaカードに書き込んだID番号.jprgが表示されます。

0000.jpg 0001.jpg 0002.jpg 0003.jpg
 0004.jpg 0005.jpg  0006.jpg 

解説動画