我經(jīng)歷的典型的U盤調(diào)試過程
如果Step1到Step3都正常實現(xiàn)了,step4和step5也比較順利,可以找到相應的盤符了。
其中Step1除了能完成串口還在pc找到了“無法識別的USB設備”,這是硬件完好的信息,下面的步驟都要基于這一個step;USB通訊協(xié)議中要求對端點的操作,Step2是對端點的調(diào)試,除了端點使能,端點還正常產(chǎn)生中斷,信息由串口給出。Step3已經(jīng)配置了設備的描述符,串口顯示主機已經(jīng)接受了設備提供的描述符,可以開始識別設備了;Step4開始處理標準的USB請求,在我們這里是標準的Mass Storage USB海量存儲設備,因此主機進行讀寫端點可以按照正常標準的框架進行,pc可以通過端點和USB端點進行數(shù)據(jù)交換,此時主機的狀態(tài)欄已經(jīng)可以顯示可以識別的圖標,但仍沒有相應的SCSI配置。Step5開始建立Bulk_Out端點數(shù)據(jù)處理框架。這一步完成了就可以對系統(tǒng)的SCSI命令進行解析和識別,進行相應的處理;到Step6就對SCSI命令進行處理,進而對flash進行讀寫操作;在這一步已經(jīng)建立了相應的bulk_In數(shù)據(jù)處理機制,完成了數(shù)據(jù)的寫入flash,續(xù)傳,和設備的識別,因此在系統(tǒng)里已經(jīng)可以看到相關(guān)組件了。
在這之后與flash建立了數(shù)據(jù)交換,但是還沒有能順利的格式化flash。其原因是要先用硬件進行格式化,因為第一次對新的flash進行數(shù)據(jù)交換,還沒有相關(guān)的0扇區(qū)、保留扇區(qū)、文件分配表、根目錄區(qū)等,Windows無法識別。
我們加上了format_Fat16Media()用代碼直接硬格式化一次。(這個函數(shù)對應在代碼的flash.hex中)此后Windows中可以找到相應的盤符,但是暫時還不能識別優(yōu)盤的容量,也不能對該盤實施文件操作,運行Windows的格式化指令兩次,系統(tǒng)已經(jīng)辨認出了16M的Flash存儲器,相關(guān)盤符也可以正常打開并進行文件讀寫刪擦的工作。我們的16M優(yōu)盤正確調(diào)試出來了。是不是很有成就感?