TWI接口

總線(xiàn)的速度有兩個(gè)不同的規范,一種的速度低于100kHz,而另外一種的速度高達400kHz,總線(xiàn)間的電容不能大于400pF。所有TWI兼容的器件的總線(xiàn)驅動(dòng)都應該是漏極開(kāi)路或集電極開(kāi)路的結構,這樣就可以實(shí)現線(xiàn)與的功能。TWI器件在輸出為0時(shí),TWI總線(xiàn)會(huì )產(chǎn)生低電平。當所有的TWI器件輸出為三態(tài)時(shí),總線(xiàn)會(huì )輸出高電平,如果接有上拉電阻電壓將會(huì )被拉高。
TWI總線(xiàn)上傳輸的數據是通過(guò)在時(shí)鐘線(xiàn)(SCL)高電平期間對應的數據線(xiàn)(SDA)上的電平來(lái)判別的??赏ㄟ^(guò)下圖來(lái)描述。

在上圖中,當SCL拉高期間對應的SDA的電平,如果是高則這位數據就是1,反之則是0。只有在SCL為低電平期間,SDA才可以更新下一位的數據。TWI總線(xiàn)上數據的傳送就是通過(guò)SCL為高時(shí)對應到的SDA的值來(lái)構成的。顯然,SCL的頻率決定了數據傳送的速度。
除了傳送的數據以外,在每一幀數據傳送之前,還會(huì )有一個(gè)啟動(dòng)信號,以通知從機準備接收數據。在數據傳送結束之后,也會(huì )有一個(gè)停止信號,以通知從機數據傳輸結束。啟動(dòng)信號是這樣來(lái)定義的,在SCL為高電平期間,若對應的SDA線(xiàn)上有一個(gè)由高變低的電平下跳沿,則表示這是一個(gè)啟動(dòng)信號。同樣,停止信號是這樣定義的,在SCL為高電平期間,若對應的SDA線(xiàn)上有一個(gè)由低變高的電平上跳沿,則表示這是一個(gè)停止信號。為了形成啟動(dòng)或停止信號,必須在判別該信號的SCL拉高之前做好電平準備,比如要形成一個(gè)停止信號,必須在SCL為低電平期間把SDA上的電平拉低,以便在緊跟著(zhù)后面的SCL高電平期間把SDA的電平拉低,形成一個(gè)停止信號。當已經(jīng)有一個(gè)啟動(dòng)信號之后,在沒(méi)有停止信號出現之前若再次出現啟動(dòng)信號,則表示該信號是一個(gè)重新啟動(dòng)信號,它主要用于在主機不放棄總線(xiàn)控制的情況下啟動(dòng)新的傳送。上述整個(gè)過(guò)程可用下圖來(lái)描述。

通過(guò)上述討論,說(shuō)明了TWI總線(xiàn)的數據位傳送與時(shí)鐘脈沖是同步的。除了啟動(dòng)與停止狀態(tài)之外,當時(shí)鐘線(xiàn)為高電平時(shí),數據線(xiàn)上的電壓(不論是高還是低)必須保持穩定,否則有可能被識別成停止信號或重新開(kāi)始的信號。
下面來(lái)看TWI總線(xiàn)是如何尋址的。在啟動(dòng)信號之后緊接著(zhù)的就是地址幀,所有的地址包均為9位,包括7位地址位、1位READ/WRITE控制位(即方向位,表明是主機寫(xiě)從機還是從機寫(xiě)主機)與1位應答位。如果READ/WRITE為1,則執行讀(從機寫(xiě)主機)操作;否則執行寫(xiě)(主機寫(xiě)從機)操作。從機被尋址后,必須在第九個(gè)SCL(ACK)周期通過(guò)拉低SDA作出應答。發(fā)送地址時(shí)先發(fā)送高位后發(fā)送低位,地址字節的MSB(數據的最高位)先被發(fā)送,從機地址由用戶(hù)自行分配,但要避開(kāi)保留的廣播地址(即地址0000000)。地址的傳輸格式可用下圖來(lái)描述。




