CAN總線與USB的轉(zhuǎn)接技術(shù)
3 USB控制部分
USB控制部分使用USB接口控制芯片CH372來實(shí)現(xiàn)數(shù)據(jù)的接受和發(fā)送。CH372是一個USB總線的通用設(shè)備接口芯片,CH372在單片機(jī)端,具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,因此可以方便地掛接到單片機(jī)/DSP/MCU等控制器的系統(tǒng)總線上;在計(jì)算機(jī)系統(tǒng)中,CH372的配套軟件提供了簡潔易用的操作接口,因此,與本地端的單片機(jī)通訊就如同讀寫文件一樣簡單。
CH372在計(jì)算機(jī)端提供有應(yīng)用層接口,應(yīng)用層接口是由CH372動態(tài)鏈接庫DLL提供的面向功能應(yīng)用的API,所有API在調(diào)用后都會有操作狀態(tài)返回,但不一定有應(yīng)答數(shù)據(jù)。CH372動態(tài)鏈接庫提供的API包括:設(shè)備管理API、數(shù)據(jù)傳輸API、中斷處理API等。
在應(yīng)用層設(shè)計(jì)中,筆者采用的是請求加應(yīng)答的方式。該方式使用一個下傳的主動請求和一個上傳的被動應(yīng)答進(jìn)行交互式雙向數(shù)據(jù)通訊,下傳與上傳一一對應(yīng),相互關(guān)聯(lián)。主動請求是指由計(jì)算機(jī)應(yīng)用層下傳給單片機(jī)的數(shù)據(jù)請求,被動應(yīng)答則是單片機(jī)收到數(shù)據(jù)請求后,上傳給計(jì)算機(jī)應(yīng)用層的應(yīng)答數(shù)據(jù)。所有的通訊都由計(jì)算機(jī)應(yīng)用層發(fā)起,然后以接收到單片機(jī)的應(yīng)答結(jié)束,其完整的過程包括如下步驟:
(1) 計(jì)算機(jī)應(yīng)用層按事先約定的格式將數(shù)據(jù)請求發(fā)送給CH372芯片;
(2) CH372芯片以中斷方式通知單片機(jī);
(3) 單片機(jī)進(jìn)入中斷服務(wù)程序,以獲取CH372的中斷狀態(tài)并分析;
(4) 如果是上傳,則釋放當(dāng)前USB緩沖區(qū),然后退出中斷程序;
(5) 如果是下傳,則從數(shù)據(jù)下傳緩沖區(qū)中讀取數(shù)據(jù)塊;
(6) 分析接收到的數(shù)據(jù)塊,準(zhǔn)備應(yīng)答數(shù)據(jù),或者先退出中斷程序再處理;
(7) 單片機(jī)將應(yīng)答數(shù)據(jù)寫入批量端點(diǎn)的上傳緩沖區(qū),然后退出中斷程序;
(8) CH372芯片將應(yīng)答數(shù)據(jù)返回給計(jì)算機(jī);
(9) 計(jì)算機(jī)應(yīng)用層接收到應(yīng)答數(shù)據(jù)。
在單片機(jī)端,CH372芯片占用兩個地址位,當(dāng)A0引腳為高電平時,系統(tǒng)選擇命令端口,此時可以寫入命令;當(dāng)A0引腳為低電平時,選擇數(shù)據(jù)端口,此時可以讀寫數(shù)據(jù)。單片機(jī)通過8位并口對CH372芯片進(jìn)行讀寫時,所有操作都是由一個命令碼、若干個輸人數(shù)據(jù)和若干個輸出數(shù)據(jù)組成。
但部分命令不需要輸入數(shù)據(jù),而部分命令也可以沒有輸出數(shù)據(jù)。
CH372芯片專門用于處理USB通訊。在接收到數(shù)據(jù)或發(fā)送完數(shù)據(jù)后,CH372將以中斷方式通知單片機(jī)進(jìn)行處理。單片機(jī)通過CH372接收和發(fā)送數(shù)據(jù)的流程圖如圖3所示。
評論