• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 模擬技術 > 設計應用 > CP2102與C8051F040的USB-CAN轉換器設計

    CP2102與C8051F040的USB-CAN轉換器設計

    作者: 時間:2009-02-27 來源:網絡 收藏

    3 USB與CAN之間協議轉換的實現
    設計在充分遵守USB和CAN協議的基礎上,實現了USB數據與CAN數據之間的協議轉換和轉發。在設計過程中,USB的高速率和CAN的低速率,以及USB的大數據包和CAN的小數據包之間存在著矛盾,必須認真解決,否則可能造成數據丟失、協議轉換不可靠、設備工作不穩定。本設計中USB和CAN都采用了接收中斷方式,將USB和CAN的數據包先存儲下來,作為緩沖進一步處理。在接收中斷服務程序的數據時,只有將數據準確地收取下來,才將接收緩沖區釋放,在此之前拒絕接收新的數據。在數據發送時,先確認發送緩沖區可用才寫入數據。由于兩端接口芯片都有內部的發送和接收緩沖區,主程序的主要任務就是完成數據的轉發,以及提供通信同步的握手協議,防止數據丟失和順序錯誤。
    相對于CAN總線傳輸速率,USB總線速率要高得多,128字節的緩沖區也比CAN總線芯片8字節緩沖區大得多。因此,向CAN接口發送數據需要完成拆包和重新打包的任務,屬較慢的操作,采用定時查詢式發送。CAN接收任務時,每次盲接轉發CAN接口收到的8字節數據到USB接口發送緩沖區,采用2個信號量(CAN―rcv,USB―wr)完成數據同步操作。數據轉發工作共有以下4個任務協調配合完成。
    (1)USB中斷后續處理任務
    接收到數據或發送完成,都會觸發中斷程序運行。中斷處理程序只需要簡單地通知此任務有中斷發生,以盡量減少中斷關閉的時間。因此,這個任務的優先級最高,并且一旦開始運行便不再等待其他事件,要盡快處理完成。此任務根據USB接口的不同中斷原因,通知其他任務進行后續的數據處理或轉發工作。
    (2)控制端點信息處理任務
    當USB接口接收到主機發來的USB協議信息時,此任務得到通知。根據主機的要求,該任務按照USB協議規范的數據格式對主機應答。它主要用于USB設備枚舉階段,與主機之間進行信息交換。其他時間,此任務不占用處理器時間。
    (3)CAN總線發送任務
    當USB接口有新的數據要轉發到CAN總線時,USB中斷后續處理任務通知此任務運行。讀出USB芯片接收緩沖區中的數據到內存緩沖區,然后分解成小于或等于8字節的數據包,增加CAN總線協議數據包頭,送入C805lF040的發送緩沖區。微處理器的主要處理時間就是USB數據包的分解和重新打包發送。
    此任務占用處理器的時間最長。CAN發送任務每次等待USB接收中斷觸發USB_rd信號量后,開始讀取接收緩沖區數據到內存數組Ep2out_Bur[128],然后采用查詢式發送方式,將數據送到的發送緩沖區,每次8字節。在查詢過程中,如果處于正在發送中,將任務休眠3個時鐘嘀嗒(5 ms),然后再次查詢,避免長時間占用處理器。
    (4)CAN總線接收任務
    當CAN總線接收到數據后,由于數據包最多只有8個字節,因此可以一次放入USB接口芯片發送緩沖區,由主機讀取。此任務很少占用處理器時間。主要是為了協調CAN總線與USB總線之間數據轉發的同步,使數據包可以按照原來的順序接收到,并且不覆蓋尚未發送的上一個數據包,避免數據丟失。CAN接收中斷首先讀中斷寄存器,清除中斷標志。然后觸發CAN―rcv信號量,使CAN接收任務得以運行。CAN接收任務然后等待USB發送完成中斷觸發USB―wr信號量,表示USB接口可以發送新的數據。由于USB接口緩沖區較大,并且發送速度快,CAN接收任務直接將CAN接收到的數據送入USB接口芯片2012的發送緩沖區。然后打開CAN接收中斷。


    結 語
    在遵守USB和CAN協議的基礎上,USB和CAN都采用了接收中斷方式,通過通信同步的握手協議,實現了USB數據與CAN數據之間的協議轉換和轉發,很好地解決了USB的高速率和CAN的低速率,以及USB的大數據包與CAN的小數據包之間的矛盾,能夠保證數據完整和協議的可靠轉換。


    上一頁 1 2 下一頁

    關鍵詞: C8051F040 USB-CAN 2102 CP

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 房产| 望谟县| 新绛县| 永州市| 镇平县| 德江县| 海口市| 柳河县| 应城市| 鹤庆县| 兴业县| 崇义县| 乌鲁木齐市| 大冶市| 科技| 阳春市| 兰考县| 卓尼县| 瑞安市| 黄陵县| 宁安市| 合肥市| 宁明县| 南漳县| 广东省| 邵武市| 门头沟区| 田阳县| 高唐县| 义乌市| 如皋市| 饶阳县| 定兴县| 连州市| 应用必备| 北辰区| 上犹县| 永德县| 襄汾县| 射洪县| 玛曲县|