フェリカ 革製キーホルダ型 ICタグ (FeliCa Lite-S, フェリカライトエス) 業務用, TS-K1-NFCをamazonから購入したので、Raspberry Pi 3にRC-S380 非接触ICカードリーダー/ライター PaSoRi(パソリ)を接続してデータを書き込みました。RC-S380に置いた購入した革製キーホルダ型 ICタグを次に示します。
革製キーホルダ型ICタグのデータダンプ
pythonプログラムを使用して、購入した革製キーホルダ型 ICタグをダンプしました。
pythonプログラム「tagDump.py」を次に示します。
- 20行目のdump関数でICタグをダンプします。
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys #sys.path.insert(1, os.path.split(sys.path[0])[0]) sys.path.append('/home/pi/nfcpy') import binascii import nfc service_code = 0x090f def connected(tag): # タグのIDなどを出力する print tag if isinstance(tag, nfc.tag.tt3.Type3Tag): try: # 内容を16進数で出力する print(' ' + '\n '.join(tag.dump())) except Exception as e: print "error: %s" % e else: print "error: tag isn't Type3Tag" # タッチ時のハンドラを設定して待機する clf = nfc.ContactlessFrontend('usb') clf.connect(rdwr={'on-connect': connected})
pythonプログラム「tagDump.py」を実行すると次のようにダンプされます。
Type3Tag 'FeliCa Lite-S (RC-S966)' ID=012E4128728C7E8B PMM=00F1000000014300 SYS=88B4 0: 10 04 01 00 0d 00 00 00 00 00 01 00 00 00 00 23 |...............#| 1: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 13: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 14: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff (REGA[4]B[4]C[8]) 128: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (RC1[8], RC2[8]) 129: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (MAC[8]) 130: 01 2e 41 28 72 8c 7e 8b 00 00 00 00 00 00 00 00 (IDD[8], DFC[2]) 131: 01 2e 41 28 72 8c 7e 8b 00 f1 00 00 00 01 43 00 (IDM[8], PMM[8]) 132: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (SERVICE_CODE[2]) 133: 88 b4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (SYSTEM_CODE[2]) 134: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (CKV[2]) 135: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (CK1[8], CK2[8]) 136: ff ff ff 01 ff 00 00 00 00 00 00 00 00 00 00 00 (MEMORY_CONFIG) 144: 02 fe ff 00 00 00 00 00 00 00 00 00 00 00 00 00 (WCNT[3]) 145: ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? (MAC_A[8]) 146: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (STATE)
FeliCa Lite-Sでは、次の2種類のサービスコードが利用できます。
サービスコード | 権限 | 認証 |
---|---|---|
0009h | RW | 不要 |
000Bh | RO及びRW | 不要 |
データダンプの右側に表示されている項目名とその内容を次に示します。詳細については「FeliCa Lite」を参照してください。
革製キーホルダ型 ICタグ書き込み/読み出し
次のpythonプログラム「tagRW.py」を使って、ブロック0に「0xcc」を16バイト書き込み、読み出します。
- 23行目で書き込むデータ「cc」を16バイト分data変数に設定します。
- 24行目でサービスコード「0x0009」のブロック「0」に関数「write_without_encryption」により書き込みます。
- 25行目でサービスコード「0x0009」のブロック「0」に関数「read_without_encryption」により読み込みます。
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys #sys.path.insert(1, os.path.split(sys.path[0])[0]) sys.path.append('/home/pi/nfcpy') import binascii import nfc service_code_9 = 0x0009 service_code_b = 0x000b def connected(tag): # タグのIDなどを出力する print tag if isinstance(tag, nfc.tag.tt3.Type3Tag): try: # ブロック0番の内容を16進数[bb]で書き込み、読み出す。 sc_9 = nfc.tag.tt3.ServiceCode(service_code_9 >> 6, service_code_9 & 0x3f) bc = nfc.tag.tt3.BlockCode(0, service=0) data = 16 * "\xcc" data = tag.write_without_encryption([sc_9], [bc], data) print ("block{0}: {1}".format( 0, binascii.hexlify(tag.read_without_encryption([sc_9], [bc])))) except Exception as e: print "error: %s" % e else: print "error: tag isn't Type3Tag" # タッチ時のハンドラを設定して待機する clf = nfc.ContactlessFrontend('usb') clf.connect(rdwr={'on-connect': connected})
pythonプログラム「tagRW.py」を実行した結果を次に示します。
$ sudo python tagRW.py Type3Tag ‘FeliCa Lite-S (RC-S966)’ ID=012E4128728C7E8B PMM=00F1000000014300 SYS=88B4 block0: cccccccccccccccccccccccccccccccc