(經(jīng)典)基于單片機(jī)的U盤(pán)讀寫(xiě)_第1頁(yè)
(經(jīng)典)基于單片機(jī)的U盤(pán)讀寫(xiě)_第2頁(yè)
(經(jīng)典)基于單片機(jī)的U盤(pán)讀寫(xiě)_第3頁(yè)
(經(jīng)典)基于單片機(jī)的U盤(pán)讀寫(xiě)_第4頁(yè)
(經(jīng)典)基于單片機(jī)的U盤(pán)讀寫(xiě)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于單片機(jī)的U盤(pán)數(shù)據(jù)傳輸裝置 機(jī)電工程學(xué)院測(cè)控技術(shù)與儀器專業(yè) 李朋飛 摘要:隨著單片機(jī)技術(shù)的發(fā)展,各種嵌入式系統(tǒng)的逐漸應(yīng)用于工作現(xiàn)場(chǎng)的數(shù)據(jù)采集和控制之中。USB總線技術(shù)的發(fā)展,使得數(shù)據(jù)傳輸和采集技術(shù),變得簡(jiǎn)單,易攜和方便使用?;赨SB總線技術(shù)的USB儲(chǔ)存設(shè)備簡(jiǎn)稱U盤(pán),它具有支持熱拔熱插,儲(chǔ)存量大,耐用,和輕巧方便的特點(diǎn)?;趩纹瑱C(jī)技術(shù)的U盤(pán)數(shù)據(jù)采集是把單片機(jī)系統(tǒng)作為主機(jī)系統(tǒng),再利用支持USB總線協(xié)議的U盤(pán)讀寫(xiě)芯片或者模塊來(lái)完成工業(yè)現(xiàn)場(chǎng)的數(shù)據(jù)采集或者傳輸。這樣,便可以把U盤(pán)的大容量存儲(chǔ),方便易用的功能從PC機(jī)系統(tǒng)擴(kuò)展到單片機(jī)系統(tǒng)中,可以方便在室外進(jìn)行大量數(shù)據(jù)的采集。例如,可以將單片機(jī)系統(tǒng)中AD

2、轉(zhuǎn)換后采集到的數(shù)據(jù),儲(chǔ)存到U盤(pán)之中,以便于利用計(jì)算機(jī)對(duì)數(shù)據(jù)經(jīng)行整理或分析。本文主要介紹一種技術(shù)成熟U盤(pán)讀寫(xiě)芯片CH375和以此芯片為核心的U盤(pán)讀寫(xiě)模塊,簡(jiǎn)單介紹了CH375芯片的構(gòu)造和特點(diǎn),以及U盤(pán)模塊的應(yīng)用特點(diǎn)。再次,介紹了串口版U盤(pán)模塊的應(yīng)用,并設(shè)計(jì)了串口模塊和單片機(jī)之間的通信的應(yīng)用方式,并附有模塊和單片機(jī)之間采用RS232電平進(jìn)行通信的連接電路圖。同時(shí),還簡(jiǎn)單的介紹了,U盤(pán)讀寫(xiě)之中需要注意的幾個(gè)協(xié)議等。最后附錄中的程序提供了一個(gè)能夠?qū)崿F(xiàn)單片機(jī)以字節(jié)的方式對(duì)U盤(pán)的讀和寫(xiě)的程序。關(guān)鍵詞:?jiǎn)纹瑱C(jī) U盤(pán) USB2.0 U盤(pán)模塊 串口 通信 RS232接口 CH375 電平引言半導(dǎo)體技術(shù)的發(fā)展帶來(lái)

3、計(jì)算機(jī)向微型化發(fā)展的革命,同時(shí)隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,USB(Universal Serial Bus)存儲(chǔ)設(shè)備的使用已經(jīng)非常普遍,USB 用于將適用USB 的外圍設(shè)備(device)連接到主機(jī)(host),實(shí)現(xiàn)二者之間數(shù)據(jù)傳輸?shù)耐獠靠偩€結(jié)構(gòu);是一種快速、靈活的總線接口。它最大的特點(diǎn)是易于使用,攜帶方便,主要是用在中速,低速的外設(shè)。隨著USB 規(guī)范的完善和成熟,USB 外設(shè)的種類不斷豐富,應(yīng)用領(lǐng)域也不斷擴(kuò)大。在傳統(tǒng)的應(yīng)用中,主要是PC 扮演著主機(jī)的角色。根據(jù)USB 的規(guī)范,可以看到在USB 的拓樸結(jié)構(gòu)中居于核心地位的是主機(jī),每一次的數(shù)據(jù)傳輸都必須由主機(jī)發(fā)起和控制。但是隨著單片機(jī)產(chǎn)品應(yīng)用領(lǐng)域的

4、日益增長(zhǎng),USB 外設(shè)的應(yīng)用范圍也隨之?dāng)U大,為此在單片機(jī)系統(tǒng)中實(shí)現(xiàn)對(duì)USB外設(shè)控制也變得日益迫切。因此在一些需要轉(zhuǎn)存數(shù)據(jù)的設(shè)備,儀器上使用USB移動(dòng)存儲(chǔ)設(shè)備接口的芯片便相繼產(chǎn)生了,CH375 就是其中之一,它是一個(gè)USB 總線的通用接口芯片,支持HOST 主機(jī)方式和SLAVE 設(shè)備方式。如今的USB 就象當(dāng)日的RS232,最終發(fā)展必是業(yè)界的主流外設(shè)接口技術(shù)。USB 有著其它接口不可替代的優(yōu)勢(shì)。隨著USB 技術(shù)的發(fā)展,計(jì)算機(jī)的移動(dòng)存儲(chǔ)介質(zhì)普遍采用U 盤(pán)或移動(dòng)硬盤(pán)。如今,USB 技術(shù)已經(jīng)越來(lái)越普及和成熟,低成本、高穩(wěn)定性、較高的數(shù)據(jù)傳輸速率和即插即用的方便性,使其備受硬件廠商的青睞。隨著數(shù)據(jù)采集和

5、單片機(jī)用戶對(duì)移動(dòng)存儲(chǔ)的需求越來(lái)越大,具有USB 接口的存儲(chǔ)設(shè)備以其優(yōu)異的性價(jià)比和靈活性常用來(lái)進(jìn)行數(shù)據(jù)的存儲(chǔ)和交換,所以在單片機(jī)系統(tǒng)中實(shí)現(xiàn)對(duì)優(yōu)盤(pán)或移動(dòng)硬盤(pán)的直接讀寫(xiě)是非常有價(jià)值的。研究的意義 USB是近年發(fā)展起來(lái)的一種快速、靈活的總線接口。它最大的特點(diǎn)是易于使用、可熱插拔、接口連接靈活,并且能夠提供外設(shè)電源,在嵌人式系統(tǒng)及智能儀表中得到廣泛的應(yīng)用。而51系列單片機(jī)以其優(yōu)越的性能、成熟的技術(shù)、高性價(jià)比被廣應(yīng)用于測(cè)控儀器等自動(dòng)化領(lǐng)域。因此用51系列單片機(jī)實(shí)現(xiàn)USB主機(jī)接口,進(jìn)而實(shí)現(xiàn)對(duì)USB外設(shè)的控制,對(duì)提高整個(gè)系統(tǒng)的數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)傳輸、設(shè)備控制等性能都有很大的作用。根據(jù)我們的調(diào)查和了解,我們發(fā)現(xiàn),隨

6、著Flash Memory非易失存儲(chǔ)技術(shù)的發(fā)展,基于USB接口的閃存即U盤(pán)現(xiàn)已得到廣泛應(yīng)用。從理論上講,以U盤(pán)作為便攜式采集存儲(chǔ)系統(tǒng)的存儲(chǔ)載體完全能夠滿足長(zhǎng)時(shí)間采集海量數(shù)據(jù)的要求。但目前所面臨的問(wèn)題是,U盤(pán)主要應(yīng)用于PC機(jī)系統(tǒng)中。以單片機(jī)等微處理器為核心的嵌入式系統(tǒng)的應(yīng)用中,尚缺少與U盤(pán)的直接接口技術(shù)。因此將單片機(jī)技術(shù)與U盤(pán)存儲(chǔ)技術(shù)兩者結(jié)合起來(lái),利用單片機(jī)直接讀寫(xiě)U盤(pán),并通過(guò)總線方式與嵌入式系統(tǒng)的其它部分實(shí)現(xiàn)命令和數(shù)據(jù)的通信。采用單片機(jī)直接控制讀寫(xiě)U盤(pán),關(guān)鍵在于USB-HOST技術(shù)的實(shí)現(xiàn),即單片機(jī)作為USB主機(jī)系統(tǒng)。USB系統(tǒng)包括兩部分:USB主機(jī)和USB外設(shè),它們組合在一起就構(gòu)成了完整的US

