Wednesday, October 03, 2007

SPI はまりどころ

 マイコン周辺IC で、SPI でデータのやりとりをするものは多い。単純なインターフェイス、といわれた割にはハマって結構な時間を費やしたので、ハマリどころをまとめておく。

  1. 周辺 IC のデータシートに「SPIのモード何々に対応」、と書いてあっても盲信しないこと。タイミング図や説明などで確認する。
  2. タイミング図で確認するときは、CS (SS) が active low か active high か、SCLK の極性(CS が active になろうとするとき、SCLK が low レベルか、high レベルのどちらでなくてはならないか)、データをいつ読み書きするか(SCLK の立ち上がりなのか、立ち下がりなのか)に着目する。
  3. データシートに書いてある SPI のモード値を機械的に SPIM_Start の初期化に使ってはいけない。1~2で確認したことと、SPIM モジュールの解説とを照らし合わせて、正しい値で初期化すること。
そのほか、
  • SPIMモジュールの SPI Modes の解説にある、"Clock Polatiry" は、上に書いた 「SCLK」 の極性のことであって、SPIMモジュールに供給するクロックの極性のことではない。
  • SPIMモジュールでは、データの送信と受信は同時に行われる。受信だけしたい場合には、なんでもいいから適当な値を SPIM_SendTxDataで送信してから受信する(SPIM_bReadStatusによるチェックも忘れずに)。
  • SPIMモジュールに供給するクロックの値は、SPI の通信速度の2倍の値を与える(最大12 MHzまで、すなわち通信速度にして 6Mbps になる)。通信速度の上限値は周辺IC のデータシートで確認すること(場合によっては下限速度もあるので注意)。通常、通信速度を1~2Mbpsにしておいて問題ない…っぽい。

Labels: ,