《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于PocketPC的CF卡驅動程序設計
基于PocketPC的CF卡驅動程序設計
摘要: 本文結合CF(CompactFlash)卡驅動的設計,重點闡述了PocketPC驅動程序的設計方法、CF卡設備的驅動結構和設計原理,介紹了使用實現CF+協議的接口芯片TL16PC564的系統設計,探討了CF卡的即插即用問題,并且給出了一個CF卡PocketPC驅動及應用程序和驅動交互的實例。
Abstract:
Key words :

1.概述

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

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

2.基于PocketPC的CF卡驅動設計

2.1.PocketPC驅動簡介

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

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

2.2.CF卡驅動架構和原理

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

2.2.1.流接口驅動程序的系統結構

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

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

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

2.2.2.實現即插即用

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

2.2.3.編寫CF卡接口驅動程序DLL

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

DM執行下列任務[1]:

a.初始化驅動程序的加載。

在系統啟動或收到用戶在基于PocketPC平臺上增加外圍設備的信息時,開始加載相應驅動;

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

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

c.啟動相應的驅動程序

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

d.自動卸載設備驅動程序

通過讀寫注冊表值加載和跟蹤驅動程序,當不再需要設備時卸載其驅動程序。

B)設備文件名

應用程序通過文件系統里的特殊入口訪問外圍設備。

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

設備文件名前綴由三個大寫字母組成,用來識別與特殊流接口驅動程序相對應的特殊設備文件名。文件名前綴存儲在注冊表的相應驅動程序的鍵值中。在用戶生成流接口驅動程序時,必須指定這三個前綴字母。

C)即插即用

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

a.加載流接口驅動

CF卡加載流接口驅動有兩種方法:

第一種加載的類型是在DM自動檢測到CF卡與PocketPC平臺的連接時進行的。

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

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

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

b.卸載流接口驅動

流接口驅動根據加載驅動的方式用兩種方式分別卸載。

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

對應用程序主動加載的驅動設備,應用程序必須在DLL存在前通過調用函數DelregisterDevice來卸載DLL

2.2.3.編寫CF卡接口驅動程序DLL

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

生成一個DLL之前,必須用設備文件名前綴替換入口點名字中的XXX,以對應不同的設備驅動。

3.CF卡驅動程序設計實例

3.1.CF卡系統設計

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

3.1.1.TL16PC564接口芯片介紹

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

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

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

TL16PC564接口芯片的主要特性:

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

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

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

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

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

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

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

3.2.CF卡驅動程序的實現

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

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

A)CFC_Init

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

a.初始化CF卡硬件。

b.分配資源。

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

d.分配IO資源,調用CF卡插槽驅動接口函數實現。

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

f.配置CF卡寄存器。

B)CFC_Deinit

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

C)CFC_Open

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

D)CFC_Close

應用程調用API接口CloseHandle(hFile)進入此模塊,關閉CF卡的驅動。

E)CFC_Read

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

F)CFC_Write

應用程調用API接口WriteFile進入此模塊,向CF卡寫數據。

G)CFC_IOControl

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

3.2.2.驅動中斷處理

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

3.3.應用程序與驅動交互

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

Createfile():創建設備文件

ReadFile():讀取設備數據

WriteFile():放送數據至設備

DeviceIOControl():其他的相關操作

CloseHandle():關閉設備文件

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

3.4.驅動程序的安裝

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

[HKEY_LOCAL_MACHINEDriversCFC]

"Dll"="CFCDriver.dll"

"Prefix"="CFC"

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

3結束語

