歡迎您光臨本站 登入註冊首頁

SL811hst USB控制器調試全過程

admin @ 2014-03-26 , reply:0

概述

1.     北京中發電子大廈購sl811hst晶元一個30元。實驗焊板一塊8元(有48腳焊盤,與sl811hst對應)。2.  ……

1.      北京中發電子大廈購sl811hst晶元一個30元。實驗焊板一塊8元(有48腳焊盤,與sl811hst對應)。
2.      普通外熱尖頭電烙鐵一把12元。焊錫一盤20元,飛鷹刀片,鑷子,砂紙,多股軟線(非常軟,很關鍵)、硬線等。
3.      按照電路圖購買電阻、電容、12M無源晶振、USB主機介面插座。
4.      準備51實驗台,我用的微控制器是C8051F020。
5.      用一小時焊完電路。注意用錫一定要少。可用刀片把焊錫切成小米粒大小的五分之一或十分之一,用烙鐵尖粘上平行送811管腳。連焊時,請把板子斜拿,用烙鐵在兩管腳間由里向外劃過,使錫能流向下方和兩邊的管腳。
6.      首先編程測試讀晶元版本號,有時能讀到(06),有時不行,不穩定。
7.      換48M有源晶振,讀寫內存無誤。後來發現晶元內部的12M晶振可直接支持讀寫內存。也就是說,811晶元外部不加晶振,靠內部晶振(仍採用12M方式),晶元一樣讀寫內存無誤,但不支持USB介面信號的發送,即D+/D-送不出數據。總的來說,811的內部12M晶振和外部12M晶振相互間有影響。
8.      最後,採用了外部48M有源晶振,工作正常,發包無誤。

調試中的一些問題
1.      首先要調試好微控制器,最好找一塊內存晶元,先編程讀寫一下。我的實驗台用了許多P口管腳外擴存儲器,我只能挑撿剩下沒用的管腳了。
2.      當發生12M晶振衝突時,不明原因而懷疑晶振振蕩不穩,或電路有干擾等。因而採取了無源換有源,12M換48M,最後去掉晶振,才發現是12M晶振有衝突。
3.      虛焊和補焊是經常的事兒。需要用邏輯判斷定位。如調試811時,首先是讀版本號,如果有問題,可做一張邏輯圖表,如附表1。把涉及的管腳都放進去,每個管腳一般只有兩種可能:通或不通,逐一列出。根據讀的結果,判斷是哪個管腳出問題了。
4.      控制線有問題時,判定較為麻煩。數據線有問題時,只要發數據0xffh和0x55h就可定位了。
5.      如果總讀出0xffh,說明811的數據沒有送上數據線。這有幾種可能:nCS或nRD虛焊(晶元默認高電平),或晶振不工作。晶振工作電壓為5V, 811是3.3V。電壓低了,晶振不工作或不穩定,811也是如此。還有兩個容易忽視的管腳,nRST和nDACK,此兩腳默認為低電平,工作時一定要拉高。
6.      調試時曾經懷疑811已經被燒毀了,因為畢竟用的電烙鐵既沒有溫控又沒有接地保護,但最後證明811比想象的要結實的多。
7.      對全速設備,軟體只有⑴⑵⑼⑾⑿⒀⒁⒂⒃句是關鍵的,列出如下:

  1. HostWrite(cSOFcnt,0xae);//設置Host模式,賦值幀定時高位。寄存器0x0F。
  2. HostWrite(DATASet, 0xe0);// 賦值幀定時低位,與上句配合產生1ms幀定時。寄存器0x0E。定時靠內部12M晶振提供頻率,12M位遞減到0實現定時。
  3. HostWrite(CtrlReg, 0x01);//使能硬體自動產生幀頭(SOF)標符,對全速傳輸,可不要此標符,即不要此句。但設備端有特殊要求,如要求嚴格1ms同步主機信號時,需此句。對低速傳輸,此句同時自動產生包尾(EOP)標符,低速設備必須要此包尾標符,需此句。寄存器0x05。此句要配合下句。
  4. HostWrite(EP0Control, 0x01);//上句產生標符后的送出是由第0位控制,開啟此位后,即使無數據包傳輸,數據線上也一直在自動傳送幀頭/包尾標識(低速設備需要此標識保持活動alive)。如上句沒有,則此句去掉。
  5. DelayMs(300);//延時
  6. SetHostAddress(IntStatus);//準備讀取狀態寄存器內容,寄存器0x0D
  7.  if(HostRead()&0x80)//判斷有無設備插入
  8.    {//如果有設備插入,重啟設備,然後發送8個位元組的數據給設備端。
  9.        HostWrite(CtrlReg, 0x8);//USB設備重啟動reset。寄存器0x05
  10.        DelayMs(300);//延時
  11.         HostWrite(EP0Address, 0x10);//指明發送數據在緩衝區中的地址0x10,寄存器0x01
  12.         HostWrite(EP0XferLen, 0x8);//最大發送長度(0x8),寄存器0x02
  13.         HostWrite(EP0Status, 0xd0);//PID是setup(包),設備端點0x0,寄存器0x03
  14.         HostWrite(EP0Counter, 0x0);//USB設備地址(0x0),寄存器0x04
  15.         HostBufWrite(0x10,test_data,6);//向主機0x10地址寫入數據test_data[8]
  16.         HostWrite(EP0Control, 0x27);//發送命令:同步幀傳輸,方向為傳出,允許傳輸,使能傳輸。要求配合第三、四句,即要先”使能硬體自動產生幀頭並送出”。寄存器0x0。也可以用0x7命令,意為立即傳輸,並可去除第三、四句。
  17.         DelayMs(300);// 延時
  18.   }//設備端即可接收到test_data[8]數組中的8個位元組的數據。

附表1:邏輯判斷定位表
CS      WR      RD      A0      現象
1      x      x      x      寫不進晶元,讀時得到0xffh
0      1      1      x      寫不進晶元,讀時得到0xffh
0      1      0      X      寫不進晶元,讀時得到隨機值
0      0      1      X      讀時得到0xffh
0      0      0      1      寫不進晶元,讀時得到隨機值
0      0      0      0      讀寫正常
註:表中0代表晶元可實現低電平輸入,即晶元管腳工作正常;1代表晶元管腳浮高,低電平無法輸入,即管腳有焊接不良。X為任意狀態輸入,即或1或0。

太原理工大學 計算機與軟體學院wenbbo@sina.com 2006-3-29


[admin via 研發互助社區 ] SL811hst USB控制器調試全過程已經有1967次圍觀

http://cocdig.com/docs/show-post-44808.html