[Arduino 筆記] Arduino I2C 超頻 & I2C 外部擴充 EEPROM - 又在碎碎念惹 - udn部落格
又在碎碎念惹
作家:又在碎碎念惹
文章分類
    Top
    [Arduino 筆記] Arduino I2C 超頻 & I2C 外部擴充 EEPROM
    2015/08/26 22:30:18
    瀏覽:4314
    迴響:0
    推薦:0
    引用0
    碎碎念:

    最近行程滿滿滿,而且星期天要去高第一宿舍入住了,沒什麼時間可以玩 Arduino 感覺可惜
    昨天晚上終於找到了高第一電通系二年級的一位學長,這位學長非常厲害,電通系系排第一然後又成功轉到北科資工系 (還是正取一耶,窩操太強大了)


    正文:

    Arduino 如果沒特別去設定,預設的 I2C 速度是 100kHz
    廢材的用 100kHz 跑 I2C 讀寫 EEPROM 光是要等讀寫動作完成就快等到發瘋了 =A=


    在 Arduino UNO 右邊的一顆小 IC 就是 EEPROM,為 ATMEL 的 24C512
    要提升 EEPROM 的讀寫速度首先就從 I2C 的速度下手嚕

    使用 Arduino 的 I2C 要提升速度,先將 AVR 的 library 裡的 twi.h 中的 TWI_FREQ 常數改一下即可,twi.h 在
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\utility 可以被找到~

    預設的 TWI_FREQ 長得這樣:

    #ifndef TWI_FREQ

    #define TWI_FREQ 100000L

    #endif 

    那如果要提升速度的話可以將 100000L 改成需要的速度,例如要將 100kHz 改成 400kHz 的話:

    #ifndef TWI_FREQ

    #define TWI_FREQ 400000L

    #endif

    只要把常數數值改成 400000L 就可以了,至於 L 的意思就是 long int

    廢材的將速度改成 400kHz 後 EEPROM 的讀取速度真的有大幅提升,
    然後也有偷偷將速度愈改愈高,發現 EEPROM 最快只能吃 610kHz,
    這完全和 datasheet 裡寫最高能支援到 1MHz 根本天差地遠R,感覺被騙 XDD 

    這邊有實測值,首先是 100kHz,這速度真的會讓人等到翻桌(平均花費7.5秒):


    再來400kHz,EEPROM 讀取速度快很多(平均花費2.7秒):


    之後偷偷將速度慢慢往上拉,發現極限是610kHz(平均花費2.3秒):

    本篇的範例程式碼 on Github:
    https://github.com/awei0905/Arduino-EEPROM-I2C

    回應

    限會員,要發表迴響,請先登入