天天看點

一篇關于序列槽的經典文章

MODEM是使用者接入網際網路的重要裝置。雖然網絡幹線上已經普及寬帶光纖傳輸,但是在擁有龐大使用者群的最後一公裡路段上,目前最現實的接入方式還是銅線連接配接(電話線,雙絞線、電纜)。另外,随着無線技術的發展,采用無線接入的固定/移動使用者也越來越多。不論是銅線連接配接還是無線接入,都要采用數據機,以便使資料信号能夠在信道内傳輸。 MODEM的對外接口是序列槽,這個串行I/O口用于傳輸控制信号、狀态信号、資料、AT指令及其響應。雖然MODEM種類繁多(56K貓/GPRS/CDMA等),但對外都表現為一個标準的序列槽,隻要将這個序列槽了解清楚,那麼就可以将所有的MODEM一網打盡。 ************* * (1) UART * ************* 一般地,我們把這個序列槽叫作UART(Universal Asynchronous Receiver and Transmitter 通用異步收發器)。 其中,RT是接收和發送的英文縮寫,能收能發又是序列槽,說白了就是串行I/O口的意思。 A表示異步模式。這種模式的優點是适應性強,對時鐘精度要求低(成本低)。每次發送位元組資料前都首先發送一個開始位同步時鐘相位,抖動誤差不會在整個通信過程中累積,隻影響單個位元組的傳輸單元。 U的意思是通用。為什麼一定要冠以“通用”二字,這個定語到底想強調什麼呢? 話說很早以前,還沒有出現計算機的時候,就已經出現了序列槽裝置。例如:MODEM、電傳打字機、工控裝置、數傳機等等。為了友善裝置互連,EIA制定了RS232标準化規範,采用DB25接口連接配接DTE(Data Terminal Equipment資料終端裝置)和DCE(Data Communications Equipment資料通信裝置)。後來,出現了個人計算機(PC機),這些已有的裝置毫無疑問地成了最初的外設,為了将其接入主機,制造商們自然地選擇了标準的RS232序列槽。在這個标準中,DB25接口支援同步和異步兩種工作模式,采用D型接插件,防止插反。這種設計相容性好,使用友善,但是制造商們并不買帳,他們更傾向于進一步減少接插件的大小和成本。通過删除DB25中未使用的引腳和支援同步模式的引腳,将DB25改造成隻有9根線,隻支援異步模式,體積更小,成本更低的DB9。最初的狀況比較混亂,因為DB9隻給出了信号範圍,但沒有指出引腳和信号的對應關系,而且DB9也不是RS232規範所定義的接口标準,是以各個制造商隻能自行定義對應關系。後來,IBM制造的PC機成了行業标準,DB9的對應關系就逐漸統一到了IBM的定義上,現如今使用的DB9就是遵守的IBM的定義。随着時代的發展,計算機越來越普及,外設的種類也越來越多,有些非RS232的串行裝置需要接入主機,這就要求主機提供更多的I/O口。如果為每一種新出現的裝置都提供一個I/O,顯然是不現實的,因為主機後面闆位置有限,不可能容納太多的接口。幸運的是,外部I/O口大體上主要分為兩類:并口和序列槽。如果複用已有的RS232序列槽接入非RS232的裝置,那麼就可以用有限的接口,接入大量的裝置。一個有趣的現象是,早期的作業系統DOS和ROM BIOS提供的通信例程隻支援RS232序列槽标準,即使是實作簡單的位元組收發這種非RS232應用,竟然也要先檢測DSR、DCD、CTS等信号是否有效,如果不滿足條件,将不會發送資料到TXD上。解決這個問題的方法有兩種:1、旁路系統提供的API函數,自己直接操縱硬體實作非RS232的操作;2、短接接頭裡某些RS232控制信号線,使系統通信例程誤以為是RS232裝置,使非RS232的裝置滿足RS232規範的子集要求。 現在,PC機上的序列槽既支援RS232應用又支援非RS232應用,通用序列槽指的就是這個意思。RS232規範對速度和距離都有限制,在碼元畸變小于4%的條件下,傳輸距離上限是15米;速率上限是19200。目前,在PC機上的序列槽都突破了RS232标準的限制,速度可以達到115200甚至更高。軟體上,已經可以選項配置是否支援硬體流控,是否檢查DSR、DCD、RI等輸入信号。可以說,現在的PC序列槽,來源于RS232,但又不拘泥于它的限制,越來越向通用目的的序列槽方向發展。UART到此可以總結為:用于通用目的的異步串行I/O口。 綜上,可以看出計算機序列槽發展的大緻曆程: (個人計算機)史前出現原始的序列槽裝置 --> EIA制定RS232統一标準,DB25出現 --> 個人計算機誕生,為引入序列槽,DB9出現,軟硬體仍然遵循RS232标準 --> 為引入新的非RS232序列槽,将原來的RS232口改造成通用目的的UART,軟硬體可以不遵循RS232規範。 PC機序列槽擁有多個名字:序列槽、RS232口、COM口(通信口)、異步口、UART等,他們是不同曆史時期的産物,一直沿用至今,讓現在的人們感覺有些莫名其妙。最開始PC機接入的串行外設是RS232裝置,就叫RS232口。這個裝置主要是通信用的MODEM,PC上就稱為COM口。現在連非RS232裝置也接了進來,就叫UART吧。不過新名字沒有老名字有名,有些人的習慣改不過來,再說計算機發展太快,老名字還沒消失,新名字就出現了,而且各有各的擁趸,約定俗成,那就這麼亂着叫吧。 就在UART準備一統江湖的時候,制造商們再一次不滿于它的速度、靈活性(軟體可配置)和體積,推出了USB序列槽和1394序列槽。現在越來越多的筆記本電腦上已經取消了UART序列槽,是以有不少網友發出“沒有序列槽,吾誰與歸”的慨歎,曆史前進的腳步無法阻擋,古今多少事,都付笑談中,USB取代UART是後話,暫且不表。 ************************* * (2) DB9引腳定義和表示 * ************************* DB9遵循IBM定義,所有輸入輸出方向都是站在DTE角度說的。 1--載波檢測DCD 2--接收資料RXD 3--發送資料TXD 4--資料終端就緒DTR 5--信号地GND 6--資料裝置就緒DSR 7--請求發送RTS 8--清除發送CTS 9--振鈴訓示RI 在TXD和RXD上:(一般,驅動器件都是反相器,用負表示"1",用正表示"0",采用負邏輯,完全可以了解。) 邏輯0(SPACE 空号) = +3V~+15V 邏輯1(MARK 傳号) = -3V~-15V 在RTS、CTS、DSR、DTR和DCD等控制線上: 信号有效(接通,ON狀态,正電壓,高電平)= +3V~+15V 信号無效(斷開,OFF狀态,負電壓,低電平) = -3V~-15V -3V到+3V之間的電平無意義,稱為死區,不應該處于這個電壓範圍。+3V以上,-3V以下的一段區間屬于過渡區,盡量不要使電平落入此區間,以便使判斷更可靠,最好在+12V以上,-12V以下。一般的驅動器件為+-12V電壓。工程上,電壓不可能如此理想,判斷需要在一定範圍内進行,有些半導體器件也不容易升壓到+-15V,同時,大擺幅電路速度也高不了。 以上說的是RS232電平,在未經驅動的晶片引腳上是TTL電平: 信号有效 二進制0 = 0-0.3V 信号無效 二進制1 = 3.3V/5V 如果不經RS232驅動晶片,直接把MCU和Modem子產品(TTL電平)連接配接,需要注意電平相容。 **************************** * (3) DB9引腳信号詳細說明 * **************************** 注意:硬體隻提供機制而不提供政策,RS232的規範由軟體實作,硬體隻是提供标準的硬體信号線。例如:載波檢測由軟體完成,硬體隻提供DCD引腳信号。硬體流控并不是說将RTS和CTS接到相應引腳位置上,硬體就可以自動實作流量控制,硬體流控是靠軟體實作的,之是以強調“硬體”二字,隻是因為硬體為軟體提供了訓示信号的硬體通路,而軟體流控沒有使用硬體訓示信号罷了。 RS232規定的是DTE和DCE裝置間連接配接,而現在大多數裝置已經内嵌了CPU,可以主動發送資料,是以成了DTE裝置,DTE和DTE的連接配接RS232裡沒有規定,需要使用交叉線。 有興趣的讀者可以嘗試着分别剪斷9根線,看看會有什麼現象發生。看看撥号軟體将彈出什麼樣的錯誤資訊。 TXD(Transmitted Data發送資料),RXD(Received Data接收資料)------資料傳輸實體通道,DTE和DCE裝置此引腳一一對應連接配接即可,兩個DTE裝置需要交叉連接配接。所謂收發全是站在DTE角度說的。可以在這兩個引腳對應的晶片引腳上連接配接LED訓示燈,在資料收發時會有閃爍訓示。這兩個信号連接配接晶片内部的并/串和串/并電路,先處理低位,硬體上不受其他硬體控制信号的影響。 GND(Ground地)----------地參考點。RS232是非平衡接法,不是差分的,是以抗噪性能不好,收發信号需要高電壓+15V/-15V,擺幅大,速率低。此地使兩端電位參考點一緻,避免了地回路。 DCD(Data Carrier Detect資料載波檢測)----------當話音通路建立後,兩端Modem各自發送單頻載波,以便各自的對端實時檢測鍊路通斷。隻要檢測到載波信号,DCD就有效。此信号無效時用于觸發no carrier事件,提供向上層傳遞lower down消息的機制,使PPP複位,并根據政策決定是否斷線重撥。在PPP收發資料時應實時監測DCD信号,隻有當DCD有效時才能進行收發操作。 DTR(Data Terminal Ready資料終端準備好),DSR(Data Set Ready資料裝置準備好)----------雖然通過RXD和TXD就可以收發資料,但是在發送資料前還是應該先确定對方是否準備好,以避免不必要的資料丢失。DTR和DSR引腳用于主硬體流控。DTR有效表示DTE裝置可以接收資料,DSR有效表示DCE裝置可以接收資料。DTE向DCE發送資料前要檢測DSR信号,如果無效将不會發送,同樣,DCE向DTE發送資料前也要先檢測DTR是否有效。這是RS232規範的要求。 MODEM并沒有使用DTR和DSR實作通常意義上的硬體流控。DTR在整個通信期間保持有效,DSR在MODEM上電後立即有效/在發出載波後有效(這取決于程式對DSR的了解,是把它簡單地看成電源開關訓示還是看成撥号後的訓示)并在整個通信過程中一直保持有效。DTR或DSR在任何時間點無效,都将終止通信過程。有人可能奇怪RS232标準裡明明使用這兩個信号用于主硬體流控,為什麼MODEM卻這樣安排時序呢?原來MODEM根本就沒有按照RS232的規範将DTR和DSR用于硬體流控,它隻使用這兩個信号訓示DTE和DCE已經上電,可以開始工作。當然這在某種意義上也算是流控,但它确實不是RS232所指的那種,MODEM是通過RTS和CTS實作的硬體流控。 DTR和DSR的這種使用方法最初是由賀氏Hayes公司在Smart Modem裡最先采用的,後來賀氏Hayes MODEM成為行業事實上的标準,其他公司參照賀氏設計的時序生産與其相容的MODEM,甚至連AT指令都一樣(大家一起抄他呗)。是以,現在的MODEM都不遵守RS232在這兩個引腳上定義的用法了。 Data Terminal和Data Set是兩個過時的名字,這兩個術語已經被廢棄了(誰還記得資料終端和數傳機啊,早就成古董了,興許在博物館還能見到實物)。RS232-D版本中起用DTE ready和DCE ready兩個新名字。雖然新名字表達的意思清楚多了,但可以肯定的說,舊名字仍将繼續使用。 RTS(Request To Send請求發送),CTS(Clear To Send清除發送)------------半雙工時,用于收發模式切換。屬于輔助流控信号。半雙工的意思是說,發的時候不收,收的時候不發。那麼怎麼區分收發呢?預設時是DCE向DTE發送資料,當DTE決定向DCE發資料時,先有效RTS,表示DTE希望向DCE發送,一般DCE不能馬上轉換收發狀态,DTE就通過監測CTS是否有效來判斷可否發送,這樣避免了DTE在DCE未準備好時發送所導緻的資料丢失。 全雙工時,這兩個信号一直有效即可。 以上所述是RS232标準的定義,然而在MODEM中,完全沒有遵守這個規範,而是将其用于硬體流控。很多人根據RTS和CTS的字面意思了解他們的用法往往百思不得其解,再加上半雙工/全雙工,就更加雲裡霧裡了。RTS和CTS在MODEM中的用法與他們字面的含義沒有任何關系,他們已經由賀氏公司重新定義了用法。以下是網友dengm給出的程式,詳細說明了RTS和CTS在MODEM裡的用法。RTS用于訓示本端是否可以接收資料,CTS訓示對端是否可以接收資料。 www.21ic.com dengm 發表于 2005-1-14 07:52 侃單片機 PC端處理: 本端發送 當 發現(不一定及時發現) CTS (-3V to -15V)無效時,停止發送, 當 發現(不一定及時發現) CTS (3V to 15V)有效時,恢複發送; 本端接收 0<M<N<LEN_OF_RX_BUFFERS(不要在處于邊界時才給出訓示,否則對端很有可能來不及停發而造成本端接受緩沖區溢出。) 當接收buffers中的bytesN 時,給 RTS 無效信号(-3v to -15v); MODEM端處理: 同上,但RTS與CTS交換 圖1表示DTE向DCE發送資料時的流控過程。DTE和DCE一般都會有一定容量的FIFO(先入先出)緩沖區,例如16位元組。DTE以設定的波特率(如115200)向DCE發送資料,當DCE的FIFO緩沖區快滿時,DCE使CTS無效,DTE軟體檢測到此信号後停止發送。同時DCE繼續向電話線上發送資料,一旦發出,DCE的FIFO就變成不滿,CTS恢複有效,允許DTE繼續寫入。序列槽波特率隻是接口速率,不是Modem的實際傳輸速率,一般發送都快于接收,為避免溢出丢失資料,均需要接收端控制發送端發送速度,即流控。 DCE向DTE發送資料用RTS進行流控,過程與上面講的類似。 流控在通信裡的作用非常重要,它能使發送和接收保持均衡,避免資料因為收發速率不比對而丢失。例如:在TCP協定裡,當資料丢失時,總是假定丢包是由于網絡擁塞引起的,此時采用擁塞避免算法,逾時時間加倍,擁塞窗減半,盡管此時信道正常,有資料可以發,但因為擁塞窗減小導緻不能發送,而且逾時等待時間加倍,TCP的性能将急劇下降,測試報告不會好看。信道上因為誤碼引起的丢包和網絡上因為擁塞造成的丢包都是不可控的,而收發速率不比對造成的資料丢失完全可以通過流控避免,是以,在接收速率小于/等于發送速率的地方都要使用流控。硬體流控不能跨越裝置,軟體流控可以實作端到端控制。 注意:MODEM是否配置硬體流控可以通過AT指令動态修改。在不支援硬體流控時,這兩個信号在資料傳輸狀态一直有效。此時可以無流控,或者通過ON(0x11)/XOFF(0x13)軟體流控。 RI(Ring Indicator振鈴訓示)------------這個引腳用于訓示是否有90V鈴流信号輸入。如果檢測到振鈴信号,MODEM将周期改變RI引腳電平,變化頻率與振鈴頻率無關,DTE裝置檢測RI上的電平變化,并計數,一旦符合規定次數,就發出DTR信号,訓示DCE摘機應答。以前的“笨貓”沒有CPU,是以需要DTE幫助判斷是否有撥入,現在的“聰明貓”(Hayes Smartmodem)有CPU,完全可以自動應答,我看,這個信号以後就可以省掉了,畢竟RS232是很早以前的标準,已經過時了,不必拘泥于原來的規範。 DTE DCE AB HJD04D大型程控電話交換機 --------- ---------- 電話線 --------- ST-BUS ------------- ST-BUS ------------ E1 |FIFO緩沖|---->|FIFO緩沖|--------->| SLIC闆 |<------->|DSN交換網絡|<------>|DTP數字中繼|<----->經彙接局到另一端局的相應電路 --------- ---------- --------- ------------- ------------ (左圖逆序) RTS--> <--CTS ^ | ^ | | | 公共資源 ---------------------------------------------------------- 鈴流源 | 信号音(撥号/回鈴/忙/催挂音) V DTMF雙音多頻收号器 圖1 硬體流控圖(DTE向DCE發送資料) 如圖1,MODEM的另一端連接配接電話線,通過AB線與對端(局端)程控電話交換機SLIC闆(使用者線接口電路)相連,需要實作使用者線信令(摘機、挂機、振鈴、撥号音、忙/催挂/回鈴音等),還有用于判斷鍊路通斷的載波檢測。 以上讨論的DB9序列槽是很早以前設計的,随着技術的發展,MODEM越來越聰明,軟體完全可以取代一些硬體控制連線,甚至重新設計MODEM序列槽。如果今後遇見不符合現在定義的MODEM接口是不足為奇的。 **************************************** * (4) 序列槽交叉連接配接方式和MODEM工作時序 * **************************************** 交叉連接配接用于兩個DTE裝置互連 圖略 (1)最簡連接配接 用于調試目的等非RS232應用,通信軟體不能檢測DSR、DCD、CTS信号 (本端)--(對端): (2)--(3) (3)--(2) (5)--(5) 1--4--6--7--8--9懸空 (2)RS232連接配接 用于屏蔽RS232通信軟體的檢測,早期BIOS和OS通信軟體隻能在符合RS232規則的接口線上運作,此種接法可使其隻用3根線即可正常工作。 短接本端 1--4--6;短接本端 7--8 (本端)--(對端): (2)--(3) (3)--(2) (5)--(5) 9懸空 (3)完全連接配接 忽略DCD和RI,帶硬體流控的交叉連接配接 (本端)--(對端): (2)--(3) (3)--(2) (5)--(5) (7)--(8) (8)--(7) (6)--(4) (4)--(6) 1和9懸空 (4)NULL MODEM連接配接 用于模拟兩個DTE之間通過MODEM連接配接。在PPP開發時,可以節省大量通信費用。 (本端連接配接)--(對端連接配接):(2)-(3) (3)-(2) (7--8)--(1) (6--9)--(4) (5)--(5) (1)--(7--8) (4)--(6--9) (9--6)--(4) MODEM的工作時序: 在整個通信過程中,DTR和DSR及DCD必須一直有效,RTS和CTS用于硬體流控(軟體實作的),RTS有效時訓示DTE可以收,CTS有效時訓示DCE可以收(詳見引腳說明)。 當電話打入時,交換機SLIC(使用者線接口電路)闆發出90V振鈴信号,MODEM識别後發出RI信号,RI變化頻率與振鈴頻率無關,PC機對RI變化記數,達到觸發值時,PC機發出DTR信号通知MODEM摘機應答。MODEM發出載波後有效DSR,通知PC已摘機。當接收到對端載波後,DCD有效,訓示話音通道連通。通信完畢任一方停止載波,導緻兩端載波消失,PC檢測到DCD無效,就使DTR無效,MODEM随後使DSR無效響應之,一次通信過程結束。 現在的MODEM一般都可以自動應答,RI信号可忽略。當MODEM識别出振鈴後,摘機應答并發載波,同時有效DSR,通知PC機有撥入,PC随即有效DTR,允許撥入。當收到對端載波,MODEM有效DCD,訓示話音通道連通。通信完畢任一方停止載波,導緻兩端載波消失,PC檢測到DCD無效,就使DTR無效,MODEM随後使DSR無效響應之,一次通信過程結束。 PC機撥出時,先有效DTR,訓示MODEM摘機撥号,MODEM回應DSR有效,在識别出撥号音後撥号,然後在回鈴音結束後發載波,一旦收到對端載波,MODEM有效DCD,訓示話音通路連通。此後,就可以進行PPP協商了。通信完畢任一方停止載波,導緻兩端載波消失,PC檢測到DCD無效,就使DTR無效,MODEM随後使DSR無效響應之,一次通信過程結束。 ************************* * (5) 硬體學習方法總結 * ************************* 我認為學習硬體最重要的是抓住4個關鍵點:引腳、時序、寄存器和協定。硬體的參考資料就是資料手冊(datasheet),雖然大部分由英文寫成,但是科技英語并不象想象中那麼難,而且資料手冊的内容編排有規律可尋。一般,先介紹總體特點概述(賣點),順便做一下公司廣告(什麼leadership一類的),然後是結構/功能框圖、引腳說明、時序分析、寄存器說明、硬體所實作的具體協定(USB、PCI、E1等)、應用範例demo、直流/交流特性、封裝、訂購資訊、聯系方法等,手冊裡往往還會總結一些圖、表、關鍵字目錄索引,友善讀者閱讀。 ------ |引腳| ------ 引腳是對硬體工程師最重要的資訊之一,務必将其背記下來。背下來的好處多多,基本上掃一眼圖紙就能猜出晶片是幹什麼用的;對一些不常用的設計技巧能馬上發現,進而學習之;能立即指出明顯的低級錯誤;能輕易區分不同型号相同種類的晶片;有利于不斷積累硬體經驗,熟能生巧。總之,背下引腳能大大提高工作效率,不必頻繁查書,不必中斷思路,讓精力集中在應用設計上。 面對幾百個引腳的晶片,看似無法記住,實則簡單Easy。譬如:位址線32根、資料線32根,電源5根、地線20根,一會兒就記住了89根引腳線,然後按功能記I2C、SPI、ST-BUS、USB、JTAG等固定用法的引腳線,不管用在哪個晶片上,這些引腳種類和功能都相同,有時,隻要記住功能就能把相關引腳一一背出,或者隻須記住差異點即可。一旦背下一個晶片,那麼與之類似的一系列晶片就都不在話下了。 萬事開頭難,一旦習慣了,随時記住幾百個引腳的晶片也不是難事,這是專業硬體工程師的基本功。 ------ |時序| ------ 時序是硬體工程師獲得的另一個重要資訊,務必反複咀嚼回味。時序圖可以清楚全面地展示硬體的工作過程,從中我們可以得到想要的細節。硬體設計的一大任務是抑制幹擾噪聲,通過分析時序可以找到最佳的處理方法。比如:在資料的中點采樣,可以獲得前後各50%的抖動裕量;通過滿足建立/保持時間,使得資料采樣正确。 一般來說,時序圖展示的是理想情況下的位置關系,實際電路中還要受到生産工藝和現場情況的影響。比如:溫度、濕度會影響介電常數,進而影響阻抗比對。實際波形有上沖、下沖、振鈴等幅度變化;相位有超前、滞後變化;時鐘有不同步問題等等。這些問題限制了時序圖的适用範圍,使用中切記滿足前提條件。例如:PCI的突發通路位元組數在時序圖上可以做得很大,這樣傳輸效率高,但是因為生産工藝達不到要求,不能保證時鐘低抖動,阻抗也不能完全比對,如果突發通路位元組數過大,會造成誤差累積,導緻采樣錯誤,是以實際中一般限制在4位元組以下。我們隻可以把時序圖當作理論參考,切記不能過份相信,要看時序隻能通過示波器和邏輯分析儀。 本來直流和交流特性不是時序内容,但因為對時序影響較大,是以就應該配合時序一起看。 一般晶片廠商會提供DEMO闆供設計參考,但DEMO就是DEMO,不能用于量産,切記,切記! 真實波形的邊沿不能象時序圖裡畫的那麼陡峭。因為越是陡峭的邊沿,頻譜範圍越大,旁瓣越多,而我們需要的往往隻是某個頻點。如果波形接近于正弦波,那麼信号就比較“幹淨”。 分析時序最好有例子,我推薦PCI和DDR(I、II)時序圖。這些圖夠複雜,夠先進,代表目前的趨勢。PCI支援軟體配置,有局部總線、接口總線、DMA、突發、總線仲裁等等,比較全面。DDR現在又降價了,遲早要取代SDRAM,估計也就1年左右時間。 找到晶片資料手冊就可以得到時序圖。 -------- |寄存器| -------- 寄存器大緻可以分為控制、資料、狀态三種。其實就是硬體裡的D觸發器外接三态總線。硬體上關心的就是位址偏移,方向(隻讀、隻寫、讀寫),工作原理。這樣就可以配置設定位址空間,對應GPIO連接配接,實作硬體時序。其實,寄存器更重要的意義是提供硬體和軟體的接口。軟體通過寄存器操作硬體,硬體通過寄存器給軟體提供資訊。一般地,一組寄存器對應一個協定,可以通過協定了解寄存器功能,通過寄存器了解協定細節,互相對照,學習效率高。 ------ |協定| ------ 目前協定非常多,PCI、USB、I2C、ST-BUS、E1、802.3等等,了解每一種協定都要花費大量時間,我建議每次了解一點,積少成多。 通常協定代表了行業标準,設計時應盡量向标準靠攏。這樣在套片選型時會擁有很大的成本優勢。 總之,協定是硬體的抽象,硬體是協定的具體實作。 ------ |現狀| ------ 以前,人們常說做硬體要動手能力強,現在看來似乎已經不正确了。原來焊接DIP器件,手工操作就可以了,現在的BGA,誰還能用手焊,即使可以,誰能保證品質,尤其在量産的時候。原來的闆子要求3版成功,一版原型,一版修改,一版定型。現在要求一版成功,紙上作業,在制闆前解決所有問題。想想也是,一塊16層2.5G背闆,如何飛線?如何割線?如何手工焊接?飛線肯定不行,頻率那麼高,而且走線在内部,根本沒有辦法。即使可以飛,高頻特性也會變化,無法給以後的修改提供依據。割線也不成,找不到合适位置鑽孔。手工焊接達不到品質要求。綜上,一旦發現錯誤,最好就地銷毀,眼不見心不煩。 目前的現狀是:原理圖、PCB圖均在計算機上完成,FPGA用HDL語言,仿真用軟體,焊接用貼片機程式設計實作。幾乎沒有什麼可以動手的地方了。另外CPU正朝多核方向發展,RISC比CISC更有前途(CISC的發熱量大的問題在沒有技術突破前無法解決,光看頻率沒用,過熱時CPU會偷偷降頻。)。 ************************* * (6) UART序列槽硬體分析 * ************************* 引腳分析: 9根标準的接口線dtr,dsr,rts,cts,dcd,gnd,rxd,txd,ri 4根位址線a0,a1,a2,cs 7根資料線d0-d7 3根控制線rw,strobe,reset 1根時鐘線clk 1根狀态線int 時序分析: 将資料位16等分,在7,8,9三個等分點采樣,三中取二。資料位的中點在第8等分點上,在中點附近采樣可以保證左右各有50%時鐘抖動裕量,這是抵禦時鐘抖動誤差最有效的措施。可以根據此裕量推算出經過若幹位誤差累積後,采樣仍然正确時所允許的時鐘精度。除了時鐘抖動,在信号電平幅度上也會産生加性幹擾,導緻采樣錯誤。利用三中取二的投票方法,可以避免瞬間的沖擊幹擾。是以,序列槽波特率是輸入時鐘的十六分頻。波特率越高,對時鐘精度要求就越高,抗瞬态幹擾就越不容易。 串并/并串電路使用移位寄存器實作,低位先處理。 寄存器分析 寄存器的設計符合16C550工業标準,位址配置設定完全一樣,寄存器内容有微小差異。 标準定義了16個寄存器,使用a0-a2和DLAB及rw進行區分。當a0接到16位單片機的A1腳時(16位機沒有A0),需要将偏址乘2。 FIFO寄存器的引入提高了傳輸效率,先積攢一下資料再處理的方式減少了中斷次數。為了避免處理器不能及時處理輸入資料,FIFO一般提供1位元組,1/4滿,半滿,3/4滿,滿等觸發點,使得CPU可以提前處理資料。為了避免輸入資料達不到觸發點而長時間等待,在4個字元時間内若沒有RxFIFO操作将引發CTI中斷。這樣CPU就能比較完美地使用FIFO處理資料了。 *************************** * (6) 晶片選型和電路設計 * *************************** 晶片選型很重要,需要仔細考慮。原則是:品質好(選名牌)、成本低(綜合成本低)、安全(不停産/替代品多)。 晶片型号的細小差别要特别小心。譬如:量産20K時發現一半闆子正常,一半不正常。經查發現庫房因為缺貨将74LV244換成74HLV244,隻差一個字,H是保持的意思,上電時将随機狀态鎖存,導緻網絡處理器初始化混亂,損失慘重! 對于232驅動晶片,可選AD、MAXIM和SIPEX,畢竟AD、MAXIM在模拟方面還是有比較多經驗的,值得信賴。 速率選擇支援115200即120KBPS,太高了也沒用還貴。 DTE裝置232口有5個入,3個出,232電平在+-12V。一般這種驅動晶片采用電荷泵技術,驅動能力弱,就不考慮從上面竊電了。 232接口屬于易損部件,有些型号裡有靜電瀉放電路,可以抵抗較高的沖擊電壓,盡量選擇抗高壓的型号,以後維護時就不至于疲于奔命了。 低功耗暫不考慮。 參考:SP3243E,引腳懸空時,下拉電阻使其ON(有效)。 因為MODEM序列槽速率不是很高,布線時隻要不雜不漏(不多連也不少連)地将其一一對應連接配接即可。需要注意的是,規範要求DTE裝置用公的接口座,DCE裝置用母的接口座。

繼續閱讀