7、B系統(tǒng)。USB的拓?fù)浣Y(jié)構(gòu)中居于核心地位的是Host(也稱為主機(jī)),任何一次USB的數(shù)據(jù)傳輸都必須由主機(jī)來(lái)發(fā)起和控制,所有的USB外設(shè)都只能和主機(jī)建立連接,任何兩個(gè)外設(shè)之間或是兩個(gè)主機(jī)之間無(wú)法直接通信。鑒于復(fù)雜的USB協(xié)議,我們覺(jué)得可以采用USB讀寫(xiě)模塊,這樣只要將USB讀寫(xiě)模塊嵌入到用戶單片機(jī)系統(tǒng)中,就可以通過(guò)單片機(jī)的串口與USB讀寫(xiě)模塊之間的通信,進(jìn)而讀寫(xiě)U盤(pán)里面的數(shù)據(jù),還可以方便的利用U盤(pán)儲(chǔ)存海量的AD轉(zhuǎn)換后的數(shù)據(jù)等。三 , USB總線接口芯片CH3753.1 概述: CH375 是一個(gè)USB總線的通用接口芯片,支持USB-HOST主機(jī)方式和USB-DEVICE/SLAVE設(shè)備方式。在本地

8、端,CH375具有8位數(shù)據(jù)總線和讀、寫(xiě)、片選控制線以及中斷輸出,可以方便地掛接到單片機(jī)/DSP/MCU/MPU等控制器的系統(tǒng)總線上。在USB主機(jī)方式下,CH375還提供了串行通訊方式,通過(guò)串行輸入、串行輸出和中斷輸出與單片機(jī)/DSP/MCU/MPU 等相連接。CH375的USB 主機(jī)方式支持常用的USB 全速設(shè)備,外部單片機(jī)可以通過(guò)CH375 按照相應(yīng)的USB 協(xié)議與USB 設(shè)備通訊。CH375 還內(nèi)置了處理Mass-Storage 海量存儲(chǔ)設(shè)備的專用通訊協(xié)議的固件,外部單片機(jī)可以直接以扇區(qū)為基本單位讀寫(xiě)常用的USB 存儲(chǔ)設(shè)備(包括USB 硬盤(pán)/USB閃存盤(pán)/U 盤(pán))3.2 特點(diǎn) 1)全速US

9、B-HOST 主機(jī)接口,兼容USB V2.0,外圍元器件只需要晶體和電容。 2)全速設(shè)備接口,完全兼容CH372 芯片,支持動(dòng)態(tài)切換主機(jī)與設(shè)備方式。 3)主機(jī)端點(diǎn)輸入和輸出緩沖區(qū)各64 字節(jié),支持常用的12Mbps 全速USB 設(shè)備。 4)支持USB 設(shè)備的控制傳輸、批量傳輸、中斷傳輸。 5)自動(dòng)檢測(cè)USB 設(shè)備的連接和斷開(kāi),提供設(shè)備連接和斷開(kāi)的事件通知。 6)內(nèi)置控制傳輸?shù)膮f(xié)議處理器,簡(jiǎn)化常用的控制傳輸。 7) 內(nèi)置固件處理海量存儲(chǔ)設(shè)備的專用通訊協(xié)議,支持Bulk-Only傳輸協(xié)議和SCSI、UFI、RBC 或等效命令集的USB 存儲(chǔ)設(shè)備(包括USB 硬盤(pán)/USB 閃存盤(pán)/U 盤(pán))。 8)通

10、過(guò)U 盤(pán)文件級(jí)子程序庫(kù)實(shí)現(xiàn)單片機(jī)讀寫(xiě)USB 存儲(chǔ)設(shè)備中的文件。 9)并行接口包含8 位數(shù)據(jù)總線,4 線控制:讀選通、寫(xiě)選通、片選輸入、中斷輸出。 10)串行接口包含串行輸入、串行輸出、中斷輸出,支持通訊波特率動(dòng)態(tài)調(diào)整。 11)支持5V 電源電壓和3.3V 電源電壓,CH375A 芯片還支持低功耗模式。 12)采用SOP-28 封裝,可以提供SOP28 到DIP28 的轉(zhuǎn)換板。 圖1 CH375各引腳說(shuō)明3.3 功能說(shuō)明CH375 芯片可以工作于USB-HOST 主機(jī)方式或者USB 設(shè)備方式。CH375的USB 主機(jī)方式支持并行接口和串行接口。在USB主機(jī)方式下,CH375支持各種常用的USB全

11、速設(shè)備,外部單片機(jī)需要編寫(xiě)固件程序按照相應(yīng)的USB協(xié)議與USB 設(shè)備通訊。但是對(duì)于USB存儲(chǔ)設(shè)備,CH375 內(nèi)置了相關(guān)協(xié)議,通常情況下,外部單片機(jī)不需要編寫(xiě)固件程序,就可以直接通訊。CH375 芯片在本地端提供了通用的被動(dòng)并行接口和點(diǎn)對(duì)點(diǎn)的串行接口。圖2 CH375芯片的電器參數(shù)3.4 CH375工作于串口模式下 串行接口只能用于USB 主機(jī)方式,CH375 芯片的USB 設(shè)備方式不支持串口。串口信號(hào)線包括:串行數(shù)據(jù)輸入引腳RXD、串行數(shù)據(jù)輸出引腳TXD、中斷輸出引腳INT#。通過(guò)串行接口,CH375 可以用最少的連線與單片機(jī)、DSP、MCU 進(jìn)行較遠(yuǎn)距離的點(diǎn)對(duì)點(diǎn)連接。CH375芯片的RXD

12、 和TXD可以分別連接到單片機(jī)的串行數(shù)據(jù)輸出引腳和串行數(shù)據(jù)輸入引腳。INT#輸出的中斷請(qǐng)求是低電平有效,用于通知單片機(jī)。CH375 的串行數(shù)據(jù)格式是1個(gè)起始位、9個(gè)數(shù)據(jù)位、1個(gè)停止位,其中前8個(gè)數(shù)據(jù)位是一個(gè)字節(jié)數(shù)據(jù),最后1個(gè)數(shù)據(jù)位是命令標(biāo)志位。第9位為0時(shí),前8位的數(shù)據(jù)被寫(xiě)入CH375芯片中,第9位為1時(shí),前8位被作為命令碼寫(xiě)入CH375芯片中。CH375的串行通訊波特率默認(rèn)是9600bps,單片機(jī)可以隨時(shí)通過(guò)SET_BAUDRATE 命令選擇合適的通訊波特率。3.5 其它功能簡(jiǎn)介 在CH375 芯片的復(fù)位期間,TXD引腳用于選擇通訊接口。如果CH375 在復(fù)位期間檢測(cè)到TXD引腳為低電平則啟

13、用并行接口,否則啟用串行接口。如果啟用串行接口,那么復(fù)位完成后TXD引腳將用于串行數(shù)據(jù)輸出,并且CH375 芯片只能工作于USB 主機(jī)方式。 CH375芯片的ACT#引腳用于狀態(tài)指示。在內(nèi)置固件的USB設(shè)備方式下,當(dāng)USB 設(shè)備尚未配置或者取消配置后,該引腳輸出高電平;當(dāng)USB 設(shè)備配置完成后,該引腳輸出低電平。對(duì)于CH375A 芯片,在USB主機(jī)方式下,當(dāng)USB 設(shè)備斷開(kāi)后,該引腳輸出高電平;當(dāng)USB設(shè)備連接后,該引腳輸出低電平。CH375 的ACT#引腳可以外接串了限流電阻的發(fā)光二級(jí)管LED,用于指示相關(guān)的狀態(tài)。CH375 芯片的UD+和UD-引腳是USB 信號(hào)線,工作于USB 設(shè)備方式時(shí)

