本篇應用筆記目的是演示如何使用PC并口構建一種快速、簡單和經濟的2-Wire(與I2C兼容)接口。本片應用筆記專門為接收或者訂購Dallas Semiconductor器件樣片且意識到他們需要與2線設備通信的用戶編寫。雖然存在好多解決方案,在本篇筆記中給出的方案不需要微處理器、固件,也不存在購買芯片的困難。而是通過Windows 95/98軟件,幫助解決同時調試硬件和軟件的困難。在給出的軟件的同時,也給出幾個調試工具,能夠使硬件快速工作運行。
既然硬件并不與PC接口,不需要作標準的聲明。雖然給出的硬件和軟件一起構建和測試,用戶使用有一定的風險。確保再三地檢查所有的連接和電源電壓,因為電源直接連接到PC的并口電路。Dallas Semiconductor/Maxim對可能引起的損害不負任何責任。本解決方案僅用于評估目的,不是用于產品或者發行品。雖然現在的軟件僅適用于Win95/98,將來的版本會支持Win NT。
為什么使用并口,而不是串口或者USB?
在本篇應用筆記中選擇并口作為接口是因為目標是建造一種快速、簡單和經濟的接口。這個并行接口是基于74HC05邏輯芯片和一些無源元件。另外一個方面,串口解決方案需要一個微處理器、固件、編程器或者系統可編程、電平轉換、晶體以及更多的無源器件。同樣地,USB除了工作量大的軟件和固件投入外,也需要相當數目的硬件。而且調試USB硬件經常需要昂貴的協議分析儀。因此,根據我們的目標,很明顯地選擇并口。然而在作出最終決定時,必須分析缺點以確保這些缺點是可容忍的。
并口最大的缺點是它的未來。更多的PC制造商放棄了并口和串口,轉而支持USB。并口的另外一個缺點是大多數的配置需要在PC的BIOS里設置。這意味著在PC和硬件之間不能建立通信時,PC必須重新啟動才能進入BIOS工具(通常在啟動時按F1或者DEL鍵)設置并口配置。在工程或者評估環境中,中斷不會花費太多時間,而一旦投入到市場中大量的支持將成為問題。雖然更大的麻煩是PC之間的差異。因為并口是遺留硬件,好多年來一直在發展變化和改進。然而,在設計硬件時,要使硬件能夠工作在老版本和新版本的并口上。這樣在設計接口硬件時必須作個假設(定時和電氣)。最后,另外一個缺點是操作系統,在Windows NT系統中,需要設備驅動程序。Windows NT不允許用戶程序直接讀/寫硬件寄存器。在軟件方面如果購買驅動程序的話是非常昂貴的。
幸運的是,在評估環境中使用Windows 95和Windows 98并不是很麻煩,一旦軟件修正以支持Windows NT則不必在意這個話題。
硬件
圖1給出了并行2線接口原理圖。很容易獲得所有的元器件。可使用表貼元件或者直插元件構建接口。
圖1. 2線并口接口
該接口基于一個74HC05芯片構建,在原理圖中以U1表示。74HC05包含六個集電極開路輸出的反相器 。在本應用中該芯片具有好幾個功能。首先,它為PC并口電路與下一級電路提供隔離功能。同時將并口的TTL信號轉成2線接口需要的集電極開路輸出。集電極開路輸出需要連接雙向SDA信號到一個專門的并口輸入引腳和一個專門的并口輸出引腳(與使用一個并口雙向引腳的情形相反,這通常需要用戶設置PC BIOS)。
既然2線接口的SCL信號對芯片來說為僅輸入(不實現時鐘擴展),可使用并口的D0產生SCL (PC DB-25連接器的引腳2),配置為輸出。 D0連接到74HC05反相器(U1E)的一個輸入。然而,一些并口可能不能輸出足夠高的電壓,反相器無法判斷電壓為高電平,所以電阻R3用作上拉電阻使接口對PC之間的差異不敏感。同樣地,為補償這種差異,電容C4作為一個空的元件包括進去,如果與帶有噪聲的PC并口連接時可將C4安裝上去。對大多數應用不需要該電容,但是如果PCB正在構建,并不影響,至少包括電容的封裝。最后,反相器U1E的輸出為SCL。因為輸出為漏極開路,需要上拉電阻R1實現高電平邏輯。
另外一個方面SDA信號是雙向。使用一個輸入引腳(PC DB-25連接器引腳12)和一個輸出引腳(D1,PC DB-25連接器引腳3)實現雙向工作。從PC到2線設備的通信由產生SCL信號的同樣電路實現。并口的輸出D1連接到另外74HC05 (U1)的另一個反相器的輸入(U1A)。再強調一次,為保證并口高電平邏輯足夠高,反相器能夠正確判斷,上拉電阻R4將信號D1電平上拉到VCC。同樣地,電容C5作為一個空的元件,在遇到噪聲的并口時可安裝用以濾波。反相器的輸出為漏極開路,需要R2實現高電平邏輯。
使用并口的一個輸入引腳(引腳12)和74HC05反相器(U1B)實現從2線設備到PC的SDA通信。應該指出的是,為使設備能夠與PC通信,應用軟件必須使D1為低電平,這樣反相器的輸出釋放SDA,允許2線設備控制SDA。反相器U1B的輸入監視SDA。反相器的輸出通過R6上拉到VCC,R6負責判定高電平邏輯。串聯電阻R5用作沖突狀態下的保護。在這個例子中不需要串聯電阻,因為并口的引腳12僅用作輸入。如果使用并口引腳作為輸入輸出,在并口輸出高電平電壓且外部將高電平電壓加入到并口上時這個電阻變得非常重要。即使應用軟件沒有導致沖突,可能另外一個程序也要在一段時間內訪問該端口(例如,操作系統周期性搜索打印機)。
僅需要74HC05六個反相器中的三個用于實現2線通信,其余三個反相器并未沒用。為避免浪費,原理圖也包括了一個可選的電路,使用兩個未使用的門驅動LED,可在軟件控制下開啟或者關閉。并口引腳17為輸出引腳,用于控制反相器U1C和U1D,并行提供足夠的拉電流驅動各種LED。電阻R7,與R3、R4一樣,使反相器輸入具有足夠高的電壓,確保高電平邏輯。電阻R8是LED限流電阻,用于控制LED的亮度。有趣的是,并口引腳17,對PC內部有反相器。對引腳17寫0將轉化成高電平,在到達DB25之前。高電平輸入到U1C和U1D引起輸出低電平,打開LED。
其余沒有用到的反相器輸入應當連接到GND,輸出高阻以防止沖突。
電容C1和C2用于電源電壓的旁路,盡量靠近PCB上電源。同樣地,去藕電容C3應該盡可能靠近74HC05的VCC和GND放置。
當連接SCL和SDA到2線設備時,應確保接口地與2線設備地共地。如果接口的SCL和SDA連接到包含2線設備的電路時,注意R1和R2與應用電路2線上拉電阻并聯。如果你計劃在電路內與2線設備連接,可適當調整R1和R2,如果應用電路已經有SDA和SCL上拉電阻,可去掉R1和R2。
最后,在原理圖中給出的,陰型DB25接口用在接口原型中。在原理圖中給出了制造商和器件型號以及陽型DB25電纜。取決于電源,很容易使用陽型DB25連接器和DB25陽型到陰型電纜。
并口寄存器
PC與接口之間的通信使用三個寄存器中的四位實現(表1)。并口(LPT1)缺省基地址為378h。其余的兩個可能地址為3BCh和278h。基地址為8位數據字節的地址。該字節包含控制引腳D7-D0的位,最低有效位(LSB)為D0。在數據字節后面、基地址 + 1處的字節為狀態字節。在給出的原理圖中,狀態字節的第5位(位0為LSB)為SDA的輸入。狀態字節位5的讀數指示SDA的狀態(通過U1B的倒相)。在執行讀操作之前,確保數據字節中的D1寫為低電平使得反相器U1A為高阻,允許反相器U1B檢測SDA的狀態。狀態字節之后基地址 + 2處的字節為控制字節。我們感興趣的是控制字節的位3 (位0為LSB)。位3通過PC內部的反相器,然后輸出到PC的DB25接口的引腳17。該位使能LED或者使LED無效。讀寫該位的例子后面的章節給出。
校驗和調試硬件
一旦硬件完成構建,首先對硬件做仔細檢查。在連接到PC或者電源之前,確保所有的連接是安全的、正確的,且沒有短路存在。確保VCC沒有連接到地。一旦執行這些防范措施后,連接5V電源到該接口(不要連接并口電纜)。如果電源有電流讀數,確保電流不超過10mA到15mA。如果出現更大的電流,再三檢查所有連接。
確保芯片連接正確,再次檢查可能用到的極性電容的極性,比如C1。另一個可能導致大工作電流是不正確的上拉電阻的阻值,比如使用470Ω代替4.7kΩ電阻會導致電流增大。
如果一切都正常,連接并口電纜。由于上拉電阻的存在,電流稍微發生變化。到此你可以試試附送的軟件,或者根據下一部分學會如何使用微軟的調試工具直接讀寫并口寄存器,這樣可以校驗或者調試硬件。使用Debug Microsoft Windows 95和98和DOS工具Debug讀寫并口寄存器。雖然Windows NT包含Debug工具,但是操作系統不允許直接訪問硬件。在NT使用Debug對硬件不會有任何效果。為運行Debug,單擊Sart菜單選擇Run命令..在編輯框輸入Debug。帶“-”提示符的DOS窗口出現。圖2給出了Debug的屏幕截圖。很容易使用Debug。例如,讀字節地址378h,在提示符“-”后輸入:
i 378
結果是從指定地址中讀出兩個數字(一個字節)十六進制數。可使用Debug寫存儲器。例如,將00h寫入378h,輸入以下然后回車:
o 378 00
建議小心使用Debug,僅可、訪問已知的寄存器。訪問其他的寄存器會可能導致未知或者不希望的副效果。鍵入q退出Debug,鍵入?尋求幫助。
這里給出使用Debug校驗/條是硬件的例子(使用缺省的LPT地址)。圖2的Debug屏幕截圖給出了這些例子。
-i 378 讀數據字節。
-o 378 00 數據字節寫為00h。SDA和SCL輸出高電平。
-i 378 讀數據字節。這會返回00,因為剛寫入00。
-o 378 01 使SCL低電平,SDA高電平。
-o 378 02 使SDA低電平,SCL高電平。
-o 378 03 使SDA和SCL輸出低電平。
-o 378 00 在執行下列命令時確保SDA為高電平。
-i 379 這返回SDA的狀態。如果位5為0,則SDA為高電平,如果位5為1,SDA為低電平。注意
到要讀入SDA的值,數據字節應首先寫入0,
這樣反相器(U1A)會釋放SDA。如果外部沒有將SDA拉低,位5讀入為0。
-o 378 02 使SDA為低電平。
-i 379 讀SDA狀態,這時位5讀入為1。
為將LED開啟和關閉。建議控制字節中未使用的的位保持不變。可通過讀寄存器,然后使用與或者或操作設置清除位3。注意PC內部有反相器。
-i 37A 讀控制字節。可看到如屏幕截圖所示,PC返回0C
(當前LED關閉)。為打開LED,位3必須清除。
可用F7h與上控制字節的讀數。對于讀數0C,清除位3
得到04。將其寫入控制字節會開啟LED。
-o 37A 04 開啟LED
圖2. Debug屏幕截圖
并口軟件工具
圖3給出了并口軟件的屏幕截圖,該軟件專為本篇應用程序中的硬件設計。
屏幕截圖可能與所下載的程序稍微有出入,因為軟件有可能改進了或者增添了功能。
圖3. 并口工具屏幕截圖
軟件缺省的LPT地址為378h。如果發現軟件不能與硬件通信,可以選擇不同端口的地址。最容易判斷軟件是否與硬件通信的方法是單擊LED On和LED Off按鈕。如果成功,單擊Test按鈕,它控制D1 (U1A),從U1B讀入值。讀數結果會顯示在狀態欄里。
忽略同步脈沖。如果你希望使用示波器捕捉2線通信,可以使能同步脈沖,將示波器探針放到DB25的引腳17上,作為觸發器。
到此,可以準備與你已連接的2線設備通信了。確保設備的SDA,SCL和GND連接到硬件上。確保74HC05的VCC盡可能等于設備的VCC。
有兩種方法可以與設備通信,首先需要確保軟件知道2線設備從地址通信。軟件缺省地址為A0 (hex),這恰好為數字電壓表的地址,雖然這常取決于設備地址引腳,如果有許多的話。要改變2線設備地址,在編輯框中鍵入地址,單擊“Change”。如果不知道2線設備的地址,請檢查設備數據資料。
最容易讀寫一個或者兩個字節設備寄存器的方法是使用軟件中的“One and Two Byte Reads/Writes”部分。該部分適合對設備編程/配置,因為2線設備中所有細節(start,stop,ACK,NACK,等)自動隱藏。只需要輸入需要的存儲器地址去讀或者讀或者寫。如果希望寫,用需要的數據填充“DATA”域。
與設備通信的另外一種方法是用“2-Wire Functions”部分,如果需要學習2線設備協議,這部分功能很適合。在演示例子之前,需要解釋幾個按鈕的含義。“Send Write”按鈕是用2線地址從2線地址域,將LSB (R/W位)屏蔽為0,然后發送8位。“Send Read”按鈕是用同樣的2線地址,但是將LSB (R/W位)屏蔽為1,指示下一步將進行讀操作。8位數據發送。“Bus Reset”按鈕在SCL輸出9個時鐘周期,重新設置2線設備總線。
例子(使用缺省的從地址):
寫存儲器地址7Fh到01h。
Start
Send Write
Data [7F]
Data [01]
Stop
讀存儲器地址7Fh (一個字節)。
Start
Send Write
Data [7F]
Start - 通常稱作重新讀。
Send Read
這里使用Rd w/NACK - Rd w/NACK是因為僅讀1個字節。
Stop
讀存儲器地址F0h和F1h (多個字節讀)。
Start
Send Write
Data [F0]
Start
Send Read
Rd w/ACK - 如果超過2字節需要讀,命令會重復。
Rd w/NACK - 最后的讀必須是w/NACK。
Stop
結論
本篇應用筆記描述了如何使用PC并口構建一個簡單、經濟和快速的2線接口。除了原理圖外,還提供軟件幫助構建硬件。一旦硬件構建完畢,軟件可立即用于與Dallas Semiconductor 2線設備通信,不需要寫任何軟件。
審核編輯:郭婷
-
示波器
+關注
關注
113文章
6240瀏覽量
184799 -
接口
+關注
關注
33文章
8575瀏覽量
151021 -
觸發器
+關注
關注
14文章
2000瀏覽量
61132
發布評論請先 登錄
相關推薦
評論