基于U盤(pán)的單片機低功耗海量存儲系統
過(guò)去,基于個(gè)人計算機的USB開(kāi)發(fā),僅僅是對USB外設的開(kāi)發(fā),USB核心驅動(dòng)程序和USB主控制器驅動(dòng)程序均由Windows等操作系統提供。而實(shí)現USB主機的功能,這兩部分驅動(dòng)程序都必須設計。
嵌入式USB主機的軟件設計思路[4]
USB主機協(xié)議描述了USB系統軟件(核心驅動(dòng)程序和主控制器驅動(dòng)程序)的設計規范。根據該設計規范,嵌入式USB主機的軟件設計應包括以下三部分:USB主機系統軟件部分,主要實(shí)現對USB外設的配置,讀取USB外設的信息,從而判斷該設備屬于USB的哪一類(lèi),并確定下一步選用哪個(gè)特定的程序加以支持;USB Mass Storage設備類(lèi)協(xié)議軟件部分,實(shí)現USB Mass Storage類(lèi)所規定的各種命令;USB用戶(hù)軟件部分,實(shí)現用FAT文件系統管理和存儲數據。因此,基于U盤(pán)的海量存儲模塊中單片機的固件程序有著(zhù)如圖1.3所示的積木式的結構。本文引用地址:http://dyxdggzs.com/article/173721.htm
單片機嵌入式USB主機固件程序
1、SL811HS與AT89C55WD的通信程序設計
SL811與單片機AT89C55WD的通信程序設計可以簡(jiǎn)單地認為是實(shí)現了PC的USB主機的主控制器驅動(dòng)程序的部分功能。
①讀數據
由于SL811HS的外接總線(xiàn)的地址和數據信號是復用的,通過(guò)A0信號來(lái)區分地址和數據。因此,AT89C55WD讀取或寫(xiě)入SL811HS內存的時(shí)候首先發(fā)送地址,然后再發(fā)送數據。此外,由于SL811HS采用了地址自動(dòng)增址的機制,因此,如果需要讀取或寫(xiě)入連續地址內的數據時(shí),只需要發(fā)送起始地址即可,以后每讀取或寫(xiě)入一次數據,SL811HS會(huì )自動(dòng)將尋址地址加1。根據SL811HS的讀數據時(shí)序的要求,讀取數據前首先發(fā)送地址,再讀取數據,程序如下:
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; /*讀取數據 */
nVal = *exAddress;
SL811_CS=1;
return nVal;
}
②寫(xiě)數據
與讀數據類(lèi)似,AT89C55WD向SL811HS的內存單元寫(xiě)數據時(shí),也必須首先發(fā)送地址,然后發(fā)送要寫(xiě)入的數據。根據SL811HS的寫(xiě)數據時(shí)序,函數實(shí)現程序如下:
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ě)入數據 */
*exAddress = d;
SL811_CS=1;
}
單片機AT89C55WD與SL811HS通信的實(shí)現,是整個(gè)USB體系軟件的根基。在此基礎上即可實(shí)現USB主機協(xié)議的系統軟件、Mass Storage類(lèi)協(xié)議軟件、FAT文件系統軟件。
2、AT89C55WD的初始化
單片機AT89C55WD的初始化程序安排在主程序main.c中,主要是完成定時(shí)器T0、外部中斷INT0、I/O口、串行通訊口以及SL811HS 的初始化,包括工作方式設定、初值設置、相關(guān)的數據緩沖器清零等,程序較為簡(jiǎn)單,此處省略。
3、人機接口程序
人機接口程序對來(lái)自主CPU模塊的串口命令進(jìn)行相應的處理,并將處理結果返回。因為主CPU模塊需將采集的數據值通過(guò)存儲模塊存入U盤(pán),所以主CPU模塊的串口命令包括查詢(xún)U盤(pán)、創(chuàng )建文件、打開(kāi)文件、寫(xiě)文件、讀文件等,如同人們在PC機對U盤(pán)的操作。
該段程序首先通過(guò)串口處理入口函數,判別主CPU發(fā)出何種命令,再跳轉至功能操作子函數。U盤(pán)的功能操作子函數依據USB Mass Storage類(lèi)的UFI命令,按照微軟的FAT文件規范進(jìn)行相應文件操作。
由于篇幅關(guān)系其它部分的實(shí)現本文不作具體介紹。
結語(yǔ)
總之,運用單片機直接控制讀寫(xiě)U盤(pán),部分地實(shí)現PC上USB主機的USB核心驅動(dòng)程序的功能,是嵌入式系統的軟件和硬件的集合,是一個(gè)全新的概念。基于U盤(pán)的單片機低功耗海量存儲系統將使測控系統體積減小,更有利于野外作業(yè)或其它便攜性要求較高的場(chǎng)合,為儀器便攜化發(fā)展開(kāi)拓了新的思路。
評論