14、,應(yīng)該直接連接到USB總線上;工作于USB 主機(jī)方式時(shí),可以直接連接到USB設(shè)備。如果為了芯片安全而串接保險(xiǎn)電阻或者電感,那么交直流等效串聯(lián)電阻應(yīng)該在5之內(nèi)。CH375芯片內(nèi)置了電源上電復(fù)位電路,一般情況下,不需要外部提供復(fù)位。RSTI 引腳用于從外部輸入異步復(fù)位信號(hào);當(dāng)RSTI 引腳為高電平時(shí),CH375芯片被復(fù)位;當(dāng)RSTI 引腳恢復(fù)為低電平后,CH375會(huì)繼續(xù)延時(shí)復(fù)位20mS 左右,然后進(jìn)入正常工作狀態(tài)。為了在電源上電期間可靠復(fù)位并且減少外部干擾,可以在RSTI引腳與VCC 之間跨接一個(gè)容量為0.47uF 左右的電容。RST引腳和RST#引腳是復(fù)位狀態(tài)輸出引腳,分別是高電平有效和低電平有

15、效;當(dāng)CH375電源上電復(fù)位或者被外部強(qiáng)制復(fù)位以及復(fù)位延時(shí)期間,RST 引腳和RST#引腳分別輸出高電平和低電平;CH375復(fù)位完成后,RST 引腳和RST#引腳分別恢復(fù)到低電平和高電平。RST 和RST#引腳可以用于向外部單片機(jī)提供上電復(fù)位信號(hào)。 CH375芯片正常工作時(shí)需要外部為其提供12MHz 的時(shí)鐘信號(hào)。一般情況下,時(shí)鐘信號(hào)由CH375內(nèi)置的反相器通過(guò)晶體穩(wěn)頻振蕩產(chǎn)生。外圍電路只需要在XI 和XO 引腳之間連接一個(gè)標(biāo)稱頻率為12MHz的晶體,并且分別為XI 和XO 引腳對(duì)地連接一個(gè)高頻振蕩電容。如果從外部直接輸入12MHz時(shí)鐘信號(hào),那么應(yīng)該從XI 引腳輸入,而XO 引腳懸空。CH375

16、芯片支持5V電源電壓或者3.3V 電源電壓。當(dāng)使用5V 工作電壓時(shí),CH375 芯片的VCC引腳輸入外部5V 電源,并且V3 引腳應(yīng)該外接容量為0.01uF 左右的電源退耦電容。當(dāng)使用3.3V 工作電壓時(shí),CH375 芯片的V3引腳應(yīng)該與VCC引腳相連接,同時(shí)輸入外部的3.3V 電源,并且與CH375 芯片相連接的其它電路的工作電壓不能超過(guò)3.3V。3.6 內(nèi)部結(jié)構(gòu) CH375 芯片內(nèi)部集成了PLL 倍頻器、主從USB 接口SIE、數(shù)據(jù)緩沖區(qū)、被動(dòng)并行接口、異步串行接口、命令解釋器、控制傳輸?shù)膮f(xié)議處理器、通用的固件程序等。PLL 倍頻器用于將外部輸入的12MHz 時(shí)鐘倍頻到48MHz,作為US

17、B 接口SIE 時(shí)鐘。 主從USB 接口SIE是USB主機(jī)方式和USB設(shè)備方式的一體式SIE,用于完成物理的USB數(shù)據(jù)接收和發(fā)送,自動(dòng)處理位跟蹤和同步、NRZI編碼和解碼、位填充、并行數(shù)據(jù)與串行數(shù)據(jù)之間的轉(zhuǎn)換、CRC數(shù)據(jù)校驗(yàn)、事務(wù)握手、出錯(cuò)重試、USB 總線狀態(tài)檢測(cè)等。 數(shù)據(jù)緩沖區(qū)用于緩沖USB 接口SIE 收發(fā)的數(shù)據(jù)。 被動(dòng)并行接口用于與外部單片機(jī)/DSP/MCU 交換數(shù)據(jù)。 異步串行接口用于代替被動(dòng)并行接口與外部單片機(jī)/DSP/MCU 交換數(shù)據(jù)。 命令解釋器用于分析并執(zhí)行外部單片機(jī)/DSP/MCU 提交的各種命令。 控制傳輸?shù)膮f(xié)議處理器用于自動(dòng)處理常用的控制傳輸?shù)亩鄠€(gè)階段,簡(jiǎn)化外部固件編程

18、。 通用的固件程序包含兩組:一組用于USB 設(shè)備方式,自動(dòng)處理USB默認(rèn)端點(diǎn)0 的各種標(biāo)準(zhǔn)事務(wù)等;另一組用于USB 主機(jī)方式,自動(dòng)處理Mass-Storage 海量存儲(chǔ)設(shè)備的專用通訊協(xié)議。 CH375 芯片內(nèi)部具有7 個(gè)物理端點(diǎn): 端點(diǎn)0 是默認(rèn)端點(diǎn),支持上傳和下傳,上傳和下傳緩沖區(qū)各是8 個(gè)字節(jié); 端點(diǎn)1包括上傳端點(diǎn)和下傳端點(diǎn),上傳和下傳緩沖區(qū)各是8個(gè)字節(jié),上傳端點(diǎn)的端點(diǎn)號(hào)是81H,下傳端點(diǎn)的端點(diǎn)號(hào)是01H; 端點(diǎn)2 包括上傳端點(diǎn)和下傳端點(diǎn),上傳和下傳緩沖區(qū)各是64 個(gè)字節(jié),上傳端點(diǎn)的端點(diǎn)號(hào)是82H,下傳端點(diǎn)的端點(diǎn)號(hào)是02H; 主機(jī)端點(diǎn)包括輸出端點(diǎn)和輸入端點(diǎn),輸出和輸入緩沖區(qū)各是64 個(gè)字節(jié)

19、,主機(jī)端點(diǎn)與端點(diǎn)2合用同一組緩沖區(qū),主機(jī)端點(diǎn)的輸出緩沖區(qū)就是端點(diǎn)2 的上傳緩沖區(qū),主機(jī)端點(diǎn)的輸入緩沖區(qū)就是端點(diǎn)2 的下傳緩沖區(qū)。 CH375 的端點(diǎn)0、1、2 只用于USB 設(shè)備方式,在USB 主機(jī)方式下只需要用到主機(jī)端點(diǎn)。在USB 主機(jī)方式下,CH375 支持各種常用的USB 全速設(shè)備。USB 設(shè)備的端點(diǎn)號(hào)可以是015,兩個(gè)方向最多支持31 個(gè)端點(diǎn),USB 設(shè)備的包長(zhǎng)度可以是064 字節(jié)。 內(nèi)置固件可以處理Mass-Storage 海量存儲(chǔ)設(shè)備的通訊協(xié)議,要求USB 存儲(chǔ)設(shè)備支持Bulk-Only傳輸協(xié)議,支持SCSI、UFI、RBC或者等效的命令集,并且數(shù)據(jù)端點(diǎn)的最大包長(zhǎng)度是64 字節(jié),但

20、是默認(rèn)端點(diǎn)0 的最大包長(zhǎng)度可以是8、16、32 或者64 字節(jié)。如果USB 存儲(chǔ)設(shè)備不符合上述要求,則需要外部單片機(jī)通過(guò)控制傳輸以及ISSUE_TOKEN 命令或者ISSUE_TKN_X命令自行處理相關(guān)通訊協(xié)議。圖3 CH375芯片內(nèi)部中斷邏輯圖3.7 本地端的單片機(jī)軟件 CH375芯片占用兩個(gè)地址位,當(dāng)A0 引腳為高電平時(shí)選擇命令端口,可以寫(xiě)入命令;當(dāng)A0引腳為低電平時(shí)選擇數(shù)據(jù)端口,可以讀寫(xiě)數(shù)據(jù)。單片機(jī)通過(guò)8 位并口對(duì)CH375 芯片進(jìn)行讀寫(xiě),所有操作都是由一個(gè)命令碼、若干個(gè)輸入數(shù)據(jù)和若干個(gè)輸出數(shù)據(jù)組成,部分命令不需要輸入數(shù)據(jù),部分命令沒(méi)有輸出數(shù)據(jù)。命令操作步驟如下:、在A0=1 時(shí)向命令端

