女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式Linux下的Socket CAN驅(qū)動理解

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:李倩 ? 2018-03-23 11:43 ? 次閱讀

由于Socket CAN涉及到CAN總線協(xié)議、套接字、Linux網(wǎng)絡(luò)設(shè)備驅(qū)動等。因此,為了能夠全面地了解Socket CAN的原理。我們需要了解以下幾個方面的知識點(diǎn):

(1)CAN總線協(xié)議;

(2)Socket原理;

(3)Linux網(wǎng)絡(luò)設(shè)備驅(qū)動;

當(dāng)熟悉以下三個方面的知識點(diǎn)后,我們再去分析基于Linux的Socket CAN的驅(qū)動。這樣的話理解起來更加容易、易懂。

(4)Socket CAN的驅(qū)動;

一、CAN總線協(xié)議

由于CAN總線協(xié)議的內(nèi)容太多,作為博文來說,不適宜很詳細(xì)的講解。需要深入了解的朋友們可以Google一下。以下只是作些簡要的說明。

CAN是ControllerArea Network(控制器局域網(wǎng))的縮寫。CAN通信協(xié)議在1986年由德國電氣商博世公司所開發(fā),主要面向汽車的通信系統(tǒng)?,F(xiàn)已是ISO國際標(biāo)準(zhǔn)化的串行通信協(xié)議。根據(jù)不同的距離、不同的網(wǎng)絡(luò),可配置不同的速度,最高速度為1MBit/s。

CAN被細(xì)分為三個層次:

(1)CAN對象層(the object layer);

(2)CAN傳輸層(the transfer layer);

(3)CAN物理層(the phyical layer);

對象層和傳輸層包括所有由ISO/OSI模型定義的數(shù)據(jù)鏈路層的服務(wù)和功能。

對象層的作用范圍包括:

(1)查找被發(fā)送的報文。

(2)確定由實(shí)際要使用的傳輸層接收哪一個報文。

(3)為應(yīng)用層相關(guān)硬件提供接口。

傳輸層的作用主要:

(1)傳送規(guī)則,也就是控制幀結(jié)構(gòu)、執(zhí)行仲裁、錯誤檢測、出錯標(biāo)定、故障界定。

(2)總線上什么時候開始發(fā)送新報文及什么時候開始接收報文,均在傳輸層里確定。

(3)位定時的一些普通功能也可以看作是傳輸層的一部分。

(4)傳輸層的修改是受到限制的。

物理層的作用:

在不同節(jié)點(diǎn)之間根據(jù)所有的電氣屬性進(jìn)行位信息的實(shí)際傳輸。當(dāng)然,同一網(wǎng)絡(luò)內(nèi),物理層對于所有的節(jié)點(diǎn)必須是相同的。盡管如此,在選擇物理層方面還是很自由的。

圖1 CAN協(xié)議所對應(yīng)的ISO模型

CAN具有以下的屬性:

(1)報文(Messages):簡單來說就是具有固定格式的數(shù)據(jù)包。

(2)信息路由(Information Routing):即,報文尋找結(jié)點(diǎn)的方式。

(3)位速率(Bit rate):數(shù)據(jù)位的傳輸速度。

(4)優(yōu)先權(quán)(Priorities):即報文發(fā)送的優(yōu)先權(quán)。

(5)遠(yuǎn)程數(shù)據(jù)請求(Remote Data Request):通過發(fā)送遠(yuǎn)程幀,需要數(shù)據(jù)的節(jié)點(diǎn)可以請求另一節(jié)點(diǎn)發(fā)送相應(yīng)的數(shù)據(jù)幀。

(6)多主機(jī)(Multimaster):總線空閑時,任何結(jié)點(diǎn)都可以開始傳送報文。

(7)仲裁(Arbitration):當(dāng)2個及以上的單元同時開始傳送報文,那么就會有總線訪問沖突。仲裁是確定哪個單元的具有發(fā)送優(yōu)先權(quán)。

(8)安全性(Safety):CAN的每一個節(jié)點(diǎn)均采取了強(qiáng)有力的措施以進(jìn)行錯誤檢測、錯誤標(biāo)定及錯誤自檢。

(9)錯誤檢測(Error Detection):包括監(jiān)視、循環(huán)冗余檢查、位填充、報文格式檢查。

(10)錯誤檢測的執(zhí)行(Performance of Error Detection)

(11)錯誤標(biāo)定和恢復(fù)時間(Error Sinalling and Recovery Time):任何檢測到錯誤的結(jié)點(diǎn)會標(biāo)志出已損壞的報文。此報文會失效并將自動地開始重新傳送。如果不再出現(xiàn)新的錯誤,從檢測到錯誤到下一報文的傳送開始為止,恢復(fù)時間最多為29個位的時間。

