PaSoRi FeliCa


重要

(プロプライエタリ(独占的)プロトコルの解析における重要な警告)

  • このページの内容を元に製品の開発や大学等の研究を行うことはおすすめしません
    • SONYから公式の開発環境(SDK for FeliCa)が(有償で)入手できます。
    • それらのコードから得られた情報をここに追記する事は止めてください
  • SONYはPaSoRiソフトウェアのリバースエンジニアリングをEULAにて禁じています
  • このページの項目のうち、「FeliCaコマンド」(の一部)に関してはJISで標準化されているのでもはや独占的なプロトコルではありません。
  • PaSoRi2コマンドは固有の製品に依存するもので、依然独占的なコマンドセットとなっています。

概要と注意

  • JIS X6319-4へ準拠のため、表記の改訂予定です。
  • RC-S320のUSBプロトコルはRC-S320に固有のものです。RC-S310やそのほかのシリアルリーダとは互換性はありません
  • $xxは8Bit長の16進数値です
  • libpasoriとしてコードにまとめています

TODO

  • 用語の典拠をまとめる
  • libpasoriの更新

USB通信

RC-S320とはUSB経由で通信することになります。

初期化

idVendor : 0x054c , idProduct : 0x01bb のデバイスを探し、コンフィギュレーション番号1でconfigします。

エンドポイントは0x81。

コマンドのやりとり

コマンドをVENDOR_INTERFACEで転送。(BSDのusb.hではUT_VENDOR)

コマンドパケットの構造

パケットの構造は送受信ともに共通。

ACK/NACK

  • ACK
    00 00 FF 00 FF 00
  • NACK
    00 00 FF FF 00 00

コマンドパケットやレスポンスパケットに対するACKやNACKです。双方で返す必要が有りますが、PaSoRiはPC側からのACKを待ちません。

パケットの構成方法

00 00 FF <LEN> <LMOD> <DATA>* <MOD> 00
  • LENは00または$FFになることは無い(ACKまたはNACKのため)
  • MODはDATAの各バイトの合計をビット反転した物+1
  • LMODはLENをビット反転した物+1

DATAは任意長で、PaSoRiコマンドが入る。

コマンドサマリ

コマンドに対するレスポンスはコマンドコード+1になっています。これはPaSoRiコマンドとFeliCaコマンドで共通。

PaSoRi2コマンド

PaSoRi2コマンドはRC-S320に固有のコマンドの事を指します。RC-S310(旧PaSoRi)とは異なるようです。

コマンドはパケットのDATA部に入ります。1パケットあたり1つのコマンドまたはレスポンスが入ります。

  • コマンドが認識されるとPaSoRiはACKを返す
  • $5c以外のコマンドはなんらかのレスポンスを返す

$52 : ???(自己診断)

コマンドコードコードテストデータ長さテストデータ
$52$xx$xxxx xx xx ...
コマンドコード結果長さ結果
$53$xxxx xx xx ...
  • $00 - エコーバック(COMMUNICATION LINE TEST)
    • エコーバックのみ、結果にはテストデータがそのまま出力される
  • $01 - ???(EEPROM TEST)
  • $02 - ???(RAM TEST)
  • $03 - ???(CPU FANCTION TEST) - FUNCTIONのスペルミス?
  • $10 - Polling test(POLLING TEST TO CARD)
    • それ以外のテストでは$00が成功、それ以外が失敗とみなされる

$54 : ???(PaSoRi読み取り時初期化 - リセット?)

  • (入力パラメタなし)
  • 出力:$00
  • 処理終了時(R/Wクローズ時)に実行する

$58 : ファームウェアバージョンの取得?

コマンドコード
$58
コマンドコードバージョン下位バージョン上位
$59$28$01
  • Version 1.28の場合
  • このバージョンはUSBデバイスのバージョンとも一致する。

$5a : ???(PaSoRi読み取り時初期化)

80
00
  • 自己診断時
    01
    00
  • 自己診断時
    02
    00
  • 自己診断時
    0c
    00
  • Edy Viewer / SF Card Viewer
    b0
    00

$5c : FeliCaプロトコルパススルー

FeliCaと通信します。

コマンドコードFLENデータ
$5c$xxFDATA
  • FDATAは任意長
  • FDATAの内容はFeliCaコマンド
  • FLENはFDATAの長さ

$62 : ???(接続時初期化)

01 82 
00 88 
(00 08 -- PaSoRi接続直後
 00 8c -- カード無しでポーリングした後)
02 80 81 
00 cc 88
(00 dc 08 -- PaSoRi接続直後
 00 cc 8c -- カード無しでポーリングした後)
22 80 cc 81 88 
00 
02 80 81 
00 cc 88 
02 82 87 
00 88 01 
21 25 58 
00 

$7f : ??? (不正なコマンド)

※ レスポンス

コマンドチェックサムが正しいがコマンドフォーマットが異常な場合、レスポンスとして返却される。

FeliCaコマンド

FeliCaプロトコルパススルー(コマンド:$5c)によってやりとりされるコマンドです。

詳細についてはJIS:X6319-4を参照のこと。以下はSONYによる名称でJIS規格とは異なる。

(FeliCa/プロトコルに移動予定)

$00 : Polling

FeliCa/システムコード