21、口寫(xiě)入命令代碼;、如果該命令具有輸入數(shù)據(jù),則在A0=0 時(shí)依次寫(xiě)入輸入數(shù)據(jù),每次一個(gè)字節(jié);、如果該命令具有輸出數(shù)據(jù),則在A0=0 時(shí)依次讀取輸出數(shù)據(jù),每次一個(gè)字節(jié);、命令完成,可以暫?;蛘咿D(zhuǎn)到繼續(xù)執(zhí)行下一個(gè)命令。 CH375芯片專門用于處理USB 通訊,在檢測(cè)到USB 總線的狀態(tài)變化時(shí)或者命令執(zhí)行完成后,CH375以中斷方式通知單片機(jī)進(jìn)行處理。單片機(jī)讀寫(xiě)U盤(pán)文件 圖4 單片機(jī)讀寫(xiě)U 盤(pán)文件 一般情況下,單片機(jī)或嵌入式系統(tǒng)處理USB 存儲(chǔ)設(shè)備的文件系統(tǒng)需要實(shí)現(xiàn)上圖左邊的4個(gè)層次,右邊是USB 存儲(chǔ)設(shè)備的內(nèi)部結(jié)構(gòu)層次。由于CH375 不僅是一個(gè)通用的USB-HOST 硬件接口芯片,還內(nèi)置了相關(guān)的固

22、件程序,包含了上圖左邊的3 個(gè)層次(標(biāo)為灰色部分),所以實(shí)際的單片機(jī)程序只需要處理FAT 文件系統(tǒng)層,并且即使這一層也可以由CH375 的U 盤(pán)文件級(jí)子程序庫(kù)實(shí)現(xiàn)。 如果不需要處理文件系統(tǒng),也就是不處理上圖左邊的最頂層,那么CH375 直接提供了數(shù)據(jù)塊的讀寫(xiě)接口,以512字節(jié)的物理扇區(qū)為基本讀寫(xiě)單位,從而將USB存儲(chǔ)設(shè)備簡(jiǎn)化為一種外部數(shù)據(jù)存儲(chǔ)器,單片機(jī)可以自由讀寫(xiě)USB 存儲(chǔ)設(shè)備中的數(shù)據(jù),也可以自由定義其數(shù)據(jù)結(jié)構(gòu)。由于計(jì)算機(jī)將USB 存儲(chǔ)設(shè)備組織為文件系統(tǒng),為了方便單片機(jī)通過(guò)USB移動(dòng)存儲(chǔ)設(shè)備與計(jì)算機(jī)之間交換數(shù)據(jù),單片機(jī)也可以將USB 存儲(chǔ)設(shè)備組織為文件系統(tǒng),也就是處理上圖左邊的最頂層。 CH

23、375以C語(yǔ)言子程序庫(kù)提供了USB存儲(chǔ)設(shè)備的文件級(jí)接口,這些應(yīng)用層接口API包含了常用的文件級(jí)操作,可以移植并嵌入到各種常用的單片機(jī)程序中。 CH375 的U 盤(pán)文件級(jí)子程序庫(kù)具有以下特性:支持常用的FAT12、FAT16 和FAT32 文件系統(tǒng),磁盤(pán)容量可達(dá)100GB 以上,支持多級(jí)子目錄,支持8.3 格式的大寫(xiě)字母和中文文件名,可以支持小寫(xiě)字母或者長(zhǎng)文件名,支持文件打開(kāi)、新建、刪除、讀寫(xiě)以及搜索等。 CH375 的文件級(jí)子程序庫(kù)需要大約600 字節(jié)的隨機(jī)存儲(chǔ)器RAM 作為緩沖區(qū)。以普通的MCS-51 單片機(jī)為例,文件系統(tǒng)的全部子程序有4KB 到8KB 代碼,并且需要大約80 字節(jié)的內(nèi)部RA

24、M 和512 字節(jié)的外部RAM 作為緩沖區(qū)。 四,串口版U盤(pán)讀寫(xiě)模塊的說(shuō)明 模塊具有兩個(gè)外部接口:P1 是USB 插座,可以直接插入U(xiǎn) 盤(pán)或者通過(guò)USB 延長(zhǎng)線連接U盤(pán),當(dāng)進(jìn)行程序升級(jí)或者重新配置時(shí)應(yīng)該通過(guò)USB 對(duì)連線連接計(jì)算機(jī)的USB 端口;P2 是16 腳的雙排針或者插座,用于連接單片機(jī)系統(tǒng)。圖5 串口版U盤(pán)模塊正反外觀圖 在串口方式下,單片機(jī)與模塊的P2 端口相連接,只需要使用高8 腳(第9 腳到第16腳),其余引腳可以不連接。模塊可以通過(guò)串行輸入SIN、串行輸出SOUT 連接到單片機(jī)的異步串口,除此之外,啟動(dòng)輸入STA#還應(yīng)該連接到單片機(jī)的一個(gè)I/O 引腳,而中斷輸出INT#可以根據(jù)

25、需要決定是否連接到單片機(jī)的中斷引腳。 模塊的串口是1 位起始位、8 位數(shù)據(jù)位、1位停止位的異步串口,串口的通訊波特率可以在功能配置時(shí)設(shè)定,如果未設(shè)定那么默認(rèn)是4800bps(與晶體X2 的頻率有關(guān)),單片機(jī)系統(tǒng)可以根據(jù)需要通過(guò)CMD_BaudRate 命令設(shè)定更高的波特率。如果在功能配置時(shí)選擇檢查串口超時(shí),那么在通過(guò)串口輸入命令包時(shí),模塊會(huì)檢查串口數(shù)據(jù)輸入超時(shí),如果連續(xù)兩個(gè)數(shù)據(jù)字節(jié)之間的間隔大于串口輸入超時(shí)時(shí)間,則模塊將放棄該命令包。 4+1 線串口是指GND、SIN、SOUT、STA#和可選的INT#,P2 引腳定義如下:圖6 模塊引腳定義圖 為了節(jié)約單片機(jī)的I/O 引腳,模塊還支持三線制串

26、口,在這種方式下,單片機(jī)與模塊之間只需要連接SIN 和SOUT 兩根信號(hào)線及公共地線,單片機(jī)通過(guò)串口發(fā)送兩個(gè)同步碼字節(jié)(57H、ABH)代替原來(lái)向模塊的STA#引腳提供的啟動(dòng)信號(hào),實(shí)現(xiàn)與模塊的命令同步。在通過(guò)串口輸入兩個(gè)同步碼字節(jié)時(shí),模塊會(huì)檢查串口數(shù)據(jù)輸入超時(shí),如果連續(xù)兩個(gè)數(shù)據(jù)字節(jié)之間的間隔大于串口輸入超時(shí)時(shí)間,則模塊將放棄該同步碼及命令包。圖7 TTL電平轉(zhuǎn)RS232電平經(jīng)行通信的串口模塊電路圖 圖8 串口版模塊與單片機(jī)之間的電路連接圖圖9 單片機(jī)系統(tǒng)串口與RS232借口連接電路圖圖10 單片機(jī)系統(tǒng)和模塊之間連接的實(shí)物圖六,軟件設(shè)計(jì) 為了使上位PC 機(jī)能夠直接讀取該讀寫(xiě)器寫(xiě)入U(xiǎn) 盤(pán)的數(shù)據(jù),數(shù)

27、據(jù)存儲(chǔ)按照FAT32 文件管理方式存儲(chǔ),其中涉及USB 和UFI 協(xié)議以及FAT32 文件存儲(chǔ)格式。6.1 USB協(xié)議 USB(通用串行總線)用于將USB 接口的外圍設(shè)備(device)連接到主機(jī)(host),實(shí)現(xiàn)二者之間數(shù)據(jù)傳輸?shù)耐獠靠偩€結(jié)構(gòu),是一種快速、靈活的總線接口,USB 的傳輸類型有控制(control)、批量(bulk)、中斷(interrupt)和同步(synchronous)傳輸4 種,它最大的特點(diǎn)是易于使用,即插即用,主要是用在中速和低速的外設(shè)。 控制數(shù)據(jù)用于在USB 接入總線時(shí)對(duì)其進(jìn)行配置,其他的驅(qū)動(dòng)軟件可以根據(jù)具體的應(yīng)用來(lái)選擇使用控制傳輸,這種數(shù)據(jù)傳輸不會(huì)丟失數(shù)據(jù)。 典型

