平成27年12月 16日
汎用の高速シリアル通信機能(25) SPIの動作検証(RTCとフラッシュROM)
簡単な動作検証を行いました。最初はRTCからです。使用するRTCはDS3234という型式です。発信周波数の温度補正機能を持った高精度品だそうです。
このデバイスはSPIバスのCS信号をアクティブにした後、1バイトのアドレスを受け取ります。この値によって2バイト目以降のデータの送受信方向が決まります。具体的には、アドレスが0x80に満たない場合、2バイト以降はデータの読み出しとなり、アドレスが0x80以上ではデータの書き込みとなります。
これはデータに対して読み出し用と書き込み用でアドレスが分かれています。
アドレス表をDS3234デバイスデータシートより引用します。
図中の日時。時間に関する数値部分はBCDです。16進数ではありません。
読み出しデータは必要なアドレスから開始して、必要な部分まで読み出せは、そこで読み取りを中断(SPIバスのCS信号をネガティブにする)してかまいません。
一旦時間を設定しておけば、後は1バイトの開始アドレスを書き込むことで、簡単に時間を読み出しすることができます。
次はフラッシュROMです。こちらはA25L016という型式の16Mビット品を使用します。
このデバイスは完全なコマンド方式でCS信号をアクティブにした後、1バイトのコマンドとオプションで3バイトのアドレスを読み込みます。コマンドによって、以降のデータが読み出しか書き込みかが決まります。こちらもデバイスデータシートから命令表を引用します。
こちらで注意すべき点を列記しておきます。
- 書込み操作の前には毎回WRENコマンドを発行しておく必要がある
- 書き込みおよび消去には長い時間が必要です。確認のための読み出しは要求された時間が経過した後に行う必要があります。
- このデバイス自体はSPI動作周波数で100MHzまで対応と謳っていますが、実際にPICマイコンに接続して、そこまで高速な動作は出来ません。精々10〜20Mhz程度が限界です。
動作速度に関して、少しだけ書いておきます。
このデバイスを標準仕様のSPIでROMのリード動作をさせた所、動作可能周波数は10MHzまででした。その上の20MHzではデータ化けが発生しています。ROMからデータが出力されていることからCPUからROMへは正しくデータが渡っているようです。そこでSPIの仕様からは逸脱するのですが、PICの拡張仕様と思われるSMP機能を試してみました。この機能はマスタ側でのみデータの取り込みタイミングをデータ出力期間の中間から終わり側に移動させるもので、タイミングマージンの増加が見込めます。結果、ワンポイントでの実験ですが20MHzでも正しくデータを読み出すことが出来ました。どうしても速度が必要な用途では検討の価値はありそうです。