(12)故障界定(Fault Confinement):CAN結(jié)點(diǎn)能夠把永久故障和短暫擾動區(qū)分開來。永久故障的結(jié)點(diǎn)會被關(guān)閉。

(13)連接(Connections):CAN串行通訊鏈路是可以連接許多結(jié)點(diǎn)的總線。理論上,可連接無數(shù)多的結(jié)點(diǎn)。但由于實(shí)際上受延遲時間或者總線線路上電氣負(fù)載的影響,連接結(jié)點(diǎn)的數(shù)量是有限的。

(14)單通道(Single Channel):總線是由單一進(jìn)行雙向位信號傳送的通道組成。

(15)總線值(Bus value):總線可以具有兩種互補(bǔ)的邏輯值之一:“顯性”(可表示為邏輯0)或“隱性”(可表示為邏輯1)。

(16)應(yīng)答(Acknowledgment):所有的接收器檢查報文的連貫性。對于連貫的報文,接收器應(yīng)答;對于不連貫的報文,接收器作出標(biāo)志。

(17) 睡眠模式/喚醒(Sleep Mode / Wake-up):為了減少系統(tǒng)電源的功率消耗,可以將CAN器件設(shè)為睡眠模式以便停止內(nèi)部活動及斷開與總線驅(qū)動器的連接。CAN器件可由總線激活,或系統(tǒng)內(nèi)部狀態(tài)而被喚醒。

1、CAN總線的報文格式

CAN傳輸?shù)膱笪?,可分為五種類型:

(1)數(shù)據(jù)幀:用于發(fā)送結(jié)點(diǎn)向接收結(jié)點(diǎn)傳送數(shù)據(jù)的幀。

(2)遠(yuǎn)程幀:總線結(jié)點(diǎn)發(fā)出遠(yuǎn)程幀,請求發(fā)送具有同一識別符的數(shù)據(jù)幀。

(3)錯誤幀:任何結(jié)點(diǎn)檢測到一總線錯誤就發(fā)出錯誤幀。

(4)過載幀:過載幀用以在先行的和后續(xù)的數(shù)據(jù)幀(或遠(yuǎn)程幀)之間提供一附加的延時。

(5)幀間隔:用于將數(shù)據(jù)幀及遠(yuǎn)程幀與前面的幀分離開來的幀。

數(shù)據(jù)幀由7個不同的位場組成:

數(shù)據(jù)幀有標(biāo)準(zhǔn)格式和和遠(yuǎn)程格式,以下是其格式表示:

圖2 數(shù)據(jù)幀格式

遠(yuǎn)程幀由6個不同的位場組成:

遠(yuǎn)程幀沒有數(shù)據(jù)幀的數(shù)據(jù)場,以下是其格式表示:

圖3 遠(yuǎn)程幀格式

錯誤幀用于在接收和發(fā)送消息時檢測出錯誤,通知錯誤的幀。錯誤幀由錯誤標(biāo)志和錯誤界定符構(gòu)成。

錯誤標(biāo)志包括主動錯誤標(biāo)志和被動錯誤標(biāo)志兩種。

主動錯誤標(biāo)志:6個位的顯性位,處于主動錯誤狀態(tài)的單元檢測出錯誤時輸出的錯誤標(biāo)志。

被動錯誤標(biāo)志:6個位的隱性位,處于被動錯誤狀態(tài)的單元檢測出錯誤時輸出的錯誤標(biāo)志。

錯誤界定符由8個位的隱性位構(gòu)成。

錯誤幀格式如下表示:

圖4 錯誤幀格式

過載幀是用于接收單元通知其尚未完成接收準(zhǔn)備的幀。過載幀由過載標(biāo)志和過載界定符構(gòu)成。過載幀格式如下表示:

圖5 過載幀格式

幀間隔是用于分隔數(shù)據(jù)幀和遠(yuǎn)程幀的幀。數(shù)據(jù)幀和遠(yuǎn)程幀可通過插入幀間隔將本幀與前面的任何幀(數(shù)據(jù)幀、遠(yuǎn)程幀、錯誤幀、過載幀)分開。過載幀和錯誤幀前不能插入幀間隔。幀間隔如下圖所示:

圖6 幀間隔格式

2、CAN總線的仲裁方式

在總線空閑態(tài),最先開始發(fā)送消息的單元獲得發(fā)送權(quán)。多個單元同時開始發(fā)送時,各發(fā)送單元從仲裁段的第一位開始進(jìn)行仲裁。連續(xù)輸出顯性電平最多的單元可繼續(xù)發(fā)送。即逐位地對比各個結(jié)點(diǎn)發(fā)出的報文ID。由于線與的關(guān)系,顯示位“0”可以覆蓋隱性位“1”,因此ID最小的節(jié)點(diǎn)贏得仲裁,總線上表現(xiàn)為該結(jié)點(diǎn)的報文,其他結(jié)點(diǎn)失去仲裁,退出發(fā)送,轉(zhuǎn)為接收狀態(tài)。

