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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。