朱國鐘
【摘要】便攜小音箱一般包括模擬音頻輸入AUX、外放喇叭、SD卡接口、USB接口和按鍵。在實(shí)際使用中,一般不會(huì)同時(shí)進(jìn)行USB和SD通信,如果能夠?qū)SB接口和SD接口的引腳復(fù)用起來,節(jié)省2個(gè)引腳,那么用8pin封裝的主控來實(shí)現(xiàn)便攜小音箱功能,將會(huì)是一個(gè)非常有價(jià)值的解決方案。
【關(guān)鍵詞】USB;SD卡;分時(shí)復(fù)用;插入檢測
1.引言
隨著電子技術(shù)的發(fā)展,應(yīng)用需求的迅速膨脹,終端芯片的集成功能越來越多,導(dǎo)致芯片引出管腳不斷增加。另一方面,為減少封裝成本和制造成本,生產(chǎn)商對(duì)封裝成本和應(yīng)用成本的控制是越來越嚴(yán)格,這就要求減少封裝引腳數(shù)目。顯然人們的需求和成本是矛盾的。
在消費(fèi)電子領(lǐng)域,便攜小音箱因?yàn)轶w積小、音效好、功能全、使用方便等特點(diǎn),廣受消費(fèi)者的歡迎。便攜小音箱一般包括模擬音頻輸入AUX、外放喇叭、SD卡接口、USB接口和按鍵。為了支持這些功能,便攜小音箱的主控芯片一般包括1個(gè)AUX輸入引腳、3個(gè)SD卡接口引腳、2個(gè)USB接口引腳、1個(gè)DAC輸出引腳、1個(gè)按鍵檢測引腳,2個(gè)電源引腳,共10個(gè)引腳。常見的16pin封裝對(duì)這種功能需求,顯得冗余。為了節(jié)省主控芯片成本,去選擇8pin封裝時(shí)候,又無法完全實(shí)現(xiàn)便攜小音箱的功能需求。
當(dāng)前消費(fèi)電子產(chǎn)品的USB接口和SD接口與MCU的連接關(guān)系如圖1所示。
圖1 現(xiàn)有USB/SD接口結(jié)構(gòu)示意圖
便攜小音箱在實(shí)際使用中,一般不會(huì)同時(shí)進(jìn)行USB和SD通信,如果能夠?qū)SB接口和SD接口的引腳復(fù)用起來,節(jié)省2個(gè)引腳,那么用8pin封裝的主控來實(shí)現(xiàn)便攜小音箱功能,將會(huì)是一個(gè)非常有價(jià)值的解決方案。
2.USB和SD接口復(fù)用硬件電路
如圖2所示,本文以便攜小音箱的應(yīng)用方案為例,描述一種USB和SD接口復(fù)用電路設(shè)計(jì),包括MCU主控芯片,USB接口和SD接口。MCU主控芯片包括CPU,SD模塊,USB模塊,定時(shí)器,電平檢測模塊,通用輸入輸出引腳IOA、IOB、IOC和IOD,復(fù)用控制模塊;USB接口包括第一數(shù)據(jù)引腳USB_DM和第二數(shù)據(jù)引腳USB_DP;SD接口包括命令引腳SD_CMD、時(shí)鐘引腳SD_CLK、數(shù)據(jù)引腳SD_DATA、插入檢測引腳SD_DET;SD_CLK引腳和IOA引腳連接,SD_DAT引腳和IOB引腳連接,SD_CMD引腳和IOC引腳連接,SD_DET引腳與IOD引腳連接;USB_DM和USB_DP分別與IOA和IOB兩個(gè)引腳連接。
復(fù)用控制模塊用于控制SD模塊、USB模塊、電平檢測模塊和通用輸入輸出引腳IOA、IOB、IOC、IOD的連接關(guān)系;SD模塊通過復(fù)用控制模塊,和通用輸入輸出引腳IOA、IOB、IOC連接; USB模塊通過復(fù)用控制模塊,和通用輸入輸出引腳IOA、IOB連接;電平檢測模塊通過服用控制模塊,和通用輸入輸出引腳IOA、IOB、IOD連接。
3.USB和SD接口復(fù)用軟件控制流程
為了實(shí)現(xiàn)USB和SD接口復(fù)用方法,MCU軟件需要設(shè)置6個(gè)USB接口狀態(tài),6個(gè)SD接口狀態(tài)和3個(gè)工作流程。接口狀態(tài)如圖3所示。
6個(gè)USB接口狀態(tài):USB離線狀態(tài)、USB在線狀態(tài)、USB掛起狀態(tài)、USB激活狀態(tài)、USB空閑狀態(tài)、USB通信狀態(tài)。USB離線狀態(tài)和USB在線狀態(tài)同一時(shí)間只有一個(gè)狀態(tài)有效,USB在線狀態(tài)為USB掛起狀態(tài)和USB激活狀態(tài)的前提條件。USB掛起狀態(tài)和USB激活狀態(tài)同一時(shí)間最多只有一個(gè)狀態(tài)有效,USB激活狀態(tài)為USB空閑狀態(tài)和USB通信狀態(tài)的前提條件。USB空閑狀態(tài)和USB通信狀態(tài)同一時(shí)間最多只有一個(gè)狀態(tài)有效。
圖3 USB/SD 工作狀態(tài)示意圖
6個(gè)SD接口狀態(tài):SD離線狀態(tài)、SD在線狀態(tài)、SD掛起狀態(tài)、SD激活狀態(tài)、SD空閑狀態(tài)、SD通信狀態(tài)。SD離線狀態(tài)和USB在線狀態(tài)同一時(shí)間只有一個(gè)狀態(tài)有效,SD在線狀態(tài)為SD掛起狀態(tài)和SD激活狀態(tài)的前提條件。SD掛起狀態(tài)和SD激活狀態(tài)同一時(shí)間最多只有一個(gè)狀態(tài)有效,SD激活狀態(tài)為SD空閑狀態(tài)和SD通信狀態(tài)的前提條件。SD空閑狀態(tài)和SD通信狀態(tài)同一時(shí)間最多只有一個(gè)狀態(tài)有效。
USB激活狀態(tài)和SD激活狀態(tài)同一時(shí)間最多只有一個(gè)狀態(tài)有效。
利用CPU,SD模塊,USB模塊,定時(shí)器,電平檢測模塊,通用輸入輸出引腳IOA、IOB、IOC和IOD,復(fù)用控制模塊等硬件結(jié)構(gòu),配合軟件操作流程,實(shí)現(xiàn)USB和SD接口檢測切換流程。
下面舉例說明具體實(shí)現(xiàn)檢測切換的過程及步驟。
假設(shè)通電開機(jī)時(shí),沒有插入SD卡和U盤,開機(jī)后先插入SD卡播放,再插入U(xiǎn)盤播放。
開機(jī)后,USB接口和SD接口均處于離線狀態(tài)。軟件設(shè)置使能定時(shí)器每50ms產(chǎn)生一次中斷。CPU進(jìn)入定時(shí)中斷子程序后,按既定流程檢測USB接口和SD接口的連接情況。根據(jù)檢測的結(jié)果,設(shè)置USB接口和SD接口的狀態(tài)。
插入SD卡后,定時(shí)器產(chǎn)生定時(shí)中斷,CPU執(zhí)行如下檢測和設(shè)置步驟:(1)流程a檢測“USB是否處于通信狀態(tài)”。USB不在通信狀態(tài),進(jìn)入流程b;(2)流程b檢測“SD是否處于通信狀態(tài)”。SD卡不在通信狀態(tài),進(jìn)入流程c;(3)流程c檢測“USB是否處于空閑狀態(tài)”。USB不在空閑狀態(tài),進(jìn)入流程d;(4)流程d檢測“SD是否處于空閑狀態(tài)”。SD不在空閑狀態(tài),進(jìn)入流程e;(5)流程e檢測“SD是否處于掛起狀態(tài)”。SD不在掛起狀態(tài),進(jìn)入流程o;(6)流程o檢測“SD是否在線”。此時(shí)已經(jīng)插入SD卡,SD卡在線,進(jìn)入流程p;(7)流程p里面,CPU配置復(fù)用控制模塊,建立SD模塊和IOA、IOB、IOC的連接。設(shè)置SD接口為激活狀態(tài),進(jìn)入流程s;(8)退出中斷子程序后,根據(jù)音箱系統(tǒng)的需要,進(jìn)行SD通信。
此后,再插入U(xiǎn)盤。定時(shí)器產(chǎn)生定時(shí)中斷,CPU執(zhí)行如下檢測和設(shè)置步驟:(1)流程a檢測“USB是否處于通信狀態(tài)”,USB不在通信狀態(tài),進(jìn)入流程b;(2)流程b檢測“SD是否處于通信狀態(tài)”,如果SD卡處于通信狀態(tài),則退出中斷子程序,等待定時(shí)器再次中斷,如果SD卡不處于通信狀態(tài),因?yàn)镾D接口已經(jīng)被激活,則必然處于空閑狀態(tài),進(jìn)入流程c;(3)流程c檢測“USB是否處于空閑狀態(tài)”,USB不在空閑狀態(tài),進(jìn)入流程d;(4)流程d檢測“SD是否處于空閑狀態(tài)”,SD接口處于空閑狀態(tài),進(jìn)入流程k;(5)流程k檢測“USB是否處于掛起狀態(tài)”,USB不在掛起狀態(tài),進(jìn)入流程l;(6)流程l里面,為了避免USB檢測動(dòng)作影響SD模塊和SD卡,將SD設(shè)置為掛起狀態(tài),再檢測“USB是否在線”,此時(shí)U盤已經(jīng)插入在線,進(jìn)入流程m;(7)流程m將USB設(shè)置為激活狀態(tài)后,進(jìn)入流程s;(8)退出中斷子程序后,根據(jù)音箱系統(tǒng)的需要,進(jìn)行USB通信。
對(duì)于先插入U(xiǎn)盤,再插入SD卡的情況,可以參考上述過程,實(shí)現(xiàn)在線檢測和狀態(tài)設(shè)置。
如果SD接口正處于激活狀態(tài),SD卡也仍然連接在線,系統(tǒng)需要進(jìn)行SD通信時(shí),CPU執(zhí)行如下步驟:(1)流程a檢測SD卡是否在線。因?yàn)镾D沒有被拔出,進(jìn)入流程b;(2)流程b里面,將SD接口設(shè)置為通信狀態(tài)。然后進(jìn)入流程c,開始SD通信;(3)SD通信結(jié)束后,進(jìn)入流程d;(4)流程d將SD接口設(shè)置為空閑狀態(tài)后,進(jìn)入流程f,退出SD通信流程。
如果USB接口正處于激活狀態(tài),但U盤已經(jīng)被拔出。當(dāng)系統(tǒng)嘗試再進(jìn)行USB通信時(shí),CPU執(zhí)行如下步驟:(1)流程a檢測USB盤是否在線,因?yàn)閁盤已經(jīng)被拔出離線,進(jìn)入流程e;(2)流程e將USB接口設(shè)置為離線狀態(tài)后,進(jìn)入流程f,退出USB通信流程。
結(jié)合上述硬件電路和軟件流程,即可實(shí)現(xiàn)USB接口和SD卡接口的分時(shí)復(fù)用功能。
4.總結(jié)
本文所述的USB和SD接口復(fù)用電路,通過配置MCU主控芯片內(nèi)復(fù)用控制模塊控制設(shè)定和通用輸入輸出接口狀態(tài),配合軟件的處理流程,分時(shí)復(fù)用IOA、IOB、IOC、IOD引腳,進(jìn)行USB通信或SD通信。SD設(shè)備和USB設(shè)備插拔動(dòng)作和連線狀態(tài),都不會(huì)干擾當(dāng)前正在使用的USB設(shè)備或者SD設(shè)備。與現(xiàn)有設(shè)計(jì)相比,在不影響MCU主控芯片應(yīng)用功能的同時(shí)減少了引腳數(shù)量需求,降低產(chǎn)品的生產(chǎn)成本。
參考文獻(xiàn)
[1]單片機(jī)接口技術(shù).
[2]SD Specifications Part 1 Physical Layer Specification Revision3.01.
[3]Universal Serial Bus Specification Revision 2.0.
[4]USB開發(fā)大全(第4版).
[5]新概念51單片機(jī)C語言教程.