www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]Windows CE6.0的DM9000A流接口驅(qū)動(dòng)開發(fā)

摘要:針對(duì)Windows CE系統(tǒng)下專用網(wǎng)絡(luò)驅(qū)動(dòng)接口開發(fā)難度大的情況,本文介紹一種基于Windows CE流接口驅(qū)動(dòng)的工作機(jī)制及開發(fā)方法。相比于Windows CE對(duì)各種硬件設(shè)備所提供的專用接口,流接口驅(qū)動(dòng)具有更大的靈活性,且能夠?qū)崿F(xiàn)應(yīng)用層到底層硬件的控制。以含有ARM11內(nèi)核的S3C6410結(jié)合以太網(wǎng)通信芯片DM9000A為例,逐步分析流接口驅(qū)動(dòng)程序的開發(fā)流程,并利用PC機(jī)抓取以太網(wǎng)通信數(shù)據(jù),驗(yàn)證了流接口驅(qū)動(dòng)程序開發(fā)的正確性。

關(guān)鍵詞:Windows CE 6.0;S3C6410;DM9000A;流接口驅(qū)動(dòng)

引言

嵌入式技術(shù)在各個(gè)領(lǐng)域的應(yīng)用與日俱增,基于微軟公司研發(fā)的Windows CE嵌入式操作系統(tǒng)的電子設(shè)備更是滲透到各行各業(yè)。隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,以太網(wǎng)幾乎成為了電子通信設(shè)備首選的通信方式。Windows CE 6.0提供的網(wǎng)絡(luò)接口驅(qū)動(dòng)器標(biāo)準(zhǔn)(NIDS)固然得到系統(tǒng)的良好支持,但其驅(qū)動(dòng)程序的實(shí)現(xiàn)較為復(fù)雜,且通過NIDS實(shí)現(xiàn)應(yīng)用程序?qū)W(wǎng)絡(luò)底層驅(qū)動(dòng)的操作難度較大。

針對(duì)Windows CE6.0系統(tǒng)下應(yīng)用程序?qū)υO(shè)備硬件難以靈活控制的問題,本文介紹一種使用流接口驅(qū)動(dòng)實(shí)現(xiàn)應(yīng)用程序?qū)τ布M(jìn)行控制的方法。考慮到Windows CE6.0在內(nèi)核訪問機(jī)制上有別于以往版本,且以太網(wǎng)接口的廣泛使用及其基于NIDS的開發(fā)難度較大,故而以DM9000A網(wǎng)絡(luò)芯片的驅(qū)動(dòng)及控制為例進(jìn)行介紹。

1 Windows CE 6.0的設(shè)備驅(qū)動(dòng)機(jī)制

Windows CE所有的驅(qū)動(dòng)程序都是以DLL文件的形式存在的,系統(tǒng)在執(zhí)行驅(qū)動(dòng)程序代碼之前必須先將相應(yīng)的DLL文件加載到地址空間。Wind owsCE 6.0提供3個(gè)系統(tǒng)進(jìn)程來加載和執(zhí)行驅(qū)動(dòng)程序的DLL文件,它們分別是Device.exe、GWES.exe和FileSys.exe。它們各自加載的驅(qū)動(dòng)類型如圖1所示。

2 流接口驅(qū)動(dòng)工作原理

2.1 流接口驅(qū)動(dòng)架構(gòu)

應(yīng)用程序根據(jù)加載的流驅(qū)動(dòng)的名稱和操作碼調(diào)用文件API,文件API被系統(tǒng)轉(zhuǎn)發(fā)到FileSys.exe進(jìn)程中;FileSys.exe一旦發(fā)現(xiàn)轉(zhuǎn)發(fā)過來的文件API是對(duì)設(shè)備的操作,則會(huì)交給設(shè)備管理器進(jìn)行處理;設(shè)備管理器將根據(jù)具體的請(qǐng)求,調(diào)用相應(yīng)的流驅(qū)動(dòng)接口程序。對(duì)于Windows CE系統(tǒng)應(yīng)用層而言,使用流接口驅(qū)動(dòng)的硬件設(shè)備被抽象為一個(gè)具有固定接口函數(shù)的動(dòng)態(tài)鏈接庫(DLL)。應(yīng)用程序調(diào)用文件API函數(shù)與流接口驅(qū)動(dòng)程序進(jìn)行通信,把對(duì)硬件的操作轉(zhuǎn)化為對(duì)文件的讀寫控制,從而達(dá)到應(yīng)用程序操作硬件的目的。流接口驅(qū)動(dòng)程序的體系結(jié)構(gòu)如圖2所示。

2.2 流驅(qū)動(dòng)接口函數(shù)