標(biāo)準(zhǔn)格式ID與具有相同ID的遠(yuǎn)程幀或者擴(kuò)展格式的數(shù)據(jù)幀在總線上競爭時,標(biāo)準(zhǔn)格式的RTR位為顯性位的具有優(yōu)先權(quán),可繼續(xù)發(fā)送。

圖7 仲裁方式

3、位填充(BitStuffing)

位填充是為了防止突發(fā)錯誤而設(shè)定的功能。位填充的規(guī)則如下:

(1)5位連續(xù)相同電平之后,必須填充一位反向位,即不允許有6個連續(xù)相同位;

(2)SOF之前為總線空閑狀態(tài),不需要同步,因此不需要位填充;

(3)CRC之后為固定格式,不允許填充;

(4)由CAN控制器自動實(shí)現(xiàn);

4、CAN的錯誤處理

CAN控制器檢測錯誤共有以下5種:

(1)位填充錯誤;

在使用位填充的幀場內(nèi),結(jié)點(diǎn)如果檢測到6個連續(xù)相同的位值,則產(chǎn)生位填充錯誤,在下一位開始時,該結(jié)點(diǎn)將發(fā)送一個錯誤幀。

(2)位錯誤;

在發(fā)送期間,結(jié)點(diǎn)檢測到總線的位值與自身發(fā)送的位值不一致時,則產(chǎn)生位錯誤,在下一位開始時,該結(jié)點(diǎn)將發(fā)送一個錯誤幀。

(3)CRC錯誤;

接收結(jié)點(diǎn)計算的CRC碼與數(shù)據(jù)幀本身自帶的CRC碼不一致,接收結(jié)點(diǎn)將丟棄該幀,并在ACK界定符之后發(fā)送一個錯誤幀。

(4)應(yīng)答錯誤;

發(fā)送結(jié)點(diǎn)在ACK Slot位會發(fā)送隱性位,同時監(jiān)聽總線是否為顯性位,如果是顯性位,則表明至少一個節(jié)點(diǎn)正確收到該幀;如果是隱性位,將產(chǎn)生ACK錯誤,發(fā)送結(jié)點(diǎn)發(fā)送一個錯誤幀。

(5)格式錯誤;

發(fā)送結(jié)節(jié)在(CRC界定符、ACK界定符、幀結(jié)束EOF)固定格式的位置檢測到顯性位時,將發(fā)生格式錯誤,并發(fā)送一個錯誤幀。

5、CAN總線同步

CAN總線的通信方式為NRZ方式。各個位的開關(guān)或者結(jié)尾都沒有附加同步信號。發(fā)送結(jié)點(diǎn)以與位時序同步的方式開始發(fā)送數(shù)據(jù)。另外,接收結(jié)點(diǎn)根據(jù)總線上電平的變化進(jìn)行同步并進(jìn)行接收工作。

但是,發(fā)送結(jié)點(diǎn)和接收結(jié)點(diǎn)存在的時鐘頻率誤差及傳輸路徑上的(電纜、驅(qū)動器等)相位延遲會引進(jìn)同步偏差。因此接收結(jié)點(diǎn)需要通過同步的方式調(diào)整時序進(jìn)行接收。

同步的作用是盡量使本地位時序與總結(jié)信號的位時序一致(本地同步段與總結(jié)信號邊沿同步)。只有接收結(jié)點(diǎn)需要同步;同步只會發(fā)生在隱性到顯性電平的跳沿。

同步的方式為硬件同步和再同步。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2884

    瀏覽量

    466682
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11456

    瀏覽量

    212739
  • Socket
    +關(guān)注

    關(guān)注

    1

    文章

    212

    瀏覽量

    35540

