2013年3月8日 星期五

[STM32F3 教學] I2C介紹




一般來說,I2C是一個只需要2支接腳,SCLSDA2支腳就可以串接很多裝置,並且也可以連來擴充使用。雖然I2C很好用也很方便,只需要2支腳就可以搞定,但如果非生了不可預期的現象需要除錯,那可就不是一個好玩的事情了。因為裝置都接在一起,當發生問題時,要除錯就有一定的困難性,這時候實務的經驗就變得非常的重要了,只要遇到問題和解決的問題夠多,當有問題時,就不怕手忙腳亂了。




下圖是一個比較典型的I2C架構圖。只要把所有的裝置串接在SDASCL上,就可以做I2C的通訊了。













1I2C的訊號,當SCLHI時,而SDAHIàLO時,這時為「Start」;而SDALOàHI時,這時後為「Stop」。記得。只有SCLHI時,這2protocol才為有效。SCLLO時,這時候是一般訊號的切換。









一般有效的資料,必需是SCLLO的時候,才可以做SDA的切換(每個BIT),假設你在SCLHI的時候切換,會被判定為「Start」或是「Stop」的,這是一件很可怕的事情。一定要注意。









下圖是一個I2C在做通訊時,應該有Protocol,一般來說,要先有START 接著7bit address 1bit R/W1bit ACK 8bit data 1bit ACK 最後是STOP 有沒有覺得很亂? 其實就是一定要有「頭(S)」、「尾(P)」和「資料(Data)」,事實上你可以把7bit address 1bit R/W當成是一個8bit的資料,這樣想應該就會簡單一點。














一般來說,拿到Device,通常要看的就是slave address,記住,這個slave address其實就是每顆I2C Device的身分(ID),通常都是7-bit,記得,這是一個向右移1位的address









至於整個I2C protocol的訊號,到底應該說host還是由slave來發動的,可以看下圖的幾個介紹,一般來說,「S」、「P」和「Salve address」都會由host 發動,其他的ACKDATA就要看2造雙方的需求了,也就是不一定。















一般來說,有時候會遇到準位不同的I2C,這時候就需要一個「中間人(BUFFER)」來幫忙解決訊號準位上的問題,一般我們會稱為「level shift」這樣就可以很安心的使用I2C介面了。









這就是一個比較複雜且多組的I2C使用方式。











當你了解I2C時,其實I2C 並不可怕,而且還挺好用的,畢竟硬體上只需要2支腳就可以搞定很多事。但相對的,在程式上就需要下非常多的功夫了,哈,這時候就是証明台上十分鐘,台下十年功的好機會了。祝大家使用I2C愉快。





下一章:SPI介紹




沒有留言:

張貼留言