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