jagamaru
Posts: 2
Joined: Wed Sep 26, 2018 6:54 am

i2cボーレート

Wed Sep 26, 2018 8:08 am

ラズパイ初心者です。よろしくお願いいたします。
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)

User avatar
masafumi_ohta
Forum Moderator
Forum Moderator
Posts: 365
Joined: Sun Sep 09, 2012 12:07 am
Location: Tokyo
Contact: Website

Re: i2cボーレート

Wed Sep 26, 2018 11:11 am

太田です。

https://www.raspberrypi.org/forums/view ... p?t=155756

この辺りをご参考ください。
---
Masafumi Ohta
https://groups.google.com/d/forum/japanese-raspberry-pi-users-group

jagamaru
Posts: 2
Joined: Wed Sep 26, 2018 6:54 am

Re: i2cボーレート

Thu Sep 27, 2018 1:29 am

太田様
ご回答ありがとうございます。
/boot/config.txtに、core_freq=250を追記することにより解決できました。
ご教示いただきましたページより、関連キーワード(core_freqなど)で検索するとi2cだけでなく、シリアルなどでも同様な現象+同じ解決策が提示されていることがわかりました。
ご回答いただき、本当にありがとうございました。

Return to “日本語”