Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cannot use rtcounter in high I2C SCL frequency #13

Closed
Tiryoh opened this issue Feb 14, 2019 · 2 comments
Closed

cannot use rtcounter in high I2C SCL frequency #13

Tiryoh opened this issue Feb 14, 2019 · 2 comments
Labels
Status: Abandoned The issue or Pull Request is wontfix Type: Bug Bug or Bug fixes

Comments

@Tiryoh
Copy link
Contributor

Tiryoh commented Feb 14, 2019

特定の条件下ではrtcounterが使用できない場合があります。詳しくは以下の「考えられる原因と対処方法」に書いていますが、CPUのgovernorをpowersaveに指定し、CPUクロックを下げることでエラーを回避してrtcounterを使用することができるようになります。

環境

Raspberry Pi 3 Model B

OS

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:        18.04
Codename:       bionic
$ uname -a
Linux ubuntu 4.15.0-1027-raspi2 #29-Ubuntu SMP PREEMPT Wed Oct 24 08:56:30 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux

rt-net/RaspberryPiMouse のバージョン

$ git log -n 1
commit 864acceef45eac90b0c7f8342e0371468ea67e62

現象

i2c-toolsでデバイスに直接アクセスしようとしてもRead faildとなる

$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: 10 11 -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
$ sudo i2cget -y 1 0x10 0x10 w
Error: Read failed

デバイスドライバをインストールする際にrtcounternot found, or wrongとなる

$ cd RaspberryPiMouse/src/drivers/
$ make
$ sudo insmod rtmouse.ko
$ dmesg
[   70.775579] rtmouse: loading driver...
[   70.776570] rtmouse: rtcounter not found, or wrong i2c device probed
[   70.777546] rtmouse: rtcounter not found, or wrong i2c device probed
[   70.886544] rtmouse: mcp3204 probed
[   70.886606] rtmouse: 15 devices loaded.
[   70.886610] rtmouse: module installed at 4294910017

I2Cの波形

エラーが出る場合のI2Cの波形

tek00027

エラーが出ない場合のI2Cの波形

  • モータのスイッチのオン/オフ切り替えを繰り返すとエラーが出ず、rtcounterにアクセスできる場合があります。
    tek00028

考えられる原因と対処方法

今回使用した環境では、デフォルトでI2Cのbaudrateは100kHzですが、CPUのクロックが600MHzまで下がるとI2Cのbaudrateが62.5kHzまで下がるようです。
I2Cのbaudrateを62.5kHzまで下げるとrtcounterへのアクセスに失敗しません。以下の方法でCPUのクロックを下げ、I2Cのbaudrateを62.5kHzにすることができます。

$ sudo apt install cpufrequtils
$ sudo cpufreq-set -g powersave

参考

@Tiryoh Tiryoh pinned this issue Feb 14, 2019
@Tiryoh
Copy link
Contributor Author

Tiryoh commented Feb 14, 2019

今回は一時的にCPUのクロックを下げる方法でデバイスドライバをインストールできることを確認しましたが、

  • CPUクロックを固定
  • I2Cのbaudrateを固定

などの対処方法もあるようです。
https://qiita.com/7of9/items/bc9054567c1f657243e3
今後、追って確認していきます。

@Tiryoh Tiryoh added the Type: Bug Bug or Bug fixes label Feb 17, 2019
@Tiryoh
Copy link
Contributor Author

Tiryoh commented Mar 6, 2019

/boot/firmware/config.txt に以下の1行を追加することでI2Cのbaudrateを固定することができます。

dtparam=i2c_baudrate=62500

以下の3つの環境にて確認しました。

環境A

ubuntu-18.04.1-preinstalled-server-armhf+raspi2.img.xz を64bit版にアップデートしたものです。

  • Raspberry Pi 3 Model B

OS

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.1 LTS
Release:        18.04
Codename:       bionic
$ uname -a
Linux ubuntu 4.15.0-1027-raspi2 #29-Ubuntu SMP PREEMPT Wed Oct 24 08:56:30 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux

環境B

ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz のカーネルを4.15.0-1027-raspi2にダウングレードしたものです。

  • Raspberry Pi 3 Model B

OS

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic
$ uname -a
Linux ubuntu 4.15.0-1027-raspi2 #29-Ubuntu SMP PREEMPT Wed Oct 24 08:56:30 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux

環境C

ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz そのままです。

  • Raspberry Pi 3 Model B

OS

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic
$ uname -a
Linux ubuntu 4.15.0-1031-raspi2 #33-Ubuntu SMP PREEMPT Wed Jan 16 09:52:45 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux

@Tiryoh Tiryoh closed this as completed in c037632 Mar 6, 2019
@Tiryoh Tiryoh changed the title 特定の条件下でrtcounterが使用できない cannot use rtcounter in high I2C SCL frequency May 2, 2019
@Tiryoh Tiryoh added the Status: Abandoned The issue or Pull Request is wontfix label Apr 16, 2020
@Tiryoh Tiryoh mentioned this issue Jul 15, 2020
2 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Status: Abandoned The issue or Pull Request is wontfix Type: Bug Bug or Bug fixes
Projects
None yet
Development

No branches or pull requests

1 participant