28、的批量數(shù)據(jù)包括象使用打印機(jī)或掃描儀時(shí)所出現(xiàn)的大數(shù)據(jù)量的數(shù)據(jù),這種批量數(shù)據(jù)是連續(xù)的,通過(guò)在硬件中實(shí)現(xiàn)差錯(cuò)檢測(cè)功能,并且有選擇地進(jìn)行一定的應(yīng)進(jìn)重試操作,可以在硬件層次上保證數(shù)據(jù)的可靠交換。 由設(shè)備自發(fā)產(chǎn)生的數(shù)據(jù)傳輸是中斷數(shù)據(jù)傳輸,這類數(shù)據(jù)傳輸可以由USB 設(shè)備在任意時(shí)刻發(fā)起,而且USB 總線以不低于設(shè)備說(shuō)明的速率進(jìn)行傳輸。 同步數(shù)據(jù)在產(chǎn)生、傳送和處理過(guò)程中是連續(xù)的和實(shí)時(shí)的,在穩(wěn)定的同步數(shù)據(jù)發(fā)送和接收速率中包含了相應(yīng)的時(shí)鐘信息,為了保持定時(shí)關(guān)系,同步數(shù)據(jù)必須按照接收的速率進(jìn)行傳輸。6.2 BULK_ONLY 和UFI 協(xié)議 USB 設(shè)備分為5 大類,即顯示器、通信設(shè)備、音頻設(shè)備、人機(jī)輸入和海量存儲(chǔ)。

29、通常所用的U 盤(pán)、移動(dòng)硬盤(pán)均屬于海量存儲(chǔ)類。海量存儲(chǔ)類的規(guī)范中包括4 個(gè)獨(dú)立的子規(guī)范,即CBI 傳輸、Bulk-Only 傳輸、ATA 命令塊、UFI 命令規(guī)范。前兩個(gè)協(xié)議定義了數(shù)據(jù)/命令/狀態(tài)在USB 總線上的傳輸方法,Bulk-Only 傳輸協(xié)議僅僅使用Bulk 端點(diǎn)傳送數(shù)據(jù)/命令/狀態(tài),CBI 傳輸協(xié)議則使用Control/bulk/interrupt 三種類型的端點(diǎn)進(jìn)行數(shù)據(jù)/命令/狀態(tài)的傳送。后兩個(gè)協(xié)議定義了存儲(chǔ)介質(zhì)的操作命令,ATA 協(xié)議用于硬盤(pán),UFI 協(xié)議則針對(duì)USB 移動(dòng)存儲(chǔ),U盤(pán)讀寫(xiě)器的設(shè)計(jì)遵循Bulk-Only 傳輸協(xié)議和UFI 命令規(guī)范。UFI 命令塊規(guī)范是針對(duì)USB 移

30、動(dòng)存儲(chǔ)而制定的,它總共定義了19 個(gè)12 字節(jié)長(zhǎng)度的操作命令。 Bulk-Only 事務(wù)以主機(jī)向設(shè)備發(fā)送CBW(Command Block Warp)包,并以建立相應(yīng)的數(shù)據(jù)傳輸開(kāi)始的,設(shè)備接收到CBW 包,檢查并解釋它,試圖滿足主機(jī)的要求,并通過(guò)CSW(Command State Wrap)包向主機(jī)返回狀態(tài)信息。 CBW 是主機(jī)通過(guò)Bulk-Out 端點(diǎn)向設(shè)備發(fā)送的命令塊包,在CBW 中使用方向位和數(shù)據(jù)傳輸長(zhǎng)度域指明期待的傳輸,CBW 必須起始于包邊界,并且必須以31 字節(jié)的短包傳輸結(jié)束,相繼的數(shù)據(jù)包和CSW 包必須開(kāi)始于一個(gè)新的包邊界,所有的CBW 包必須按低字節(jié)在前的次序傳輸。CBW包結(jié)構(gòu)

31、如圖所示,各域含義如下: 圖10 CBW包結(jié)構(gòu)1)命令塊包標(biāo)識(shí)。CBW 包標(biāo)記,表明這是一個(gè)CBW 包,這個(gè)域的值為43425355H。2)命令塊標(biāo)記。當(dāng)設(shè)備返回相應(yīng)的CSW 包時(shí),必須使命令狀態(tài)標(biāo)記域的值與此值相同。3)數(shù)據(jù)傳輸長(zhǎng)度。指明命令執(zhí)行期間在Bulk 端點(diǎn)上傳數(shù)據(jù)的字節(jié)長(zhǎng)度,如果這個(gè)域的值是0,則在CBW 和CSW 之間設(shè)備和主機(jī)不傳輸任何數(shù)據(jù),并且設(shè)備將忽略在命令塊標(biāo)旗域中的方向位的值。4)命令塊標(biāo)旗。方向位規(guī)定了Bulk 端點(diǎn)數(shù)據(jù)傳輸?shù)姆较?,其他位預(yù)留。5)邏輯單元號(hào)。指定命令塊被發(fā)送到的邏輯單元號(hào),如果設(shè)備不支持多個(gè)邏輯單元號(hào),則主機(jī)將這個(gè)域設(shè)置為0。6)CBWCB 長(zhǎng)度,定

32、義了CBWCB 的有效長(zhǎng)度,合法值為1-16。7)CBWCB。由設(shè)備執(zhí)行的命令,由設(shè)備解釋。CSW 向主機(jī)表明來(lái)自于CBW 包的命令塊的執(zhí)行狀態(tài)。設(shè)備收到CBW 包解析處理后將通過(guò)Bulk-In 端點(diǎn)發(fā)送一個(gè)CSW 包。CSW 開(kāi)始于包邊界,并以13 字節(jié)的短包結(jié)束,結(jié)構(gòu)如圖所示,各域含義如下: 圖11 命令狀態(tài)包結(jié)構(gòu)1)命令狀態(tài)包標(biāo)識(shí)。CSW 包的標(biāo)記,表明這是一個(gè)CSW 包,這個(gè)域的值為53425355H。2)命令狀態(tài)標(biāo)記。次域的值域CBW 包的命令塊標(biāo)記相同。3)數(shù)據(jù)殘余。實(shí)際數(shù)據(jù)傳輸量與CBW 包中規(guī)定的數(shù)據(jù)傳輸長(zhǎng)度的差值。4)命令執(zhí)行狀態(tài),表明命令成功或失敗信息,如果命令執(zhí)行成功,則

33、設(shè)備將設(shè)置此域的值為0,非0 值;則表明失敗或錯(cuò)誤。 UFI 是針對(duì)USB 移動(dòng)存儲(chǔ)而制定的命令塊協(xié)議,它規(guī)定了主機(jī)和設(shè)備進(jìn)行信息交換所使用的命令塊、數(shù)據(jù)和狀態(tài)信息,Bulk-Only 傳輸協(xié)議定義了傳輸這些信息的方法,其中UFI 命令塊是封裝在CBW 包中的CBWCB,設(shè)備通過(guò)讀取CBWCB 確定具體要執(zhí)行何種操作命令(如讀命令),如何完成這個(gè)命令(如從閃存的哪個(gè)地址讀,需要讀取的長(zhǎng)度),設(shè)備將命令的執(zhí)行狀態(tài)封裝成CSW 返回給主機(jī)。 UFI 用于大多數(shù)命令的12 字節(jié)命令塊的描述,結(jié)構(gòu)如圖4 所示,其中各參數(shù)意義如下:1)操作命令代碼。指明所需要執(zhí)行的操作命令;2)邏輯單元號(hào)。指明命令將發(fā)

34、送到哪個(gè)邏輯單元,如果設(shè)備只有一個(gè)邏輯單元,則此域的值為0。3)邏輯塊地址。命令操作的起始地址。4)傳輸長(zhǎng)度,指明請(qǐng)求傳輸?shù)臄?shù)據(jù)量,通常以扇區(qū)作單位,但是有幾個(gè)命令是以字節(jié)作單位的,對(duì)于這些命令,傳輸長(zhǎng)度域可以以不同的名字標(biāo)識(shí),若此域的值為0,則表面沒(méi)有數(shù)據(jù)需要傳輸。5)參數(shù)列表長(zhǎng)度,用于指定發(fā)送到設(shè)備的字節(jié)數(shù),這個(gè)域典型的應(yīng)用于發(fā)送到設(shè)備的參數(shù)命令塊(如模式參數(shù)、診斷參數(shù)等),若此域的值為0,則表面沒(méi)有數(shù)據(jù)需要傳輸。6)分配長(zhǎng)度,指明主機(jī)已經(jīng)分配的用于返回?cái)?shù)據(jù)的最大字節(jié)長(zhǎng)度,若此值為0,則表明沒(méi)有數(shù)據(jù)需要傳輸。6.3 FAT32 FAT 是Microsoft 較早推出的文件系統(tǒng),具有高度的兼