流接口驅(qū)動(dòng)程序具有統(tǒng)一的接口函數(shù),只需根據(jù)硬件沒備的操作時(shí)序在相應(yīng)的接口函數(shù)里編寫控制指令。Windows CE系統(tǒng)下流接口函數(shù)功能描述如表1所列。

表1中XXX代表驅(qū)動(dòng)文件的名稱,Windows CE中流接口驅(qū)動(dòng)的文件名稱規(guī)定為3個(gè)大寫的字母/數(shù)字。在進(jìn)行流接口驅(qū)動(dòng)程序編程時(shí),并非所有的接口函數(shù)都要編寫,一般比較重要的是XXX_Init()和XXX_IOControl()兩個(gè)函數(shù)。前者在設(shè)備驅(qū)動(dòng)被加載時(shí)調(diào)用,主要編寫初始化硬件設(shè)備的相應(yīng)控制指令,其中包括很是關(guān)鍵的地址映射操作;后者則主要實(shí)現(xiàn)對(duì)硬件設(shè)備的各種控制,可以實(shí)現(xiàn)數(shù)據(jù)的讀寫等操作,對(duì)設(shè)備的所有控制都可以在這個(gè)接口函數(shù)下實(shí)現(xiàn),只需分配好相應(yīng)的控制碼。對(duì)于本文介紹的DM9000A,DM9_Init()實(shí)現(xiàn)虛擬地址的獲取及初始化操作,DM9_IOControl()則實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收,其中發(fā)送控制碼定義為DM9_SendData,接收控制碼為DM9_ReceiveData。

[!--empirenews.page--]

3 DM9000A流驅(qū)動(dòng)程序的實(shí)現(xiàn)

DM9000A支持IEEE802.3x全雙工模式流控制,提供IP/TCP/UDP校驗(yàn)、產(chǎn)生及檢測(cè)功能;內(nèi)部集成10/100M自適應(yīng)PHY,同時(shí)具有13 KB的接收緩沖區(qū)和3 KB的發(fā)送緩沖區(qū),支持8位和16位數(shù)據(jù)接口。

S3C6410與DM9000A的接口電路如圖3所示。在流驅(qū)動(dòng)程序中是將DM9000A內(nèi)部寄存器地址空間映射到S3C6410內(nèi)部劃分的SROM的BANK1空間上,物理基地址是0x18000000。在Windows CE 6.0系統(tǒng)下對(duì)硬件寄存器的訪問首先需要進(jìn)行地址映射,將寄存器物理地址映射為系統(tǒng)可訪問的虛擬地址。最為簡(jiǎn)單的方法就是從系統(tǒng)目錄(C:\wince600\platform\studk6410\src\inc)下找到基于OEM層的地址配置表(oemaddrt ab_cfg.inc),從文件中找到所使用的SROM的BANK1的虛擬地址,在驅(qū)動(dòng)程序中直接訪問該地址(如同訪問芯片的寄存器地址)。

流接口驅(qū)動(dòng)的實(shí)現(xiàn)將集中體現(xiàn)在對(duì)初始化接口函數(shù)和I/O控制接口函數(shù)的操作,函數(shù)主要代碼如下:

其中,0x94000000正是從地址配置表文件中獲取的虛擬地址,dwEthernetIOBase經(jīng)映射后則如同DM9000A內(nèi)部寄存器的首地址。由于硬件線路上是使用S3C6410的地址線中的位2作為DM9000A的數(shù)據(jù)/地址訪問信號(hào)(高電平為訪問數(shù)據(jù)),故以“dwEthernetIOBase+4”作為訪問數(shù)據(jù)的基地址。

其中,參數(shù)Handle為流接口設(shè)備的句柄;dwIoControICode為I/O控制碼,可以根據(jù)需要自由定義;pInBuf為傳入數(shù)據(jù)指針;nInBufSize為數(shù)據(jù)長(zhǎng)度。除了初始化函數(shù)和I/O控制函數(shù)外的其他流驅(qū)動(dòng)接口函數(shù)無需任何處理,直接給出返回值即可。

[!--empirenews.page--]

發(fā)送函數(shù)dm9000_send(pInBuf,nInBufSize)獲取流接口函數(shù)傳入的發(fā)送數(shù)據(jù)指針和相應(yīng)數(shù)據(jù)長(zhǎng)度,然后驅(qū)動(dòng)DM9000A發(fā)送數(shù)據(jù),其工作流程如圖4所示。

4 Windows CE 6.0系統(tǒng)下流驅(qū)動(dòng)程序的使用

4.1 流驅(qū)動(dòng)程序的加載

流接口驅(qū)動(dòng)程序需要按一定的方式配置后才能被系統(tǒng)識(shí)別并編譯。其配置的主要流程如圖5所示。

將流驅(qū)動(dòng)程序加入定制系統(tǒng)之后還需要添加相應(yīng)的注冊(cè)表啟動(dòng)信息,在platform.reg文件中添加以下內(nèi)容:

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\DM9]

