嚴(yán) 寒, 方振國, 汪 珺, 郭 偉, 毛春雨
(淮北師范大學(xué)物理與電子信息學(xué)院,安徽 淮北 235000)
I2C總線協(xié)議是由Philips公司開發(fā)的一種同步串行總線。相比于其它的串行協(xié)議來說,I2C總線擁有占用資源少、可以有多個主機控制和能掛載多個從機等優(yōu)點,使得其被廣泛的應(yīng)用在系統(tǒng)內(nèi)多個IC之間的通信。對于I2C協(xié)議掛載多從機進(jìn)行數(shù)據(jù)傳輸也得到了業(yè)內(nèi)人士的廣泛應(yīng)用和研究。其中,孫靖實現(xiàn)了嵌入式控制器基于I2C總線體系的外圍設(shè)備擴展應(yīng)用[1],但在設(shè)計中掛載在總線上的外圍設(shè)備是通過器件地址進(jìn)行區(qū)分,對器件地址相同的設(shè)備沒有進(jìn)行研究。邱永華通過PCF8574和數(shù)字開關(guān)實現(xiàn)了可連接器件地址相同的模塊的I2C接口擴展器[2],但可連接數(shù)目受限,靈活擴展配置性能較差?;诳芍貥?gòu)并行處理平臺ZYNQ對I2C協(xié)議進(jìn)行了擴展設(shè)計,有效的補充了了相同地址下的主從通信協(xié)議并解決了傳輸速率的自主選擇問題。
I2C總線是一種簡單的雙向二進(jìn)制同步串行總線,只需要使用一根時鐘線(SCL)和一根雙向數(shù)據(jù)線(SDA)即可在器件中進(jìn)行傳輸信息[3]。主機和從機之間以一個字節(jié)(8bit)為單位進(jìn)行雙向傳輸,根據(jù)通信速率的不同,主機和從機進(jìn)行數(shù)據(jù)傳輸時需要嚴(yán)格的遵循I2C的傳輸規(guī)范。讀寫操作如下:
寫數(shù)據(jù)操作分為Byte Write和Page Write兩種,Byte Write時序如圖1所示,根據(jù)時序圖單字節(jié)寫數(shù)據(jù)流程如下:主機發(fā)送起始信號->主機發(fā)送7位器件地址+1位寫命令R/W(0為寫)->主機發(fā)送8為字地址->從機返回響應(yīng)信號ACK(0表示數(shù)據(jù)寫入成功)->主機發(fā)送8位寫數(shù)據(jù)->從機返回響應(yīng)信號ACK->主機發(fā)送停止信號。
圖1 寫數(shù)據(jù)過程
讀數(shù)據(jù)操作分為Random Read和Sequential Read兩種,Random Read時序如圖2所示,根據(jù)時序圖單字節(jié)寫數(shù)據(jù)流程如下:主機發(fā)送起始信號->主機發(fā)送7位器件地址+1位寫命令R/W->主機發(fā)送8為字地址->從機返回響應(yīng)信號ACK->主機發(fā)送起始信號->主機發(fā)送7位器件地址+1位讀命令R/W(1為讀)->從機返回響應(yīng)信號ACK->從機發(fā)送8位數(shù)據(jù)->主機發(fā)送停止信號。
圖2 讀數(shù)據(jù)過程
I2C主從通信擴展協(xié)議驅(qū)動系統(tǒng)如圖3所示,設(shè)計主要包括參數(shù)配置、I2C總線接口、編碼片選器三個部分,其中參數(shù)配置中有從機切換裝置和I2C傳輸速率切換裝置。
圖3 I2C協(xié)議擴展驅(qū)動系統(tǒng)圖
由系統(tǒng)框圖可知,掛載在I2C總線上的從機擁有相同的器件地址,總線通過選通器對從機進(jìn)行區(qū)分。為了節(jié)約資源,總線對所有從機都發(fā)送時鐘信號(SCL),只對片選器選通的從機進(jìn)行雙向數(shù)據(jù)傳輸(SDA),為了防止數(shù)據(jù)誤發(fā),片選器一次只能對一個從機保持選通狀態(tài)(即參數(shù)配置中從機切換裝置每次只能選定一個從機進(jìn)行數(shù)據(jù)傳輸)。為了實現(xiàn)I2C總線傳輸速率調(diào)節(jié)便利,設(shè)計中設(shè)置了低速(100Kbps)、中速模式(400Kbps)和高速模式(3.4Mbps)三種傳輸速率[4],可通過參數(shù)配置中的傳輸速率切換裝置自由切換。
以I2C總線掛載4塊從機為例,從機片選真值表如表1所示,由表可知,4塊從機通過二進(jìn)制進(jìn)行編碼需要2根切換線,可以通過從機切換裝置控制切換線狀態(tài)從而完成I2C總線和切換從機進(jìn)行選通。
表1 從機片選真值表
設(shè)計中的FPGA采用的Xilinx公司ZYNQ-7000開發(fā)平臺,該開發(fā)平臺集成了ARM處理器的軟件可編程性和FPGA的硬件可編程性[5-7],設(shè)計軟件采用Xilinx Vivado 2020.2,使用Verilog語言,并且使用Vivado軟件中的邏輯分析儀進(jìn)行設(shè)計驗證。
設(shè)計驗證中使用片選按鍵作為從機和傳輸速率切換裝置,4塊AT24C02 EEPROM模塊作為從機,AT24C02器件地址為7’1010000。驗證過程中往從機字地址8’b00110011中發(fā)送固定數(shù)據(jù)8’b01010101,通過對從機中發(fā)送的數(shù)據(jù)和讀取的數(shù)據(jù)進(jìn)行對比來驗證本設(shè)計。
驗證步驟如下:
1)配置傳輸速率為400Kbps,選定從機3;
2)寫入數(shù)據(jù)到從機3,再從從機3讀取寫入的數(shù)據(jù);
3)傳輸速率不變,選定從機4;
4)寫入數(shù)據(jù)到從機4,再從從機4讀取寫入的數(shù)據(jù);
5)選定從機4,分別切換傳輸速率切換為100Kbps,3.4Mbps,往從機寫入數(shù)據(jù)。
使用100Kbps傳輸速率對選通從機3進(jìn)行數(shù)據(jù)讀寫的時序圖如圖4,5所示,由圖可知,數(shù)據(jù)傳輸過程中I2C總線只對從機3的雙向數(shù)據(jù)線(sda)進(jìn)行數(shù)據(jù)傳輸,且寫入的數(shù)據(jù)和讀取的數(shù)據(jù)皆為8’b01010101,其余從機雙向數(shù)據(jù)線處于空閑狀態(tài)。
圖4 從機3數(shù)據(jù)寫入時序圖
使用100Kbps傳輸速率對選通從機4進(jìn)行數(shù)據(jù)讀寫的時序圖如圖6,7所示,由圖可知,數(shù)據(jù)傳輸過程中I2C總線只對從機4的雙向數(shù)據(jù)線(sda)進(jìn)行數(shù)據(jù)傳輸,且寫入的數(shù)據(jù)和讀取的數(shù)據(jù)皆為8’b01010101,其余從機雙向數(shù)據(jù)線處于空閑狀態(tài)。
圖5 從機3數(shù)據(jù)讀取時序圖
圖6 從機4數(shù)據(jù)寫入時序圖
圖7 從機4數(shù)據(jù)讀取時序圖
F= 1/Ts
(1)
傳輸速率計算公式如公式1所示,其中F表示傳輸速率,Ts表示單個時鐘信號周期消耗的時間。由圖6可知4個時鐘信號周期消耗1000個系統(tǒng)時間間隔,而系統(tǒng)時鐘為50Mhz(20ns),故系統(tǒng)時間間隔為10ns。因此此時傳輸速率為式(2):
F=4/(1000*10ns)= 400Kbps
(2)
使用傳輸速率為100Kbps往從機4寫入數(shù)據(jù)的時序如圖8所示,由圖可知5個時鐘信號周期消耗5000個系統(tǒng)時間間隔。因此此時傳輸速率為式(3):
圖8 傳輸速率100Kbps從機4數(shù)據(jù)寫入時序圖
F=5/(5000*10ns)= 100Kbps
(3)
使用傳輸速率為3.4Mbps往從機4寫入數(shù)據(jù)的時序如圖9所示,由圖9可知3.4個時鐘信號周期消耗100個系統(tǒng)時間間隔。因此此時傳輸速率為:
圖9 傳輸速率3.4Mbps從機4數(shù)據(jù)寫入時序圖
F=3.4/(100*10ns)= 3.4Mbps
(4)
為了使主機可以通過I2C總線對擁有器件地址相同的從機進(jìn)行數(shù)據(jù)傳輸和I2C總線可以自由切換傳輸速率,提出來一種基于FPGA的I2C擴展驅(qū)動設(shè)計方案,并通過ZYNQ-7000硬件開發(fā)平臺,AT24C02 EEPROM模塊和Vivado軟件完成本設(shè)計,通過Vivado軟件中的邏輯分析儀抓取的波形可以看出,主機可對任一從機進(jìn)行數(shù)據(jù)傳輸,并且可以自由切換I2C總線的傳輸速率。設(shè)計結(jié)構(gòu)簡單、擴展性強、可移植性高,具有一定的實用價值,設(shè)計中若需要擴展從機設(shè)備,只需要增加系統(tǒng)的管腳資源而不用消耗其它硬件資源。