$02 : Request Service

$04 : Request Response

$06 : Read Without Encryption

$08 : Write Without Encryption

$0a : (Search Service Code - サービスコードの要求)?

コマンドコードIDmIDX
$0a<IDm>xx
コマンドコードIDm
$0b<IDm>???
  • IDXは2バイト長。0がエリアコード0、以降1から0xffffがサービスコードとして返却されるまで。

FeliCa/サービス

  • サービスコードまたはエリアコードが格納されている
    • エリアコードは16Bits長。

$0c : (Request System Code - システムコードリストの要求)?

コマンドコードIDm
$0c<IDm>
コマンドコードIDmシステムコードリスト要素数システムコードリスト
$0d<IDm>xxxx xx

$b0 : (Push - FeliCaツールバー : メッセージ送信)

コマンドコードIDmcontent
$b0IDmcontent

FeliCa/モバイルFeliCa

パケット例

  • FeliCaのコマンド中の16Bit値はリトルエンディアンです。

初期化パケット

  • 接続時初期化
    DOWN:00 00 ff 03 fd 62 01 82 1b 00 
    UP  :ACK
    UP  :00 00 ff 03 fd 63 00 88 15 00 
    DOWN:00 00 ff 04 fc 62 02 80 81 9b 00 
    UP  :ACK
    UP  :00 00 ff 04 fc 63 00 cc 88 49 00 
    DOWN:00 00 ff 06 fa 62 22 80 cc 81 88 27 00 
    UP  :ACK
    UP  :00 00 ff 02 fe 63 00 9d 00 
    DOWN:00 00 ff 04 fc 62 02 80 81 9b 00 
    UP  :ACK
    UP  :00 00 ff 04 fc 63 00 cc 88 49 00 
    DOWN:00 00 ff 04 fc 62 02 82 87 93 00 
    UP  :ACK
    UP  :00 00 ff 04 fc 63 00 88 01 14 00 
    DOWN:00 00 ff 04 fc 62 21 25 58 00 00 
    UP  :ACK
    UP  :00 00 ff 02 fe 63 00 9d 00
  • RWオープン時初期化
    DOWN:00 00 ff 01 ff 58 a8 00 
    UP  :ACK
    UP  :00 00 ff 03 fd 59 28 01 7e 00 
    DOWN:ACK
    DOWN:00 00 ff 01 ff 58 a8 00 
    UP  :ACK
    UP  :00 00 ff 03 fd 59 28 01 7e 00 
    DOWN:ACK
    DOWN:00 00 ff 01 ff 54 ac 00 
    UP  :ACK
    UP  :00 00 ff 02 fe 55 00 ab 00 
    DOWN:ACK
    DOWN:ACK
    DOWN:00 00 ff 01 ff 58 a8 00 
    UP  :ACK
    UP  :00 00 ff 03 fd 59 28 01 7e 00 
    DOWN:ACK
    DOWN:00 00 ff 02 fe 5a 80 26 00 
    UP  :ACK
    UP  :00 00 ff 02 fe 5b 00 a5 00

POLLING($00→$01)

  • RWの上に乗せられているFeliCaからIDm等の情報を取得します。
  • IDmはEthernetのMACアドレスにあたり、そのほかの通信で必要になります。
  • コマンド
    00 00 ff 07 f9 5c 06 00 00 03 00 00 9b 00 
プリアンプルLENSUM1DSUM2コマンドコードシステムコードRFUタイムスロットSUM3ポストアンプル
00 00 FF07F95C060003 0000009B00
  • コマンドが認識されると即ACKが帰ります。処理が完了するとレスポンスが帰ってきます。
  • システムコードには$FFFFを入れると全てのカードが反応します。
  • レスポンス
    00 00 ff 13 ed 5d 12 01 01 01 05 01 cb 01 f3 1c 02 00 4b 02 4f 49 93 ff 34 00 
プリアンプルLENSUM1DSUM2コマンドコードIDmPMmSUM3ポストアンプル
00 00 FF13ED5D120101010501CB01F31C02004B024F4993FF3400

Read Without Encryption($06→$07)

(send) send:00 00 FF 12 EE 5C 11 06 01 01 05 01 CB 01 F3 1C 01 0F 09 01 80 00 00
10 00
(ACK?) recv:00 00 FF 00 FF 00
(recv) recv:00 00 FF 1E E2 5D 1D 07 01 01 05 01 CB 01 F3 1C 00 00 01 16 01 00 02
 0A 7D 03 11 03 0D 3C 00 00 00 7F 00 1C 00
[00] : 16 01 00020A7D 03-11 -> 03-0D      3C00 -    60 Yen        00007F00
  • プリアンプル等を省略したコマンド
    06 01 01 05 01 CB 01 F3 1C 01 0F 09 01 80 00 00
コマンドコードIDmサービスリストの長さサービスリストブロック数ブロックリスト
0601010501CB01F31C01090F0180 00 00
  • このコマンド例は2バイトであるべきブロックリストを3バイト使っている。RWは間違ったコードもある程度は処理する。
  • このコマンドで読み取ることの出来るデータに関しては→FeliCa/サービス

型式指定

  • 総務省指定 第BC-04001号

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-11-09 (金) 08:12:15 (994d)