はじめて投稿します。
RXでDMAかDTCを使ったI2C通信を行うことになりました(接続先はEEPROM)。実装するために参考になるアプリケーションノートやWebサイトがありましたらお教え頂けないでしょうか。よろしくお願いします。
NoMay様、チョコ様様々な情報本当にありがとうございました。難しそうな所が色々ありますがお教え頂いた情報を元に実際にプログラムも作ってみながら進めたいと思います。SPIへの変更やDMA、DTCの必要性についても周りに聞いてみたいと思います。ありがとうございました。
お世話になります。RX23Tでモータ制御を行っています。制御中の回転数、電流をi2c接続のLCDに表示させようとしていますが、i2cの送信を掛けると、主制御が止まってしまい上手くいきません。DTCなどを用いデータ送信をバックグラウンドでできないかと、設定方法などを調べて居りましたら、本QAに行きつきました。i2c接続では、DTCはあまり使わないとの事ですが、スマートコンフィギュレータでも、SCI1のデータ処理を割込かDTCを選べますが、i2cのDTCはどのような用途での使用が一般的なのでしょうか?そもそも、私の様な目的では、i2c接続は不向きでしょうか?便乗の質問になりますが、ヒントだけでも頂けましたら幸いです。
チョコです。
I2Cの通信は、スタート・コンディションに続けて、送信か受信かで異なるスレーブ・アドレスを送信し、割り込みが発生して、ステータスを確認してスレーブからACK応答があれば、データの通信になります。ACKがなかったときの処理を考えると割り込みで無条件にデータの通信を行っていいわけではありません。送信の場合には、送信したデータごとにACKの確認を行います。ここらをきちんと処理しようとすると、DTCやDMAは使えません。
以前のスレッドへのコメントで、「RXのI2Cの割り込みがどうなっているか分からないので」と言ったのは、正常終了と異常終了で割り込みが分かれていれば、上のような処理を行って、正常終了の割り込みだけでDTCを起動できれば、可能性はありますが、割り込みが一つだとDTCは使えないと考えられるからです。受信については、受信したい最後のデータに対してはNACK応答(ACK応答しない)とする必要があるので、そのためにケアが必要です。
もしかすると、I2CによるLCD制御では、送信しかしないかもしれません(私が使ったことがあるI2CのLCDはLCD側から送信することはできませんでした)。その場合には、スレーブ・アドレスへのACK確認だけでいいかもしれません。確実にそのスレーブ・アドレスにLCDがあるなら、ACKが必ず戻るとの前提で、通信ステータス確認を完全に無視して垂れ流し的に送信するだけも考えられないではありません。この場合にはDTCが使える可能性があります。また、LCDに複数の表示データを連続して送信していいかも気になるところです。
RXは使ったことがないので、スマートコンフィギュレータがどのような処理を行っているか分かりませんし、I2Cでの通信に許されるオーバヘッドがどの程度か分からないので、割り込み処理でどこまで可能かは分かりません。
以上