<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MAX3420E系統(tǒng)調(diào)試

          MAX3420E系統(tǒng)調(diào)試

          ——
          作者: 時間:2007-01-26 來源:《Maxim公司》 收藏

          引言

          當您設計了一塊電路板,將max3420e與您喜愛的微控制器整合在一起。加電,插入usb,不能正常工作...,怎么辦? 本文為您提供了答案。
          第一次調(diào)試usb外設器件時,會面臨很大的挑戰(zhàn)。要使max3420e能夠正常工作,首先需要按下列步驟進行檢查。

          本文引用地址:http://www.ex-cimer.com/article/20821.htm


          檢查usb b型連接器的引腳

          這是最容易出錯的地方—視圖是頂視圖還是底視圖? 引腳1在哪里? 如果您不是機械工程師,這些視圖會讓人感覺無所適從。圖1和圖2可幫您解決這一問題。


          應采用歐姆表來檢查max3420e和usb連接器之間的連線。特別注意d+和d-。二者很容易搞反。請注意,max3420e與連接器d+和d-引腳之間有33電阻。對于這么小的電阻,大部分測試是否接通的儀表都會發(fā)出“嘀嘀”聲。如果需要檢查usb電纜,請參考圖3。


          usb“完整性”檢查
          本節(jié)闡述設備與usb的連接情況。完整性檢查給出了d+和d-線的工作情況,在沒有usb總線分析儀的情況下,這種方法非常有效。
          復位處理器,將電纜連接至pc usb端口,初始化代碼執(zhí)行完畢后,在設置connect位的語句前停止運行。該語句如下:


          wreg(rusbctl,bmconnect); // connect to usb

          在執(zhí)行該語句之前,d+和d-應均為低電平。這是因為電纜的主機側(cè)電路通過15k電阻將這些信號下拉至地?,F(xiàn)在,單步執(zhí)行connect語句后,max3420e在d+和vcc (3.3v)之間接入一個1.5k內(nèi)部電阻。此時,d+應變?yōu)楦唠娖?,其后會出現(xiàn)一些突發(fā)脈沖(圖4)。

          上面的波形是d+,下面的是d-。該突發(fā)波形持續(xù)約18s,然后消失。d+保持高電平,d-保持低電平,然后彈出下面的windows xp消息框(圖5):

          怎么回事?

          請注意,程序為單步執(zhí)行。到目前為止所作的只是連接了d+上拉電阻。該上拉提示pc有新的usb設備剛剛插入,因此pc開始向該設備發(fā)送信號,確定設備類型。這就是圖4中的脈沖信號。由于微控制器代碼停止運行,因此不會命令max3420e做出任何響應。pc由于沒有收到響應信號,最終決定(18秒后)忽略該設備。d+為高電平和d-為低電平的總線狀態(tài)稱為“usb總線掛起”或者“掛起”。主機停止發(fā)送任何信號,max3420e的d+上拉電阻保持d+信號為高電平。

          圖6所示為利用lecroy instruments (lecroy兼并了catc,catc是該分析儀的最初生產(chǎn)商)的usb總線分析儀測得的總線過程。當pc探測到設備插入后(connect = 1),它發(fā)出一個usb總線復位信號(沒有畫出)。然后,在transfer 0,它發(fā)出一個“get_descriptor”請求以獲取“device”類型。5.687s之后,pc發(fā)出第二個usb總線復位信號,再嘗試5.578s,要求得到設備描述符。pc第三次復位總線,再嘗試5.580s,然后掛起總線并放棄嘗試。由于沒有運行固件,設備不會聽取或應答(ack) pc的請求。

          為清晰起見,圖6沒有畫出max3420e回送的nak (非應答)握手信號。圖7將第一次傳輸過程展開,詳細地顯示數(shù)據(jù)包。現(xiàn)在可以看到transfer 0以下面三個封包開始:

          主機向剛剛連上的設備 在這種情況下,usb發(fā)送地址0)發(fā)送一個setup包(63)。

          主機發(fā)送一個data包(64),包含一個8字節(jié)“操作碼”。
          外設(max3420e)回送一個ack包(65),確認無差錯地收到兩個主機封包。

          如果打開含有max3420e的系統(tǒng),插入usb,設置connect = 1 (但是不再進行其他操作),max3420e將發(fā)出ack握手包(上面第3步的65字節(jié)包)。max3420e硬件自動應答control傳輸?shù)膕etup階段,這是由usb規(guī)范規(guī)定的。

          接下來,主機開始發(fā)送in請求,并從transaction 1開始。對應每個in請求,max3420e回送nak (非應答)握手信號。這是因為還沒有運行程序,因此,與max3420e連接的微控制器不會收到sudav irq (setup數(shù)據(jù)就緒中斷請求)。

          注意:max3420e通過置位sudav irq,提示微控制器收到了setup包。該信息通知微控制器需要對數(shù)據(jù)包解碼,并回送要求的數(shù)據(jù)作為響應。

          這些in-nak過程持續(xù)5.687s,此時pc會復位總線,開始第二次嘗試。圖4中的脈沖信號即是in-nak過程。如果仔細觀察示波器,5s后波形將略有變化—這對應總線復位(d+和d-同時置低約30ms),其后是另一個setup包。然后,in-nak再持續(xù)5s。


          供參考:另一個分析儀

          產(chǎn)生圖6和圖7波形的usb總線分析儀可能超出了您的預算。盡管本應用筆記假設您只有一個示波器和歐姆表,我們還是強烈建議在usb開發(fā)過程中使用usb總線分析儀。我們使用的lecroy/catc具有多種優(yōu)點,包括友好的界面和豐富的軟件,最重要的是它享有工業(yè)標準usb測量工具的美譽。通過比對catc波形來確定實際情況,解決了許多爭論不休的問題(硬件、軟件和芯片等)。總線總是如實反映情況。

          幸虧現(xiàn)在有低成本usb分析儀。圖8所示為beagle-usb的屏幕截圖。beagle分析儀能夠以比lecroy/catc低很多的價格顯示總線的工作情況。如果對比圖8中的index 10和圖6中的64字節(jié)數(shù)據(jù)包,會發(fā)現(xiàn)它們顯示了完全相同的setup數(shù)據(jù)包。


          檢查進程
          如果觀察到了圖4中的信號,已經(jīng)可以確定usb連接器的連線是正確的,而且max3420e供電正常。如果還沒有觀察到該顯示,可以嘗試以下措施:
          測量max3420e的res#引腳,確定其為高電平。
          測量晶振,確保其振蕩頻率為12mhz。必須是12mhz ±0.25%才能滿足usb規(guī)范。如果超出容限,檢查所連接的負載電容是否與并聯(lián)諧振晶體所規(guī)定的電容一致(通常采用18pf)。
          檢查vcc是否為3.3v。
          檢查系統(tǒng)接口電壓vl。確保不超過3.6v。
          如果由vbus通過一個3.3v穩(wěn)壓器對max3420e的vcc引腳供電,確定連接了usb。否則,max3420e的vcc無法供電。


          注意:由于固件運行與否和usb電纜連接無關(guān),因此,與總線供電的設計相比,調(diào)試自供電設計要簡單一些??梢韵炔捎猛獠侩娫磳訖C供電。如果需要,以后可以再轉(zhuǎn)為總線供電。

          下一步檢查您的控制器是否能夠成功地通過spi總線與max3420e寄存器組進行通信。

          檢查rreg()和wreg()。
          編寫任何程序,無論是采用maxim的實例代碼還是自己從頭開始編寫代碼,都需要使用讀寫max3420e寄存器的函數(shù)。下面的例子使用了這些函數(shù)原型:

          unsigned char rreg(byte r); // read a max3420e register byte
          void wreg(byte r,byte v); // write a max3420e register byte

          在調(diào)試處理usb傳輸?shù)拇a前,先編寫一個簡單的子程序來測試這些函數(shù)。參見圖9的例子:

          圖9中的測試代碼先復位max3420e,然后向usbien寄存器寫入每字節(jié)移動1位的8個字節(jié)。每個字節(jié)中有一位置位,從00000001開始,然后是00000010,最終以10000000結(jié)束。單步執(zhí)行該函數(shù),檢查“rd”值8次,確定其值為0x01,0x02,0x04,0x08,0x10,0x20,0x40和0x80。如果是這樣,則可以確定spi接口寄存器的寫和讀操作均正常。如果能夠?qū)懭雞sbien寄存器,并可靠的讀回其內(nèi)容,那么就可以讀寫所有的max3420e寄存器。

          圖10所示為采用crossstudio調(diào)試maxq2000微控制器的屏幕截圖。將光標指向“rd”變量時,將激活彈出窗口(截圖沒有顯示光標)。單步執(zhí)行代碼時,可采用這種方式來查看任何變量。

          測試代碼首先設置微處理器spi端口。對應每種微處理器類型和特定io引腳分配,spi_init()函數(shù)各不相同。然后,代碼向pinctl寄存器寫入0x10,設置max3420e spi接口為全雙工工作模式。這將置位fdupspi位。代碼置位chipres位,然后對其清零,使max3420e處于已知的狀態(tài)。建議在代碼的開始部分包含芯片復位功能,從而在每一個調(diào)試周期的開始使max3420e處于已知的狀態(tài)。

          如果圖10中的代碼沒有產(chǎn)生正確的結(jié)果,應檢查spi信號,確定其工作是否正常。

          測試程序test_spi()中的第一次wreg()調(diào)用,向max3420e的寄存器17寫入數(shù)值0x10。spi總線的波形應與圖11所示一致。

          注意:圖11所示的波形使用spi模式(0,0),在sclk的上升沿采樣spi數(shù)據(jù),sclk的空閑電平為低電平。spi接口不同,顯示的波形會有不同的脈沖持續(xù)時間,但是對應sclk上升沿的數(shù)值應該相同。

          每次訪問spi的第一個字節(jié)是命令字節(jié),其字節(jié)格式如圖12所示。注意圖11中對應前一部分slck上升沿的mosi波形,位模式10001010指定寄存器17 (第7位至第3位是10001,數(shù)值為17)。同樣,第1位為高電平,表明是寫操作。第二個字節(jié)的位模式是00010000。這是寫入寄存器17的數(shù)據(jù),即0x10 (只有第4位fdupspi寄存器位置位)。因此,該spi訪問將0x10寫入寄存器17,置位fdupspi位。

          得到這些波形的一種簡單方法是設置示波器或者邏輯分析儀在ss#的下降沿觸發(fā),單步執(zhí)行wreg()調(diào)用。

          test_spi()中的下一條語句是rreg()函數(shù)。第一次進入循環(huán)體時,將數(shù)值0x01寫入usbien寄存器,如圖13所示。

          然后,test_spi()函數(shù)讀回usbien寄存器的數(shù)值,第一次通過循環(huán)體時,應等于1 (圖14)。每次通過循環(huán)體時,寫入和讀回的位應向左移動一個sclk邊沿。

          max3420e寄存器寫和讀操作驗證完畢后,可以進一步調(diào)試程序。到目前為止所有的檢查步驟均屬于“完整性檢查”?,F(xiàn)在,我們開始實際處理usb通信功能的第一步:需要處理器響應不同的max3420e中斷請求位。


          irq位設置
          似乎應該usb總線通信開始后max3420e才會置位中斷請求位。實際上,當max3420e上電時,就會有irq位置位,當插入usb電纜和設置connect = 1時,又有其他irq位置位。下面介紹該啟動過程的中斷請求情況。
          完成復位
          當max3420e完成復位后,即使還沒有插入usb,某些中斷請求位就會置位。這些位是:

          epirq寄存器:

          in3bavirq
          in2bavirq
          in0bavirq
          epirq寄存器的初始值應為0x19。max3420e置位這三個irq位,指示三個in端點fifo已經(jīng)準備就緒,可以裝入數(shù)據(jù)。bav表示“buffer available”。
          usbirq寄存器:

          oscokirq
          usbirq寄存器的初始值應為0x01。上電時,max3420e啟動其片內(nèi)振蕩器。振蕩器穩(wěn)定后,max3420e置位oscokirq位,指示已經(jīng)準備就緒,可以進行工作。如果程序沒有通過oscokirq位檢查,請確定vcc引腳電壓為3.3v。vcc為振蕩器供電。

          注意:max3420e irq寄存器位不論其對應的使能位(在epien和usbien寄存器中)是否置位,均可有效置位。使能位決定是否將請求位傳送到驅(qū)動int引腳的邏輯電路。參見應用筆記3661,max3420e中斷系統(tǒng),了解更詳細的信息。

          usb插入后
          插入usb (connect = 0)后,即使usb沒有通信,仍有一些usbirq位會置位。epirq位與上面的情況一致,但是更多的usbirq位將置位:

          usbirq寄存器:

          oscokirq
          vbusirq (可能)
          vbusirq位指示max3420e通過檢測vbcomp引腳上的5v信號,探測到插入了usb電纜。這假定您已經(jīng)將usb連接器的vbus引腳連接至max3420e微控制器(vbus比較器)的輸入引腳。

          注意:usb連接器的vbus引腳接max3420e的vbcomp輸入引腳是可選項。vbcomp引腳不對max3420e內(nèi)部供電。它只連接至內(nèi)部vbus比較器。

          設置connect = 1之后
          連接usb使主機發(fā)出一個總線復位信號,產(chǎn)生get_descriptor-device請求,最終掛起總線。這些操作會置位usbirq寄存器中的更多irq位。注意,usb總線復位將清除vbusirq位。

          epirq寄存器:

          in3bavirq
          in2bavirq
          in0bavirq
          sudavirq (通信開始后)
          usbirq寄存器:
          oscokirq
          uresirq
          uresdnirq
          suspirq (最后)
          如果將vbus接vbcomp引腳,usbirq寄存器讀數(shù)為0x8d,并持續(xù)約20s,然后由于主機掛起總線,讀數(shù)變?yōu)?x9d。
          接下來的情況會取決于您的代碼。如果您觀察到的情況和前面吻合,則表明系統(tǒng)一切正常,可以繼續(xù)往下檢查您的代碼。


          調(diào)試方法:通過3個步驟觸發(fā)中斷

          剩下的檢查是確保固件能夠正確響應pc發(fā)出的不同usb請求命令,并由max3420e給出相應信號。如果啟動程序,插入usb后,什么也沒有發(fā)生(可能會出現(xiàn)windows usb錯誤消息),那么可能是您的程序沒有處理中斷。下面的調(diào)試方法可以幫助解決這些中斷問題。

          第1步: 輪詢irq位

          首先,編寫代碼直接輪詢irq位,當關(guān)心的irq位置位后,使處理器進行相應操作。即使主程序循環(huán)進行直接輪詢,也最好使能中斷(各ien位 = 1和ie = 1)。這樣可以通過觀察max3420e int引腳來了解其工作情況。這一步有效地取消了微控制器中斷系統(tǒng)(和代碼)檢查,使您能夠集中精力實現(xiàn)正確的usb功能。當連續(xù)讀取epirq和usbirq寄存器時,不必擔心浪費的spi周期—這一步的目的是使usb正常工作。

          第2步: 輪詢int引腳狀態(tài)

          一旦usb工作正常后,進行第二步,修改程序來輪詢max3420e int引腳狀態(tài),檢查懸掛的中斷。如果第1步已經(jīng)驗證了程序,那么在程序主循環(huán)中有部分代碼一直讀取epirq和usbirq寄存器,檢查懸掛的中斷。插入輪詢微控制器中斷引腳狀態(tài)(連接在max3420e int引腳上)的語句,修改第1步的連續(xù)檢查。如果max3420e int引腳未產(chǎn)生中斷,可以跳過讀取epirq和usbirq寄存器的語句。這種簡單的檢查方式極大地減少了微控制器和max3420e之間的spi數(shù)據(jù)流量,這是因為只有irq位置位時,才對其進行測試。

          第3步: 檢查微控制器中斷程序

          第3步也是最后一步,將max3420e整合到微處理器的中斷系統(tǒng)中。這通常要寫一個中斷向量,以自動將程序執(zhí)行位置指向max3420e處理程序。



          關(guān)鍵詞:

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();