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