# 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
* 
* 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
## 驗證
- 
## [增加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)