2012/05/16

[felicaplug]ブロックリストの説明がよくわからない

2012/05/19追記あり

NFC-Fでは、データアクセスにブロックリストというデータが使われる。
FeliCa Liteだけを使っていると気にしないが、FeliCaにはいろいろなアクセスの方法がある。
ブロックごとに指定できるので、このような方式になっているのだろう(もう忘れた)。
詳細は、PDFにもあるし、黒本もあるので読まれるとよかろう。

 

FeliCa Plugは、ブロックリストを受信しても処理せず、そのままマイコンに送ってくる。
ただそれは受信側のしくみだというだけで、R/Wから送信する場合にはその限りではない。
簡単にいえば、R/Wの仕様が厳しくて、ありえなさそうなブロックリストを受け付けない、ということもありうるということだ。

 

まあ、それはいい。
しかし続けて書かれている、アクセスモードとサービスコードリスト順番。
これが「FeliCa Plugでは常に○○を指定します」と書かれている。

私の基準からすると、これは「FeliCa Plugはブロックリストを評価しない」という説明とは矛盾している。
「評価しない」のであれば、「常に○○を指定します」ではだめなのだ。
この書き方では、MUST、になってしまう。
他の製品では評価しているのでなるべくそうしてほしい、というところで、MAY、であればわかるのだが。


RFC-2119でMUSTだのMAYだのは規定があるので、Sonyさんのドキュメントもそうなっているといいのだが、といつも思う。

作業チーム内で議論になるのも、お客さんともめるのも、FeliCaドキュメントの解釈についてということがしばしばで「ドキュメントチームは一体なにやってんだか」ってことが多かった。

技術文書は、曖昧な箇所があってはいけない(自分の書いたものは棚に上げるが…)。
ブルックス氏の本にあったが、こんな感じだ。

海に持っていくクロノメーターは2個ではいけない。1個か、そうでなければ3個以上にすること。

文章の内容はよくわからないけど、私はこれを書き方の説明と思っている。
2個ではいけない理由はさておき、「2個ではいけない」ということと「1個 or 3個以上」という説明の仕方にしないとわかりにくい、ということ。
(古い格言、って書いてあるけど、なんだろうね?)

 

FeliCaドキュメントは、「2個ではいけない」か「1個か3個以上」のどちらかしか書かれていないことが多い。
そのせいで、他のドキュメントとの整合や、似たような製品、過去の知識などと比べてしまい、変な推測を生んでしまうのだ。

「2個ではいけない、と書いているので、念のために3個にしておいた方がいいのでは・・・」
「いや、これは1個だけが可能で、2個ではだめだ、といっているのかもしれない・・・」

とか。

FeliCa実装をしている人の大半はドキュメントで泣いていると思うので、改善されると嬉しい。
今は改善されているのだったらいいんだけどね。
「当時言えばよかったやん」って思うかもしれんけど、まあ、いろいろ、あるんでね。


昔の愚痴はこの辺りにして。

「ブロックリストは評価しない」のだから、ブロックリストの説明にある「常に○○を指定」は無視しよう。

無視するけど、NDEF対応するんだからマイコン側で評価するんだけどね。
今回書いたのは、誰がどこまで責任を持つか、というところなのだ。


2012/05/19追記

傘を盗まれた日に書いてたので、感情的になっていたような気がする。
すまん。
もうちょっと冷静にドキュメントを読んでみよう。

 

まず念頭に置いておかないといかんのは、FeliCa PlugのドキュメントはNFC-Fに配慮したものになっている、というところだ。

例えば「FB転送時にはシステムコードを12fchにしないでください」などだ。
FB転送は、FT転送のようなランダムアクセス(とはちょっと違うけど、イメージ的にそんなやつ)ができないので、Type3 Tagっぽく実装したとしてもR/W側の実装によってはアクセスできないことがある。

もしそういう機器が出回ってしまうと、その機器のみならずType3 Tag、ひいてはNFC-F機器自体の信頼性を揺るがすことにもなりかねない。
NFC関係の部品があまり一般で使えるようになっていなかったのも、このあたりの事情があるんじゃないかと勝手に思っている。

 

ブロックリストについても、Type3 Tagのドキュメントで

[RQ_T3T_CSE_027]アクセスモードは「000b」 (SHALL)
[RQ_T3T_CSE_028]サービスコードリストの先頭のサービスは「0000b」

と書かれている。
サービスについては、

[RQ_T3T_MEM_001]R/Wは「001001b」、ReadOnlyは「001011b」

となっていて、FeliCa Plugでは「0009hを推奨」となっている。
つまり、サービスは1つだけを推奨していて、サービスリストにも1つしか記載しない前提なので、そのサービスコード順番は「0000b」となる。

ということなのだろう。

いろいろと資料を見ていくとわかるのだが、やっぱり大変だなあ、と思った。
まあ、私も誤解していたところがあるので、これで許していただきたいところだ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。