基于Verilog HDL的I2C總線分析器
1 引言
在醫(yī)療保健、臨床醫(yī)學和醫(yī)療救護中,血氧、心電、血壓、呼吸、腦電波等生理信號都是非常重要的指標。針對臨床應用,已經(jīng)報道了將血氧、血壓等檢測應用于咽喉、食管等體內(nèi)循環(huán) [1],提高了準確性和及時性[2],這種方法正處在研究階段,I 2C總線分析儀可以擴展醫(yī)療監(jiān)測儀實現(xiàn)包括體外循環(huán)的多種方法同時檢測和比較?,F(xiàn)在醫(yī)療儀器短缺,一臺帶 I 2C擴展接口的監(jiān)測儀可實現(xiàn)多人同時使用,資源得到有效利用??梢?,實時、準確記錄各項人體基本體征參數(shù),同時具有便攜式特點的醫(yī)療監(jiān)測儀對健康監(jiān)護、檢測技術和醫(yī)學研究具有重大意義。如何擴展醫(yī)療檢測儀的功能成為熱點問題。
目前擴展檢測儀接口的方法很多,多通道是最常用的方法,具有數(shù)據(jù)通道相對獨立,有很強的抗干擾能力和設計復雜度優(yōu)勢,但體積較大,資源浪費多,不適合便攜式處理。I 2C總線是一個工業(yè)標準同步串行數(shù)據(jù)通訊總線,被廣泛應用在消費類電子和嵌入式系統(tǒng)產(chǎn)品中 [3],例如:數(shù)據(jù)轉(zhuǎn)換器、EEPROM、傳感器等等。相比現(xiàn)今流行的并口、SPI、USB等接口,雖然 I 2C有相對較低的帶寬 [4],但功能多樣化,廣泛應用于信號處理器的控制接口設計。而且血氧飽和度有效信號基頻在 1Hz左右,血壓、呼吸、腦電波等生理信號的基頻幾十赫茲范圍內(nèi)。多種信號同時采集完全可以實現(xiàn)。同時應用I2C總線還有以下優(yōu)點:一是各部分電路之間的連接變得非常簡單,省去控制系統(tǒng)中的許多輸入/輸出接口,可靠性好;二是由于 I 2C總線具有多種工作模式,利用軟件可以十分方便進行調(diào)整和測試,增加功能;三是 I 2C總線具有良好的擴展性,支持多主機通訊 [5]。本文描述了采用 Verilog HDL語言設計一種 I 2C總線分析器的硬件電路結構和它們主要特點,采用此設計可以實現(xiàn)多種傳感器信號采集,方便實現(xiàn)與微處理器的接口設計,可重用性好,可以作為 IP核使用。
2 I2C總線標準模式
I2C總線是一種僅用到兩線的工業(yè)標準同步串行數(shù)據(jù)通訊總線。兩個總線:串行數(shù)據(jù)(SDA)線和串行時(SCL)線,對于嵌入式系統(tǒng)有限的 IO接口資源是非常重要的。I 2C總線支持從機、主機和多主機。每個I 2C器件有唯一的識別地址(7位或 10位的地址)。串行的 8位雙向數(shù)據(jù)傳輸傳輸有三種模式:標準模式(100kbits/s)、快模式(400kbits/s)、高速模式(3.4Mbits/s)。
I2C總線數(shù)據(jù)傳輸以字節(jié)為單位,按照高位在前順序傳輸。數(shù)據(jù)傳輸首先以 I 2C主機發(fā)出開始條件和從機地址,讀寫控制字。從機必須對地址完成識別,之后傳輸由器件規(guī)則和協(xié)議定義的一系列讀或?qū)懙臄?shù)據(jù)。字節(jié)傳輸要有響應信號,確認后再發(fā)下一個字節(jié),當通訊結束后,主機產(chǎn)生停止狀態(tài)。
接收端采用SCL信號同步采樣讀取數(shù)據(jù)信息。I 2C協(xié)議規(guī)定數(shù)據(jù)變化只發(fā)生在 SCL信號為低電平期間,高電平期間要保持數(shù)據(jù)信號的穩(wěn)定性。SCL信號線高電平期間,SDA信號由高電平變?yōu)榈碗娖绞情_始條件,反之為停止條件。
3 硬件設計
I2C總線分析器為醫(yī)療檢測儀或其它嵌入式系統(tǒng)提供很好的外設擴展。在不同工作模式下提供系統(tǒng)更多的功能。
在被動模式下,分析器探測總線上數(shù)據(jù),傳輸數(shù)據(jù)或做算法處理。這里將采集到的數(shù)據(jù)直接通過 LCD顯示,不占用微處理器資源;在主機模式下,分析器掌控總線,完成對外設的操作,如配置傳感器,采集傳感器信號;在從機模式下,分析器作為 I 2C器件使用,在被總線上主機識別后,接收或發(fā)送用戶信息。
圖 1顯示了 I 2C總線分析器的硬件框圖。采用 Verilog HDL語言描述,主要實現(xiàn)工作模式識別和I2C總線控制邏輯。采用層次化設計方法。硬件驗證在 FPGA上實現(xiàn)。
3.1 控制信息模塊和 I 2C狀態(tài)機
這是 I 2C總線分析器和外部控制系統(tǒng)交換控制邏輯和狀態(tài)信息的接口,決定著整個系統(tǒng)的功能。 I2C控制信息模塊和狀態(tài)模塊產(chǎn)生總線上開始和結束狀態(tài)請求,檢測和報告總線信息(起始、停止、總線響應),產(chǎn)生 SCL脈沖信號,傳輸數(shù)據(jù)到SDA,控制兩個FIFO(讀和寫存儲器)。在模塊中定義兩個寄存器(系統(tǒng)控制寄存器 SYS_CONTROL和系統(tǒng)狀態(tài)寄存器SYS_STAT)。
在控制寄存器中,最高位是初始化標識位,使系統(tǒng)進入等待狀態(tài);第 7位用于控制 I 2C總線產(chǎn)生起始狀態(tài);第 6位用于控制總線產(chǎn)生停止狀態(tài);第 5位控制讀、寫 FIFO存儲器,低電平定義使用FIFO讀存儲器,高電平定義使用 FIFO寫存儲器;第 3、4位用于總線工作模式選擇;第 2位用于主、從模式選擇;最后一位作為總線傳輸響應。
狀態(tài)寄存器反映工作狀態(tài)。功能描述如下:最高位選擇主、從機模式,第 7位標識總線狀態(tài),第 6、3位標識 FIFO存儲器狀態(tài),第 5位標識數(shù)據(jù)通訊方向,第 4位為中斷位,最后兩位標識工作模式檢測模式,共 8位。
3.2狀態(tài)的產(chǎn)生和探測模塊
根據(jù)協(xié)議,主機在 SCL高電平期間,在 SDA線上產(chǎn)生由 0到 1或由 1到 0的變化,前者代表開始條件,后者代表了停止條件。設計基于分頻器完成,由控制信息模塊可以產(chǎn)生所需 SCL信號,由 SCL信號倍頻信號控制在 SCL信號高電平時產(chǎn)生 SDA信號。
在從機狀態(tài)下,因為起始、停止條件是由 SDA在 SCL高電平期間改變來產(chǎn)生,所以設計中考慮用 SCL頻率的 30、25或 16倍頻來探測(高速模式下 56MHz可以由 PLL產(chǎn)生)??紤]在不同模式下采用不同倍頻系數(shù),雖然增加了設計復雜度和硬件的消耗,但從機能更精確地探測到起始和停止條件,提高系統(tǒng)性能。
3.3信息收集模塊
系統(tǒng)作為從機,用系統(tǒng)時鐘檢測 SCL信號,確定主機的工作模式,并反映到狀態(tài)寄存器??偩€分析器由狀態(tài)位產(chǎn)生相應采樣時鐘,在起始條件后采樣主機發(fā)送的 7位從機地址、數(shù)據(jù)方向位(R/W)以及響應信息。
3.4器件地址模塊
根據(jù)協(xié)議,每個 I2C器件都有獨立地址。本設計有自定義 7位地址。如果信息收集模塊中采樣到地址與本地址一致,則作為從機操作。
3.5 FIFO讀、寫存儲器
本設計中集成了兩個 16×8的 FIFO,分別作為讀、寫存儲器完成外部系統(tǒng)和 I2C總線數(shù)據(jù)傳輸。通過狀態(tài)標志來控制產(chǎn)生中斷,完成握手協(xié)議。如當接收 FIFO(讀存儲器)寫滿時,而外部系統(tǒng)端沒有及時讀走數(shù)據(jù),如果繼續(xù)從 I2C總線讀取數(shù)據(jù),就會丟失數(shù)據(jù)。通過 FULL標志,控制 I2C總線不產(chǎn)生響應,使之處于等待狀態(tài),直到系統(tǒng)讀走數(shù)據(jù)。 FIFO硬件設計通過調(diào)用可編程器件內(nèi)部存儲器單元實現(xiàn)。
3.7 主系統(tǒng)狀態(tài)機
這是 I2C總線分析器的核心單元,需要完成在被動模式、主機模式和從機模式下狀態(tài)轉(zhuǎn)換和控制,根據(jù)控制寄存器中控制字,采用有限狀態(tài)機嵌套設計完成。狀態(tài)機編碼采用獨熱編碼,有利于提高傳輸速度并節(jié)省面積。
I2C總線分析器狀態(tài)轉(zhuǎn)移如圖 2所示,整個過程受控制字和狀態(tài)寄存器調(diào)節(jié)。圖中主要描述了作為主機模式下狀態(tài)變換,從機模式下,在準備階段需要加上 I2C總線識別、器件地址識別,其它過程與主機相似,這里不詳細描述。
下面以控制 VGA視頻采集芯片 TMS8083為例說明:通過寫 0x80h到控制寄存器來初始化系統(tǒng);接著寫入 0x92h作準備工作,進入主機狀態(tài)、采用標準模式傳輸數(shù)據(jù)、對總線進行寫數(shù)據(jù)、數(shù)據(jù)傳輸響應位:0;系統(tǒng)將要發(fā)送到總線的數(shù)據(jù)先寫入 FIFO寫存儲器。 VGA采集系統(tǒng)采用 1024×768 at 60Hz → fpix=65.0MHz,N=1344模式,芯片地址和狀態(tài)控制寄存器配置如下: 0x80h(器件地址和寫狀態(tài)標識)、0x00h(子地址)、0x40h、0x05h、0xeah、0xffh、0x90h、0xe1h、0x00h、0x03h、0x01h;將以上數(shù)據(jù)寫入 FIFO后,向控制寄存器寫入 0xd2h實現(xiàn)總線上起始條件;隨后進入數(shù)據(jù)的傳輸階段;數(shù)據(jù)傳輸完成,寫 0xb2h到控制寄存器在總線上產(chǎn)生停止條件。
另外,采用移位寄存器完成數(shù)據(jù)接收和發(fā)送模塊設計,最后,由頂層完成各模塊時序控制,重點在于時鐘信號管理,以達到同步目的。
4 驗證
采用 Verilog HDL語言完成設計輸入,用仿真工具在硬件編程前驗證設計,綜合下載編程后用邏輯分析儀檢驗硬件功能。QuartusII工具提供了完成設計開發(fā)平臺
4.1
仿真 I2C總線分析器主要有主機寫操作、讀操作和作為從機寫操作、讀操作功能。采用 Verilog HDL語言建立測試平臺,聯(lián)合 ModelSim完成功能和時序驗證。
圖 3波形驗證了主機向從機發(fā)送地址和寫數(shù)據(jù)的過程:發(fā)送 7位地址 0x40h和寫控制字0,即0x80h、8位數(shù)據(jù) 0xa8h。在 I 2C總線上,首先產(chǎn)生起始條件,接著發(fā)送從機地址和寫控制信號,采樣響應信號后再發(fā)送數(shù)據(jù),響應后產(chǎn)生停止條件。由下圖的波形分析,主機能正確的發(fā)送地址和數(shù)據(jù),應對從機響應。
下面測試作為從機接收數(shù)據(jù),檢測I 2C總線信息,探測起始條件,接收從機地址和R/W,地址不同無響應,地址相同產(chǎn)生響應信號,并開始接收數(shù)據(jù)。I 2C總線分析器的地址定義為0x50h。仿真波形如圖 4所示。由上圖的波形說明設計能夠很好完成作為從機的功能。
4.2 硬件驗證
采用 Altera Cyclone器件 EP1C12驗證硬件。通過下載編程,調(diào)用 SignalTapII Logic Analyzer工具,實時觀察設計的內(nèi)部信號波形。
圖 5顯示了由邏輯分析儀得到的結果。I 2C總線分析器作為主機很明顯能夠驅(qū)動總線,向從機發(fā)送從機地址、命令和數(shù)據(jù),符合對 TMS8083應用中傳輸數(shù)據(jù)描述,能進行正確通訊。
5 總結
本文作者創(chuàng)新點:提出了一種新的應用于醫(yī)療監(jiān)護儀擴展接口的 I 2C總線分析器,具有低功耗、便攜式特點。能夠很好地連接微控制器及其外圍設備,滿足具有可擴展功能的需求,適合于開發(fā)便攜式設備。在開發(fā)具有可擴展功能的便攜醫(yī)療監(jiān)護儀嵌入式項目中僅需要設計相應系統(tǒng)軟件庫,即可將 I 2C總線接口擴展到桌面系統(tǒng)應用中。I 2C總線在少的硬件資源消耗下將為項目帶來更多的拓展空間。同時經(jīng)過綜合后僅占用 EP1C12器件的6%邏輯單元,可以進一步提出了新的基于 NIOSII開發(fā)便攜醫(yī)療監(jiān)護儀思想,必將大大縮小體積,提高系統(tǒng)可靠性。
存儲器相關文章:存儲器原理
分頻器相關文章:分頻器原理
評論