Armadilloフォーラム

I2C ダミークロック リセットについて

marumo_mizuno

2019年2月18日 18時36分

いつもお世話になります。
丸茂電機㈱ 水野と申します。
宜しくお願い致します。

【不具合現象】
・アプリケーション使用中、I2Cラインへの外部要因(ノイズ等)によりI2Cの通信が取れなくなる。

【お聞きしたい内容】
・不具合が発生した際のエラー処理を追加するため、下記2点について教えてください。
マニュアルや過去フォーラム投稿を確認してもわからなかったため、お手数かけますがよろしくお願い致します。

1.armadillo-440は起動時に、I2Cデバイスに対してダミークロックを出力してますが、
 自作アプリケーションにて同じようにダミークロックを出力する方法を教えてください。

2.上記ダミークロックを出力しても解決しない場合、
 armadillo-440のCPUであるi.MX25自体のI2C部分をソフトリセットする方法を教えてください。

【環境】
・armadillo-440 LCD拡張付
・atmark-dist-20171227
・linux-2.6.26-at25
・atde4-amd64-qt

以上、何卒宜しくお願い致します。

コメント

溝渕です。

> 1.armadillo-440は起動時に、I2Cデバイスに対してダミークロックを出力してますが、
>  自作アプリケーションにて同じようにダミークロックを出力する方法を教えてください。

i2cdev等を利用して、存在しないスレーブアドレスに対してアクセスしようと
すると、クロックが出力されます。

[Armadillo実践開発ガイド 第3部: i2cdevドライバー]
https://manual.atmark-techno.com/armadillo-guide/armadillo-guide-3_ja-3…

> 溝渕です。
>
> > 1.armadillo-440は起動時に、I2Cデバイスに対してダミークロックを出力してますが、
> >  自作アプリケーションにて同じようにダミークロックを出力する方法を教えてください。
>
> i2cdev等を利用して、存在しないスレーブアドレスに対してアクセスしようと
> すると、クロックが出力されます。
>
> [Armadillo実践開発ガイド 第3部: i2cdevドライバー]
> https://manual.atmark-techno.com/armadillo-guide/armadillo-guide-3_ja-3…
>

遅くなり申し訳ありません。

丸茂電気の水野です。

溝渕様、コメントありがとうございます。

エラーを検出した際、使用していないスレーブアドレスに対してioctrlでアクセスするようにすれば
ダミークロックのようにできるという解釈でよろしいでしょうか。

また、I2CのPINはCON14-3をSCLにCON14-4をSDAとして使用しています。
gpioの/sys/class/gpio/CON9_12のようにI2Cで使用しているPINへのアクセスは可能でしょうか。

お手数かけますがよろしくお願い致します。

溝渕です。

> エラーを検出した際、使用していないスレーブアドレスに対してioctrlでアクセスするようにすれば
> ダミークロックのようにできるという解釈でよろしいでしょうか。

ダミークロックは、現在進行中のI2Cシーケンスを終了させるために出力しま
す。そのため、スレーブデバイスの最長のI2Cシーケンス分のクロックを送出
する必要があります。

クロックを出す為にはread/writeする必要があると思います。

> また、I2CのPINはCON14-3をSCLにCON14-4をSDAとして使用しています。
> gpioの/sys/class/gpio/CON9_12のようにI2Cで使用しているPINへのアクセスは可能でしょうか。

基本的に、Linuxカーネルでは、デバイスドライバ等で制御しているピンをユー
ザーランドから直接触ることはできません。

水野です。

溝渕様、コメントありがとうございます。

> > エラーを検出した際、使用していないスレーブアドレスに対してioctrlでアクセスするようにすれば
> > ダミークロックのようにできるという解釈でよろしいでしょうか。
>
> ダミークロックは、現在進行中のI2Cシーケンスを終了させるために出力しま
> す。そのため、スレーブデバイスの最長のI2Cシーケンス分のクロックを送出
> する必要があります。
>
> クロックを出す為にはread/writeする必要があると思います。

