新聞中心

TWI接口

作者: 時間:2016-12-12 來源:網絡 收藏
在AVR系列單片機中內嵌有一個TWI(Two-wire Serial Interface)接口,它實際上就是IIC總線接口。IIC是一種多向控制總線,它是由PHILIPS公司在二十世紀八十年代初設計出來的,利用該總線可實現(xiàn)多主機系統(tǒng)所需的裁決和高低速設備同步等功能,是一種高性能的串行總線。IIC總線的連接方式如下圖所示。它只用兩根雙向傳輸線就可以將128個不同的設備互連到一起。這兩根線一根是時鐘線SCL,一根是數(shù)據(jù)SDA。外部硬件只需要兩個上拉電阻,每根線上一個。所有連接到總線上的設備都有自己的地址。

本文引用地址:http://m.butianyuan.cn/article/201612/328731.htm

總線的速度有兩個不同的規(guī)范,一種的速度低于100kHz,而另外一種的速度高達400kHz,總線間的電容不能大于400pF。所有TWI兼容的器件的總線驅動都應該是漏極開路或集電極開路的結構,這樣就可以實現(xiàn)線與的功能。TWI器件在輸出為0時,TWI總線會產生低電平。當所有的TWI器件輸出為三態(tài)時,總線會輸出高電平,如果接有上拉電阻電壓將會被拉高。

TWI總線上傳輸?shù)臄?shù)據(jù)是通過在時鐘線(SCL)高電平期間對應的數(shù)據(jù)線(SDA)上的電平來判別的??赏ㄟ^下圖來描述。

在上圖中,當SCL拉高期間對應的SDA的電平,如果是高則這位數(shù)據(jù)就是1,反之則是0。只有在SCL為低電平期間,SDA才可以更新下一位的數(shù)據(jù)。TWI總線上數(shù)據(jù)的傳送就是通過SCL為高時對應到的SDA的值來構成的。顯然,SCL的頻率決定了數(shù)據(jù)傳送的速度。

除了傳送的數(shù)據(jù)以外,在每一幀數(shù)據(jù)傳送之前,還會有一個啟動信號,以通知從機準備接收數(shù)據(jù)。在數(shù)據(jù)傳送結束之后,也會有一個停止信號,以通知從機數(shù)據(jù)傳輸結束。啟動信號是這樣來定義的,在SCL為高電平期間,若對應的SDA線上有一個由高變低的電平下跳沿,則表示這是一個啟動信號。同樣,停止信號是這樣定義的,在SCL為高電平期間,若對應的SDA線上有一個由低變高的電平上跳沿,則表示這是一個停止信號。為了形成啟動或停止信號,必須在判別該信號的SCL拉高之前做好電平準備,比如要形成一個停止信號,必須在SCL為低電平期間把SDA上的電平拉低,以便在緊跟著后面的SCL高電平期間把SDA的電平拉低,形成一個停止信號。當已經有一個啟動信號之后,在沒有停止信號出現(xiàn)之前若再次出現(xiàn)啟動信號,則表示該信號是一個重新啟動信號,它主要用于在主機不放棄總線控制的情況下啟動新的傳送。上述整個過程可用下圖來描述。

通過上述討論,說明了TWI總線的數(shù)據(jù)位傳送與時鐘脈沖是同步的。除了啟動與停止狀態(tài)之外,當時鐘線為高電平時,數(shù)據(jù)線上的電壓(不論是高還是低)必須保持穩(wěn)定,否則有可能被識別成停止信號或重新開始的信號。

下面來看TWI總線是如何尋址的。在啟動信號之后緊接著的就是地址幀,所有的地址包均為9位,包括7位地址位、1位READ/WRITE控制位(即方向位,表明是主機寫從機還是從機寫主機)與1位應答位。如果READ/WRITE為1,則執(zhí)行讀(從機寫主機)操作;否則執(zhí)行寫(主機寫從機)操作。從機被尋址后,必須在第九個SCL(ACK)周期通過拉低SDA作出應答。發(fā)送地址時先發(fā)送高位后發(fā)送低位,地址字節(jié)的MSB(數(shù)據(jù)的最高位)先被發(fā)送,從機地址由用戶自行分配,但要避開保留的廣播地址(即地址0000000)。地址的傳輸格式可用下圖來描述。

