ラズパイ初心者です。よろしくお願いいたします。
i2cのボーレートについて、ご教示いただきたく存じます。
<ラズパイの構成>
ラズパイ本体:ラズパイ3 model B Vl 2
Raspbian:NOOBS_v2_8_2でインストール
設定- > raspberry Piの設定 -> インターフェースからi2cを有効化
<現象>
熱電対温度計デバイスとラズパイをi2c接続してデータを取得しているのですが、クロック波形をオシロスコープで見てみると、
62.5Khzでした。
(sudo i2cget -y 1 0x67 0x00 cで波形を確認しています。)
ネットを検索してみると、ラズパイのボーレートデフォルトは100Khzのようなのですが、62.5KHzで通信しています。
ボーレートを変更すため
/boot/config.txt
のファイル末尾に dtparam=i2c_baudrate=100000を記載し、rebootして確認しましたが62.5KHzでした。
ボーレートを変更してみましたが、結論として設定ボーレートの×0.625のボーレートで実行されていることが判明しました。
次に以下、データ取得ループプログラムを作成し実行してみました。
プログラム開始時はconfig.txtの設定ボーレートで動作するのですが、すぐに×0.625のボーレートに切り替わり、以後、設定ボーレート×0.625のボーレートで動作しています。(切り替わるタイミングは開始後すぐなのですが、タイミングなどは計測できておりません。)
<ご教示いただきたい内容>
通信速度については、https://periph.io/platform/raspberrypi/ のような情報もあり、設定ボーレート×0.625はラズパイの仕様なのか?とも
考えておりますが、仕様になるのでしょうか?
また設定値のボーレートでi2cを動かすための方法をご存知の方がございましたら、ご教示のほどよろしくお願いいたします。
<実験で使用したプログラム>
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 18 16:44:17 2018
@author: pi
"""
import smbus
import signal
import time
bus = smbus.SMBus(1)
def interval_working(arg1, arg2):
address_psoc = 0x67
reg = [[0x00, 0x01,0x02, 0x03], [0x04, 0x05, 0x06, 0x20]]
recive_data = [[0 for j in range(4)] for k in range(2) ]
for i in range(0,2):
for n in range(0,4):
write_PSOC(address_psoc , reg[n])
recive_data[n] = read_PSOC(address_psoc)
def read_PSOC(add_r):
read_data = bus.read_byte(add_r)
return read_data
def write_PSOC(add_w,reg_w):
bus.write_byte(add_w, reg_w)
signal.signal(signal.SIGALRM, interval_working)
signal.setitimer(signal.ITIMER_REAL, 0.1, 0.1)
while True:
time.sleep(1)
- masafumi_ohta
- Forum Moderator
- Posts: 457
- Joined: Sun Sep 09, 2012 12:07 am
- Location: Tokyo
- Contact: Website
Re: i2cボーレート
---
Masafumi Ohta
https://groups.google.com/d/forum/japanese-raspberry-pi-users-group
Masafumi Ohta
https://groups.google.com/d/forum/japanese-raspberry-pi-users-group
Re: i2cボーレート
太田様
ご回答ありがとうございます。
/boot/config.txtに、core_freq=250を追記することにより解決できました。
ご教示いただきましたページより、関連キーワード(core_freqなど)で検索するとi2cだけでなく、シリアルなどでも同様な現象+同じ解決策が提示されていることがわかりました。
ご回答いただき、本当にありがとうございました。
ご回答ありがとうございます。
/boot/config.txtに、core_freq=250を追記することにより解決できました。
ご教示いただきましたページより、関連キーワード(core_freqなど)で検索するとi2cだけでなく、シリアルなどでも同様な現象+同じ解決策が提示されていることがわかりました。
ご回答いただき、本当にありがとうございました。