M24SRは、NDEFタグ情報をI2Cで書き込むEEPROMです。書き込み動作には時間がかかりますので、書き込みデータを送出してからしばらくの間は、次のコマンドを処理することができません。書き込み動作中に次のコマンドが送られた場合には、NAKが返されます。1回の書き込みコマンドで送ることのできるデータ量の最大は246バイトとなっていますので、タグデータの容量がこれを超える場合には複数回数の書き込みが必要となり、その間には書き込み待ち時間が必要となります。
そこで、データシートで書き込み時間を調べてみると。。
246バイト書くのに最大で150msも待ちが必要となっています。M24SRは8KBのEEPROMを持っていますので、単純に最大時間を待っていたのでは、この空間すべてに書き込みをおこなう場合にはおよそ5秒が必要となることになります。実際には最大時間よりも短い時間で書き込みが終了するはずですから、できるだけ早くに書き込みが完了したことを検出して、待ち時間を短くしたいことろです。そのためには2つの方法が考えられます。
GPO端子は、RFからの書き込み検出に使っていましたが、ホストからの書き込み時には設定を変更して書き込み終了検出にも利用した方が良さそうです。
なお、同一ページ内での書き込み待ち時間は5msとなっていますが、データシートには「ページ」の説明がありませんでした。STのe2eCommunitiesによると、EEPROMは16バイトが1ページの構成になっているようです。
そこで、データシートで書き込み時間を調べてみると。。
Symbol | Parameter | Min. | Max. | Unit |
---|---|---|---|---|
twr | I2C write time in one page | -- | 5 | ms |
I2C write time up to 246 bytes | -- | 150 | ms |
246バイト書くのに最大で150msも待ちが必要となっています。M24SRは8KBのEEPROMを持っていますので、単純に最大時間を待っていたのでは、この空間すべてに書き込みをおこなう場合にはおよそ5秒が必要となることになります。実際には最大時間よりも短い時間で書き込みが終了するはずですから、できるだけ早くに書き込みが完了したことを検出して、待ち時間を短くしたいことろです。そのためには2つの方法が考えられます。
- 書き込みコマンドを送ってみて、NAKが返ってきた場合には再試行する。再試行までは適当なディレイをおくことで、消費電力の低減を図る。
- 書き込みが完了したことをGPO端子で検出できるようにしておく。割り込みで検出することで、sleepあるいはdeep sleepして待つことができる。
GPO端子は、RFからの書き込み検出に使っていましたが、ホストからの書き込み時には設定を変更して書き込み終了検出にも利用した方が良さそうです。
なお、同一ページ内での書き込み待ち時間は5msとなっていますが、データシートには「ページ」の説明がありませんでした。STのe2eCommunitiesによると、EEPROMは16バイトが1ページの構成になっているようです。