地址發(fā)送后,就要發(fā)送數(shù)據(jù)包。所有在TWI總線上傳送的數(shù)據(jù)包為9位長,包括8位數(shù)據(jù)位及1位應答位。在數(shù)據(jù)傳送中,主機產生時鐘及START與STOP狀態(tài),而接收器響應接收。應答是由從機在第9個SCL周期拉低SDA實現(xiàn)的。如果接收器在第9個SCL周期使SDA為高,則是發(fā)出NACK信號。NACK信號是在接收器在完成了最后數(shù)據(jù)的接收,或者由于某些原因無法接收更多的數(shù)據(jù)時,才在收到最后的字節(jié)后發(fā)出去告知發(fā)送器的。數(shù)據(jù)的傳輸格式可用下圖來描述。
下面來看,如何將地址包和數(shù)據(jù)包組合為一個完整的傳輸過程。發(fā)送主要由START狀態(tài)、SLA+R/W、至少一個數(shù)據(jù)包及STOP狀態(tài)組成。只有START與STOP狀態(tài)的空信息是非法的。當主機設定的時鐘速度相對于從機太快,或從機需要額外的時間來處理數(shù)據(jù)時,從機可通過拉低SCL來延長SCL低電平的時間。從機延長SCL低電平的時間不會影響SCL高電平的時間,因為SCL高電平時間是由主機決定的。一個典型的數(shù)據(jù)傳送的過程可用下圖來描述。
要注意一點,SLA+R/W與STOP之間傳送的字節(jié)數(shù)由應用程序的協(xié)議決定。
下面來看AVR內部的TWI模塊,它是由幾個子模塊組成,其內部結構圖如下。

在上圖中,位于粗線之中的寄存器可以通過程序進行訪問。SCL與SDA為MCU的TWI接口引腳。引腳的輸出驅動器包含一個波形斜率限制器以滿足TWI的信號規(guī)范。引腳的輸入部分包括尖峰抑制單元以去除小于50ns的毛刺干擾。當相應的端口被設置為SCL與SDA引腳時,可以使能I/O口內部的上拉電阻,這樣可省掉外部的上拉電阻。

當TWI工作于主機模式時,比特率發(fā)生器(上圖中的Bit Rate Generator部分)控制時鐘信號SCL的周期。具體的值由TWI狀態(tài)寄存器TWSR(上圖中的Control Unit部分內)的預分頻系數(shù)以及比特率寄存器TWBR(上圖中的Bit Rate Generator部分內)設定。可通過下面的公式來計算。

式中,TWBR是TWI比特率寄存器的數(shù)值,TWPS是TWI狀態(tài)寄存器預分頻的數(shù)值。TWI工作在主機模式時,TWBR值應該不小于10。否則主機會在SDA與SCL產生錯誤輸出作為提示信號。

當TWI工作在從機模式時,不需要對比特率或預分頻進行設定,但從機的CPU時鐘頻率必須大于TWI時鐘線SCL頻率的16倍。

在上圖中,還有一個總線接口(上圖中的Bus Interface Unit部分)。它包含有數(shù)據(jù)與地址移位寄存器TWDR,START/STOP控制器和總線仲裁判定硬件電路。TWDR寄存器用于存放發(fā)送或接收的數(shù)據(jù)或地址。除了8位的TWDR外,總線接口單元還有一個寄存器,包含了用于發(fā)送或接收應答的(N)ACK。這個(N)ACK寄存器不能由程序直接訪問。當接收數(shù)據(jù)時,它可以通過TWI控制寄存器TWCR來置位或清零;在發(fā)送數(shù)據(jù)時,(N)ACK值由TWCR的設置來決定。START/STOP控制器負責產生和檢測TWI總線上的START、REPEATEDSTART與STOP狀態(tài)。即使在MCU處于休眠狀態(tài)時,START/STOP控制器仍然能夠檢測TWI總線上的START/STOP條件,當檢測到自己被TWI總線上的主機尋址時,將MCU從休眠狀態(tài)喚醒,這一功能在節(jié)電時非常必要。

接下來是地址匹配單元(上圖中的Address Match Unit部分)。地址匹配單元將檢測從總線上接收到的地址是否與TWAR寄存器中的7位地址相匹配。如果TWAR寄存器的TWI廣播應答識別使能位TWGCE為1,從總線接收到的地址也會與廣播地址進行比較。一旦地址匹配成功,控制單元將得到通知以進行正確地響應。TWI可以響應,也可以不響應主機的尋址,這取決于TWCR寄存器的設置。即使MCU處于休眠狀態(tài)時,地址匹配單元仍可繼續(xù)工作。一旦主機尋址到這個器件,就可以將MCU從休眠狀態(tài)喚醒。

最后一個部分是控制單元,它監(jiān)聽TWI總線,并根據(jù)TWI控制寄存器TWCR的設置作出相應的響應。當TWI總線上產生需要應用程序干預處理的事件時,TWI中斷標志位TWINT置位。一旦TWINT標志位置1,時鐘線SCL的電平即被拉低,暫停TWI總線上的數(shù)據(jù)傳輸,讓用戶程序處理事件。在下列狀況出現(xiàn)時,TWINT標志位會被置位。

1、在TWI傳送完START/REPEATED START信號之后
2、在TWI傳送完SLA+R/W數(shù)據(jù)之后
3、在TWI傳送完地址字節(jié)之后
4、在TWI總線仲裁失敗之后
5、在TWI被主機尋址之后( 廣播方式或從機地址匹配)
6、在TWI接收到一個數(shù)據(jù)字節(jié)之后
7、作為從機工作時,TWI接收到STOP或REPEATED START信號之后
8、由于非法的START或STOP信號造成總線錯誤時



關鍵詞: TWI接口IIC總線接

評論


技術專區(qū)

關閉