“Index”=dword:1

“Order”=dword:30

“Prefix”=“DM9”

“DLL”=“DM9.dll”

為使生成的DLL文件能夠被包括在燒寫文件中并下載到開發(fā)板上,還需在platform.bib文件中加入相應(yīng)代碼,內(nèi)容如下:

IF BSP_NODM91

DM9.dll $(FLATRELEASEDIR)\DM9.dll NK SHK

ENDIF BSP_NODM9 !

經(jīng)過以上的配置之后,流接口驅(qū)動(dòng)程序已經(jīng)配置完成,只需要對(duì)Windows CE 6.0的系統(tǒng)定制工程重新編譯,并將生成的鏡像文件下載到開發(fā)板上,即可通過文件API操作DM9000A的數(shù)據(jù)收發(fā)。

4.2 應(yīng)用程序?qū)α黩?qū)動(dòng)程序的調(diào)用

Windows CE啟動(dòng)時(shí)會(huì)自動(dòng)枚舉注冊(cè)表HKEY_LOCAL_MACHINE\Drivers\BuiltIn目錄下的驅(qū)動(dòng)信息,并加載相應(yīng)驅(qū)動(dòng)程序的動(dòng)態(tài)鏈接庫,然后執(zhí)行初始化接口函數(shù)——DM9_Init()。在驅(qū)動(dòng)程序成功加載之后,應(yīng)用程序?qū)τ布牟僮骶椭恍枵{(diào)用文件API便可實(shí)現(xiàn),但前提是相應(yīng)的操作必須在驅(qū)動(dòng)程序中有定義,并且分配了操作碼。對(duì)于DM9000A的數(shù)據(jù)發(fā)送,其文件API代碼如下:

……

hDm9=CreateFile(TEXT(“DM91:”),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

該代碼調(diào)用文件API打開設(shè)備進(jìn)行讀寫操作,得到文件操作的句柄名hDm9。

DeviceIoControl(hDm9,DM9_SendFrame,&SendData,sizeof(SendData),NULL,0,&dwReturn,Null);

……

該代碼調(diào)用文件API對(duì)設(shè)備發(fā)送操作命令。其中,hDm9告訴系統(tǒng)要操作的設(shè)備為DM9000A;DM9 SendFrame為發(fā)送數(shù)據(jù)的操作碼,這必須與驅(qū)動(dòng)程序中定義的相一致,也就是讓系統(tǒng)知道進(jìn)行的是什么操作;&SendData為發(fā)送的數(shù)據(jù)幀首地址;sizeof(SendData)為發(fā)送數(shù)據(jù)的長(zhǎng)度……

[!--empirenews.page--]

4.3 實(shí)驗(yàn)驗(yàn)證

將基于Windows CE 6.0的DM9000A流接口驅(qū)動(dòng)程序應(yīng)用于電子式互感器合并單元的以太網(wǎng)數(shù)據(jù)通信模塊設(shè)計(jì)中,其通過DM9000A發(fā)送的數(shù)據(jù)幀在PC機(jī)上使用WinPcap軟件進(jìn)行以太網(wǎng)數(shù)據(jù)包抓取,從而驗(yàn)證流驅(qū)動(dòng)程序及其應(yīng)用程序是否正確實(shí)現(xiàn)Windows CE下以太網(wǎng)數(shù)據(jù)的發(fā)送。在實(shí)驗(yàn)中以IEC61850-9-2數(shù)據(jù)幀格式發(fā)送標(biāo)識(shí)為NCEPU的采樣值測(cè)試數(shù)據(jù),其實(shí)驗(yàn)結(jié)果如圖6所示。

抓取的以太網(wǎng)數(shù)據(jù)說明了PC機(jī)接收到的數(shù)據(jù)和開發(fā)板上通過流接口驅(qū)動(dòng)發(fā)送過來的數(shù)據(jù)是一致的,從而驗(yàn)證了流接口驅(qū)動(dòng)程序正確可行。

結(jié)語

本文介紹的流接口驅(qū)動(dòng)雖然不支持WIndwos CE提供的標(biāo)準(zhǔn)接口,無法通過系統(tǒng)標(biāo)準(zhǔn)函數(shù)庫進(jìn)行操作,但可以直接根據(jù)硬件設(shè)備的操作時(shí)序編寫驅(qū)動(dòng),具有極大的操作靈活性,非常適合在Windows CE應(yīng)用程序中對(duì)硬件設(shè)備底層進(jìn)行操作。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在嵌入式系統(tǒng)和底層驅(qū)動(dòng)開發(fā)中,C語言因其高效性和可控性成為主流選擇,但缺乏原生單元測(cè)試支持成為開發(fā)痛點(diǎn)。本文提出一種基于宏定義和測(cè)試用例管理的輕量級(jí)單元測(cè)試框架方案,通過自定義斷言宏和測(cè)試注冊(cè)機(jī)制,實(shí)現(xiàn)無需外部依賴的嵌入...

關(guān)鍵字: C語言 嵌入式系統(tǒng) 驅(qū)動(dòng)開發(fā)

在Linux設(shè)備驅(qū)動(dòng)開發(fā)中,等待隊(duì)列(Wait Queue)是實(shí)現(xiàn)進(jìn)程睡眠與喚醒的核心機(jī)制,它允許進(jìn)程在資源不可用時(shí)主動(dòng)放棄CPU,進(jìn)入可中斷睡眠狀態(tài),待資源就緒后再被喚醒。本文通過C語言模型解析等待隊(duì)列的實(shí)現(xiàn)原理,結(jié)合...

關(guān)鍵字: 驅(qū)動(dòng)開發(fā) C語言 Linux

在當(dāng)今數(shù)字化時(shí)代,汽車不再僅僅是一種交通工具,更是一個(gè)移動(dòng)的智能空間。隨著人們對(duì)汽車電子設(shè)備依賴程度的不斷提高,車內(nèi) USB 接口的重要性也日益凸顯。從最初單純?yōu)槭謾C(jī)充電,到如今支持?jǐn)?shù)據(jù)傳輸、連接各種智能設(shè)備,USB 接...

