<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于PocketPC的CF卡驅動(dòng)程序設計

基于PocketPC的CF卡驅動(dòng)程序設計

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

摘要:本文結合(CompactFlash)卡的設計,重點(diǎn)闡述了程序的設計方法、卡設備的結構和設計原理,介紹了使用實(shí)現+協(xié)議的接口芯片TL16PC564的系統設計,探討了CF卡的即插即用問(wèn)題,并且給出了一個(gè)CF卡驅動(dòng)及應用程序和驅動(dòng)交互的實(shí)例。

本文引用地址:http://dyxdggzs.com/article/149061.htm

關(guān)鍵詞:流接口驅動(dòng)CF卡;即插即用

1.概述

在信息和咨訊快速更新的今天,掌上電腦以其方便和易攜帶性開(kāi)始得到廣泛應用,如在服務(wù)行業(yè)、導航系統、金融、證券、保險等領(lǐng)域。在掌上電腦高端市場(chǎng)中,由微軟開(kāi)發(fā)的嵌入式操作系統WinCE發(fā)展迅速,占有較高的比例。PocketPC2002采用定制化的WindowsCE3.0操作系統,由Microsoft開(kāi)發(fā)專(zhuān)用于個(gè)人數字手持設備。

為方便擴展,PocketPC的掌上電腦向用戶(hù)提供了CF卡通用擴展槽,利用該接口,可設計不同的CF卡實(shí)現不同的應用,如CFMODEM卡、CF網(wǎng)卡、CF數據采集接口卡等。在CF卡的設計中,PocketPC的驅動(dòng)非常關(guān)鍵,直接影響著(zhù)CF卡的性能。本文結合CF卡驅動(dòng)的設計,介紹了PocketPC驅動(dòng)程序的設計方法、CF卡設備的驅動(dòng)結構和設計原理,探討了CF卡的即插即用問(wèn)題,并且給出了一個(gè)CF卡PocketPC驅動(dòng)的設計及應用程序和驅動(dòng)交互的實(shí)例。

2.PocketPC的CF卡驅動(dòng)設計

2.1.PocketPC驅動(dòng)簡(jiǎn)介

WindowsCE3.0是微軟公司針對嵌入式系統開(kāi)發(fā)的實(shí)時(shí)操作系統,具有可以獨立開(kāi)發(fā)的內核和設備驅動(dòng)程序模型,PocketPC是針對掌上電腦的定制化的WindowsCE操作系統,其驅動(dòng)模型與WindowsCE一致。

PocketPC驅動(dòng)程序模型以靜態(tài)連接庫(.lib文件)或動(dòng)態(tài)連接庫(.dll文件)形式實(shí)現。支持四種驅動(dòng)程序類(lèi)型:Nativedriver(本機驅動(dòng))、StreamInterfacedriver(流接口驅動(dòng))、USBdriver和NDISdriver(網(wǎng)絡(luò )驅動(dòng))。本機驅動(dòng)是指本地設備的驅動(dòng)程序。如點(diǎn)觸式面板,顯示器,鍵盤(pán),發(fā)光二極管,電池等的驅動(dòng)。USB和NDIS驅動(dòng)模型分別是針對USB設備和網(wǎng)絡(luò )協(xié)議驅動(dòng)實(shí)現。流接口驅動(dòng)程序是為連接基于WindowsCE的平臺的外圍設備而設計的,包括串口、PC卡,CF卡等[1]。

2.2.CF卡驅動(dòng)架構和原理

設計CF卡驅動(dòng)程序的主要任務(wù)是實(shí)現PocketPC應用程序對CF卡系統硬件的訪(fǎng)問(wèn),實(shí)現CF卡設備的管理和即插即用。應用程序對CF卡硬件的訪(fǎng)問(wèn)需要考慮驅動(dòng)程序的體系結構、應用程序與驅動(dòng)程序的交互、驅動(dòng)層的中斷處理等問(wèn)題。CF卡即插即用問(wèn)題涉及設備管理程序、設備文件名等等。

2.2.1.流接口驅動(dòng)程序的系統結構

PocketPC中CF卡驅動(dòng)程序的設計對應模式是流接口驅動(dòng)。流接口驅動(dòng)程序是一個(gè)管理外圍設備的DLL,它把設備表示為文件系統的一個(gè)特殊文件,主要任務(wù)是把外設的使用傳遞給應用程序。PocketPC的設備文件存在固定的路徑Windows下,以一個(gè)特殊的命名慣例來(lái)區分設備文件和其他文件。

流接口驅動(dòng)程序接收設備管理器和應用程序通過(guò)系統調用的命令,并且封裝所有命令,轉換成控制設備適當的動(dòng)作信息。圖一表示CF卡的流接口驅動(dòng)程序和其他系統部件間的相互關(guān)系:

流接口驅動(dòng)程序通過(guò)內部硬件訪(fǎng)問(wèn)外圍設備。對CF卡而言,內部設備是CF卡插槽,由內置CF卡插槽驅動(dòng)程序驅動(dòng),而CF卡插槽驅動(dòng)程序提供編寫(xiě)CF卡流接口驅動(dòng)程序的插槽接口函數。即CF卡的設備驅動(dòng)程序使用CF卡服務(wù)庫(由CF卡插槽接口函數組成),CF卡服務(wù)庫控制CF卡插槽硬件。

2.2.2.實(shí)現即插即用

在PocketPC中,中斷、I/O端口等系統資源被操作系統接管,并由其根據情況進(jìn)行智能的分配,當設備連接到掌上電腦時(shí),操作系統能自動(dòng)識別并啟動(dòng)相應的驅動(dòng),這就是即插即用。為實(shí)現PocketPC的CF卡即插即用,必須理解兩個(gè)概念:設備管理程序(DeviceManager,DM)和設備文件名。

2.2.3.編寫(xiě)CF卡接口驅動(dòng)程序DLL

設備管理程序屬于用戶(hù)層程序,與內核,注冊表和流接口驅動(dòng)程序DLL相互作用并實(shí)現特定功能(見(jiàn)圖一),從而實(shí)現設備的即插即用。

DM執行下列任務(wù)[1]:

a.初始化驅動(dòng)程序的加載。

在系統啟動(dòng)或收到用戶(hù)在基于PocketPC平臺上增加外圍設備的信息時(shí),開(kāi)始加載相應驅動(dòng);

b.向內核注冊設備文件名。

該文件名把應用程序使用的流I/O函數映射到流接口驅動(dòng)程序的對應函數;

c.啟動(dòng)相應的驅動(dòng)程序

通過(guò)從外圍設備獲得即插即用標識符或激活一個(gè)檢查模塊為外圍設備尋找合適的設備驅動(dòng)程序;

d.自動(dòng)卸載設備驅動(dòng)程序

通過(guò)讀寫(xiě)注冊表值加載和跟蹤驅動(dòng)程序,當不再需要設備時(shí)卸載其驅動(dòng)程序。

B)設備文件名

應用程序通過(guò)文件系統里的特殊入口訪(fǎng)問(wèn)外圍設備。

PocketPC的文件系統可以識別特殊文件名并重定向文件IO操作到適當的流接口驅動(dòng)程序。

設備文件名前綴由三個(gè)大寫(xiě)字母組成,用來(lái)識別與特殊流接口驅動(dòng)程序相對應的特殊設備文件名。文件名前綴存儲在注冊表的相應驅動(dòng)程序的鍵值中。在用戶(hù)生成流接口驅動(dòng)程序時(shí),必須指定這三個(gè)前綴字母。

C)即插即用

驅動(dòng)加載過(guò)程就是對中斷、I/O端口等系統資源進(jìn)行系統分配的過(guò)程。此過(guò)程與DM和設備文件名緊密相關(guān)。

a.加載流接口驅動(dòng)

CF卡加載流接口驅動(dòng)有兩種方法:

第一種加載的類(lèi)型是在DM自動(dòng)檢測到CF卡與PocketPC平臺的連接時(shí)進(jìn)行的。

第二種加載的形式是在DM不能自動(dòng)檢測到CF卡與平臺的連接時(shí),使用該CF的應用程序必須列出該外圍設備的驅動(dòng)程序,即主動(dòng)調用RegisterDevice()或者ActivateDevice()函數實(shí)現驅動(dòng)的加載。

即插即用時(shí)驅動(dòng)的加載是采用第一種類(lèi)型。實(shí)現CF卡即插即用,首先下位機需要修改相應的CIS(CardInformationStructure),在驅動(dòng)中添加檢測模塊,并且在注冊表添加設備注冊信息。

當系統開(kāi)啟或者CF卡插入槽后,DM會(huì )調用在注冊表中設置的檢測模塊檢測插卡類(lèi)型,如果符合,則會(huì )加載相應的驅動(dòng)。檢測模塊寫(xiě)成DLL的形式,調用CF卡插槽接口函數檢測CIS中的數據,判斷是否對應設備。如果對應,則告訴DM需要加載注冊表中指定的相應設備的驅動(dòng)程序。

b.卸載流接口驅動(dòng)

流接口驅動(dòng)根據加載驅動(dòng)的方式用兩種方式分別卸載。