わかりました。
スレーブデバイスに対してread/writeしてみます。

> > また、I2CのPINはCON14-3をSCLにCON14-4をSDAとして使用しています。
> > gpioの/sys/class/gpio/CON9_12のようにI2Cで使用しているPINへのアクセスは可能でしょうか。
>
> 基本的に、Linuxカーネルでは、デバイスドライバ等で制御しているピンをユー
> ザーランドから直接触ることはできません。
>

デバイスドライバで制御している場合はアクセスできない旨、かしこまりました。

実際に行い解決しましたらまたコメント致します。

水野です。

無事解決しました。
エラーが起きた際フラグを建て、フラグが建っているとき
スレーブデバイス0x00~0xffに対してリードをかけ
エラーが起きたICに対して初期化処理を行うようにしました。

これによりI2CのPINを抜き挿ししても次回アクセスできるようになりました。

コメントありがとうございました。

> 水野です。
>
> 溝渕様、コメントありがとうございます。
>
> > > エラーを検出した際、使用していないスレーブアドレスに対してioctrlでアクセスするようにすれば
> > > ダミークロックのようにできるという解釈でよろしいでしょうか。
> >
> > ダミークロックは、現在進行中のI2Cシーケンスを終了させるために出力しま
> > す。そのため、スレーブデバイスの最長のI2Cシーケンス分のクロックを送出
> > する必要があります。
> >
> > クロックを出す為にはread/writeする必要があると思います。
>
> わかりました。
> スレーブデバイスに対してread/writeしてみます。
>
> > > また、I2CのPINはCON14-3をSCLにCON14-4をSDAとして使用しています。
> > > gpioの/sys/class/gpio/CON9_12のようにI2Cで使用しているPINへのアクセスは可能でしょうか。
> >
> > 基本的に、Linuxカーネルでは、デバイスドライバ等で制御しているピンをユー
> > ザーランドから直接触ることはできません。
> >
>
> デバイスドライバで制御している場合はアクセスできない旨、かしこまりました。
>
> 実際に行い解決しましたらまたコメント致します。

パシフィックシステムの井上と申します。
現在、水野様と同様外部からのノイズによりI2Cのデバイスに対して読み書き不能になるという現象に直面しております。

> 水野です。
>
> 無事解決しました。
> エラーが起きた際フラグを建て、フラグが建っているとき
> スレーブデバイス0x00~0xffに対してリードをかけ
> エラーが起きたICに対して初期化処理を行うようにしました。
>
> これによりI2CのPINを抜き挿ししても次回アクセスできるようになりました。
>

水野様は解決されたとのこと
> エラーが起きたICに対して初期化処理を行うようにしました。
初期化処理とは具体的にどのようにされたのでしょうか?

ご教示くださいますよう、お願いします。

遅くなり申し訳ありません。
開発を半年ほど離れていたため確認していませんでした。
丸茂電気の水野です。

井上様、コメントありがとうございます。

ここでいう初期化設定は、
ICに対して使用する際どのように使うか最初に書き込んでいると思います。
其方を指しています。

> パシフィックシステムの井上と申します。
> 現在、水野様と同様外部からのノイズによりI2Cのデバイスに対して読み書き不能になるという現象に直面しております。
>
> > 水野です。
> >
> > 無事解決しました。
> > エラーが起きた際フラグを建て、フラグが建っているとき
> > スレーブデバイス0x00~0xffに対してリードをかけ
> > エラーが起きたICに対して初期化処理を行うようにしました。
> >
> > これによりI2CのPINを抜き挿ししても次回アクセスできるようになりました。
> >
>
> 水野様は解決されたとのこと
> > エラーが起きたICに対して初期化処理を行うようにしました。
> 初期化処理とは具体的にどのようにされたのでしょうか?
>
> ご教示くださいますよう、お願いします。
>