iicのソフトウエアリセットについて

IICのEEPROMには、ソフトウェアリセットがあります。
特に電源投入時や何らかの事情で読み書きができなかった場合に実施するものです。
下記の資料の12ページ。
https://www.onsemi.jp/pub/Collateral/ENA2087JP-D.PDF

流れとしては、
 ・スタートコンディション
 ・SDAをHの状態で、SCLをダミー9クロック
 ・スタートコンディション
となります。

ここで質問です。
マイコンのIIC機能を有効にした後で、これを行おうと考えました。
スタートコンディションは実施できますが、
”SDAをHの状態で、SCLをダミー9クロック”ができなかったです。
行うにはIIC機能を無効にしてSCLポートとSDAポートを汎用ポートにして行うしかないでしょうか?

hdwinit.cでSFRが設定されIIC機能が有効になります。
電源投入時ならば、hdwinit.cを通過する前なので汎用ポートで実施することは可能です。
ですが、hdwinit.cを通り過ぎた後で、SCLポートとSDAポートを汎用ポートに戻すのが困難です。
この辺は皆さんどのようにされていますか?

Parents
  • チョコです。
    RL78/G14のマニュアルでは、「図18 - 35 シングルマスタ・システムでのマスタ動作」の下の注にポートで制御するように記載されています。
    そもそも、問題のEEPROMのソフトウェアリセットについては、問題があります。外部リセット端子がないEEPROMの問題点は、パワーオンリセットしかないので、通信中にマスタ(MCU等)にリセットがかかってしまうと、もしEEPROM がSDAをロウに引いた状態になっているとスタートコンディション自体が発行できません。
    どうしても、このような波形を出すだけ(スタートコンディションが発行可能なら)であれば、スレーブアドレス0xFFからの読出しを行えばいいはずです。ただし、このスレーブアドレスはI2Cバスの仕様では、デバイスIDの読出しとなります。デバイスIDの読出しシーケンスを満足していないので、結果がどうなるかは不明ですが、すぐにストップ・コンディションを発行すれば何とかなると考えられます。

    そもそも、EEPROMで問題になるのは、上でも述べたように、EEPROMがSDAをロウに引いた状態になってしまうことです。これに対応するためには、SCL信号をポートで制御するしかありません。

    ということで、私はこのような処理はやっていません。
Reply
  • チョコです。
    RL78/G14のマニュアルでは、「図18 - 35 シングルマスタ・システムでのマスタ動作」の下の注にポートで制御するように記載されています。
    そもそも、問題のEEPROMのソフトウェアリセットについては、問題があります。外部リセット端子がないEEPROMの問題点は、パワーオンリセットしかないので、通信中にマスタ(MCU等)にリセットがかかってしまうと、もしEEPROM がSDAをロウに引いた状態になっているとスタートコンディション自体が発行できません。
    どうしても、このような波形を出すだけ(スタートコンディションが発行可能なら)であれば、スレーブアドレス0xFFからの読出しを行えばいいはずです。ただし、このスレーブアドレスはI2Cバスの仕様では、デバイスIDの読出しとなります。デバイスIDの読出しシーケンスを満足していないので、結果がどうなるかは不明ですが、すぐにストップ・コンディションを発行すれば何とかなると考えられます。

    そもそも、EEPROMで問題になるのは、上でも述べたように、EEPROMがSDAをロウに引いた状態になってしまうことです。これに対応するためには、SCL信号をポートで制御するしかありません。

    ということで、私はこのような処理はやっていません。
Children
No Data