專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

AVR 單片機學習(九)iic總線及TWI模塊的使用方法

作者:zww 1988   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年04月18日   【字體:
  • IIC總線定義與特點
  • I2C總線的工作原理
  • AVR的TWI模塊的使用方法
  • AT24C02
  • IIC inter integrated circuit  總線是一種由PHILIPS 公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設備。I2C總線產(chǎn)生于在80年代,最初為音頻和視頻設備開發(fā),如今主要在服務器管理中使用,其中包括單個組件狀態(tài)的通信。例如管理員可對各個組件進行查詢,以管理系統(tǒng)的配置或掌握組件的功能狀態(tài),如:電源和系統(tǒng)風扇,可隨時監(jiān)控內(nèi)存、硬盤、網(wǎng)絡、系統(tǒng)溫度等多個參數(shù),增加了系統(tǒng)的安全性,方便了管理。

    TWI:ATMega 系列單片機內(nèi)集成兩線制串行接口模塊,ATmegl文檔稱為TWI接口事實上TWI與PHILIOS的I2C總線是同一回事,之所以叫它TWI是因為這樣命名可使ATmel避免交術語版稅。所以,TWI是兼容I2C的一種說法。

    I2C總線最只要的優(yōu)點是其簡單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本?偩的長度可高達25英尺,并且能夠以10KPS的最大傳輸率支持40個組件,I2C總線的另一個優(yōu)點是,它支持多主控(MULTIMASTERING),其中任何能夠進行發(fā)送和接受的設備都可以稱為主總線,一個主控能夠控制信號的傳輸和時鐘頻率。當然,在任何時間點上只能有一個主控。

     

    由于AVR 有上拉電阻所以 R1 R2 可以不要。其實還的共地應該是3根線。在多主控上有個總線總裁的知識可以參閱相關文檔學習。呵呵、初學者不用了解。

    I2C總線是由數(shù)據(jù)線SDA和時鐘線SCL構成的串行總線,可發(fā)送和接受數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進行雙向傳送、最高傳送速率100KBPS.各種被控制電路均并聯(lián)在這條總線上,最高傳送速率100KBPS.各種被控制電路均并聯(lián)在這條總線上,但就像電話機一樣只有撥通各自的號碼才能工作,所以每個電路和模塊都有唯一的地址,在信息的傳輸過程中,I2C總線并接的每一模塊電路既是主控器(或被控器),又是發(fā)送器(或接收器),這取決于它所要完成的功能,CPU發(fā)出的控制信號分為地址碼和控制量兩部分,地址碼用來選址,即接通需要控制的電路,確定控制的種類;控制量決定調(diào)整的類別(如對比度、亮度等)及需要調(diào)整的量。這樣各控制電路雖然掛在同一條總線上,卻彼此獨立,互不相關。

    oI2C總線在傳送數(shù)據(jù)過程中共有三種類型信號, 它們分別是:開始信號、結束信號和應答信號。
    o開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。
    o結束信號:SCL為高電平時,SDA由低電平向高電平跳變,結束傳送數(shù)據(jù)。
    o應答信號:接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU向受控單元發(fā)出一個信號后,等待受控單元發(fā)出一個應答信號,CPU接收到應答信號后,根據(jù)實際情況作出是否繼續(xù)傳遞信號的判斷。若未收到應答信號,由判斷為受控單元出現(xiàn)故障。
    o這些信號中,起始信號是必需的,結束信號和應答信號,都可以不要。
     
    發(fā)送地址跟上面右邊那個兩個發(fā)送數(shù)據(jù) 0   是一樣的由時鐘來鎖存相應的數(shù)據(jù)位,地址共七位,第8位是讀還是寫狀態(tài),讀的話置1  寫 置0 。第9位是應答為,切記應答位不是單片機發(fā)出的,而是I2C器件發(fā)出的。應答位是這樣產(chǎn)生的,I2C器件在接收到完整的8位數(shù)據(jù)之后,I2C器件判定接受成功,它會向總線發(fā)送一個應答信號,可以看到就是在一個時鐘脈沖期間,數(shù)據(jù)線SDA保持低電平就是0,當然發(fā)送完地址位之后呢?就發(fā)送數(shù)據(jù),長度可能是可能1個字節(jié)或多個字節(jié)。數(shù)據(jù)的個數(shù)跟器件是有關系的。比如AT24C02 EEPROM芯片對他進行讀寫操作 如寫可以進行1  8 字節(jié),當?shù)刂窋?shù)據(jù)結束后來一個結束信號。表示這一幀結束了。
    下面說下ATmega 16 的TWI模塊。下圖 (由于ATmega 16 的技術文檔講的比較詳細了,所以我們也結合atmege 16 的數(shù)據(jù)手冊說了)。
     
    這是兩線的一些特點:(自己翻一下吧)
    一、簡單,但是強大而靈活的通訊接口,只需兩根線
    二、支持主機和從機的操作
    三、器件可以工作于發(fā)送或接受
    四、7位地址空間允許128個從機
    五、高達400KHZ的數(shù)據(jù)傳輸率
    六、斜率受控制的輸出驅動器
    七、可以抑制總線的尖峰噪聲控制器
    八、完全可變成的從機地址以及公共地址
    九、睡眠時地址匹配可以喚醒AVR
    首先看下數(shù)據(jù)傳輸和幀格式下圖(傳輸 數(shù)據(jù) (位))(TWI總線上數(shù)據(jù)位的傳送與時鐘脈沖同步。時鐘線為高時,數(shù)據(jù)線電壓必須保持穩(wěn)定,除非在啟動與停止的狀態(tài)下。官方的解釋)
    其實這個圖說明在SCL為高電平期間 SDA 數(shù)據(jù)必須穩(wěn)定0 或1
    當然還有起始位與停止位如下圖
    (翻譯如下)
    {
    主機啟動與停止數(shù)據(jù)傳輸。主機在總線上發(fā)出START信號以啟動數(shù)據(jù)傳輸;在總線上發(fā)出STOP信號以停止數(shù)據(jù)傳輸。在START與STOP 狀態(tài)之間,需要假定總線忙,不允許其它主機控制總線。特例是在START與STOP 狀態(tài)之間發(fā)出一個新的START狀態(tài)。這被稱為REPEATED START狀態(tài),適用于主機在不放棄總線控制的情況下啟動新的傳送。在REPEATED START之后,直到下一個STOP,需要假定總線處于忙的狀態(tài)。這與START是完全一樣的,因此在本手冊中,如果沒有特殊說明,START與REPEATEDSTART均用START表述。如下所示,START與STOP狀態(tài)是在SCL線為高時,通過改變SDA電平來實現(xiàn)的。
    }
    開始停止時序圖



     像這個圖中間的一些開始停止和從新開始在絕大數(shù)都是用不到的。就不細說了。
    下圖是地址數(shù)據(jù)包格式(好好看看是 地址數(shù)據(jù)的講解)
    翻譯下:所有在TWI總線上傳送的地址包均為9位,包括7位地址位、1位READ/WRITE控制
    位與1位應答位。如果READ/WRITE為1,則執(zhí)行讀操作;否則執(zhí)行寫操作。從機被尋
    址后,必須在第九個SCL (ACK)周期通過拉低SDA作出應答。若該從機忙或有其它原因
    無法響應主機,則應該在ACK周期保持SDA為高。然后主機可以發(fā)出STOP狀態(tài)或
    REPEATED START 狀態(tài)重新開始發(fā)送。地址包包括從機地址與分別稱為SLA+R或
    SLA+W的READ或WRITE位。
    地址字節(jié)的MSB首先被發(fā)送。從機地址由設計者自由分配,但需要保留地址0000 000
    作為廣播地址。
    當發(fā)送廣播呼叫時,所有的從機應在ACK周期通過拉低SDA作出應答。當主機需要發(fā)送
    相同的信息給多個從機時可以使用廣播功能。當Write位在廣播呼叫之后發(fā)送,所有的從
    機通過在ACK周期通過拉低SDA作出響應。所有的從機接收到緊跟的數(shù)據(jù)包。注意在整
    體訪問中發(fā)送Read位沒有意義,因為如果幾個從機發(fā)送不同的數(shù)據(jù)會帶來總線沖突。
    所有形如1111 xxx格式的地址都需要保留,以便將來使用。
    地址包格式圖下圖:
    這個圖從右邊往左邊看先發(fā)送的最高位 最后發(fā)的是低位。 從 1---9 最后一位 ACK 響應。
    下面是數(shù)據(jù)包下圖


    官方解釋


    可見數(shù)據(jù)包是8位數(shù)據(jù)加一個應當位。
    下圖是地址和數(shù)據(jù)包一個完整的傳輸。組合一起
     
     


    SLA +RW 就是地址數(shù)據(jù) 的傳送的字節(jié)數(shù)由應用程序的協(xié)議決定。 1個字節(jié)   4 8 個字節(jié)數(shù)據(jù)。
    下圖是多主機總線系統(tǒng)如圖(這個大部分場合用不到所以不用看 以后可以了解下)

    解釋





    下面講解下TWI 模塊的使用方法:如圖構成
    首先看下SCL  SDA 有兩個引腳   是在22  與23 腳 PC0 PC1 下面是這兩腳的說明




    還有一個波特率發(fā)聲單元與USART相似 他控制SCL 的時鐘周期,當然這個比特率有兩個寄存器決定,TWBR  TWPS 有SCL frequency 公式的。CPU的單片機晶振頻率 除以 16加上2倍的TWBR  乘以4的TWPS它的次數(shù)注意:如果工作在主機模式不應該小于10 下面有解釋


    下面是總線的接口單元主要包括一些寄存器總線總裁。我們沒必要關心然后又一個地址匹配單元看下啊(只有在多級通訊時候多個單片機進行I2C通訊時候我們給每個單片機設置一個本機地址如果匹配了表示發(fā)給自己的,初學者一般也不看)最下面是控制器有圖都復制上來吧!還有官方中文解釋。








    解釋有下圖







    其實都不重要我們要TWI 寄存器它的使用是重要的。呵呵開始講吧!最終我們的應用都是對這些寄存器操作。
    首先是比特率上面有公式第一個寄存器

    這個是控制寄存器非常重要。
    第二個寄存器 TWCR 



     
    首先是第7位 TWINT: TWI 中斷標志
    在什么時候產(chǎn)生中斷呢?當發(fā)送完 地址包 數(shù)據(jù)包 ,注意這一位清0呢。必須手動清0 必須通過軟件寫1,不像其他的中斷能夠自動置1.

    第6位 (使能TWI 應答)這個TWEA 在多級通訊時候,就是有其他的I2C器件向AVR單片機發(fā)送數(shù)據(jù),這時候AVR 單片機在接受到一幀數(shù)據(jù)之后,它會發(fā)送一個應答位,也就是使能這位后,向發(fā)送放返回一個應答位這種信息。
    官方解釋
    第5位(是一個狀態(tài)標志位,TWSTA它表示的是TWI START 這個信號。第4位 和第5位都是多級通訊用的到的。)


    官方解釋


    第3位:TWWC   是TWI 的寫碰撞標志。
    就是標志出TWDR 數(shù)據(jù)寄存器是否可以寫。如果為低的時候可以寫數(shù)據(jù)
    第2位:TWI 使能。置位此位TWI 。如果使用TWI模塊此位必須模塊激活。
    第1位:是保留位沒有作用的。
    第0位:TWIE 使能TWI 中斷。 (要中斷方式使用TWI 總線的的話就要使能這個位 置位)
     


    第3個寄存器:狀態(tài)寄存器
    它的第7位到第3位 5位反應TWI邏輯總線的狀態(tài),不同的狀態(tài)的狀態(tài)代碼會在后面部分描述,所以我們在讀取這5位狀態(tài)代碼的時候,讀取方法就是先讀取這個寄存器然后通過與這個0b11111000將最后兩位屏蔽掉因為TWPS是預分頻位,在比特率發(fā)生器里面是有作用的,有公式的 4的指數(shù)
     








    第四個寄存器:TWDR (類似于USART SPI 的數(shù)據(jù)寄存器差不多的)
    發(fā)送模式包含 字節(jié),接受模式包含接受到的數(shù)據(jù)。



    第五個寄存器:TWAR 從機地址寄存器
    (多級通訊用的到)
     


    如何使用TWI






    其實這個圖跟一次完整數(shù)據(jù)傳輸類似的。所有的不同在這第 3個階段結束的時候有一個TWI中斷觸發(fā)也就是TWINT這一位被置位,可以用于觸發(fā)中斷。
    第一步 :向TWCR 寫一個1 使能一個START 信號。就是通過TWCR 寄存器的內(nèi)容進行一個發(fā)START信號的操作。發(fā)送成功之后會有一個TWINT中斷,在中斷里面SCL時鐘不采取任何動作的。
    第二步:在中斷里面通過查詢 status code 就是那五位數(shù)據(jù)看是何種狀態(tài),來確定是start 發(fā)送完成中斷。
    第三步:發(fā)送一個地址包,就是程序將SLA(從機地址) +W (讀寫位)就是7位從機地址加1位讀寫位,寫入到TWDR 數(shù)據(jù)寄存器對這些寄存器進行一些確認操作。
    第四步:在數(shù)據(jù)包發(fā)送完成和接受到ACK信號之后繼續(xù)等待第2個中斷。接收到ACK信號之后呢TWINT會置位 
    第五步:再處理一次中斷,在這個中斷里寫入數(shù)據(jù)字節(jié),也是8位數(shù)據(jù)
    第六步:8位數(shù)據(jù)發(fā)送成功接受到ACK  TWINT 會再次置位,那么這個 status code 會指示出發(fā)送完成。當然這只是發(fā)送一個字節(jié)數(shù)據(jù),如果發(fā)送多個數(shù)據(jù)這個過程會持續(xù)多次,一直到數(shù)據(jù)發(fā)送完成。
    第七步:接受完成之后且接收到ACK 我們這里會發(fā)送一個STOP信號,也是通過寫TWCR寄存器來實現(xiàn)的。當然STOP發(fā)送成功之后不會觸發(fā)中斷。值得注意的是中間如果進行多字節(jié)的讀或寫的話發(fā)送的字節(jié)數(shù)是由編程來把握的,也就是說AVR單片機不會知道你要發(fā)多少個字節(jié)。所以這個處理相當于在第7步這里。如果我們程序判斷我們程序已經(jīng)發(fā)送完畢,我們就發(fā)一個STOP信號若如果,沒有就重復一下第五步。這就是ATmega 16的TWI總線的使用方法。下面我們結合24c02一個實際的程序來給大家吹吹牛。
     
    oAT24C02是由ATMEL公司提供的,I2C總線串行EEPROM,其容量為2Kbit(256B),工作電壓在2.7V~5.5V之間,生產(chǎn)工藝是CMOS工藝。
    各引腳功能如下。
    A2~A0:器件地址選擇引腳。將這3個引腳配置成不同的編碼值,在同一串行總線上最多可擴充8片同一容量或不同容量的24系列串行EEPROM芯片。
    SDA:串行數(shù)據(jù)輸入輸出口,是一個雙向的漏極開路結構的引腳,容量擴展時可以將多片24系列的SDA引腳直接相連。
    SCL:串行移位時鐘控制端。寫入時上升沿起作用,讀出時下降沿起作用。
    WP:硬件寫保護控制引腳。當其為低電平時,正常寫操作,高電平時,對EEPROM部分存儲區(qū)域提供硬件寫保護功能,即對被保護區(qū)域只能讀不能寫。
    GND:接地。
    VCC:接+5V電壓
     
    2k位   256*8 = 2K    等于256b
    地址值相當于低三位 0 1 2  組合 8個數(shù)字
    7 硬件寫保護 低電平 可以正常寫操作 高  的話只能讀 所以我們接地OK了
    它的相關電路設計如下圖
    我們設置的時候都會將他的地址值變?yōu)? 0 1 2 全接地線 ,5 6  PC0  PC1  因為第2功能是TWI 總線
    0.1uf進行電源退耦,一般數(shù)字芯片 高速的數(shù)字時鐘對所在電源產(chǎn)生干擾。凈化電源。
    容量計算方法
    AT24Cxx:01~1024
    容量=xx X 1Kbit
    型號系列列表
    AT24C01 1K(128X8) AT24C02 2K(256X8)
    AT24C04 4K(512X8)
    AT24C08 8K(1KX8)
    AT24C16 16K(2KX8)
    AT24C512 512K(64KX8)
    AT24C1024 1M(128KX8)
    值得一提是AVR單片機片上自帶EEPROM 芯片,而且是1K字節(jié)相當于24C08這個容量。而我們24c02實際應用并不大。當然有一些應用場合必須外置的。因為是學習板,因為這個芯片比較常見,學習I2C總線的作用。
    下圖為總體的操作流程
    寫   與讀的操作流程和上面的7步可以對比下。器件地址的表示方法等下講一下。器件地址的高4位是0xa0   1010 低四位   前3位就是 a0 a1 a2  第4位是  讀寫地址   然后等待ACK 。
    數(shù)據(jù)地址相當于數(shù)據(jù) 在256字節(jié)的 存儲器里面的編址,它處于數(shù)據(jù)包的一部分是8位的。
    所以這個是寫是 地址一個    數(shù)據(jù)2 個  數(shù)據(jù)1是數(shù)據(jù)所處的地址   第2是數(shù)據(jù)的內(nèi)容
     
    這就是寫一字節(jié)的操作流程。
    右邊是讀類似。
    讀出的是多個字節(jié) 循環(huán)判斷是否是最后一個字節(jié),而24c02是 ACK 就是ACK 來產(chǎn)生的,最后產(chǎn)生一個停止位
    所以這個讀操作相當于是 地址包1個字節(jié) 數(shù)據(jù)包是多個字節(jié)。
    下面結合程序來大家講解AT24C02應用。
    打開整體測試板程序 我沒有哦
    # 需要此頭文件
     

    相關文章