標(biāo)題: ATMEL AT24C64操作時(shí) [打印本頁]

作者: daliu    時(shí)間: 2014-9-13 13:56
標(biāo)題: ATMEL AT24C64操作時(shí)
I2C總線
  I2C總線(Inter Integrated Circuit內(nèi)部集成電路總線)是兩線式串行總線,僅需要時(shí)鐘和數(shù)據(jù)兩根線就可以進(jìn)行數(shù)據(jù)傳輸,僅需要占用微處理器的2個(gè)IO引腳,使用時(shí)十分方便。I2C總線還可以在同一總線上掛多個(gè)器件,每個(gè)器件可以有自己的器件地址,讀寫操作時(shí)需要先發(fā)送器件地址,該地址的器件得到確認(rèn)后便執(zhí)行相應(yīng)的操作,而在同一總線上的其它器件不做響應(yīng),稱之為器件尋址,這個(gè)原理就像我們打電話的原理相當(dāng)。I2C總線產(chǎn)生80年代,由PHLIPS公司開發(fā),早期多用于音頻和視頻設(shè)備,如今I2C總線的器件和設(shè)備已多不勝數(shù)。最常見的采用I2C總線的EEPROM也已被廣泛使用于各種家電、工業(yè)及通信設(shè)備中,主要用于保存設(shè)備所需要的配置數(shù)據(jù)、采集數(shù)據(jù)及程序等。生產(chǎn)I2C總線EEPROM的廠商很多,如ATMEL、Microchip公司,它們都是以24來開頭命名芯片型號,最常用就是24C系列。24C系列從24C0124C512C后面的數(shù)字代表該型號的芯片有多少K的存儲(chǔ)位。如ATMEL24C64,存儲(chǔ)位是64K位,也就是說可以存儲(chǔ)8K8192)字節(jié),它支持1.8V5V電源,可以擦寫1百萬次,數(shù)據(jù)可以保持100年,使用5V電源時(shí)時(shí)鐘可以達(dá)到400KHz,并且有多種封裝可供選擇。我們可以很容易的在身邊的電器設(shè)備中發(fā)現(xiàn)它們的身影,如電視中用于保存頻道信息,電腦內(nèi)存條中保存內(nèi)存大小等相關(guān)信息,汽車?yán)镉糜诒4胬锍绦畔⒌鹊。圖一就是ATMEL24C64芯片的PID封裝和用于內(nèi)存條SPD(Serial Presence Detect)上的24芯片。


