Armadilloフォーラム

I2Cユーザ特融デバイスの使用方法について

mitsuya-shin

2018年10月9日 14時44分

以下マニュアルでの記述の意味は具体的にどのようにすればよいのでしょうか?
質問の回答でお願いします。
「Armadillo-840 では標準状態では、CONFIG_I2C_CHARDEV が有効となっているためユーザードラ
イバで I2C デバイスを制御することができます。 ユーザードライバを利用する場合は、Linux カーネル
で I2C デバイスに対応するデバイスドライバを無効にする必要があります。」

質問1.「CONFIG_I2C_CHARDEV 」が有効になっているときの以下の制御ができるのでしょうか?
また、できない場合どの様な設定が必要となりますでしょうか?

LaRafd = open(I2C_DRV0, O_RDWR); // I2C-0のドライバオープン
ioctl(LaRafd, I2C_SLAVE, I2cAddr); // アドレス設定

ret = write(LaRafd, pdata, count); // データ等の送信
ret = read(fd, pdata + read_length, count - read_length); //データの受信

質問2.「Linux カーネルでI2C デバイスに対応するデバイスドライバを無効にする必要...」の無効にするには
どんな設定をすればよいでしょうか?

コメント

at_kojiro.yamada

2018年11月9日 18時45分

> 以下マニュアルでの記述の意味は具体的にどのようにすればよいのでしょうか?
> 質問の回答でお願いします。
> 「Armadillo-840 では標準状態では、CONFIG_I2C_CHARDEV が有効となっているためユーザードラ
> イバで I2C デバイスを制御することができます。 ユーザードライバを利用する場合は、Linux カーネル
> で I2C デバイスに対応するデバイスドライバを無効にする必要があります。」
>
> 質問1.「CONFIG_I2C_CHARDEV 」が有効になっているときの以下の制御ができるのでしょうか?
> また、できない場合どの様な設定が必要となりますでしょうか?
>
> LaRafd = open(I2C_DRV0, O_RDWR); // I2C-0のドライバオープン
> ioctl(LaRafd, I2C_SLAVE, I2cAddr); // アドレス設定
>
> ret = write(LaRafd, pdata, count); // データ等の送信
> ret = read(fd, pdata + read_length, count - read_length); //データの受信

上記でうまく動かないということでしょうか?
I2Cの信号(SCLとSDA)は出ていますか?

すでに確認されているかもしれませんが、
linux-3.4-at/Documentation/i2c/dev-interface も参考にしてみてください。

>
>
> 質問2.「Linux カーネルでI2C デバイスに対応するデバイスドライバを無効にする必要...」の無効にするには
> どんな設定をすればよいでしょうか?

例えば、RTC S35390Aを /dev/i2c-0 経由で制御したい場合は、
LinuxカーネルコンフィギュレーションでCONFIG_RTC_DRV_S35390Aを無効化する必要があります。

    -> Device Drivers                                                                                           │
      -> Real Time Clock (RTC_CLASS [=y])
         [ ] Seiko Instruments S-35390A <- nキーを押してチェックを外す

もし、お使いのI2C デバイスに対応するデバイスドライバがカーネルに存在しないのであれば、この作業は必要ありません。

カーネル設定がデフォルトの状態で通信ができるようになりました。

回答いただきありがとうございました。