基于ATmega8515的USB-CAN適配器的實現(xiàn)
圖2 USB2CAN適配器數(shù)據(jù)傳輸處理框圖
2 USB-CAN適配器的軟件設(shè)計
USB-CAN 適配器軟件包括兩部分:ATmega8515中的固件和PC機內(nèi)USB2CAN適配器的驅(qū)動軟件.
2. 1 USB-CAN適配器固件編程
良好的開發(fā)環(huán)境是開發(fā)單片機軟件質(zhì)量和速度的保證.USB2CAN 適配器采用GNU AVR 的最新版本W(wǎng)inAVR 編程,它能夠?qū)λ蠥VR 單片機用C 或C + + 語言進行編程,且能在WIN2000 下運行.
USB-CAN 適配器固件設(shè)計成完全的中斷驅(qū)動,當(dāng)ATmega8515處理前臺任務(wù)時,USB 和CAN 的傳輸可以在后臺同時進行,大大提高了實際傳輸效率,編程和調(diào)試亦很方便. 后臺的中斷處理子程序通過設(shè)置事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來實現(xiàn)和前臺主程序之間的數(shù)據(jù)交換(如圖2 所示) .當(dāng)ATmega8515檢測到CAN 控制器的狀態(tài)寄存器而得知接收緩沖CANRX-Buffer有數(shù)據(jù),就會把數(shù)據(jù)傳到USB 控制器空閑發(fā)送緩沖區(qū)TXFIFO-1或TXFIFO-2中; 同樣, 當(dāng)USB控制器的接收緩沖區(qū)RXFIFO-1或RXFIFO-2充滿數(shù)據(jù)時,ATmega8515就會把RXFIFO-1或RXFIFO-2的數(shù)據(jù)讀到內(nèi)部一個連續(xù)的RAM空間,當(dāng)CAN總線控制器發(fā)送緩沖區(qū)CAN-TX-Buffer 為空時,再把數(shù)據(jù)從RAM傳到CAN-TX-Buffer.
USB -CAN適配器固件設(shè)計中采用乒乓緩存法提高實際傳輸速率. USBN9603有7個端點, 通常FIFO內(nèi)的數(shù)據(jù)進行傳送或接收時每個端點對應(yīng)一個管道,但是,兩個同方向傳輸數(shù)據(jù)的端點也可以利用一個管道,這樣可以有效地提高數(shù)據(jù)的傳輸率,因為當(dāng)?shù)谝粋€端點的FIFO傳輸數(shù)據(jù)時,微處理器可以對第二個端點的FIFO進行數(shù)據(jù)讀或?qū)?反之亦然.
USBN9603 在進行批量傳輸時,其實際傳輸率大約是512kb/s ,這往往是由于主機的控制器最大每幀數(shù)據(jù)包數(shù)量限制造成的,而并非USBN9603本身傳輸性能. 其它傳輸方式,如中斷傳輸、同步傳輸、控制傳輸?shù)淖罡邆鬏斔俾蕿?.5Mb/s. 采用乒乓緩存法后,可使傳輸速率提高一倍,從而使傳輸速率為1Mb/s 的CAN總線控制器沒有等待接收數(shù)據(jù)和發(fā)送數(shù)據(jù)空間的情況,解決了數(shù)據(jù)傳輸中的“瓶頸”問題.在USB-CAN 適配器中,端點EP1 (TXFIFO-1) 和EP3 (TXFIFO-2)發(fā)送數(shù)據(jù)到主機,EP2(RXFIFO-1) 和EP4(RXFIFO-2)從主機接收數(shù)據(jù)(如圖2 所示) ,其FIFO中的數(shù)據(jù)長度都是64字節(jié). 在主機進行枚舉過程中,當(dāng)節(jié)點接收到配置設(shè)備請求,固件程序就可以把EP1/EP3和EP2/EP4分別分配到同一個端點地址.USBN9603 內(nèi)置有一個優(yōu)先級表,如果多個端點編程指定為同一個端點號,具有較低號的端點(利用TOGGL 標(biāo)志區(qū)分高低)首先得到響應(yīng)和數(shù)據(jù).
2. 1. 1 數(shù)據(jù)上傳
當(dāng)主機發(fā)送一個IN 令牌給USB-CAN 適配器,適配器就開始向PC機發(fā)送數(shù)據(jù). 圖3 為數(shù)據(jù)上傳的流程圖. 通過兩個標(biāo)志UPDATE1 和UPDATE2 把主程序和Tx 中斷子程序緊密聯(lián)系起來,體現(xiàn)了前臺后臺程序設(shè)計思想. 當(dāng)UPDATE1 清0 ,上傳數(shù)據(jù)完畢;當(dāng)置1 時,開始傳輸下一批數(shù)據(jù). 圖4為EP1的Tx中斷子程序流程圖,UPDATE1 在該中斷子程序置1.UPDATE2的運行和UPDATE1相似.
圖3 主程序處理上傳送FIFO 數(shù)據(jù)流程
圖4 EP1 的Tx 中斷子程序流程
2. 1. 2 數(shù)據(jù)下傳
當(dāng)主機發(fā)送一個OUT令牌給USB2CAN適配器,適配器就開始接收PC發(fā)送的數(shù)據(jù),并將其暫存在ATmega8515 的RAM中,然后傳到CAN總線控制器的數(shù)據(jù)發(fā)送緩沖區(qū)CAN.TX.Buffer. 圖5 為EP2的Rx中斷子程序流程,顯示了PC的數(shù)據(jù)如何傳到CAN總線的發(fā)送緩沖區(qū). 端點EP4 的Rx 中斷子程序流程和EP2的相似.
評論