---
# System prepended metadata

title: Raspberry Pi I2C 配置全攻略：頻率優化、速度驗證與多組 I2C 擴展
tags: [Raspberry pi]

---

# Raspberry Pi I2C 配置全攻略：頻率優化、速度驗證與多組 I2C 擴展

###### tags: `Raspberry pi`

* Raspberry Pi 的 I2C 控制器主要支援以下兩種模式：

    * Standard-mode (100 kbps): 預設速率，相容性最高。

    * Fast-mode (400 kbps): 大多數感測器與設備支援的進階速率。
    * 官方文件通常建議最高到 400 kbps
* Raspberry Pi 3: 實測上限通常在 1 MHz (1000 kbps) 左右。超過此速度時，由於 SoC 的 BCM2835/2837 時鐘分頻機制，時序會變得不穩定，且容易出現數據丟失。

* Raspberry Pi 4: 受惠於較新的 SoC (BCM2711)，它的 I2C 控制器更加穩定。在良好的硬體環境下（短導線、適當的上拉電阻），可以嘗試達到 1.7 MHz (Fast-mode Plus 延伸)。雖然硬體時鐘可以設得更高，但受限於 I2C 協議本身的電氣特性，通常不建議在一般應用中超過 1 MHz。

## 下載工具包

* sudo apt-get install -y i2c-tools

### 測試 i2cdetect

* i2cdetect -y 0
* i2cdetect -y 1
* ls /dev/i2c*

## Pi 3 打開 /boot/config.txt

* sudo nano /boot/config.txt

## Pi 4 打開 /boot/firmware/config.txt

* sudo vim /boot/firmware/config.txt

## Add i2c_arm_baudrate

* dtparam=i2c_arm=on
* i2c_arm_baudrate=400000

* ![](https://i.imgur.com/iLHI5Wa.png)

*  sudo reboot

## 創建一個簡單的測試腳本來驗證速度

* nano i2cspeed.sh

```
#!/bin/bash
var="$(xxd /sys/class/i2c-adapter/i2c-1/of_node/clock-frequency | awk -F': ' '{print $2}')"
var=${var//[[:blank:].\}]/}
printf "%d\n" 0x$var

```

## 更改文件全限

- sudo chmod +x i2cspeed.sh

## 驗證

- ![](https://i.imgur.com/TnmF8aw.png)

## [增加i2c](https://www.raspberrypi.org/forums/viewtopic.php?t=205576)

- dtoverlay=i2c-gpio,bus=0,i2c_gpio_sda=23,i2c_gpio_scl=24
- dtoverlay=i2c-gpio,bus=1,i2c_gpio_sda=16,i2c_gpio_scl=20
## 參考文獻


* [Git hub](https://gist.github.com/ribasco/c22ab6b791e681800df47dd0a46c7c3a)

* [Change I2C Speed with Raspberry Pi](http://www.mindsensors.com/blog/how-to/change-i2c-speed-with-raspberry-pi)

* [Raspberry Pi Tutorial Series: I2C](https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_I2C)


