基于VHDL/CPLD的I2C串行總線(xiàn)控制器設計及實(shí)現
I2C(Inter IC BUS)是Philips公司開(kāi)發(fā)的用于芯片之間連接的總線(xiàn)。 I2C總線(xiàn)用兩根信號線(xiàn)進(jìn)行數據傳輸,一根為串行數據線(xiàn)(SDA),另一根為串行時(shí)鐘線(xiàn)(SCL)。I2C總線(xiàn)允許若干兼容器件(如存儲器、A/D轉換器、D/A轉換器、LCD驅動(dòng)器等)共享總線(xiàn)。I2C總線(xiàn)理論上可以允許的最大設備數,是以總線(xiàn)上所有器件的總電容(其中包括連線(xiàn)本身的電容和連接端的引出電容)不超過(guò)400pF為限,總線(xiàn)上所有器件依靠SDA線(xiàn)發(fā)送的地址信號尋址,不需要片選線(xiàn)。任何時(shí)刻總線(xiàn)只能由一個(gè)主器件控制,各從器件在總線(xiàn)空閑時(shí)啟動(dòng)數據傳輸。I2C總線(xiàn)數據傳輸的標準模式速率為100kbps,快速模式速率為400kbps,高速模式速率為3.4Mbps。
本文引用地址:http://dyxdggzs.com/article/163062.htm用VHDL和CPLD設計數字系統具有傳統方法無(wú)可比擬的優(yōu)越性,它已經(jīng)成為大規模集成電路設計最為有效的一種手段。為簡(jiǎn)單起見(jiàn),本文采用VHDL設計標準模式的I2C總線(xiàn)控制電路。
1 I2C總線(xiàn)上的數據傳輸
I2C總線(xiàn)包含時(shí)鐘線(xiàn)SCL和數據線(xiàn)SDA兩條連線(xiàn),SCL由主機產(chǎn)生。I2C總線(xiàn)的數據傳輸流程如圖1所示。其傳輸過(guò)程為:首先主機產(chǎn)生起始位,然后傳送第一個(gè)字節。8位數據中首先傳送的是數據的最高位MSB,最低位LSB為讀寫(xiě)指示位,1表示主機讀,0表示主機寫(xiě),高7位地址可使主機尋址128個(gè)從器件。
從機收到第一字節數據后發(fā)響應位,主機收到響應位后接著(zhù)發(fā)送第二個(gè)字節的數據。數據發(fā)送完畢后產(chǎn)生結束位,數據傳送結束。數據傳送時(shí),只有時(shí)鐘SCL為低電平時(shí)SDA才允許切換,SCL為高電平時(shí)SDA必須穩定,此時(shí)SDA的電平就是總線(xiàn)轉送的數值。
在SCL為高電平時(shí),SDA線(xiàn)由高到低切換表示起始位,SDA線(xiàn)由低到高切換表示停止位。起始位和停止位由主機產(chǎn)生,在起始位產(chǎn)生后總線(xiàn)處于忙狀態(tài),停止位出現并經(jīng)過(guò)一定時(shí)間后總線(xiàn)進(jìn)入空閑狀態(tài)。發(fā)送器每發(fā)送一個(gè)字節后,接收器必須產(chǎn)生一個(gè)響應位。響應位的驅動(dòng)時(shí)鐘由主機產(chǎn)生則接收器將SDA線(xiàn)拉低產(chǎn)生響應位。如果主機是接收器,則接收最后一個(gè)字節時(shí),響應位為1,通知從機結束發(fā)送,否則響應位為0。當從機不能響應從機地址(例如它正在執行一些實(shí)時(shí)函數,不能接收或發(fā)送)時(shí),或響應了從機地址但在傳輸一段時(shí)間后不能接收更多的數據字節,此時(shí)從機可以通過(guò)響應位為1通知主機終止當前的傳輸,于是主機產(chǎn)生一個(gè)停止位終止傳輸,或者產(chǎn)生重復開(kāi)始位開(kāi)始新的傳輸。
SDA線(xiàn)上傳送的數據必須為8位,每次傳送可以發(fā)送的字節數量不受限制。如果從機要完成一些其他功能(例如執行一個(gè)內部中斷服務(wù)程序)才能接收或發(fā)送下一個(gè)數據字節,則從機可以使SCL維持低電位,迫使主機進(jìn)入等待狀態(tài)。從機準備好接收或發(fā)送下一個(gè)數據字節時(shí),釋放SCL,數據傳輸繼續。
SDA和SCL都是雙向線(xiàn)路,使用時(shí)通過(guò)上拉電阻連接到電源??偩€(xiàn)空閑時(shí)這兩條線(xiàn)路都是高電平,連接到總線(xiàn)的器件的輸出級必須是漏極開(kāi)路或集電極開(kāi)路,這樣總線(xiàn)才能執行“線(xiàn)與”的功能。
評論