User manual - NFCライブラリマニュアルver.1.06(2012年3月29日)

52
4.4 コマンド送信について
Tag-it にコマンドを送信する
Tag-it に対して、NFCExchangeData関数を使って Write Single Block / Lock Block / Write AFI / Write
DSFID コマンドを送信している最中に IC タグを通信可能範囲外に離した場合、戻り値が
NFC_ERROR_TIMEOUT 等となりエラーを通知しても、Write Lock が完了している場合があります。
そのため、Write Lock を確実に行うために、NFCExchangeData関数の戻り値が
NFC_ERROR_TIMEOUT 等のエラーとなった場合は、NFCExchangeData関数の戻り値が NFC_OK となる
まで、リトライを行う必要があります。
以下のフローの手順に従い、リトライ処理を行ってください
Tag-it Write Single Block コマンドを送信する
1. TargetID 配列を 0 クリア等で初期化します。
2. iCount=0 をセットします。
3. iCount<定数 N の場合、次の処理に進みます。定数 N はループ回数の上限を表しており、回数制
を設けることにより、無限ループを回避します。
4. NFCPollingCard関数により、通信範囲内の IC カードを検索します。
5. IC カードの起動に成功した場合は、NFCGetCardResponse関数により IC カードの UID を取得しま
す。
6. TargetID が初期状態の場合は取得した UID をセットします。
7. TargetID[6]をチェックします。TargetID[6] 0x07 の場合、Tag-it シリーズの IC カードであるため、
次の処理に進みます。
8. NFCExchangeData関数により Read コマンドを送信します。(このとき、ISO15693 コマンドの Flag
0x60 を指定し、対象ブロックの Lock 状態を確認します)
9. NFCExchangeData関数の戻り値が NFC_OKとなった場合は、応答を格納している ReceiveData配列
をチェックします。ReceiveData[1]=0x00 の場合、対象ブロックは Lock されていないので、次の処理
に進みます。
10. NFCExchangeData関数により Write コマンドを送信します。(このとき、ISO15693 コマンドの Flag
0x60 を指定し、対象ブロックの Lock 状態を確認します)
11. NFCExchangeData関数の戻り値が NFC_OK の場合は、アプリケーションにおいて「書き込みに成功
した」旨を表示し、処理を終了します。(正常終了)
12. NFCExchangeData関数の戻り値が NFC_ERROR_TIMEOUTNFC_NOT_ACTIVATION
NFC_ERROR_SUSPENDNFC_ERROR_AUTOOFF の場合は、書き込みに失敗しているときと、書き
込みに成功しているが書き込み後のチェックに失敗しているときがあります。確実に書き込みを完了
するためには、アプリケーションにおいて「書き込みに失敗/再度同じカードをかざす」旨を表示し、3.
に戻って Write Single Block 処理のリトライを行います。
13. NFCExchangeData関数の戻り値が上記以外の場合は、Write データと TargetID を保存し、本体リセ
ット後に 1.に戻り、再度 Write Single Block の処理フローを実行します。このとき、1.において、
TargetID 配列は初期化せずに、保存した TargetID をセットします。