圖二是ATMEL公司24C64的引腳定義圖。A0-A2用于設(shè)置芯片的器件地址,在同一總線上有多個(gè)器件時(shí),可以通過設(shè)置A0-A2引腳來確定器件地址。SDA是串行數(shù)據(jù)引腳,用于在芯片讀寫時(shí)輸入或輸出數(shù)據(jù)、地址等,這個(gè)引腳是雙向引腳,它是漏極開路的,使用時(shí)需要加上一個(gè)上拉電阻。SLC腳是器件的串行同步時(shí)鐘信號,如果器件是使用在單片機(jī)系統(tǒng)中,那么SLC腳應(yīng)該由單片機(jī)控制,根據(jù)單片機(jī)的程序要求產(chǎn)生串行同步時(shí)鐘信號,控制總線的存取。WP腳是寫保護(hù)腳,當(dāng)這個(gè)腳接入高電平時(shí),芯片的芯片數(shù)據(jù)均處于禁止寫入狀態(tài)(所禁止的地址段要看各芯片的詳細(xì)資料),當(dāng)把WP腳接到地線時(shí),芯片處于正常的讀寫狀態(tài)。當(dāng)一個(gè)電路要求正常使用時(shí)是不允許程序修改EEPROM中的數(shù)據(jù),只有在維護(hù)設(shè)置才可以修改數(shù)據(jù),這時(shí)可以在電路上設(shè)置WP跳線或用微處理器對WP進(jìn)行控制,這樣只有在特定的電路狀態(tài)下才可以更改到數(shù)據(jù)。
  要在單片機(jī)系統(tǒng)中應(yīng)用I2C總線的EEPROM做存儲(chǔ)設(shè)備時(shí),先要了解I2C總線的基本驅(qū)動(dòng)方法。在I2C總線空閑時(shí),SDA和SCL應(yīng)為高電平,也只有在這個(gè)條件下,微處理器才可以控制總線進(jìn)行傳輸數(shù)據(jù)。在數(shù)據(jù)傳輸?shù)膭傞_始時(shí),總線要求有一個(gè)START(開始位)位做為數(shù)據(jù)開始的標(biāo)識(shí),它的要求是SCL為高時(shí),SDA有一個(gè)從高到低的電平跳變動(dòng)作,完成這個(gè)動(dòng)作后才可以進(jìn)行數(shù)據(jù)傳輸,時(shí)序圖參看圖三'開始'。傳輸數(shù)據(jù)時(shí),只有在SCL為高電平時(shí),SDA上的電平為有效數(shù)據(jù)。編寫單片機(jī)向總線送數(shù)據(jù)程序時(shí)則可以在SCL還在低電平時(shí),把數(shù)據(jù)電平送到SDA,然后拉高SCL,這時(shí)SDA不應(yīng)有電平跳變,延時(shí)后拉低SCL,再進(jìn)行下一位的數(shù)據(jù)傳送直到完成。在總線上讀數(shù)據(jù)時(shí)也是只有在SCL為高時(shí),SDA為有效數(shù)據(jù)。時(shí)序參看圖三'保持'。傳送數(shù)據(jù)完成后,總線要有一個(gè)STOP(結(jié)束位)位,來通知總線本次傳輸已結(jié)束,它的要求是SCL為高時(shí),SDA有一個(gè)從低到高的電平跳變動(dòng)作,正好和START位相反。在編程時(shí)要注意的是:不要在SCL為高時(shí)改變SDA的電平狀態(tài),否則可能會(huì)被誤認(rèn)為是停止位,而使得操作失敗。

 I2C總線在每接收完一個(gè)字節(jié)(8個(gè)二進(jìn)制位)后,在第九個(gè)時(shí)鐘信號時(shí),會(huì)在SDA上回應(yīng)一個(gè)低電平的ACK應(yīng)答信號,以此表明當(dāng)前受控的器件已接收完一個(gè)字節(jié),可以開始下一個(gè)字節(jié)的傳送了。時(shí)序圖可以參看圖四。單片機(jī)編程時(shí)可以在傳送完一個(gè)字節(jié)后,把連接SDAIO口線設(shè)置回讀數(shù)據(jù)狀態(tài),如使用51系列的單片機(jī)時(shí)就要把IO口置高電平。然后在SCL操作一個(gè)脈沖,在SCL為高時(shí)讀取SDA,如不為低電平就說明器件狀態(tài)不空閑或出錯(cuò)。需要注意因?yàn)?/font>SDA是雙向的IO,無論是微處理器接收還是器件接收,每個(gè)字節(jié)完成后,接收方都可以發(fā)送一個(gè)ACK回應(yīng)給發(fā)送方。


I2C總線在操作受控器件時(shí),需要先發(fā)送受控器件的器件地址,24系列的EEPROM也不例外,在每次命令前需要先發(fā)送一個(gè)字節(jié)的器件地址和讀寫標(biāo)識(shí),也可稱為器件錄址。圖五是24C64的器件尋址命令中每個(gè)位所代表的意思。A2、A1、A0位是器件地址,它是對應(yīng)于芯片的A2、A1、A0引腳,也就是說如果芯片A0引腳被設(shè)置成高電平時(shí),在發(fā)送器件地址命令時(shí)字節(jié)中的A0位要設(shè)置為1,A0引腳為低電平時(shí)A0位設(shè)置為0。這樣不難看出在同一總線可以掛8個(gè)24C64ATMEL公司的24C系列芯片24C32及以上的型號使用16位地址進(jìn)行尋址。24C32之前的型號因?yàn)槭褂玫氖?/font>8位地址,所以在超過256字節(jié)的8位地址型號中會(huì)占用到A0、A1、A2位的來做頁地址,每頁有256字節(jié),以此解決地址位不足的問題。所以不同的型號器件地址位定義就有所不同,各型號的器件地址字節(jié)定義如圖五至圖七。要注意的是24C01是沒有器件地址的,還有24C16/16AA0A2已被頁地址占用完,也就是說這三個(gè)型號的芯片只能在同一總線上掛一個(gè),所以在設(shè)計(jì)電路選擇器件時(shí)要注意這個(gè)問題。器件地址字節(jié)中的R/W位是用于標(biāo)識(shí)當(dāng)前操作是讀器件還是寫器件,寫器件時(shí)R/W位設(shè)置0,讀器件時(shí)R/W位設(shè)置1。