原文標(biāo)題:嵌入式Linux下的Socket CAN驅(qū)動理解

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式Linux的USB設(shè)備驅(qū)動技術(shù)

    嵌入式Linux的USB設(shè)備驅(qū)動技術(shù) Linux以其穩(wěn)定、高效、易定制、硬件支持廣泛、源代碼開放等特點(diǎn),已在
    發(fā)表于 05-08 08:30 ?1932次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>下</b>的USB設(shè)備<b class='flag-5'>驅(qū)動</b>技術(shù)

    嵌入式LinuxCAN總線驅(qū)動程序設(shè)計

    嵌入式LinuxCAN總線驅(qū)動程序設(shè)計
    發(fā)表于 08-06 13:05

    嵌入式LINUX,CAN都是用socketcan嗎?會要求自己寫驅(qū)動

    嵌入式LINUXCAN都是用socketcan嗎?會要求自己寫驅(qū)動
    發(fā)表于 08-21 11:09

    嵌入式Linux CAN的相關(guān)資料推薦

    嵌入式Linux LED GPIO嵌入式Linux input嵌入式Linux UART本篇介紹
    發(fā)表于 10-27 09:40

    嵌入式LinuxLED報警燈驅(qū)動設(shè)計

    一.實(shí)驗(yàn)?zāi)康?b class='flag-5'>理解驅(qū)動本質(zhì),掌握嵌入式Linux系統(tǒng)驅(qū)動開發(fā)相關(guān)知識,包括端口寄存器訪問、接口函
    發(fā)表于 11-04 08:18

    基于嵌入式LINUXCAN設(shè)備驅(qū)動程序設(shè)計

    本文以嵌入式微處理器S3C2410 為主控制器,通過SPI 接口,采用MCP2510 控制器擴(kuò)展CAN 總線接口。文章分析了Linux 下設(shè)備驅(qū)動程序的結(jié)構(gòu)和工作原理,詳細(xì)論述了
    發(fā)表于 01-06 17:10 ?21次下載

    嵌入式Linux字符設(shè)備驅(qū)動的設(shè)計與應(yīng)用

    描述了基于嵌入式Linux的字符設(shè)備驅(qū)動程序的設(shè)計方法和實(shí)現(xiàn)過程。以電機(jī)、數(shù)碼管、串口和mini鍵盤的驅(qū)動設(shè)計為例,詳細(xì)闡述了嵌入式
    發(fā)表于 02-23 15:45 ?24次下載

    嵌入式Linux字符設(shè)備驅(qū)動的設(shè)計與應(yīng)用

    描述了基于嵌入式Linux的字符設(shè)備驅(qū)動程序的設(shè)計方法和實(shí)現(xiàn)過程。以電機(jī)、數(shù)碼管、串口和mini鍵盤的驅(qū)動設(shè)計為例,詳細(xì)闡述了嵌入式
    發(fā)表于 07-14 17:31 ?31次下載

    嵌入式LinuxCAN總線驅(qū)動程序設(shè)計.rar

    嵌入式LinuxCAN總線驅(qū)動程序設(shè)計
    發(fā)表于 05-15 16:44 ?51次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>下</b><b class='flag-5'>CAN</b>總線<b class='flag-5'>驅(qū)動</b>程序設(shè)計.rar

    嵌入式Linux系統(tǒng)和驅(qū)動開發(fā)

    ,文件系統(tǒng)構(gòu),bootloader等等底層的知識了。那么下面就跟著小編一起來聊一聊嵌入式Linux系統(tǒng)和驅(qū)動開發(fā)方面的問題吧?! ∠胍钊雽W(xué)習(xí)嵌入式
    發(fā)表于 10-11 11:11 ?919次閱讀

    嵌入式LinuxCAN接口調(diào)試

    CAN(Controller Area Network)總線是嵌入式設(shè)備最為常用的接口之一,常用于汽車以及工業(yè)自動化等嵌入式領(lǐng)域,因此本文就基于嵌入式
    發(fā)表于 04-29 16:40 ?3391次閱讀

    ARM11嵌入式系統(tǒng)LinuxLCD的驅(qū)動的設(shè)計

    ARM11嵌入式系統(tǒng)LinuxLCD的驅(qū)動的設(shè)計(嵌入式開發(fā)啥意思)-ARM11嵌入式系統(tǒng)
    發(fā)表于 07-30 14:53 ?24次下載
    ARM11<b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>Linux</b><b class='flag-5'>下</b>LCD的<b class='flag-5'>驅(qū)動</b>的設(shè)計

    嵌入式Linux CAN

    嵌入式Linux LED GPIO嵌入式Linux input嵌入式Linux UART本篇介紹
    發(fā)表于 10-19 18:33 ?6次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b> <b class='flag-5'>CAN</b>

    嵌入式linux讀寫can收發(fā)簡單示例基于socket can

    嵌入式linux讀寫can簡單示例
    發(fā)表于 11-01 17:07 ?14次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>讀寫<b class='flag-5'>can</b>收發(fā)簡單示例基于<b class='flag-5'>socket</b> <b class='flag-5'>can</b>

    嵌入式linux報警,嵌入式LinuxLED報警燈驅(qū)動設(shè)計及編程.doc

    設(shè)計及編程一.實(shí)驗(yàn)?zāi)康?b class='flag-5'>理解驅(qū)動本質(zhì),掌握嵌入式Linux系統(tǒng)驅(qū)動開發(fā)相關(guān)知識,包括端口寄存器訪
    發(fā)表于 11-01 17:21 ?6次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>報警,<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>下</b>LED報警燈<b class='flag-5'>驅(qū)動</b>設(shè)計及編程.doc