在上圖中,位于粗線(xiàn)之中的寄存器可以通過(guò)程序進(jìn)行訪(fǎng)問(wèn)。SCL與SDA為MCU的TWI接口引腳。引腳的輸出驅動(dòng)器包含一個(gè)波形斜率限制器以滿(mǎn)足TWI的信號規范。引腳的輸入部分包括尖峰抑制單元以去除小于50ns的毛刺干擾。當相應的端口被設置為SCL與SDA引腳時(shí),可以使能I/O口內部的上拉電阻,這樣可省掉外部的上拉電阻。
當TWI工作于主機模式時(shí),比特率發(fā)生器(上圖中的Bit Rate Generator部分)控制時(shí)鐘信號SCL的周期。具體的值由TWI狀態(tài)寄存器TWSR(上圖中的Control Unit部分內)的預分頻系數以及比特率寄存器TWBR(上圖中的Bit Rate Generator部分內)設定??赏ㄟ^(guò)下面的公式來(lái)計算。

式中,TWBR是TWI比特率寄存器的數值,TWPS是TWI狀態(tài)寄存器預分頻的數值。TWI工作在主機模式時(shí),TWBR值應該不小于10。否則主機會(huì )在SDA與SCL產(chǎn)生錯誤輸出作為提示信號。
當TWI工作在從機模式時(shí),不需要對比特率或預分頻進(jìn)行設定,但從機的CPU時(shí)鐘頻率必須大于TWI時(shí)鐘線(xiàn)SCL頻率的16倍。在上圖中,還有一個(gè)總線(xiàn)接口(上圖中的Bus Interface Unit部分)。它包含有數據與地址移位寄存器TWDR,START/STOP控制器和總線(xiàn)仲裁判定硬件電路。TWDR寄存器用于存放發(fā)送或接收的數據或地址。除了8位的TWDR外,總線(xiàn)接口單元還有一個(gè)寄存器,包含了用于發(fā)送或接收應答的(N)ACK。這個(gè)(N)ACK寄存器不能由程序直接訪(fǎng)問(wèn)。當接收數據時(shí),它可以通過(guò)TWI控制寄存器TWCR來(lái)置位或清零;在發(fā)送數據時(shí),(N)ACK值由TWCR的設置來(lái)決定。START/STOP控制器負責產(chǎn)生和檢測TWI總線(xiàn)上的START、REPEATEDSTART與STOP狀態(tài)。即使在MCU處于休眠狀態(tài)時(shí),START/STOP控制器仍然能夠檢測TWI總線(xiàn)上的START/STOP條件,當檢測到自己被TWI總線(xiàn)上的主機尋址時(shí),將MCU從休眠狀態(tài)喚醒,這一功能在節電時(shí)非常必要。
接下來(lái)是地址匹配單元(上圖中的Address Match Unit部分)。地址匹配單元將檢測從總線(xiàn)上接收到的地址是否與TWAR寄存器中的7位地址相匹配。如果TWAR寄存器的TWI廣播應答識別使能位TWGCE為1,從總線(xiàn)接收到的地址也會(huì )與廣播地址進(jìn)行比較。一旦地址匹配成功,控制單元將得到通知以進(jìn)行正確地響應。TWI可以響應,也可以不響應主機的尋址,這取決于TWCR寄存器的設置。即使MCU處于休眠狀態(tài)時(shí),地址匹配單元仍可繼續工作。一旦主機尋址到這個(gè)器件,就可以將MCU從休眠狀態(tài)喚醒。
最后一個(gè)部分是控制單元,它監聽(tīng)TWI總線(xiàn),并根據TWI控制寄存器TWCR的設置作出相應的響應。當TWI總線(xiàn)上產(chǎn)生需要應用程序干預處理的事件時(shí),TWI中斷標志位TWINT置位。一旦TWINT標志位置1,時(shí)鐘線(xiàn)SCL的電平即被拉低,暫停TWI總線(xiàn)上的數據傳輸,讓用戶(hù)程序處理事件。在下列狀況出現時(shí),TWINT標志位會(huì )被置位。
1、在TWI傳送完START/REPEATED START信號之后
2、在TWI傳送完SLA+R/W數據之后
3、在TWI傳送完地址字節之后
4、在TWI總線(xiàn)仲裁失敗之后
5、在TWI被主機尋址之后( 廣播方式或從機地址匹配)
6、在TWI接收到一個(gè)數據字節之后
7、作為從機工作時(shí),TWI接收到STOP或REPEATED START信號之后
8、由于非法的START或STOP信號造成總線(xiàn)錯誤時(shí)
評論