#はじめに
nfcpy(version 1.0.3)でよくあるサンプル
print(' ' + '\n '.join(tag.dump()))
でPASMOの内容を表示させようとすると
This is not an NFC Forum Tag.
というエラーで失敗することがあります。
古いPASMOでは成功するのに比較的新しいPASMOで失敗します。
これは新しいPASMOに搭載されているICコードを
nfcpyが認識していないために発生します。
#nfcpyへのパッチ
新しいPASMOのICコードは0x31です。ICコードテーブルは
nfcpyのインストール先(~/anaconda3/envs/pasori/lib/python3.8/site-packages/nfc/など)のtag/tt3_sony.pyのFelicaStandardクラスにあります。
60 IC_CODE_MAP = {
61 # IC IC-NAME NBR NBW
62 0x00: ("RC-S830", 8, 8), # RC-S831/833
63 0x01: ("RC-S915", 12, 8), # RC-S860/862/863/864/891
64 0x02: ("RC-S919", 1, 1), # RC-S890
65 0x08: ("RC-S952", 12, 8),
66 0x09: ("RC-S953", 12, 8),
67 0x0B: ("RC-S???", 1, 1), # new suica
68 0x0C: ("RC-S954", 12, 8),
69 0x0D: ("RC-S960", 12, 10), # RC-S880/889
70 0x20: ("RC-S962", 12, 10), # RC-S885/888/892/893
71 0x31: ("RC-??? new pasmo", 1, 1), # new PASMO
72 0x32: ("RC-SA00/1", 1, 1), # AES chip
73 0x35: ("RC-SA00/2", 1, 1),
74 }
上記のように0x31の行を追加します。NBRとNBW(一回で読み書きできるブロック数)は不明なので1にしておきました。
#検証
同じカードで、こんどはダンプできました。
Type3Tag 'FeliCa Standard (RC-??? new pasmo)' ID=00000000000000000 PMM=053143454682B7FF SYS=0003
System 0003 (Suica)
Area 0000--FFFE
Area 0040--07FF
Random Service 1: write with key & read with key (0x0048 0x004A)
Random Service 2: write with key & read w/o key (0x0088 0x008B)
0000: 00 00 00 00 00 00 00 00 20 00 00 ce 06 00 00 08 |........ .......|
Area 00C0--00FF