時(shí)間:2008-08-27 10:42:00來(lái)源:ronggang
圖 2 CAN的發(fā)送數(shù)據(jù)流程[/align]
[align=center]
圖 3 CAN接收數(shù)據(jù)的流程[/align]
2.2 USB總線的軟件設(shè)計(jì)
PDIUSBD12 是一款帶有并行總線和局部DMA傳輸能力的高速USB 接口器件,它支持USB1.1協(xié)議的所有傳輸方式,在本設(shè)計(jì)中用到了控制傳輸,中斷傳輸和批量傳輸。控制傳輸處理主機(jī)到USB設(shè)備的控制信息,固定使用端點(diǎn)0。中斷傳輸用來(lái)傳送數(shù)據(jù)量很小,但需要及時(shí)處理,以達(dá)到實(shí)時(shí)效果的數(shù)據(jù),使用端點(diǎn)1。批量傳輸用來(lái)實(shí)現(xiàn)CAN節(jié)點(diǎn)與主機(jī)之間大數(shù)據(jù)快傳送,使用主端點(diǎn)(端點(diǎn)2),一次最大可發(fā)送64字節(jié)。PDIUSBD12 的固件設(shè)計(jì)成完全的中斷驅(qū)動(dòng),當(dāng)MCU 處理前臺(tái)任務(wù)時(shí)USB 的傳輸可在后臺(tái)進(jìn)行。這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時(shí)簡(jiǎn)化了編程和調(diào)試。后臺(tái)ISR 中斷服務(wù)程序和前臺(tái)主程序循環(huán)之間的數(shù)據(jù)交換通過(guò)事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來(lái)實(shí)現(xiàn),當(dāng)PDIUSBD12 從USB 收到一個(gè)數(shù)據(jù)包那么就對(duì)MCU 產(chǎn)生一個(gè)中斷請(qǐng)求,MCU立即響應(yīng)中斷,在ISR中固件將數(shù)據(jù)包從PDIUSBD12 內(nèi)部緩沖區(qū)移到數(shù)據(jù)緩沖區(qū),并在隨后清零PDIUSBD12 的內(nèi)部緩沖區(qū),以使能接收新的數(shù)據(jù)包。MCU 可以繼續(xù)它當(dāng)前的前臺(tái)任務(wù),返回到主循環(huán)檢查循環(huán)緩沖區(qū)內(nèi)是否有新的數(shù)據(jù)[1]。
[align=center]
圖4 PDIUSBD12固件編程結(jié)構(gòu)圖[/align]
這部分程序結(jié)構(gòu)可包括[4]:
1) 請(qǐng)求處理程序
對(duì)USB的標(biāo)準(zhǔn)設(shè)備請(qǐng)求進(jìn)行處理和對(duì)用戶添加的廠商請(qǐng)求進(jìn)行處理;USB設(shè)備接入主機(jī)后要進(jìn)入復(fù)雜的設(shè)備列舉過(guò)程,并安裝正確的驅(qū)動(dòng)程序。
2)硬件提取層
對(duì)單片機(jī)的I/O口、數(shù)據(jù)總線等硬件接口進(jìn)行操作,該層包含最底層的函數(shù),這些函數(shù)在不同的MCU 平臺(tái)上需要進(jìn)行改變,
void outportb(unsigned char port,unsigned char val);
void inportb(unsigned char port);
對(duì)PDIUSBD12 所有的I/O 訪問(wèn)都可由它們實(shí)現(xiàn);
3)PDIUSBD12 命令接口
對(duì)PDIUSBD12器件進(jìn)行操作的模塊子程序集,以簡(jiǎn)化器件的編程;
4)中斷服務(wù)程序
當(dāng)PDIUSBD12向單片機(jī)發(fā)出中斷請(qǐng)求時(shí),讀取PDIUSBD12的中斷傳輸來(lái)的數(shù)據(jù),并設(shè)定事件標(biāo)志和Setup包數(shù)據(jù)緩沖區(qū),傳輸給主循環(huán)。
5)主循環(huán)
發(fā)送USB請(qǐng)求,處理USB總線事件和用戶功能處理等。MCU 一旦上電就需要初始化其所有端口存儲(chǔ)區(qū),中斷服務(wù)程序。在主循環(huán)程序中MCU 對(duì)事件進(jìn)行輪詢,如有CAN總線發(fā)來(lái)的數(shù)據(jù),則送往PDIUSBD12進(jìn)行發(fā)送,如有USB總線數(shù)據(jù),則啟動(dòng)CAN發(fā)送程序,它們?cè)诮涌诘慕邮展ぷ鞣謩e由各自的中斷程序完成。要注意的是,我們?cè)谟昧薖DIUSBD12的端口最大一次可發(fā)送64字節(jié),SJA1000一次最多能發(fā)8字節(jié), 如果端口1傳輸?shù)拈L(zhǎng)度大于8 字節(jié),MCU 在傳輸階段就必須根據(jù)數(shù)據(jù)大小,分?jǐn)?shù)次完成CAN數(shù)據(jù)的發(fā)送工作。
三、USB驅(qū)動(dòng)程序的編寫(xiě)
在WINDOWS平臺(tái)下,與USB外設(shè)的任何通信必須通過(guò)USB設(shè)備驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)知道如何與系統(tǒng)的USB驅(qū)動(dòng)接口和訪問(wèn)設(shè)備的應(yīng)用程序通信。設(shè)備驅(qū)動(dòng)是保證應(yīng)用程序訪問(wèn)硬件設(shè)備的軟件組件,使得應(yīng)用程序不必知道物理連接、信號(hào)和與一個(gè)設(shè)備通信需要的協(xié)議等的細(xì)節(jié),可以保證應(yīng)用程序代碼只通過(guò)外設(shè)名字訪問(wèn)外設(shè)或端口目的地。USB驅(qū)動(dòng)程序(USBD)的功能可以概括為:配置管理、總線管理、數(shù)據(jù)傳輸管理、提供客戶服務(wù)。USBD把I/O請(qǐng)求分組(IRP)劃分為USB和設(shè)備需要大小的塊,確保每一個(gè)設(shè)備能分配到它所要求的USB資源,這樣它就可以支持USB設(shè)備配置。USB是使用標(biāo)準(zhǔn)Windows系統(tǒng)USB類驅(qū)動(dòng)程序來(lái)訪問(wèn)USB驅(qū)動(dòng)程序接口(USBDI),USBD.sys就是USB類驅(qū)動(dòng)程序,它使用通用主控制器驅(qū)動(dòng)程序(UHCD)或開(kāi)發(fā)主控制器接口(openHCI)來(lái)訪問(wèn)通用主程序控制器接口設(shè)備。USBHUB.sys就是根集線器和外部集線器的USB驅(qū)動(dòng)程序。在PCI枚舉器發(fā)現(xiàn)USB主控制器后,它會(huì)自動(dòng)裝入相關(guān)驅(qū)動(dòng)程序。
[align=center]
圖5 USB的WDM接口框圖[/align]
大量的客戶服務(wù)是由USB的驅(qū)動(dòng)程序提供的,它幫助USB的客戶控制和訪問(wèn)它們的功能單元。編寫(xiě)USB設(shè)備驅(qū)動(dòng)需要使用Visual C++,此外還需要Windows 98或2000驅(qū)動(dòng)設(shè)備開(kāi)發(fā)包(98DDK/NTDDK) [5]。
四 、應(yīng)用程序設(shè)計(jì)
微處理器固件程序和USB設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)是USB設(shè)備開(kāi)發(fā)者的工作,對(duì)于廣大用戶而言,與系統(tǒng)的交互是通過(guò)應(yīng)用程序?qū)崿F(xiàn),而且整個(gè)實(shí)時(shí)采集系統(tǒng)的主要數(shù)據(jù)處理都是在這里完成的。因此,運(yùn)行效率高、界面友好、具有強(qiáng)大數(shù)據(jù)分析和處理的應(yīng)用程序的設(shè)計(jì),也是系統(tǒng)設(shè)計(jì)上一個(gè)不容忽視的關(guān)鍵因素。其關(guān)鍵是實(shí)現(xiàn)從USB 外設(shè)讀取或發(fā)送特定數(shù)量的數(shù)據(jù),應(yīng)用程序的主要功能有:?jiǎn)?dòng)/關(guān)閉USB設(shè)備,檢測(cè)USB設(shè)備,設(shè)置USB數(shù)據(jù)傳輸管道/端口,顯示接收數(shù)據(jù),發(fā)送數(shù)據(jù)。這里,我們采用Visual C++6.0作為程序的開(kāi)發(fā)環(huán)境,
可以把USB設(shè)備當(dāng)成文件來(lái)操作,利用Windows API:當(dāng)設(shè)備成功插入U(xiǎn)SB總線,USBD被自動(dòng)載入,CreateFile()就會(huì)返回一個(gè)句柄給驅(qū)動(dòng)。用DeviceIoControl()來(lái)進(jìn)行控制傳輸,用ReadFile()、WriteFile()進(jìn)行數(shù)據(jù)傳輸。CloseHandle()用來(lái)結(jié)束與USB設(shè)備的通信,此時(shí)對(duì)于此設(shè)備驅(qū)動(dòng)的句柄也就通過(guò)它釋放出來(lái)。使用上述API函數(shù)可編制USB數(shù)據(jù)收發(fā)的主機(jī)軟件[6]。
五、結(jié) 語(yǔ)
基于USB技術(shù)的CAN現(xiàn)場(chǎng)總線適配器系統(tǒng)的設(shè)計(jì),從硬件和軟件兩方面看是可行的, 實(shí)驗(yàn)結(jié)果較好的完成了通訊任務(wù),這為在工業(yè)現(xiàn)場(chǎng)傳送的數(shù)據(jù)接收與處理方式提供了新的方案。隨著現(xiàn)場(chǎng)總線技術(shù)的發(fā)展,探索其與計(jì)算機(jī)的接口技術(shù)是很有實(shí)踐意義的。
參考文獻(xiàn)
[1] Philips Corp. PDIUSBD12 Users Manual
[2] Philips Corp. SJA1000 Users Manual
[3] 饒運(yùn)濤 等 現(xiàn)場(chǎng)總線CAN原理與應(yīng)用技術(shù) 北京航空航天大學(xué)出版社 2003.6
[4] 周立功 PDIUSBD12 USB固件編程與驅(qū)動(dòng)開(kāi)發(fā) 北京航空航天大學(xué)出版社 2003.2
標(biāo)簽:
傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為傳動(dòng)網(wǎng)(www.surachana.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
相關(guān)資訊
產(chǎn)品新聞
更多>2025-10-31
勇梅機(jī)械液壓閘門給煤機(jī)的優(yōu)點(diǎn)
2025-10-22
2025-10-17
2025-10-11
「一體機(jī)性價(jià)比王者」NK290M普及型數(shù)控...
2025-10-09
耐磨管道機(jī)器人檢測(cè)電纜CCTV,水下管道...
2025-09-23