# 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)