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