I2C總線
I2C總線(Inter Integrated Circuit內部集成電路總線)是兩線式串行總線,僅需要時鐘和數據兩根線就可以進行數據傳輸,僅需要占用微處理器的2個IO引腳,使用時十分方便。I2C總線還可以在同一總線上掛多個器件,每個器件可以有自己的器件地址,讀寫操作時需要先發(fā)送器件地址,該地址的器件得到確認后便執(zhí)行相應的操作,而在同一總線上的其它器件不做響應,稱之為器件尋址,這個原理就像我們打電話的原理相當。I2C總線產生80年代,由PHLIPS公司開發(fā),早期多用于音頻和視頻設備,如今I2C總線的器件和設備已多不勝數。最常見的采用I2C總線的EEPROM也已被廣泛使用于各種家電、工業(yè)及通信設備中,主要用于保存設備所需要的配置數據、采集數據及程序等。生產I2C總線EEPROM的廠商很多,如ATMEL、Microchip公司,它們都是以24來開頭命名芯片型號,最常用就是24C系列。24C系列從24C01到24C512,C后面的數字代表該型號的芯片有多少K的存儲位。如ATMEL的24C64,存儲位是64K位,也就是說可以存儲8K(8192)字節(jié),它支持1.8V到5V電源,可以擦寫1百萬次,數據可以保持100年,使用5V電源時時鐘可以達到400KHz,并且有多種封裝可供選擇。我們可以很容易的在身邊的電器設備中發(fā)現它們的身影,如電視中用于保存頻道信息,電腦內存條中保存內存大小等相關信息,汽車里用于保存里程信息等等。圖一就是ATMEL24C64芯片的PID封裝和用于內存條SPD(Serial Presence Detect)上的24芯片。
圖二是ATMEL公司24C64的引腳定義圖。A0-A2用于設置芯片的器件地址,在同一總線上有多個器件時,可以通過設置A0-A2引腳來確定器件地址。SDA是串行數據引腳,用于在芯片讀寫時輸入或輸出數據、地址等,這個引腳是雙向引腳,它是漏極開路的,使用時需要加上一個上拉電阻。SLC腳是器件的串行同步時鐘信號,如果器件是使用在單片機系統(tǒng)中,那么SLC腳應該由單片機控制,根據單片機的程序要求產生串行同步時鐘信號,控制總線的存取。WP腳是寫保護腳,當這個腳接入高電平時,芯片的芯片數據均處于禁止寫入狀態(tài)(所禁止的地址段要看各芯片的詳細資料),當把WP腳接到地線時,芯片處于正常的讀寫狀態(tài)。當一個電路要求正常使用時是不允許程序修改EEPROM中的數據,只有在維護設置才可以修改數據,這時可以在電路上設置WP跳線或用微處理器對WP進行控制,這樣只有在特定的電路狀態(tài)下才可以更改到數據。
要在單片機系統(tǒng)中應用I2C總線的EEPROM做存儲設備時,先要了解I2C總線的基本驅動方法。在I2C總線空閑時,SDA和SCL應為高電平,也只有在這個條件下,微處理器才可以控制總線進行傳輸數據。在數據傳輸的剛開始時,總線要求有一個START(開始位)位做為數據開始的標識,它的要求是SCL為高時,SDA有一個從高到低的電平跳變動作,完成這個動作后才可以進行數據傳輸,時序圖參看圖三'開始'。傳輸數據時,只有在SCL為高電平時,SDA上的電平為有效數據。編寫單片機向總線送數據程序時則可以在SCL還在低電平時,把數據電平送到SDA,然后拉高SCL,這時SDA不應有電平跳變,延時后拉低SCL,再進行下一位的數據傳送直到完成。在總線上讀數據時也是只有在SCL為高時,SDA為有效數據。時序參看圖三'保持'。傳送數據完成后,總線要有一個STOP(結束位)位,來通知總線本次傳輸已結束,它的要求是SCL為高時,SDA有一個從低到高的電平跳變動作,正好和START位相反。在編程時要注意的是:不要在SCL為高時改變SDA的電平狀態(tài),否則可能會被誤認為是停止位,而使得操作失敗。

讀當前地址
這種讀取模式是讀取當前芯片內部的地址指針指向的數據。每次讀寫操作后,芯片會把最后一次操作過的地址作為當前的地址。在這里要注意的是在微處理器接收完芯片傳送的數據后不必發(fā)送給低電平的ACK給芯片,直接拉高SDA等待一個時鐘后發(fā)送停止位。圖十是讀當前地址時序圖。
讀任意地址
"讀當前地址"可以說是讀的基本指令,讀任意地址時只是在這個基本指令之前加一個'偽操作',這個偽操作傳送一個寫指令,但這個寫指令在地址傳送完成后就要結束,這時芯片內部的地址指針指到這個地址上,再用讀當前地址指令就可以讀出該地址的數據。圖十一是讀任意地址的時序圖. 
連續(xù)讀取 連續(xù)讀取操作時只要在上面二種讀取方式中芯片傳送完讀取數據后,微處理器回應給芯片一個低電平的ACK應答,那么芯片地址指針自動加一并傳送數據,直到微處理器不回應并停止操作。圖十二是連續(xù)讀取的時序圖。 ATMEL公司的24C系列的其它型號的讀寫操作方式基本和上面介紹的相同,只是在8位尋址的芯片中地址位只用一個字節(jié),還有就是在24C01中沒有器件地址,地址位只占用高7位,最低位為R/W位.。其它公司的24系列的EEPROM芯片的驅動方式也基本和以上所介紹的一樣。
|