謝冬季,繆賢浩
(湖北理工學(xué)院 計(jì)算機(jī)學(xué)院,湖北 黃石 435003)
隨著電子工業(yè)的蓬勃發(fā)展,計(jì)算機(jī)技術(shù)也逐步快速發(fā)展起來(lái),尤其是微型單片機(jī)技術(shù)的發(fā)展,使人們?nèi)粘I罡臃奖?大到工業(yè)控制,小到家用電器都有單片機(jī)的影子[1],MP3播放器也不例外。采用AT89C51SND1C單片機(jī)和存儲(chǔ)芯片K9F5608設(shè)計(jì)MP3播放器的U盤模塊,后期可以根據(jù)需要進(jìn)一步擴(kuò)展MP3播放器模塊。本設(shè)計(jì)是將USB接口與電腦連接,通過電腦完成K9F5608存儲(chǔ)芯片的讀寫操作,最終實(shí)現(xiàn)U盤的存儲(chǔ)功能。
硬件系統(tǒng)由AT89C51SND1C單片機(jī)、Flash K9F5608存儲(chǔ)芯片、RS232調(diào)試接口、USB接口和電源穩(wěn)壓升壓電路組成。AT89C51SND1C芯片包括MP3音頻解碼器、音頻輸出接口、通用串行總線接口、外插閃存卡接口、IDE/ATAH接口、串行外設(shè)接口、雙線控制器、A/D控制器接口等模塊[2]。其中AT89C51SND1C單片機(jī)包含了通用串行總線接口模塊,因此大大簡(jiǎn)化了U盤模塊設(shè)計(jì)的難度,為后期擴(kuò)展MP3功能提供了條件;而Flash K9F5608存儲(chǔ)芯片是非線性Nand Flash芯片,只有8位復(fù)位線,硬件接口比較簡(jiǎn)單,因此減小了電路設(shè)計(jì)的復(fù)雜度。綜合考慮以上因素,本設(shè)計(jì)選用上述硬件系統(tǒng)實(shí)現(xiàn)存儲(chǔ)模塊的功能[3]。
主控電路如圖1所示。主控電路實(shí)現(xiàn)控制存儲(chǔ)芯片的讀寫以及USB通信。其中USBD+、USBD-引腳是USB接口的數(shù)據(jù)線,AD0~AD7引腳與存儲(chǔ)芯片IO口相連。
圖1 主控電路
存儲(chǔ)電路如圖2所示。圖2中AD0到AD7為8位地址復(fù)用線,可分時(shí)傳輸?shù)刂?,同時(shí)其也是數(shù)據(jù)傳輸線路,與AT89C51SND1C控制器中的AD0~AD7 相連接。FCLE為指令鎖存允許線,F(xiàn)ALE為地址鎖存允許線,F(xiàn)CE為芯片啟用線,nRD為讀激活線,nWR為寫激活線。
圖2 存儲(chǔ)電路
軟件系統(tǒng)共分為4個(gè)模塊:主控程序模塊、UART通信模塊、U盤控制程序模塊和Flash讀寫模塊。
主控程序模塊是通過檢測(cè)USB_INS(P3.4) 的電平來(lái)決定是否執(zhí)行U盤功能以及是否進(jìn)行對(duì)U盤程序的初始化工作,之后開始循環(huán)執(zhí)行對(duì)應(yīng)的功能。主控程序流程圖如圖3所示。
圖3 主控程序流程圖
UART通信模塊是常規(guī)的經(jīng)典設(shè)計(jì)模塊,主要用于程序調(diào)試時(shí)幫助設(shè)計(jì)者了解程序的運(yùn)行狀態(tài)[4]。
USB存儲(chǔ)的工作流程如下:插入U(xiǎn)盤后,USB主機(jī)發(fā)出USB標(biāo)準(zhǔn)請(qǐng)求,USB設(shè)置相應(yīng)的返回設(shè)備描述符等,主機(jī)獲取設(shè)備相關(guān)信息后開始配置,U盤被主機(jī)確定為Bulk-Only的存儲(chǔ)設(shè)備,再進(jìn)入Bulk-Only傳輸模式,U盤控制程序流程圖如圖4所示。U盤控制程序具體實(shí)現(xiàn)步驟如下:
1)首先對(duì)單片機(jī)的USB硬件進(jìn)行設(shè)置,其中包括時(shí)鐘設(shè)置和使能USB部件設(shè)置。然后設(shè)置2個(gè)批量傳輸端點(diǎn),對(duì)FIFO緩沖區(qū)進(jìn)行復(fù)位操作,允許相應(yīng)端點(diǎn)中斷。
2)對(duì)AT89C51SND1C單片機(jī)的USBADDR寄存器中的FEN位初始化置為1,允許其對(duì)默認(rèn)地址的配置過程進(jìn)行響應(yīng)。開始進(jìn)入配置階段,配置階段即主機(jī)向設(shè)備索取各種描述符的過程。
3)當(dāng)設(shè)備收到主機(jī)的請(qǐng)求后,會(huì)觸發(fā)端點(diǎn)中斷寄存器中的端點(diǎn)0對(duì)應(yīng)的位,此時(shí)讀取端點(diǎn)0的數(shù)據(jù)。接著對(duì)照USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求的數(shù)據(jù)格式進(jìn)行識(shí)別,轉(zhuǎn)向相應(yīng)的請(qǐng)求處理函數(shù)。
4)USB配置完成后,即可開始處理Bulk-Only傳輸中的SCSI-2命令解析。Bulk傳輸方式下有3種類型的數(shù)據(jù)在USB和設(shè)備之間傳送,分別是命令塊包、命令狀態(tài)包和普通數(shù)據(jù)包。同時(shí)主機(jī)會(huì)向設(shè)備發(fā)出Inquiry、Read Capacity、Mode Sense這幾個(gè)命令來(lái)告知主機(jī)設(shè)備存儲(chǔ)器的具體情況,以創(chuàng)建一個(gè)可移動(dòng)的存儲(chǔ)設(shè)備。程序中要根據(jù)SCSI-2命令集中的幾個(gè)命令返回參數(shù),例如需要使用2個(gè)連續(xù)的奇偶Block作為緩沖區(qū)等,其中填充了和Flash邏輯結(jié)構(gòu)相關(guān)的參數(shù)。
圖4 U盤控制程序流程圖
對(duì)Flash芯片的讀過程是設(shè)置UEPNUM=0×01,即處理Bulk-In端點(diǎn)請(qǐng)求,需要注意USB每次可傳輸512 B的數(shù)據(jù),但端點(diǎn)1只能傳送64 B,所以共需要8次端點(diǎn)傳輸才能完成1次USB傳輸任務(wù)。數(shù)據(jù)傳輸完畢后返回CSW數(shù)據(jù)結(jié)構(gòu)。Flash芯片寫與讀操作的不同在于,寫Flash芯片必須先擦除再編程,并且每次至少擦除1個(gè)塊,所以在程序中需要使用2個(gè)連續(xù)的奇偶Block作為緩沖區(qū)。對(duì)U盤寫模塊的設(shè)計(jì)可以分為如下幾個(gè)步驟[5]:
1)指定2個(gè)連續(xù)的奇偶Block作為緩沖區(qū)的塊擦除。
2)從命令塊包中的命令塊獲取起始邏輯塊號(hào)和長(zhǎng)度,用來(lái)計(jì)算第M個(gè)塊內(nèi)的第N個(gè)頁(yè)號(hào)。
3)指定端口2,如果N>0,即將第M個(gè)塊中從0到N-1的所有頁(yè)號(hào)都復(fù)制到緩沖區(qū)中。
4)計(jì)算M和N。如果數(shù)據(jù)長(zhǎng)度為0,則寫U盤過程完畢。若數(shù)據(jù)長(zhǎng)度不為0,則從USB端點(diǎn)接收數(shù)據(jù)同時(shí)寫入緩沖區(qū)的第N個(gè)頁(yè),數(shù)據(jù)長(zhǎng)度減1。
5)如果緩沖區(qū)沒有寫滿,則起始邏輯塊加1,重新計(jì)算M和N;如果緩沖區(qū)已寫滿,即將第M個(gè)塊中從第N+1到本塊的最后一頁(yè)都復(fù)制到對(duì)應(yīng)緩沖區(qū)中,同時(shí)擦除第M個(gè)Block,將緩沖區(qū)所有頁(yè)復(fù)制到第M個(gè)塊中,然后返回步驟4繼續(xù)進(jìn)行計(jì)算。通過以上幾個(gè)步驟即可完成基于AT89C51SND1C單片機(jī)MP3播放器的U盤模塊設(shè)計(jì)。
利用AT89C51SND1C單片機(jī)和Flash K9F5608存儲(chǔ)芯片設(shè)計(jì)MP3播放器的U盤模塊,可以明顯降低開發(fā)成本和提高開發(fā)效率。該電路設(shè)計(jì)實(shí)現(xiàn)快捷方便,軟件實(shí)現(xiàn)結(jié)構(gòu)清晰,可以作為U盤設(shè)計(jì)開發(fā)的首選方案之一。
參考文獻(xiàn)
[1] 郭天祥.新概念51單片機(jī)C語(yǔ)言教程[M].北京:電子工業(yè)出版社,2009:21-31.
[2] 鄭鋒.51單片機(jī)典型應(yīng)用開發(fā)范例大全[M].北京:中國(guó)鐵道出版社,2011:22-26.
[3] 鄒彥.DSP原理以及應(yīng)用[M].北京:電子工業(yè)出版社,2012:6-15.
[4] 胡漢才.單片機(jī)原理及系統(tǒng)設(shè)計(jì)[M].北京:清華大學(xué)出版社,2002:359-442.
[5] 張景璐,于京,馬澤民.51單片機(jī)項(xiàng)目教程[M].北京:人民郵電出版社,2010:121-139.