本文給出了基于PocketPC的CF卡驅動程序的設計思路和程序架構,其中具體實現代碼限于篇幅,不再文中贅述。基于不同硬件設計,采樣相同的驅動框架和設計方法,可以制作不同的CFIO卡,實現多種功能。

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲国产精品悠悠久久琪琪| 欧美一区二区高清| 亚洲午夜av| 亚洲经典视频在线观看| 伊人婷婷久久| 国产资源精品在线观看| 久久成人精品一区二区三区| 亚洲桃色在线一区| 一道本一区二区| 99国产精品久久久久久久成人热| 亚洲国产精品日韩| 亚洲国产综合91精品麻豆| 激情文学一区| 影音先锋日韩有码| 精品51国产黑色丝袜高跟鞋| 精品福利电影| 在线观看欧美日本| 亚洲国产精品免费| 亚洲国产精品一区| 亚洲精一区二区三区| 亚洲毛片av在线| 99国产精品| 一区二区日韩| 亚洲一二三区视频在线观看| 亚洲欧美成人网| 欧美在线视频导航| 久久精品理论片| 亚洲国产综合在线| 亚洲精品视频在线观看免费| 99国内精品久久| 亚洲一区二区精品在线| 亚洲女优在线| 欧美一区二区三区四区高清 | 久久精彩免费视频| 亚洲高清一区二| 亚洲精品网站在线播放gif| 99re6这里只有精品视频在线观看| 一本色道久久88亚洲综合88| 亚洲专区一区二区三区| 翔田千里一区二区| 久久久国产一区二区| 欧美福利精品| 欧美色精品天天在线观看视频 | 一区二区三区四区在线| 亚洲一区二区三区视频| 久久成人18免费观看| 亚洲精品乱码久久久久久| 亚洲夜间福利| 久久国产直播| 欧美国产精品| 国产精品一区二区你懂的| 一区二区三区亚洲| 亚洲精品影视| 午夜在线播放视频欧美| 亚洲精品永久免费| 午夜欧美理论片| 蜜臀久久99精品久久久久久9| 欧美精品少妇一区二区三区| 国产精品卡一卡二| 在线免费精品视频| 一区二区免费在线观看| 欧美在线一二三区| 中文在线一区| 久久午夜色播影院免费高清| 欧美日韩黄色大片| 好吊一区二区三区| 一本久久a久久精品亚洲| 久久精品2019中文字幕| 亚洲性线免费观看视频成熟| 久久人人爽国产| 国产精品福利网站| 在线欧美影院| 亚洲欧美中文日韩v在线观看| 最新国产精品拍自在线播放| 欧美一级理论片| 欧美精品一区二区三区四区| 国产日韩综合一区二区性色av| 91久久黄色| 久久精品国产欧美激情| 亚洲欧美清纯在线制服| 欧美成人精品h版在线观看| 国产精品亚洲一区二区三区在线| 91久久国产综合久久| 久久精品动漫| 先锋影音久久久| 欧美日韩亚洲一区二区三区四区| 国内精品免费在线观看| 亚洲女人天堂av| 在线视频你懂得一区二区三区| 久久久久国产精品厨房| 国产精品人人做人人爽人人添| 亚洲国产一区二区精品专区| 久久www免费人成看片高清| 亚洲欧美日韩精品久久奇米色影视| 欧美成人黑人xx视频免费观看| 国产亚洲欧洲| 亚洲午夜一区二区三区| 99视频一区二区三区| 蜜臀va亚洲va欧美va天堂| 国产综合精品| 午夜精品视频| 午夜精品视频在线观看| 欧美日韩综合在线免费观看| 亚洲国产一区二区视频| 91久久精品www人人做人人爽 | 欧美日韩综合久久| 亚洲激情校园春色| 亚洲精品免费一二三区| 久久精品99| 国产日韩专区| 欧美一级午夜免费电影| 欧美亚洲一区在线| 国产伦精品免费视频 | 亚洲精品一级| 男女av一区三区二区色多| 一区在线影院| 久久精品亚洲一区| 美女成人午夜| 亚洲国产精品久久久久婷婷884| 亚洲高清中文字幕| 蜜桃av一区二区在线观看| 一区二区三区在线不卡| 亚洲国产精品va在线观看黑人| 久久蜜桃精品| 在线观看日韩国产| 亚洲电影中文字幕| 免费亚洲电影在线观看| 亚洲盗摄视频| 亚洲精品视频在线观看网站 | 亚洲毛片视频| 亚洲线精品一区二区三区八戒| 国产精品啊啊啊| 亚洲一区二区精品| 欧美一区二区三区四区在线观看地址| 国产精品日韩欧美| 午夜在线成人av| 久久亚洲一区二区| 亚洲高清不卡av| 一本久久青青| 国产精品久久久久久久9999| 亚洲综合首页| 久久久不卡网国产精品一区| 黄色一区二区在线| 亚洲品质自拍| 欧美午夜激情视频| 亚洲欧美激情视频| 久久久久久久尹人综合网亚洲| 国产一区在线视频| 亚洲精品久久久久| 欧美午夜精品理论片a级按摩| 亚洲综合日韩| 久久综合网络一区二区| 亚洲精品裸体| 先锋影音国产精品| 影音先锋日韩资源| 亚洲天堂成人在线观看| 国产视频久久| 亚洲乱码国产乱码精品精98午夜| 国产精品av免费在线观看 | 亚洲电影自拍| 欧美精品九九| 亚洲欧美精品suv| 久久香蕉国产线看观看av| 亚洲精品欧美日韩| 午夜在线电影亚洲一区| 一区二区三区在线观看视频| 夜夜嗨av一区二区三区四季av| 国产精品videossex久久发布| 欧美在线观看一二区| 欧美激情精品久久久久久久变态| 一本色道久久综合亚洲91| 久久国产毛片| 亚洲区国产区| 欧美中文字幕视频在线观看| 亚洲第一在线视频| 午夜国产精品视频| 在线欧美日韩国产| 欧美亚洲视频一区二区| 在线精品视频在线观看高清 | 国产毛片精品国产一区二区三区| 亚洲国内在线| 国产精品久久久久久av福利软件 | 激情综合五月天| 亚洲主播在线观看| 在线观看91精品国产麻豆| 亚洲欧美日韩国产一区| 樱桃成人精品视频在线播放| 亚洲欧美电影在线观看| 伊人久久大香线蕉综合热线| 亚洲一区二区免费视频| 狠狠色狠狠色综合日日91app| 亚洲一品av免费观看| 国内精品久久久久影院优| 亚洲一区二区三区四区中文| 永久555www成人免费| 欧美一级理论片| 一区二区三区www| 欧美成人福利视频| 久久精品国产91精品亚洲| 国产精品成人久久久久|