少し長いケーブルを使用できるようにするために、i2c バスの周波数を変更したいと考えています。
私は python-smbus パッケージを使用しており、非常にうまく機能しますが、バス周波数を設定する方法が見つかりません。
私はドキュメントを調べましたが、バス パラメータの設定に関連するものさえも見つけることができませんでした。
それはpythonでできることですか、それとももっと低いレベルのものが必要ですか?
ARM アーキテクチャである Raspberry PI を使用しています。
少し長いケーブルを使用できるようにするために、i2c バスの周波数を変更したいと考えています。
私は python-smbus パッケージを使用しており、非常にうまく機能しますが、バス周波数を設定する方法が見つかりません。
私はドキュメントを調べましたが、バス パラメータの設定に関連するものさえも見つけることができませんでした。
それはpythonでできることですか、それとももっと低いレベルのものが必要ですか?
ARM アーキテクチャである Raspberry PI を使用しています。
最新の Jessie イメージを含む Raspberry Pi では、これを使用して現在の I2C 周波数を確認できます
sudo cat /sys/module/i2c_bcm2708/parameters/baudrate
。
頻度を変更するには、次のパラメーターを追加/変更できます。
dtparam=i2c_baudrate=50000
(50000 を目的の周波数に置き換えます):
/boot/config.txt
再起動して周波数を変更します。
私は今、すべてのオプションを調査するのにかなりの時間を費やしました。他の投稿で指定されているように、確かにローレバー レジスタがあることがわかりましたが、Raspberry-Pi のドライバは、使用するたびに値をリセットするため、それらへの変更はほとんど役に立たなくなります。解決策は、カスタム i2c ドライバーを作成するか、単に更新されたバージョンを待つことです。
低レベルの情報は、 byval フォーラムで見つけることができます。
低レベルで何かをする必要があります。通常、これはカーネル内のボード ファイルによって設定されます。リソースの割り当て以外に、i2cで特に何も行われていないことを確認したため、デフォルトのクロック除数を使用しているだけの可能性があります。データシートの 28 ページを見ると、デフォルトが 0x5dc であることがわかります。長いケーブルに対処するには、レジスタを別の値 (おそらく大きい値) に設定する必要があります。