<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 基于CAN總線(xiàn)通信協(xié)議的設計與實(shí)現

基于CAN總線(xiàn)通信協(xié)議的設計與實(shí)現

作者: 時(shí)間:2009-06-18 來(lái)源:網(wǎng)絡(luò ) 收藏

本文的信息優(yōu)先級從高到低依次為:信息功能標識、任務(wù)功能標識和目標節點(diǎn)地址標識。信息功能標識設在ID的最高幾位,通過(guò)3位的功能代碼可以區分某些情況的8種基本功能:這些功能可以為節點(diǎn)狀態(tài)控制、節點(diǎn)保護、緊急情況通報以及有時(shí)間標記的信息等;接收任務(wù)標識表明本幀數據的任務(wù)屬性,容量為32;目標節點(diǎn)地址指示本次數據的目的地址,容量為8。
DATA0.0在本中作為標志位,用來(lái)區別單幀傳輸和多幀傳輸,解決了大于8字節的字符串的傳輸問(wèn)題。當標志位為1時(shí),表示傳送的是多幀數據;為0時(shí)表明是單幀數據。這樣克服了 只能傳輸小于等于8字節數據的缺點(diǎn),了大于8字節的數據的傳輸。
為了識別多幀傳輸中可能會(huì )出現的重幀和丟幀現象,本規定數據場(chǎng)第一字節作為多幀數據傳輸次序的索引。按照本制定的格式傳輸數據時(shí),單幀最多傳輸7字節的實(shí)際數據:當數據流長(cháng)度大于7字節時(shí),就要分成多幀傳送。
3 應用層協(xié)議
V2.0規范標準中,只規定了ISO參考模型的物理層和數據鏈路層,沒(méi)有規定媒體的連接單元以及駐留媒體,也沒(méi)有規定應用層。物理層負責譬如物理信號傳輸、譯碼、位時(shí)序和位同步等功能,而數據鏈路層負責仲裁、信息分段以及數據安全、數據確認、錯誤檢測、信號傳輸和錯誤控制的功能。實(shí)際上,即使在執行一些非常簡(jiǎn)單的的分布式系統時(shí)。除了基本的兩層服務(wù)之外,還要求或希望有更多功能,如發(fā)送長(cháng)于8字節的字符串、響應或確定數據傳送、標識符分配、網(wǎng)絡(luò )啟動(dòng)或監控節點(diǎn)。
由于這些附加的功能直接支持應用過(guò)程,所以它可以被認作“應用層”。如果正確執行,則應用層以及相應的應用層接口(子協(xié)議)為通訊和應用過(guò)程提供了一個(gè)清晰定義的分界以便把它們區分開(kāi)來(lái)。在一些利用簡(jiǎn)單的協(xié)議就可以滿(mǎn)足要求的情況下,采用復雜的協(xié)議會(huì )造成資源的浪費,而且,使用起來(lái)也很不方便,反而限制了CAN的靈活性。所以在一些情況下制定適合要求的協(xié)議,對CAN的開(kāi)發(fā)和使用至關(guān)重要。本文根據實(shí)際系統的需要,在2.0A技術(shù)規范的基礎上制定了CAN應用層協(xié)議。
CAN應用層協(xié)議主要負責建立CPU與底層之間的橋梁,它主要由四部分組成:節點(diǎn)的開(kāi)關(guān)機制、數據的收發(fā)機制、錯誤處理機制和中斷管理機制五部分組成。四種機制互相聯(lián)系、互相制約,共同維護系統的運轉。限于篇幅本文主要介紹關(guān)鍵的數據收發(fā)機制。
3.1 數據發(fā)送機制
發(fā)送機制主要將CPU要發(fā)送的數據接過(guò)來(lái),并整理為符合應用層協(xié)議規定的幀格式,將拆卸好的小包(數據幀)順序放入循環(huán)隊列中等待發(fā)送,并負責管理和維護發(fā)送循環(huán)隊列的止常運轉。在定時(shí)器定時(shí)中斷中定期對循環(huán)隊列進(jìn)行掃描,如果發(fā)現隊列中有數據等待發(fā)送,則調用發(fā)送函數將數據發(fā)送到CAN。
在底層開(kāi)辟了一個(gè)臨時(shí)緩沖區用于暫時(shí)存放等待發(fā)送的小包,臨時(shí)緩沖區采用循環(huán)隊列的存儲結構,對數據實(shí)行先入先出的管理模式。循環(huán)隊列是一個(gè)42*11的二維數組,用來(lái)暫時(shí)安置CPU即將發(fā)送的數據,數據被順序安排在循環(huán)隊列中等待發(fā)送。每增加一幀數據,循環(huán)隊列的尾指針加1;每成功發(fā)送完一幀數據,循環(huán)隊列的頭指針減1。當循環(huán)隊列中沒(méi)有數據時(shí),隊列的狀態(tài)為空,否則指示為不空;若循環(huán)隊列的頭指針和尾指針重合而隊列又處于不空的狀態(tài),此時(shí)隊列為滿(mǎn)的狀態(tài)。當隊列處于滿(mǎn)的狀態(tài)時(shí),禁止向隊列再寫(xiě)入數據,否則容易導致數據的覆蓋或丟失。隊列中數據遵循先入先出的原則,CPU將數據從隊列尾部裝入,向CAN發(fā)送數據時(shí)則從隊列頭部將數據讀走。發(fā)送循環(huán)隊列的曾理單位為幀,每次操作都是11個(gè)字節為單位。在發(fā)送機制運轉前,首先對發(fā)送循環(huán)隊列初始化,將循環(huán)隊列的頭指針、尾指針賦值為零,將已占用的空間也賦值為零。
CAN發(fā)送機制主要由兩大模塊組成:打小包模塊和幀發(fā)送模塊。當CPU有數據需要發(fā)送時(shí),調用打小包函數,要求給出待發(fā)送數據的存放地址。打小包函數將會(huì )按照本協(xié)議規定的格式將發(fā)送節點(diǎn)地址、接收節點(diǎn)地址、信息類(lèi)型、任務(wù)標識、數據標識等參數整理為CAN數據鏈路層ID的格式,將數據組裝成符合應用層協(xié)議所規定的數據幀(小包),對長(cháng)度大于7字節的數據的打小包處理,按照所填加索引號的順序放到發(fā)送循環(huán)隊列中等待發(fā)送。打小包函數的流程圖如圖1所示:


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>