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