對DM自動(dòng)加載的設備,當檢測到CF卡從插槽拔出時(shí),DM從HKEY_LOCAL_MACHINEDriverActive鍵中刪除相應驅動(dòng)程序項,并調用DeregisterDevice函數從文件系統中刪除相應外圍設備的文件名,同時(shí)通知FreeLibrary函數卸載DLL。

對應用程序主動(dòng)加載的驅動(dòng)設備,應用程序必須在DLL存在前通過(guò)調用函數DelregisterDevice來(lái)卸載DLL

2.2.3.編寫(xiě)CF卡接口驅動(dòng)程序DLL

CF卡驅動(dòng)程序使用CF卡插槽接口函數實(shí)現驅動(dòng)。對每個(gè)驅動(dòng)程序而言,其所要求的標準的入口點(diǎn)用來(lái)實(shí)現標準文件IO函數和電源管理函數,這些函數由WinCE操作系統的內核使用。這些標準入口點(diǎn)為:XXX_Close,XXX_Denit,XXX_Init,XXX_IOControl,XXX_Open,XXX_PowerDown,XXX_PowerUp,XXX_Read,XXX_Write等[3]。

生成一個(gè)DLL之前,必須用設備文件名前綴替換入口點(diǎn)名字中的XXX,以對應不同的設備驅動(dòng)。

3.CF卡驅動(dòng)實(shí)例

3.1.CF卡系統設計

要實(shí)現標準的CFCard,硬件上關(guān)鍵在于接口的實(shí)現。我們應用的是TexasInstrument公司的TL16PC564接口芯片來(lái)簡(jiǎn)化設計并使其符合CF+標準。設計方案如圖二所示:

3.1.1.TL16PC564接口芯片介紹

TL16PC564接口芯片提供了在子系統串行數據和CF卡并行接口數據之間的串并轉換功能[2]。在下位機子系統中,MCU負責處理由上位機和外部系統的數據流交互。此系統結構可以制作各種功能的CFIO卡:如MODEM卡,網(wǎng)卡等。

TL16PC564的接口芯片功能模塊如圖三所示。

芯片中的CFCard的屬性空間由256字節的CIS和8字節的CCR(卡配置寄存器)組成。該CIS和CCR利用主機CPU和子系統都可訪(fǎng)問(wèn)的DPRAM實(shí)現。系統上電時(shí),由子系統負責完成對CIS的初始化。

TL16PC564接口芯片的主要特性:

1)集成了符合CF+標準的TL16550的PCMCIA接口邏輯,該邏輯提供了外設與CPU之間的數據串并轉換功能。

2)256字節的CIS和8字節的CCR由DPRAM代替EEPROM,使修改和更新CIS和CCR更加容易。

3)提供了完全可編程的串行接口特性。

4)可選的串行旁路模式可以使子系統能直接并行訪(fǎng)問(wèn)接收和發(fā)送FIFO,使系統設計更加靈活,提高了子系統和主系統CPU間數據傳送吞吐率。

3.1.2.TL16PC564接口芯片在多功能CF卡中的設計實(shí)現

對CF卡而言,實(shí)現CF卡功能的軟件設計包括兩個(gè)方面,一方面是CFcard側MCU對CIS的初始化及數據采集和計算,另一方面是主機側的驅動(dòng)程序。在CFCard正常工作前,必須由卡上的MCU對設備進(jìn)行初始化,即將CIS信息寫(xiě)入屬性空間,從而經(jīng)過(guò)主機識別,使主機明確CFCard的應用類(lèi)型。

在實(shí)際設計中,TL16PC564硬件設置為旁路模式,上下位機通過(guò)訪(fǎng)問(wèn)FIFO,實(shí)現數據的交互。對上位系統驅動(dòng)而言,數據的發(fā)送等價(jià)于對TL16PC564的FIFO寫(xiě)數據,當數據的FIFO寫(xiě)滿(mǎn)之后,配合16650的控制邏輯,下位系統獲得數據到的消息,從而將FIFO的數據讀出,完成系統數據通訊下行的流程。上行流程與下行流程類(lèi)似。由于TL16PC564硬件設置為旁路模式,使下位機可以直接訪(fǎng)問(wèn)FIFO,可以提高通訊速率。我們在實(shí)現上下位機通訊過(guò)程中,定制了高效的通訊規則,使上下位機數據交互速率最優(yōu)化,經(jīng)過(guò)測試,系統通訊速度達:56kbyte/s。下位系統的MCU可以直接訪(fǎng)問(wèn)FIFO,可以選擇不同的集成多功能的MCU或者添加外圍模塊,實(shí)現多種通道的數據的采集和控制。系統設計時(shí),可定制完善可靠的通訊規約,實(shí)現系統對各種數據通道的控制和訪(fǎng)問(wèn),達到多功能卡設計的目的。