35、容性,目前仍然廣泛應(yīng)用于個(gè)人電腦尤其是移動(dòng)存儲(chǔ)設(shè)備中,F(xiàn)AT 由引導(dǎo)扇區(qū)、FAT1 表、FAT2 表、目錄和文件區(qū)組成(其中FAT2 表是FAT1 表的備份)。磁盤(pán)的管理是以扇區(qū)為單位的,而移動(dòng)存儲(chǔ)設(shè)備則是以塊為單位的,F(xiàn)AT 將塊映射成扇區(qū),原理相同,F(xiàn)AT 將磁盤(pán)空間以一定數(shù)目的扇區(qū)為單位進(jìn)行劃分,這樣的單位成為簇。通常情況下,每扇區(qū)512 字節(jié)的原則是不變的,簇的大小一般是2n(n 為整數(shù))個(gè)扇區(qū)的大小。所以以簇為單位而不以扇區(qū)為單位進(jìn)行磁盤(pán)的分配,是因?yàn)楫?dāng)區(qū)分容量較大時(shí),采用512 字節(jié)的扇區(qū)管理,會(huì)增加FAT 表的項(xiàng)數(shù)和大文件存取的消耗,使文件系統(tǒng)效率不高。 引導(dǎo)扇區(qū)DBR(DOS

36、Boot Record)通常占用分區(qū)的第0 扇區(qū),共512 字節(jié),F(xiàn)AT 表緊隨其后。DBR 的第一部分是一個(gè)x86 跳轉(zhuǎn)指令、廠商標(biāo)志和操作系統(tǒng)版本號(hào),接下來(lái)的從偏移0 x0B 開(kāi)始的是一段描述能夠使可執(zhí)行引導(dǎo)代碼找到相關(guān)參數(shù)的消息,通常稱之為BPB。最后是引導(dǎo)程序代碼以及扇區(qū)結(jié)束標(biāo)志。BPB 中記錄了扇區(qū)大小、簇的扇區(qū)數(shù)、保留扇區(qū)數(shù)、FAT 表大小和文件系統(tǒng)類型等重要參數(shù),用于文件的索引和定位計(jì)算。7.4 軟件系統(tǒng)模塊 USB 讀寫(xiě)器軟件由主模塊、USB 模塊、BULK 模塊、FAT 模塊和中斷處理模塊組成。各模塊之間相互協(xié)調(diào)調(diào)用,共同完成對(duì)U 盤(pán)文件的讀寫(xiě)創(chuàng)建。 USB 模塊負(fù)責(zé)檢測(cè)US

37、B 設(shè)備的移入/移出,對(duì)插入的設(shè)備進(jìn)行枚舉,分配設(shè)備地址端點(diǎn)號(hào),配置設(shè)備接口端點(diǎn)描述符,建立BULK_ONLY 輸入/輸出通道,BULK 模塊則在已建立的BULK_ONLY 輸入/輸出通道發(fā)送CBW 數(shù)據(jù)包,并接收CSW 數(shù)據(jù)包,通過(guò)CBW 中嵌入的CBWCB 信息確定對(duì)U 盤(pán)讀/寫(xiě)操作的扇區(qū)位置和大小,F(xiàn)AT 模塊主要完成簇和扇區(qū)間的索引定位,即在U 盤(pán)內(nèi)尋址,利用BPB 中的參數(shù)計(jì)算給定扇區(qū)的所在簇以及進(jìn)入休眠狀態(tài),等待外部中斷喚醒。 中斷處理模塊是在中斷喚醒后根據(jù)中斷類型進(jìn)入不同功能子模塊的,也是整個(gè)軟件系統(tǒng)的核心部分。中斷模塊接收到串口或并口數(shù)據(jù)后,根據(jù)內(nèi)部命令字要求進(jìn)行解析。 串口或

38、并口數(shù)據(jù)接收流程如圖所示。 圖12 UFI結(jié)構(gòu) 圖13 命令與數(shù)據(jù)字結(jié)構(gòu)七,總結(jié) 此次科研立項(xiàng)是我們從大學(xué)生活重要的一步。從最初的選題,開(kāi)題到查資料、設(shè)計(jì)電路,編寫(xiě)程序直到完成設(shè)計(jì)。其間,查找資料,老師指導(dǎo),與同學(xué)交流,反復(fù)修改電路和程序,每一個(gè)過(guò)程都是對(duì)自己能力的一次檢驗(yàn)和充實(shí)。 通過(guò)這次實(shí)踐,我了解了單片機(jī)讀寫(xiě)U 盤(pán)的用途及工作原理,熟悉了單片機(jī)讀寫(xiě)U 盤(pán)的設(shè)計(jì)步驟,鍛煉了工程設(shè)計(jì)實(shí)踐能力,培養(yǎng)了自己獨(dú)立設(shè)計(jì)能力。此次科研立項(xiàng)是對(duì)我專業(yè)知識(shí)和專業(yè)基礎(chǔ)知識(shí)一次實(shí)際檢驗(yàn)和鞏固,同時(shí)也是我為未來(lái)的單片機(jī)和嵌入式開(kāi)發(fā)與應(yīng)用的的一次熱身。 通過(guò)這次科研立項(xiàng)收獲很多,比如學(xué)會(huì)了查找相關(guān)資料相關(guān)標(biāo)準(zhǔn),分

39、析數(shù)據(jù),提高了自己的電路設(shè)計(jì)和程序設(shè)計(jì)的能力,懂得了許多經(jīng)驗(yàn)公式的獲得是前人不懈努力的結(jié)果。同時(shí),仍有很多課題需要后來(lái)人去努力去完善。 但是這次科研立項(xiàng)也暴露出自己專業(yè)基礎(chǔ)的很多不足之處。比如缺乏綜合應(yīng)用專業(yè)知識(shí)的能力,對(duì)集成芯片的不了解等等。這次科研立項(xiàng)是對(duì)自己到現(xiàn)在為止大學(xué)所學(xué)的一次大檢閱,使我明白自己知識(shí)還很淺薄,雖然大學(xué)生活已經(jīng)過(guò)了一大半,但是自己的求學(xué)之路還很長(zhǎng),以后更應(yīng)該在有限的大學(xué)生活學(xué)習(xí)中,努力的學(xué)習(xí)好專業(yè)文化知識(shí)和動(dòng)手能力,同時(shí)也要提高自己各方面的綜合素質(zhì),努力使自己成為一個(gè)對(duì)社會(huì)有所貢獻(xiàn)的人。參考文獻(xiàn):【1】基于單片機(jī)的智能系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 沈紅衛(wèi)著,電子工業(yè)出版社【2】單片

40、機(jī)技術(shù)應(yīng)用朱運(yùn)利著,機(jī)械工業(yè)出版社【3】MCS-51 單片機(jī)開(kāi)發(fā)與應(yīng)用指南孫永浩著 黑龍江科學(xué)技術(shù)出版社【4】EZ-USB FX2單片機(jī)原理,編程及應(yīng)用錢峰著,北京航空航天大學(xué)出版社【5】CH375中文技術(shù)手冊(cè)【6】串口版U盤(pán)讀寫(xiě)模塊中文技術(shù)手冊(cè)附錄:以下程序可以演示單片機(jī)以字節(jié)的方式讀寫(xiě)U盤(pán),該程序?qū)崿F(xiàn)的功能是:打開(kāi)U盤(pán)中的一個(gè)文件EXAMBYTE.TXT,再新建一個(gè)文件NEWFILE.TXT,在NEWFILE.TXT文件中寫(xiě)入“Note:這個(gè)程序是以字節(jié)為單位進(jìn)行U盤(pán)文件讀寫(xiě)的示例程序,首先從原文件中讀出前20個(gè)字符,然后寫(xiě)到本說(shuō)明的后面:”然后從文件EXAMBYTE.TXT中讀取前20字

