分類: Arduino物聯網

Arduino 更改 IIC(I2C)Baud Rate 為 400 KHz,增加傳輸速率

這裡介紹如何更改 Arduino 內建的 Wire 函式庫,提高 I2C 傳輸協定的 baud rate 到 400 KHz,增加資料傳輸的速度。

一般市面上的感測器(sensors)中,如果傳輸的資料量不大的話,大概都會使用 I2C 這種傳輸協定,而 Arduino 內建的 Wire 函式庫本身就有支援 I2C,這種傳輸協定的特色就是接線簡單,它只需要串列資料(SDA)及串列時脈(SCL)兩條線就可以進行資料的傳輸,再加上供應電源的 VCC 與 GND,總共只需要接四條線,不過缺點就是資料傳輸的速率比較慢一些。


I2C 有好幾種傳輸模式(也就是 baud rate),在標準上有 100KHz、400KHz、1MHz、3.4MHz、5MHz 等這幾種,而在 Arduino 的 Wire 函式庫中預設是使用最慢的 100KHz,如果您的感測器需要比較快的傳輸速度,可以稍微修改一下 Wiretwi.h 標頭檔,將 baud rate 提高以加速資料的傳輸。

twi.h 標頭檔在各種不同的系統中路徑有些小差異,Windows 中的路徑為

C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\utility\twi.h

在 Mac OS X 中如果您是直接按照正常的安裝方式將 Arduino 拖進 Applications 中的話,路徑就是

/Applications/Arduino.app/Contents/Java/hardware/arduino/avr/libraries/Wire/utility/twi.h

若在 Linux 系統之下,twi.h 的路徑則為 Arduino 的安裝路徑再加上

hardware/arduino/avr/libraries/Wire/utility/twi.h

開啟 twi.h 這個標頭檔之後,找尋定義 TWI_FREQ 的地方:

#ifndef TWI_FREQ
#define TWI_FREQ 100000L
#endif

這個 TWI_FREQ 所指定的值就是 I2C 的 baud rate,其預設值為 100000L(也就是 100KHz),如果要提高資料的傳輸速率,可以將這個值改為 400000L(亦即 400KHz)。

修改完成之後,再刪除 hardware/libraries/Wire/Wire.ohardware/libraries/Wire/utility/twi.o 這兩個檔案,強迫 Wire 函式庫重新編譯(或是直接關閉 Arduino IDE 再重新開啟也可以,Arduino IDE 會自動檢查並且重新編譯必要的部份)。

如果您的感測器支援高於 400KHz 的 baud rate,也可以依照感測器所支援的速度來設定,例如 MPU-6050 這個加速度計與陀螺儀六軸感測器就有支援到 500KHz,所以如果 Arduino 的 I2C 匯流排只有連接 MPU-6050 的話,也可以直接設定為 500000L

設定 baud rate 時,一定要先看看自己的 I2C 裝置(通常就是各種感測器)支援到多快的速度,如果設定的速度超過了裝置本身支援的速度上限的話,就會無法跟該設備連線。100KHz 是最基本的速度,一般的 I2C 裝置應該都可以使用這個速度,如果您發現您的 I2C 裝置無法連線,可以調回這個速度測試看看。

如果您對於 Arduino 的相關應用有興趣,建議您可以繼續閱讀物聯網的文章。

參考資料:Arduino

G. T. Wang

個人使用 Linux 經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

Share
Published by
G. T. Wang
標籤: 硬體

Recent Posts

光陽 KYMCO GP 125 機車接電發動、更換電瓶記錄

本篇記錄我的光陽 KYMCO ...

2 年 ago

[開箱] YubiKey 5C NFC 實體金鑰

本篇是 YubiKey 5C ...

3 年 ago

[DIY] 自製竹火把

本篇記錄我拿竹子加上過期的苦茶...

3 年 ago