FM3基板で、あきらめてSPIドライバを実装しようとしている。
できるだけ楽をしようとしたのだが、APIから戻ってこないのではどうしようもない。
ああ、デバッガがあれば・・・。
FM3(正確には、MB9BF618T)では、SPI機能をCSIOというクロック同期シリアルインターフェースで実現するようだ。
そもそもシリアル通信自体が「マルチファンクションシリアルインターフェース」という汎用シリアル機能で実現するようになっている。
なので、UARTやI2Cなども含めて扱えるようなのだが、その分、設定するレジスタも多いように思う。
それはいいとして、SPIだ。
SPIについて「SPI転送(I)」と「SPI転送(II)」しかないのだ。
いや、SPIってモードが4つあるのに、なんで2つなんだ??
そう思って「ノーマル転送(I)」の説明を見ると、SPI転送とほぼレジスタもタイミングも一緒。
違うのは、レジスタでは「SPI」というビットを立てるかどうかと、タイミングではSCKの立ち上がりで転送するか立ち下がりで転送するかというところ。
あれ・・・ここの違いがSPIのモードじゃないっけ・・・。
古いInterface誌を引っ張り出した。
モード0:クロックはL。立ち上がりエッジでデータ取得
モード1:クロックはH。立ち下がりエッジでデータ取得
モード2:クロックはL。立ち下がりエッジでデータ取得
モード3:クロックはH。立ち上がりエッジでデータ取得
ホストがFeliCa Plugを使うときは、モード1で送信(FeliCa Plugはモード3で受信)、モード3で受信(FeliCa Plugはモード1で受信)、ということになるようだ。
では、FM3の場合。
ノーマル転送(I) :クロックはH。立ち下がりエッジで送信。立ち上がりエッジで受信。
ノーマル転送(II):クロックはL。立ち上がりエッジで送信。立ち下がりエッジで受信。
SPI転送(I):クロックはH。立ち上がりエッジで送信。立ち下がりエッジで受信。
SPI転送(II):クロックはL。立ち下がりエッジで送信。立ち上がりエッジで受信。
送信と受信でタイミングが違うのは、同じ設定で送受信できるようにするためだろう。
FeliCa Plugでいえば、ノーマル転送(I)を使えばよさそうだ。
こういうのは人口に膾炙している用語を使った方がいいと思うなあ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。