<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于VHDL/CPLD的I2C串行總線(xiàn)控制器設計及實(shí)現

基于VHDL/CPLD的I2C串行總線(xiàn)控制器設計及實(shí)現

作者: 時(shí)間:2010-05-25 來(lái)源:網(wǎng)絡(luò ) 收藏

  主機發(fā)完第一個(gè)字節后,數據傳輸方向的變化可能存在三種情況。(1)傳輸方向不變,如主機向從機寫(xiě);(2)傳輸方向改變,如主機從從機讀數據;(3)傳輸方向改變多次,如主機對從機進(jìn)行多次讀寫(xiě)。

  2 時(shí)鐘同步與仲裁

  在任何時(shí)刻只能有一個(gè)主機,當同時(shí)有兩個(gè)或更多的器件想成為主機時(shí),就需要進(jìn)行仲裁;時(shí)鐘同步的目的就是為仲裁提供一個(gè)確定的時(shí)鐘。時(shí)鐘SCL的同步和仲裁通過(guò)“線(xiàn)與”來(lái)執行,SCL的低電平時(shí)間取決于低電平時(shí)間最長(cháng)的主機,高電平時(shí)間取決于高電平時(shí)間最短的主機。

 仲裁過(guò)程在數據線(xiàn)SDA線(xiàn)上進(jìn)行,當SCL為高電平時(shí),如果SDA線(xiàn)上有主機發(fā)送低電平,則發(fā)送高電平的主機將關(guān)閉輸出級。因為的狀態(tài)和自身內部不一樣,于是發(fā)送低電平的主機贏(yíng)得仲裁。仲裁可以持續多個(gè)位,在實(shí)際通信過(guò)程中,仲裁的第一階段比較地址位,如果多個(gè)主機尋址同一個(gè)從機,則繼續比較數據位(主機是發(fā)送機)或響應位(主機是接收機)。由于總線(xiàn)上的地址和數據由贏(yíng)得總線(xiàn)的主機決定,因此仲裁過(guò)程中不會(huì )丟失信息。如果一個(gè)主機具有從機功能,則當它失去仲裁時(shí),必須立即切換到從機狀態(tài),因為它可能正在被其他主機尋址。

  3 I2C總線(xiàn)

  I2C總線(xiàn)的主要作用是提供微(μC)和I2C總線(xiàn)之間的接口,為兩者之間的通信提供物理層協(xié)議的轉換。在應用系統中,外圍器件(如E2PROM、LCD、實(shí)時(shí)鐘等)連接在I2C總線(xiàn)上,再通過(guò)I2C總線(xiàn)控制器和μC連起來(lái)。其典型的應用,如現在許多彩電的控制系統都I2C總線(xiàn)。為了使清晰明了,本文將控制器的分成兩部分。一部分為微控制器(μC)接口,另一部分為I2C接口,如圖2所示。

基于VHDL/CPLD的I2C串行總線(xiàn)控制器設計及實(shí)現

  μC接口部分主要包含狀態(tài)寄存器(MBSR)、控制寄存器(MBCR)、地址寄存器(MADR)、數據寄存器(MBDR)和地址譯碼/總線(xiàn)接口模塊。狀態(tài)寄存器指示I2C總線(xiàn)控制器的當前狀態(tài),如傳輸是否完成、總線(xiàn)是否忙等信息??刂萍拇嫫魇铅藽控制I2C總線(xiàn)控制器的主要途徑,通過(guò)置0/1完成I2C總線(xiàn)控制器使能、中斷使能、主/從(Master/Slave)模式選擇、產(chǎn)生起始位等操作。地址寄存器保存著(zhù)I2C總線(xiàn)控制器作為從機時(shí)的地址。數據寄存器用于保存接收的數據或是待發(fā)送的數據。

I2C接口的核心是主狀態(tài)機,它控制著(zhù)整個(gè)I2C接口的運作。和I2C總線(xiàn)直接相連的模塊有起始/停止位產(chǎn)生模塊、I2C Header寄存器、I2C數據寄存器和仲裁及起始/停止位檢測模塊。當控制器是Master時(shí),起始/停止位產(chǎn)生模塊用于在I2C總線(xiàn)上產(chǎn)生起始位和停止位;I2C數據寄存器用于保存總線(xiàn)上傳送的數據;仲裁及起始/停止位檢測模塊的作用是執行仲裁,并檢測I2C總線(xiàn)上的起始/停止位,以便為主狀態(tài)機提供輸入。其他模塊包括:I2C狀態(tài)寄存器,用于記錄I2C總線(xiàn)的狀態(tài);地址比較模塊,用于比較總線(xiàn)上傳送的地址和本機的從機地址是否一致,如果一致,說(shuō)明其他主機正在尋址本控制器,控制器必須立即切換到從機狀態(tài),同時(shí)發(fā)出響應位。

  3.1 μC接口設計

  μC接口用于連接I2C接口電路和μC,主要兩者之間的信號交互握手機制。設計時(shí)可以用VHDL提供的狀態(tài)機來(lái)描述信號交互機制中的工作狀態(tài)切換,如圖3(a)所示。

  μC接口電路中使用的四組寄存器的地址是24位的,高16位為I2C總線(xiàn)控制器的基址(MBASE),占用μC的地址空間,低8位用于區別不同的寄存器。寄存器本身是8位的,圖3(b1)為控制寄存器,圖3(b2)為狀態(tài)寄存器。圖中示出了每一位的含義。

基于VHDL/CPLD的I2C串行總線(xiàn)控制器設計及實(shí)現

  3.2 I2C接口設計

  I2C接口用于連接μC接口電路和I2C總線(xiàn),由兩個(gè)狀態(tài)機構成:一個(gè)是I2C接口主狀態(tài)機,用于執行發(fā)送和接收操作;另一個(gè)為“SCL/SDA/ STOP 產(chǎn)生”狀態(tài)機,當I2C總線(xiàn)控制器為主機時(shí),這個(gè)狀態(tài)機產(chǎn)生SCL/START/STOP信號。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>