24C系列芯片的讀寫指令格式只有幾種,下面以24C64芯片的指令格式來說明。

寫入單個(gè)字節(jié)
  寫入字節(jié)指令每次只能向芯片中的一個(gè)地址寫入一個(gè)字節(jié)的數(shù)據(jù)。首先發(fā)送開始位來通知芯片開始進(jìn)行指令傳輸,然后傳送設(shè)置好的器件地址字節(jié),R/W位應(yīng)置0,接著是分開傳送十六位地址的高低字節(jié),再傳送要寫入的數(shù)據(jù),最后發(fā)送停止位表示本次指令結(jié)束。圖八是寫入單個(gè)字節(jié)的時(shí)序圖。

十六位地址的前3位忽略,所以可尋址的位數(shù)為13位,地址長度為213=8192,正好為芯片資料上說的8K*8的結(jié)構(gòu),所以AT24C64可尋址的范圍是0000-1FFFH。

頁寫入
  24C64支持32字節(jié)的頁寫入模式,它的操作基本和字節(jié)寫入模式一樣,不同的是它需要發(fā)送第一個(gè)字節(jié)的地址,然后一次性發(fā)送32字節(jié)的寫入數(shù)據(jù)后,再發(fā)送停止位。寫入過程中其余的地址增量自己由芯片內(nèi)部完成。圖九頁寫入的時(shí)序圖。無論那種寫入方式,指令發(fā)送完成后,芯片內(nèi)部開始寫入,這時(shí)SDA會(huì)被芯片拉高,直到寫入完成后SDA才會(huì)重新變的有效,在編寫微處理器程序時(shí)可以在寫入的時(shí)候不停發(fā)送偽指令并查詢是否有ACK返回,如果有ACK返回則可以進(jìn)行下一步操作。




讀當(dāng)前地址
  這種讀取模式是讀取當(dāng)前芯片內(nèi)部的地址指針指向的數(shù)據(jù)。每次讀寫操作后,芯片會(huì)把最后一次操作過的地址作為當(dāng)前的地址。在這里要注意的是在微處理器接收完芯片傳送的數(shù)據(jù)后不必發(fā)送給低電平的ACK給芯片,直接拉高SDA等待一個(gè)時(shí)鐘后發(fā)送停止位。圖十是讀當(dāng)前地址時(shí)序圖。

讀任意地址
  "讀當(dāng)前地址"可以說是讀的基本指令,讀任意地址時(shí)只是在這個(gè)基本指令之前加一個(gè)'偽操作',這個(gè)偽操作傳送一個(gè)寫指令,但這個(gè)寫指令在地址傳送完成后就要結(jié)束,這時(shí)芯片內(nèi)部的地址指針指到這個(gè)地址上,再用讀當(dāng)前地址指令就可以讀出該地址的數(shù)據(jù)。圖十一是讀任意地址的時(shí)序圖.

連續(xù)讀取
  連續(xù)讀取操作時(shí)只要在上面二種讀取方式中芯片傳送完讀取數(shù)據(jù)后,微處理器回應(yīng)給芯片一個(gè)低電平的ACK應(yīng)答,那么芯片地址指針自動(dòng)加一并傳送數(shù)據(jù),直到微處理器不回應(yīng)并停止操作。圖十二是連續(xù)讀取的時(shí)序圖。

  ATMEL公司的24C系列的其它型號的讀寫操作方式基本和上面介紹的相同,只是在8位尋址的芯片中地址位只用一個(gè)字節(jié),還有就是在24C01中沒有器件地址,地址位只占用高7位,最低位為R/W位.。其它公司的24系列的EEPROM芯片的驅(qū)動(dòng)方式也基本和以上所介紹的一樣。






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1