新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于U盤(pán)的單片機(jī)低功耗海量存儲(chǔ)系統(tǒng)

基于U盤(pán)的單片機(jī)低功耗海量存儲(chǔ)系統(tǒng)

作者: 時(shí)間:2009-05-21 來(lái)源:網(wǎng)絡(luò) 收藏

過(guò)去,個(gè)人計(jì)算機(jī)的USB開(kāi)發(fā),僅僅是對(duì)USB外設(shè)的開(kāi)發(fā),USB核心驅(qū)動(dòng)程序和USB主控制器驅(qū)動(dòng)程序均由Windows等操作提供。而實(shí)現(xiàn)USB主機(jī)的功能,這兩部分驅(qū)動(dòng)程序都必須設(shè)計(jì)。
嵌入式USB主機(jī)的軟件設(shè)計(jì)思路[4]
USB主機(jī)協(xié)議描述了USB軟件(核心驅(qū)動(dòng)程序和主控制器驅(qū)動(dòng)程序)的設(shè)計(jì)規(guī)范。根據(jù)該設(shè)計(jì)規(guī)范,嵌入式USB主機(jī)的軟件設(shè)計(jì)應(yīng)包括以下三部分:USB主機(jī)軟件部分,主要實(shí)現(xiàn)對(duì)USB外設(shè)的配置,讀取USB外設(shè)的信息,從而判斷該設(shè)備屬于USB的哪一類(lèi),并確定下一步選用哪個(gè)特定的程序加以支持;USB Mass Storage設(shè)備類(lèi)協(xié)議軟件部分,實(shí)現(xiàn)USB Mass Storage類(lèi)所規(guī)定的各種命令;USB用戶軟件部分,實(shí)現(xiàn)用FAT文件系統(tǒng)管理和數(shù)據(jù)。因此,U盤(pán)的模塊中的固件程序有著如圖1.3所示的積木式的結(jié)構(gòu)。

本文引用地址:http://2s4d.com/article/173721.htm

嵌入式USB主機(jī)固件程序
1、與AT89C55WD的通信程序設(shè)計(jì)
SL811與AT89C55WD的通信程序設(shè)計(jì)可以簡(jiǎn)單地認(rèn)為是實(shí)現(xiàn)了PC的USB主機(jī)的主控制器驅(qū)動(dòng)程序的部分功能。
①讀數(shù)據(jù)
由于的外接總線的地址和數(shù)據(jù)信號(hào)是復(fù)用的,通過(guò)A0信號(hào)來(lái)區(qū)分地址和數(shù)據(jù)。因此,AT89C55WD讀取或?qū)懭?a class="contentlabel" href="http://2s4d.com/news/listbylabel/label/SL811HS">SL811HS內(nèi)存的時(shí)候首先發(fā)送地址,然后再發(fā)送數(shù)據(jù)。此外,由于SL811HS采用了地址自動(dòng)增址的機(jī)制,因此,如果需要讀取或?qū)懭脒B續(xù)地址內(nèi)的數(shù)據(jù)時(shí),只需要發(fā)送起始地址即可,以后每讀取或?qū)懭胍淮螖?shù)據(jù),SL811HS會(huì)自動(dòng)將尋址地址加1。根據(jù)SL811HS的讀數(shù)據(jù)時(shí)序的要求,讀取數(shù)據(jù)前首先發(fā)送地址,再讀取數(shù)據(jù),程序如下:
unsigned char SL811Read(unsigned char a)
{
unsigned char nVal;
unsigned char xdata *exAddress;
exAddress = SL811_ADDR_PORT; /*發(fā)送地址 */
SL811_CS=0;
*exAddress=a;
exAddress=SL811_DATA_PORT; /*讀取數(shù)據(jù) */
nVal = *exAddress;
SL811_CS=1;
return nVal;
}
②寫(xiě)數(shù)據(jù)
與讀數(shù)據(jù)類(lèi)似,AT89C55WD向SL811HS的內(nèi)存單元寫(xiě)數(shù)據(jù)時(shí),也必須首先發(fā)送地址,然后發(fā)送要寫(xiě)入的數(shù)據(jù)。根據(jù)SL811HS的寫(xiě)數(shù)據(jù)時(shí)序,函數(shù)實(shí)現(xiàn)程序如下:
void SL811Write(unsigned char a, unsigned char d)
{
unsigned char xdata *exAddress;
exAddress = SL811_ADDR_PORT; /*發(fā)送地址 */
SL811_CS=0;
*exAddress=a;
exAddress=SL811_DATA_PORT; /*寫(xiě)入數(shù)據(jù) */
*exAddress = d;
SL811_CS=1;
}
單片機(jī)AT89C55WD與SL811HS通信的實(shí)現(xiàn),是整個(gè)USB體系軟件的根基。在此基礎(chǔ)上即可實(shí)現(xiàn)USB主機(jī)協(xié)議的系統(tǒng)軟件、Mass Storage類(lèi)協(xié)議軟件、FAT文件系統(tǒng)軟件。
2、AT89C55WD的初始化
單片機(jī)AT89C55WD的初始化程序安排在主程序main.c中,主要是完成定時(shí)器T0、外部中斷INT0、I/O口、串行通訊口以及SL811HS 的初始化,包括工作方式設(shè)定、初值設(shè)置、相關(guān)的數(shù)據(jù)緩沖器清零等,程序較為簡(jiǎn)單,此處省略。
3、人機(jī)接口程序
人機(jī)接口程序?qū)?lái)自主CPU模塊的串口命令進(jìn)行相應(yīng)的處理,并將處理結(jié)果返回。因?yàn)橹鰿PU模塊需將采集的數(shù)據(jù)值通過(guò)模塊存入U(xiǎn)盤(pán),所以主CPU模塊的串口命令包括查詢U盤(pán)、創(chuàng)建文件、打開(kāi)文件、寫(xiě)文件、讀文件等,如同人們?cè)赑C機(jī)對(duì)U盤(pán)的操作。
該段程序首先通過(guò)串口處理入口函數(shù),判別主CPU發(fā)出何種命令,再跳轉(zhuǎn)至功能操作子函數(shù)。U盤(pán)的功能操作子函數(shù)依據(jù)USB Mass Storage類(lèi)的UFI命令,按照微軟的FAT文件規(guī)范進(jìn)行相應(yīng)文件操作。
由于篇幅關(guān)系其它部分的實(shí)現(xiàn)本文不作具體介紹。
結(jié)語(yǔ)
總之,運(yùn)用單片機(jī)直接控制讀寫(xiě)U盤(pán),部分地實(shí)現(xiàn)PC上USB主機(jī)的USB核心驅(qū)動(dòng)程序的功能,是嵌入式系統(tǒng)的軟件和硬件的集合,是一個(gè)全新的概念。U盤(pán)的單片機(jī)低存儲(chǔ)系統(tǒng)將使測(cè)控系統(tǒng)體積減小,更有利于野外作業(yè)或其它便攜性要求較高的場(chǎng)合,為儀器便攜化發(fā)展開(kāi)拓了新的思路。


上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