關(guān)鍵字: 接口 數(shù)據(jù)傳輸 汽車供電

根據(jù)Semico Research的預(yù)測(cè),到2025年RISC-V芯片出貨量將達(dá)到624億顆,覆蓋計(jì)算、消費(fèi)電子和工業(yè)等領(lǐng)域。而在這其中,RISC-V MCU是整個(gè)RISC-V生態(tài)的基本盤,以高質(zhì)量、應(yīng)用驅(qū)動(dòng)的解決方案為...

關(guān)鍵字: 青稞 RISC-V 沁恒 接口 MCU

在數(shù)字化時(shí)代,電子墨水屏(E-Ink)因其獨(dú)特的顯示效果和低功耗特性,在電子書、智能手寫本等領(lǐng)域得到了廣泛應(yīng)用。然而,電子墨水屏的刷新率一直是其發(fā)展的瓶頸,如何在保證低功耗的同時(shí)提高刷新率,成為了驅(qū)動(dòng)開發(fā)中的一個(gè)重要課題...

關(guān)鍵字: 電子墨水屏 E-Ink 驅(qū)動(dòng)開發(fā)

將您的樹莓派Pico變成帶有觸摸屏界面的USB-HID設(shè)備!在這個(gè)項(xiàng)目中,我們將在Arduino IDE中設(shè)置編程環(huán)境,為3.5”Pico Touch LCD屏蔽配置庫,測(cè)試基本功能,創(chuàng)建簡(jiǎn)單的按鈕(用于復(fù)制和粘貼),顯...

關(guān)鍵字: 樹莓派 觸摸屏 LCD Windows

這是一個(gè)演示,展示了我正在開發(fā)的自定義gpt,并在r/arduino上發(fā)布了一系列關(guān)于它的內(nèi)容。它可以很容易地與您的任何項(xiàng)目在您的標(biāo)準(zhǔn)工作。/ Arduino文件夾。它是多平臺(tái)的,所以無論你運(yùn)行的是Windows、mac...

關(guān)鍵字: Windows macOS Linux Arduino項(xiàng)目管理器

在這里,我們?cè)谙喈?dāng)舊的Latte Panda V1單板計(jì)算機(jī)上啟動(dòng)了Batocera,該計(jì)算機(jī)于2015年發(fā)布,擁有英特爾Atom x5-Z8350四核處理器和4GB DDR3L RAM。這個(gè)處理器在當(dāng)時(shí)對(duì)于SBC來說是...

關(guān)鍵字: 單板計(jì)算機(jī) Windows x86處理器

Amazon Q Developer是首個(gè)基于生成式AI的助手,旨在加速Windows.NET、VMware和大型機(jī)工作負(fù)載的遷移和現(xiàn)代化,縮短轉(zhuǎn)型時(shí)間并降低成本 北京2024年12月23日 /美通社/ -- ...

關(guān)鍵字: DEVELOPER 亞馬遜 NET Windows

NodeMCU是一個(gè)開源物聯(lián)網(wǎng)平臺(tái),包含運(yùn)行在expressif Systems ESP8266 Wi-Fi SoC上的固件,硬件基于ESP-12模塊。NodeMCU的特點(diǎn)之一是可以使用Arduino IDE進(jìn)行簡(jiǎn)單的編...

關(guān)鍵字: GPS NodeMCU ESP8266 接口 物聯(lián)網(wǎng)
關(guān)閉