41、節(jié)的數(shù)據(jù),寫(xiě)入文件NEWFILE.TXT中。即可實(shí)現(xiàn)單片機(jī)以字節(jié)對(duì)U盤(pán)讀和寫(xiě)的功能。#include #include #include #include #define MAX_PATH_LEN32#include unsigned charTempLength;unsigned char idataTempBuffer20;CMD_PARAMidatamCmdParam;sbitLED_OUT=P04;sbit p2_0=P20;voidmDelaymS( unsigned char delay )unsigned chari, j, c;for ( i = delay; i != 0;

42、i - ) for ( j = 200; j != 0; j - ) c += 3; for ( j = 200; j != 0; j - ) c += 3; voidmSendByte( unsigned char c )/* 發(fā)送一個(gè)字節(jié)數(shù)據(jù)給CH375模塊 */TI = 0;SBUF = c;while ( TI = 0 );unsigned charmRecvByte( )/* 從CH375模塊接收一個(gè)字節(jié)數(shù)據(jù) */unsigned charc; while ( RI = 0 );c = SBUF; RI = 0;return( c );unsigned charExecCommand

43、( unsigned char cmd, unsigned char len )/* 命令函數(shù) */unsigned chari, j, status; mSendByte( SER_SYNC_CODE1 ); mSendByte( SER_SYNC_CODE2 ); mSendByte( cmd ); mSendByte( len ); RI = 0; if ( len ) for ( i = 0; i != len; i + ) mSendByte( mCmdParam.Other.mBuffer i ); while ( 1 ) status = mRecvByte(); if ( st

44、atus = ERR_SUCCESS ) i = mRecvByte( ); LED_OUT = 0; if ( i ) j = 0; do mCmdParam.Other.mBuffer j = mRecvByte( ); j +; while ( - i ); break; else if ( status = USB_INT_DISK_READ | status = USB_INT_DISK_WRITE | status = USB_INT_DISK_RETRY ) break; else if ( status = ERR_DISK_DISCON | status = ERR_USB_

45、CONNECT ) mDelaymS( 100 ); break; return( status );voidmStopIfError( unsigned char iError )/*錯(cuò)誤檢測(cè)函數(shù)*/ unsigned charled; if ( iError = ERR_SUCCESS ) return; led=0; while ( 1 ) LED_OUT = led&1; /* LED閃爍 */mDelaymS( 100 );led=1;main( ) unsigned chari; unsigned shortcount;unsigned char*pStr; mDelaymS( 5

46、00 );p2_0=0;LED_OUT = 0; mDelaymS( 100 ); mDelaymS( 100 );LED_OUT = 1; SCON = 0 x50;PCON = 0 x80;TMOD = 0 x20;TH1 = 0 xE8;/* 22.1184MHz晶振, 4800bps */TR1 = 1;while ( 1 ) /* 程序中使用查詢方式查詢模塊狀態(tài),和向模塊發(fā)送同步碼啟動(dòng)操作,然后發(fā)送相關(guān)的命令 */ while ( 1 ) i = ExecCommand( CMD_QueryStatus, 0 ); mStopIfError( i ); if ( mCmdParam.

47、Status.mDiskStatus = DISK_CONNECT ) break; mDelaymS( 100 ); mDelaymS( 500 ); LED_OUT = 0;for ( i = 0; i 5; i + ) mDelaymS( 100 );if ( ExecCommand( CMD_DiskReady, 0 ) = ERR_SUCCESS ) break;/* 讀取原文件 */ strcpy( mCmdParam.Open.mPathName, EXAMBYTE.TXT ); i = ExecCommand( CMD_FileOpen, MAX_PATH_LEN ); Tem

48、pLength = 0; if ( i = ERR_MISS_DIR | i = ERR_MISS_FILE ) /* 找不到文件或者出錯(cuò) */ else mStopIfError( i ); mCmdParam.ByteRead.mByteCount = 20; i = ExecCommand( CMD_ByteRead, 1 ); mStopIfError( i ); TempLength = mCmdParam.ByteRead.mByteCount; memcpy( TempBuffer, mCmdParam.ByteRead.mByteBuffer, TempLength ); mC

49、mdParam.Close.mUpdateLen = 0;i = ExecCommand( CMD_FileClose, 1 ); mStopIfError( i ); /* 產(chǎn)生新文件 */ strcpy( mCmdParam.Create.mPathName, NEWFILE.TXT ); i = ExecCommand( CMD_FileCreate, MAX_PATH_LEN ); mStopIfError( i ); pStr = Note:這個(gè)程序是以字節(jié)為單位進(jìn)行U盤(pán)文件讀寫(xiě)的示例程序,首先從原文件中讀出前20個(gè)字符,然后寫(xiě)到本說(shuō)明的后面:; count = strlen( pS

50、tr ); while ( count ) if ( count sizeof( mCmdParam.ByteWrite.mByteBuffer ) ) i = count; else i = sizeof( mCmdParam.ByteWrite.mByteBuffer ); /* 數(shù)據(jù)較多,分多次寫(xiě)入 */ count -= i; memcpy( mCmdParam.ByteWrite.mByteBuffer, pStr, i ); pStr += i; mCmdParam.ByteWrite.mByteCount = i; i = ExecCommand( CMD_ByteWrite,

51、1+i );/* 以字節(jié)為單位向文件寫(xiě)入數(shù)據(jù) */ mStopIfError( i ); memcpy( mCmdParam.ByteWrite.mByteBuffer, TempBuffer, TempLength ); mCmdParam.ByteWrite.mByteCount = TempLength; /* 將原文件中的20個(gè)字節(jié)的數(shù)據(jù)添加到新文件的末尾 */ i = ExecCommand( CMD_ByteWrite, 1+TempLength ); mStopIfError( i ); mCmdParam.Close.mUpdateLen = 1; i = ExecComman

52、d( CMD_FileClose, 1 ); /* 關(guān)閉文件*/ mStopIfError( i ); p2_0=1; LED_OUT = 1; /* LED滅 */* 等待U盤(pán)斷開(kāi) */ while ( 1 ) i = ExecCommand( CMD_QueryStatus, 0 ); mStopIfError( i );if ( mCmdParam.Status.mDiskStatus = DISK_DISCONNECT ) break; mDelaymS( 100 ); 基于單片機(jī)的U盤(pán)數(shù)據(jù)傳輸裝置 機(jī)電工程學(xué)院測(cè)控技術(shù)與儀器專業(yè) 李朋飛 摘要:隨著單片機(jī)技術(shù)的發(fā)展,各種嵌入式系統(tǒng)的逐

53、漸應(yīng)用于工作現(xiàn)場(chǎng)的數(shù)據(jù)采集和控制之中。USB總線技術(shù)的發(fā)展,使得數(shù)據(jù)傳輸和采集技術(shù),變得簡(jiǎn)單,易攜和方便使用?;赨SB總線技術(shù)的USB儲(chǔ)存設(shè)備簡(jiǎn)稱U盤(pán),它具有支持熱拔熱插,儲(chǔ)存量大,耐用,和輕巧方便的特點(diǎn)?;趩纹瑱C(jī)技術(shù)的U盤(pán)數(shù)據(jù)采集是把單片機(jī)系統(tǒng)作為主機(jī)系統(tǒng),再利用支持USB總線協(xié)議的U盤(pán)讀寫(xiě)芯片或者模塊來(lái)完成工業(yè)現(xiàn)場(chǎng)的數(shù)據(jù)采集或者傳輸。這樣,便可以把U盤(pán)的大容量存儲(chǔ),方便易用的功能從PC機(jī)系統(tǒng)擴(kuò)展到單片機(jī)系統(tǒng)中,可以方便在室外進(jìn)行大量數(shù)據(jù)的采集。例如,可以將單片機(jī)系統(tǒng)中AD轉(zhuǎn)換后采集到的數(shù)據(jù),儲(chǔ)存到U盤(pán)之中,以便于利用計(jì)算機(jī)對(duì)數(shù)據(jù)經(jīng)行整理或分析。本文主要介紹一種技術(shù)成熟U盤(pán)讀寫(xiě)芯片CH3

