基于USB2.0的高性能移動(dòng)存儲設(shè)備的設(shè)計(jì)
?。簩懯鼓苄盘枴T谄渖仙貢r(shí),命令、地址和數(shù)據(jù)鎖存到相應(yīng)的寄存器中。該信號與AT89C5131芯片的P3.6 信號連接。
:讀使能信號。在其下降沿時(shí),輸出數(shù)據(jù)到I/O總線,同時(shí),它還可以對內(nèi)部數(shù)據(jù)地址進(jìn)行累加。該信號與AT89C5131芯片的P3.7 信號連接。
CLE:命令鎖存使能信號。當(dāng)CLE為高電平時(shí),命令在 上升沿通過I/O端口送入命令寄存器。該信號與AT89C5131芯片的P1.0引腳連接。
ALE:地址鎖存使能信號。當(dāng)ALE為高電平時(shí),地址在 上升沿送入地址寄存器。該信號與AT89C5131芯片的P1.1引腳連接。
:片選信號。用于控制設(shè)備的選擇。當(dāng)設(shè)備忙時(shí) 為高電平而被忽略,當(dāng)處于編程和擦除操作時(shí)設(shè)備不能回到備用狀態(tài)。該信號與AT89C5131芯片的P1.2引腳連接。
R/ :準(zhǔn)備好/忙輸出。當(dāng)它為低電平時(shí),表示編程、擦除和隨機(jī)讀操作正在進(jìn)行,在操作完成后返回高電平;當(dāng)芯片沒被選中或輸出禁止時(shí),其為高電平時(shí)。該信號與AT89C5131芯片的P1.3引腳連接。
3.固件設(shè)計(jì)實(shí)現(xiàn)
本文設(shè)計(jì)的USB移動(dòng)存儲設(shè)備采用Bulk-Only傳輸方式,遵循UFI命令規(guī)范。移動(dòng)存儲設(shè)備固件的主要功能是響應(yīng)USB總線的各種標(biāo)準(zhǔn)請求,向主機(jī)返回設(shè)備的狀態(tài)信息;同時(shí),解析接收到的SCSI命令,進(jìn)行相應(yīng)的命令處理和數(shù)據(jù)讀寫操作。固件設(shè)計(jì)采用中斷驅(qū)動(dòng),當(dāng)AT89C5131從總線上接收到請求包時(shí),通過調(diào)用相應(yīng)的中斷事件處理函數(shù)來實(shí)現(xiàn),后臺處理USB傳輸,從而保證了閃存的快速讀寫速率。主要中斷事件有:
(1)主循環(huán)等待USB中斷,設(shè)置相應(yīng)標(biāo)志位。移動(dòng)存儲設(shè)備插入主機(jī)后,主機(jī)向移動(dòng)閃存的控制斷點(diǎn)0發(fā)出標(biāo)準(zhǔn)請求,固件進(jìn)入標(biāo)準(zhǔn)請求處理函數(shù),設(shè)備回送給主機(jī)所要求的相應(yīng)描述符,調(diào)用相關(guān)驅(qū)動(dòng)程序。
(2)當(dāng)USB主機(jī)通過Bulk-In端口讀取閃存數(shù)據(jù)后,產(chǎn)生Bulk-In端口中斷。
(3)當(dāng)AT89C5131通過Bulk-Out端口接收到主機(jī)發(fā)送的命令字CBW后,觸發(fā)Bulk-Out端口中斷。
3.1 響應(yīng)USB總線標(biāo)準(zhǔn)請求
當(dāng)USB移動(dòng)存儲設(shè)備接入主機(jī)后,USB主機(jī)控制器對設(shè)備進(jìn)行總線枚舉過程,首先向設(shè)備發(fā)送標(biāo)準(zhǔn)USB請求GET_DESCRIPTOR來獲得最大數(shù)據(jù)包長度;接著發(fā)出SET ADDRESS請求,為設(shè)備分配地址;使用新分配的地址再次發(fā)出GET_DESCRIPTOR請求,讀取設(shè)備的配置信息[4],如設(shè)備描述符、配置描述符、接口描述符、端口描述符和字符串描述符等,并選擇合適的驅(qū)動(dòng)程序;最后,發(fā)出SET CONFIGURATION請求配置端口屬性。
評論