3.2.CF卡驅動(dòng)程序的實(shí)現

實(shí)現PocketPC2002的CF卡驅動(dòng),即采用EVC3.0+PocketPCSDK,在EVC里編譯代碼,生成DLL,然后導入到PocketPC的Windows目錄下,并添加注冊表信息,實(shí)現即插即用。以上是制作驅動(dòng)的完整流程[3]。

3.2.1.實(shí)現流接口驅動(dòng)的標準接口(設備文件名取CFC)

A)CFC_Init

DM調用RegisterDevice或ActivateDevice進(jìn)入此模塊。通過(guò)XXX_Init()的返回值判斷CF卡初始化是否執行成功。此模塊完成以下功能:

a.初始化CF卡硬件。

b.分配資源。

c.注冊回調函數,當設備狀態(tài)變化,則操作系統調用此回調函數CardRegisterClient。

d.分配IO資源,調用CF卡插槽驅動(dòng)接口函數實(shí)現。

e.注冊中斷函數,調用CardRequestIRQ()函數。

f.配置CF卡寄存器。

B)CFC_Deinit

系統DM調用此模塊卸載CF卡。需要做的工作是釋放申請的資源等。

C)CFC_Open

應用程序調用Createfile時(shí)進(jìn)入此模塊,主要是分配資源,數據結構的初始化。

D)CFC_Close

應用程調用API接口CloseHandle(hFile)進(jìn)入此模塊,關(guān)閉CF卡的驅動(dòng)。

E)CFC_Read

應用程調用API接口ReadFile進(jìn)入此模塊,讀取CF卡數據。

F)CFC_Write

應用程調用API接口WriteFile進(jìn)入此模塊,向CF卡寫(xiě)數據。

G)CFC_IOControl

應用層調用DeviceIoControl()進(jìn)入此模塊。

3.2.2.驅動(dòng)中斷處理

PocketPC處理中斷的方法是在處理XXX_Init調用的過(guò)程中讓流接口驅動(dòng)程序生成一個(gè)新的線(xiàn)程,這個(gè)線(xiàn)程叫做中斷服務(wù)線(xiàn)程(IST)。在中斷發(fā)生時(shí),OS就給IST發(fā)信號。CF卡驅動(dòng)程序的IST從CardRequestIRQ函數接受信號。因為內建CF卡插槽的驅動(dòng)程序得到由CF卡插槽生成的原始中斷,所以PC卡驅動(dòng)程序并不直接處理中斷。在中斷發(fā)生時(shí),進(jìn)入CardReguestIRQ指定的PC卡插槽驅動(dòng)程序調用的回調函數。

3.3.應用程序與驅動(dòng)交互

PocketPC對設備的操作是采用文件操作實(shí)現的。應用層可以調用以下API接口函數對設備進(jìn)行操作:

Createfile():創(chuàng )建設備文件

ReadFile():讀取設備數據

WriteFile():放送數據至設備

DeviceIOControl():其他的相關(guān)操作

CloseHandle():關(guān)閉設備文件

應用程序經(jīng)由CreateFile()打開(kāi)和存取CF卡驅動(dòng)程序,產(chǎn)生一個(gè)對CF卡驅動(dòng)程序中CFC_Open()的調用,驅動(dòng)程序返回一個(gè)句柄,然后該句柄被常規的Win32文件功能所用,如WriteFile()和ReadFile()。調用WriteFile()和ReadFile()分別對應驅動(dòng)程序的CFC_Write(),和CFC_Read()模塊。最后,CloseHandle()調用驅動(dòng)程序的CFC_Close()模塊釋放內部資源。

3.4.驅動(dòng)程序的安裝

驅動(dòng)程序的安裝并不只是一個(gè)DLL,包括需要用到的數據文件、配置文件,和添加事先定義好的注冊表項[4]。以下是添加系統注冊表例子:

[HKEY_LOCAL_MACHINEDriversCFC]

Dll=CFCDriver.dll

Prefix=CFC

驅動(dòng)安裝過(guò)程是將驅動(dòng)程序“CFCDriver.dll”文件存到POCKETPC中windows目錄下,并且修改注冊表,制作安裝包可以采樣SDK中自帶的工具實(shí)現。

3結束語(yǔ)

本文給出了基于PocketPC的CF卡驅動(dòng)程序的設計思路和程序架構,其中具體實(shí)現代碼限于篇幅,不再文中贅述?;诓煌布O計,采樣相同的驅動(dòng)框架和設計方法,可以制作不同的CFIO卡,實(shí)現多種功能。



評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>