基于ARM Cortex3的低功耗無源USB-CAN透明傳輸?shù)膶?shí)現(xiàn)
4.1.2 關(guān)于CAN控制器的配置程序設(shè)計(jì)
根據(jù)CAN2.0協(xié)議,CAN總線報(bào)文的發(fā)送和接收需要進(jìn)行一系列配置,圖2為CAN報(bào)文發(fā)送接受配置流程圖。
4.2 USB通信相關(guān)
4.2.1 LM3S5956微處理器的USB控制器
LM3S5956微處理器的USB控制器支持USB Host/Device/OTG功能,可運(yùn)行在全速和低速模式。它符合USB2.0標(biāo)準(zhǔn),包含掛起和喚醒信號(hào)。它包含32個(gè)端點(diǎn),其中包含2個(gè)用于控制傳輸?shù)膶S眠B接端點(diǎn)(一個(gè)用于輸入,一個(gè)用于輸出),其他30個(gè)端點(diǎn)帶有可軟件動(dòng)態(tài)定義大小的FIFO并以支持多包隊(duì)列。FIFO支持DMA,可有效降低系統(tǒng)資源的占用。USB Device啟動(dòng)方式靈活,可軟件控制是否在啟動(dòng)時(shí)連接。USB控制器遵從OTG標(biāo)準(zhǔn)的會(huì)話請(qǐng)求協(xié)議(SRP)和主機(jī)協(xié)商協(xié)議(HNP)。
LM3S5956微處理器的芯片供應(yīng)商TI公司提供了一套完整的USB開發(fā)解決方案(USBLIB),極大地縮短了用戶的開發(fā)周期,本項(xiàng)目將采用USBLIB中的USB虛擬串口方式進(jìn)行數(shù)據(jù)傳輸,這樣,上位機(jī)驅(qū)動(dòng)包的支持下,可以通過串口調(diào)試工具直接對(duì)USB的數(shù)據(jù)進(jìn)行讀寫。在USB虛擬串口的方案中,USB通信模塊主要分為USB驅(qū)動(dòng)、USB虛擬串口應(yīng)用層、用戶應(yīng)用層三部分。
根據(jù)USB協(xié)議,本項(xiàng)目中的USB通信模塊屬于從USB設(shè)備,USB驅(qū)動(dòng)的設(shè)計(jì)主要包括以下函數(shù)的定義:返回從站地址函數(shù)、配置從站地址函數(shù)、USB控制器連接函數(shù)、USB控制器關(guān)閉函數(shù)、端點(diǎn)配置函數(shù)、數(shù)據(jù)應(yīng)答函數(shù)、端點(diǎn)停止函數(shù)、端點(diǎn)啟動(dòng)函數(shù)、端點(diǎn)狀態(tài)清除函數(shù)、端點(diǎn)數(shù)據(jù)獲取函數(shù)、端點(diǎn)數(shù)據(jù)賦予函數(shù)、端點(diǎn)傳輸啟動(dòng)函數(shù)、端點(diǎn)狀態(tài)返回函數(shù)。
USB虛擬串口應(yīng)用層介于用戶應(yīng)用層和USB驅(qū)動(dòng)層之間,是目前最流行的USB應(yīng)用層協(xié)議之一,其最大的特點(diǎn)就是可以模擬串口的數(shù)據(jù)傳輸方式,還可以保證實(shí)時(shí)性和準(zhǔn)確性。適合傳輸較為簡(jiǎn)短的數(shù)據(jù)。而CAN報(bào)文的數(shù)據(jù)域最長(zhǎng)只有8個(gè)字節(jié),所以USB虛擬串口協(xié)議非常適合轉(zhuǎn)發(fā)CAN報(bào)文數(shù)據(jù)。虛擬串口協(xié)議主要包括以下函數(shù)的定義:虛擬串口初始化函數(shù)、虛擬串口數(shù)據(jù)包讀取函數(shù)、虛擬串口數(shù)據(jù)包寫入函數(shù)。
用戶應(yīng)用層主要包括USB枚舉常量的定義、虛擬串口設(shè)備定義、發(fā)送和接收緩沖區(qū)定義、虛擬串口通信參數(shù)設(shè)置函數(shù)、虛擬串口通信參數(shù)獲取函數(shù)、設(shè)備控制中斷函數(shù)、數(shù)據(jù)接收中斷函數(shù)、數(shù)據(jù)發(fā)送中斷函數(shù)。
4.2.2 程序邏輯
在USB虛擬串口設(shè)備的軟件結(jié)構(gòu)中,TI提供的USBlib庫(kù)已經(jīng)實(shí)現(xiàn)了大部分工作,只需要實(shí)現(xiàn)三個(gè)和USB設(shè)備相關(guān)的回調(diào)函數(shù)就可以了。這三個(gè)函數(shù)分別為:
USBControlHandler:處理和控制端口相關(guān)的事件
USBRxHandler:處理和接收端口相關(guān)的事件
USBTxHanler:處理和發(fā)送端口相關(guān)的事件
在控制端口處理函數(shù)中,主要處理設(shè)備連接、設(shè)備斷開、掛起中斷、喚醒中斷等事件。
4.3 主程序設(shè)計(jì)
為保證數(shù)據(jù)透?jìng)鞯膶?shí)時(shí)性,雙向數(shù)據(jù)包均采用中斷的方式進(jìn)行轉(zhuǎn)發(fā),即在CAN接受中斷發(fā)生之后,立即將數(shù)據(jù)包轉(zhuǎn)發(fā)至USB發(fā)送緩沖區(qū);在USB接收中斷發(fā)生以后,立即將數(shù)據(jù)包轉(zhuǎn)發(fā)至CAN發(fā)送緩沖區(qū),保證了數(shù)據(jù)的實(shí)時(shí)性和完全透明傳輸。如圖3為CAN中斷服務(wù)函數(shù)。
4.4 開發(fā)平臺(tái)與功能測(cè)試
本項(xiàng)目的軟件交叉編譯平臺(tái)為WINDOWS XP平臺(tái)下的MDK4.0編譯器,下載仿真器為JLINK V8。
按照?qǐng)D4所示方式進(jìn)行連線,在上位PC機(jī)安裝USB虛擬串口支持包之后,打開串口調(diào)試助手,進(jìn)行相關(guān)串口參數(shù)配置之后,就可以很方便地進(jìn)行數(shù)據(jù)的雙向收發(fā)測(cè)試。
5 功能拓展與前瞻
從OSI網(wǎng)絡(luò)模型的角度來看,現(xiàn)場(chǎng)總線網(wǎng)絡(luò)一般只實(shí)現(xiàn)了第1層(物理層)、第2層(數(shù)據(jù)鏈路層)、第7層(應(yīng)用層)。因?yàn)楝F(xiàn)場(chǎng)總線通常只包括一個(gè)網(wǎng)段,因此不需要第3層(傳輸層)和第4層(網(wǎng)絡(luò)層),也不需要第5層(會(huì)話層),第6層(描述層)的作用。
CAN2.0協(xié)議只定義物理層和數(shù)據(jù)鏈路層,沒有規(guī)定應(yīng)用層,本身并不完整,需要一個(gè)高層協(xié)議來定義CAN報(bào)文中的11/29位標(biāo)識(shí)符、8字節(jié)數(shù)據(jù)的使用。而且,基于CAN總線的工業(yè)自動(dòng)化應(yīng)用中,越來越需要一個(gè)開放的、標(biāo)準(zhǔn)化的高層協(xié)議:這個(gè)協(xié)議支持各種CAN廠商設(shè)備的互用性、互換性,能夠?qū)崿F(xiàn)在CAN網(wǎng)絡(luò)中提供標(biāo)準(zhǔn)的、統(tǒng)一的系統(tǒng)通訊模式,提供設(shè)備功能描述方式,執(zhí)行網(wǎng)絡(luò)管理功能。其中應(yīng)用層可以為網(wǎng)絡(luò)中每一個(gè)有效設(shè)備都能夠提供一組有用的服務(wù)與協(xié)議。
本項(xiàng)目中的USB—CAN透明傳輸卡只實(shí)現(xiàn)了對(duì)于CAN總線協(xié)議的物理層和數(shù)據(jù)鏈路層,為了實(shí)現(xiàn)更高層次的應(yīng)用,可以考慮將流行歐洲的CAN總線應(yīng)用層協(xié)議CANopen與USB—CAN透明傳輸協(xié)議軟件模塊進(jìn)行整合,開發(fā)一個(gè)以PC作為上位機(jī)的CANopen主站,或者以USB設(shè)備為下位機(jī)的一個(gè)CANopen從站,如果能夠?qū)崿F(xiàn),將會(huì)極大地豐富本項(xiàng)目在工業(yè)場(chǎng)合的應(yīng)用。
評(píng)論