54、75和以此芯片為核心的U盤(pán)讀寫(xiě)模塊,簡(jiǎn)單介紹了CH375芯片的構(gòu)造和特點(diǎn),以及U盤(pán)模塊的應(yīng)用特點(diǎn)。再次,介紹了串口版U盤(pán)模塊的應(yīng)用,并設(shè)計(jì)了串口模塊和單片機(jī)之間的通信的應(yīng)用方式,并附有模塊和單片機(jī)之間采用RS232電平進(jìn)行通信的連接電路圖。同時(shí),還簡(jiǎn)單的介紹了,U盤(pán)讀寫(xiě)之中需要注意的幾個(gè)協(xié)議等。最后附錄中的程序提供了一個(gè)能夠?qū)崿F(xiàn)單片機(jī)以字節(jié)的方式對(duì)U盤(pán)的讀和寫(xiě)的程序。關(guān)鍵詞:?jiǎn)纹瑱C(jī) U盤(pán) USB2.0 U盤(pán)模塊 串口 通信 RS232接口 CH375 電平引言半導(dǎo)體技術(shù)的發(fā)展帶來(lái)計(jì)算機(jī)向微型化發(fā)展的革命,同時(shí)隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,USB(Universal Serial Bus)存儲(chǔ)設(shè)備的

55、使用已經(jīng)非常普遍,USB 用于將適用USB 的外圍設(shè)備(device)連接到主機(jī)(host),實(shí)現(xiàn)二者之間數(shù)據(jù)傳輸?shù)耐獠靠偩€結(jié)構(gòu);是一種快速、靈活的總線接口。它最大的特點(diǎn)是易于使用,攜帶方便,主要是用在中速,低速的外設(shè)。隨著USB 規(guī)范的完善和成熟,USB 外設(shè)的種類不斷豐富,應(yīng)用領(lǐng)域也不斷擴(kuò)大。在傳統(tǒng)的應(yīng)用中,主要是PC 扮演著主機(jī)的角色。根據(jù)USB 的規(guī)范,可以看到在USB 的拓樸結(jié)構(gòu)中居于核心地位的是主機(jī),每一次的數(shù)據(jù)傳輸都必須由主機(jī)發(fā)起和控制。但是隨著單片機(jī)產(chǎn)品應(yīng)用領(lǐng)域的日益增長(zhǎng),USB 外設(shè)的應(yīng)用范圍也隨之?dāng)U大,為此在單片機(jī)系統(tǒng)中實(shí)現(xiàn)對(duì)USB外設(shè)控制也變得日益迫切。因此在一些需要轉(zhuǎn)存

56、數(shù)據(jù)的設(shè)備,儀器上使用USB移動(dòng)存儲(chǔ)設(shè)備接口的芯片便相繼產(chǎn)生了,CH375 就是其中之一,它是一個(gè)USB 總線的通用接口芯片,支持HOST 主機(jī)方式和SLAVE 設(shè)備方式。如今的USB 就象當(dāng)日的RS232,最終發(fā)展必是業(yè)界的主流外設(shè)接口技術(shù)。USB 有著其它接口不可替代的優(yōu)勢(shì)。隨著USB 技術(shù)的發(fā)展,計(jì)算機(jī)的移動(dòng)存儲(chǔ)介質(zhì)普遍采用U 盤(pán)或移動(dòng)硬盤(pán)。如今,USB 技術(shù)已經(jīng)越來(lái)越普及和成熟,低成本、高穩(wěn)定性、較高的數(shù)據(jù)傳輸速率和即插即用的方便性,使其備受硬件廠商的青睞。隨著數(shù)據(jù)采集和單片機(jī)用戶對(duì)移動(dòng)存儲(chǔ)的需求越來(lái)越大,具有USB 接口的存儲(chǔ)設(shè)備以其優(yōu)異的性價(jià)比和靈活性常用來(lái)進(jìn)行數(shù)據(jù)的存儲(chǔ)和交換,所

57、以在單片機(jī)系統(tǒng)中實(shí)現(xiàn)對(duì)優(yōu)盤(pán)或移動(dòng)硬盤(pán)的直接讀寫(xiě)是非常有價(jià)值的。研究的意義 USB是近年發(fā)展起來(lái)的一種快速、靈活的總線接口。它最大的特點(diǎn)是易于使用、可熱插拔、接口連接靈活,并且能夠提供外設(shè)電源,在嵌人式系統(tǒng)及智能儀表中得到廣泛的應(yīng)用。而51系列單片機(jī)以其優(yōu)越的性能、成熟的技術(shù)、高性價(jià)比被廣應(yīng)用于測(cè)控儀器等自動(dòng)化領(lǐng)域。因此用51系列單片機(jī)實(shí)現(xiàn)USB主機(jī)接口,進(jìn)而實(shí)現(xiàn)對(duì)USB外設(shè)的控制,對(duì)提高整個(gè)系統(tǒng)的數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)傳輸、設(shè)備控制等性能都有很大的作用。根據(jù)我們的調(diào)查和了解,我們發(fā)現(xiàn),隨著Flash Memory非易失存儲(chǔ)技術(shù)的發(fā)展,基于USB接口的閃存即U盤(pán)現(xiàn)已得到廣泛應(yīng)用。從理論上講,以U盤(pán)作為便

58、攜式采集存儲(chǔ)系統(tǒng)的存儲(chǔ)載體完全能夠滿足長(zhǎng)時(shí)間采集海量數(shù)據(jù)的要求。但目前所面臨的問(wèn)題是,U盤(pán)主要應(yīng)用于PC機(jī)系統(tǒng)中。以單片機(jī)等微處理器為核心的嵌入式系統(tǒng)的應(yīng)用中,尚缺少與U盤(pán)的直接接口技術(shù)。因此將單片機(jī)技術(shù)與U盤(pán)存儲(chǔ)技術(shù)兩者結(jié)合起來(lái),利用單片機(jī)直接讀寫(xiě)U盤(pán),并通過(guò)總線方式與嵌入式系統(tǒng)的其它部分實(shí)現(xiàn)命令和數(shù)據(jù)的通信。采用單片機(jī)直接控制讀寫(xiě)U盤(pán),關(guān)鍵在于USB-HOST技術(shù)的實(shí)現(xiàn),即單片機(jī)作為USB主機(jī)系統(tǒng)。USB系統(tǒng)包括兩部分:USB主機(jī)和USB外設(shè),它們組合在一起就構(gòu)成了完整的USB系統(tǒng)。USB的拓?fù)浣Y(jié)構(gòu)中居于核心地位的是Host(也稱為主機(jī)),任何一次USB的數(shù)據(jù)傳輸都必須由主機(jī)來(lái)發(fā)起和控制,

59、所有的USB外設(shè)都只能和主機(jī)建立連接,任何兩個(gè)外設(shè)之間或是兩個(gè)主機(jī)之間無(wú)法直接通信。鑒于復(fù)雜的USB協(xié)議,我們覺(jué)得可以采用USB讀寫(xiě)模塊,這樣只要將USB讀寫(xiě)模塊嵌入到用戶單片機(jī)系統(tǒng)中,就可以通過(guò)單片機(jī)的串口與USB讀寫(xiě)模塊之間的通信,進(jìn)而讀寫(xiě)U盤(pán)里面的數(shù)據(jù),還可以方便的利用U盤(pán)儲(chǔ)存海量的AD轉(zhuǎn)換后的數(shù)據(jù)等。三 , USB總線接口芯片CH3753.1 概述: CH375 是一個(gè)USB總線的通用接口芯片,支持USB-HOST主機(jī)方式和USB-DEVICE/SLAVE設(shè)備方式。在本地端,CH375具有8位數(shù)據(jù)總線和讀、寫(xiě)、片選控制線以及中斷輸出,可以方便地掛接到單片機(jī)/DSP/MCU/MPU等控制

60、器的系統(tǒng)總線上。在USB主機(jī)方式下,CH375還提供了串行通訊方式,通過(guò)串行輸入、串行輸出和中斷輸出與單片機(jī)/DSP/MCU/MPU 等相連接。CH375的USB 主機(jī)方式支持常用的USB 全速設(shè)備,外部單片機(jī)可以通過(guò)CH375 按照相應(yīng)的USB 協(xié)議與USB 設(shè)備通訊。CH375 還內(nèi)置了處理Mass-Storage 海量存儲(chǔ)設(shè)備的專用通訊協(xié)議的固件,外部單片機(jī)可以直接以扇區(qū)為基本單位讀寫(xiě)常用的USB 存儲(chǔ)設(shè)備(包括USB 硬盤(pán)/USB閃存盤(pán)/U 盤(pán))3.2 特點(diǎn) 1)全速USB-HOST 主機(jī)接口,兼容USB V2.0,外圍元器件只需要晶體和電容。 2)全速設(shè)備接口,完全兼容CH372 芯

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論