日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】[硬件驱动] CAN接口

發(fā)布時(shí)間:2023/12/20 编程问答 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】[硬件驱动] CAN接口 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CAN接口的介紹:

CAN總線可分為: 高速CAN,低速CAN ,單線CAN。

1.在速度方面高速CAN的傳輸速率(波特率)在125K~~1Mbps 。低速CAN的速率在125Kbps以下,低速CAN具更好的容錯(cuò)性。單線CAN波特率在33K~~83Kbps.

2.這三種總線之間的最主要區(qū)別是物理層。以傳輸介質(zhì)和線的數(shù)量說,單線CAN只需1條導(dǎo)線,低速容錯(cuò)CAN和高速CAN通過雙絞線傳輸。雙絞線能有效減少外部電磁場對信息內(nèi)部電平的干擾。?還有電平的邏輯的區(qū)別,定義邏輯為1稱作隱性,邏輯為0稱作顯性。這個(gè)區(qū)別可從以下幾種情況來說明:空閑時(shí)、有效時(shí)、睡眠時(shí)、喚醒時(shí)。這里假設(shè)收發(fā)器的電源為標(biāo)準(zhǔn)的5V和12V。?

當(dāng)雙線CAN的兩個(gè)導(dǎo)線處于靜止?fàn)顟B(tài),兩個(gè)電平是一樣的,大約2.5伏,這個(gè)靜電平狀態(tài)就是隱形狀態(tài),也稱隱性電平,也就是沒有任何干擾的時(shí)候的狀態(tài)稱為隱性狀態(tài)。當(dāng)有信號修改時(shí),CAN_High 線上的電壓值變高了,一般來說會(huì)升高至少1v;而CAN_Low 線上的電壓值會(huì)降低一個(gè)同樣值,也是1v。那么此時(shí),CAN_High 就是 2.5v+1v=3.5v,它就處于激活狀態(tài)了。而CAN_Low 降為2.5v-1v=1.5v。

?

? 2.1 空閑時(shí) (隱性位)

2.2 有效時(shí) (顯性位)

2.3 睡眠時(shí)?

2.4 喚醒時(shí)?

3.CAN工作原理?

當(dāng) CAN 總線上的某一個(gè)節(jié)點(diǎn)或站發(fā)送數(shù)據(jù)時(shí),它以報(bào)文的形式廣播給網(wǎng)絡(luò)中所有節(jié)點(diǎn),對每個(gè)節(jié)點(diǎn)來說,無論數(shù)據(jù)是否是發(fā)給自己的,都對其接收。

每組報(bào)文開頭的11 位字符為標(biāo)識符,定義了報(bào)文的優(yōu)先級,這種報(bào)文格式成為面向內(nèi)容的編制方案。同一系統(tǒng)中標(biāo)識符是唯一的,當(dāng)幾個(gè)站同時(shí)競爭總線讀取時(shí),這種配置十分重要。

CAN 的報(bào)文格式有兩種,不同之處其實(shí)就是識別符長度不同,具有11 位識別符的幀稱為標(biāo)準(zhǔn)幀,而還有29 位識別符的幀為擴(kuò)展幀,CAN 報(bào)文有以下4 個(gè)不同的幀類型。分別是:

(1) 數(shù)據(jù)幀:發(fā)送幀的節(jié)點(diǎn)設(shè)備,發(fā)送這個(gè)幀的目的是為了將某些消息傳遞給其他節(jié)點(diǎn)設(shè)備(最常用的幀類型)(幀中的仲裁域中的節(jié)點(diǎn)序號,是發(fā)送幀的節(jié)點(diǎn)設(shè)備本身的ID號。)

(2) 遠(yuǎn)程幀:發(fā)送幀的節(jié)點(diǎn)設(shè)備,發(fā)送這個(gè)幀的目的是呼叫其他節(jié)點(diǎn)設(shè)備發(fā)送數(shù)據(jù)(較為常用的幀類型)(幀中的仲裁域的節(jié)點(diǎn)序號,是呼叫節(jié)點(diǎn)設(shè)備的ID號。數(shù)據(jù)域無內(nèi)容。)

(3) 錯(cuò)誤幀:因?yàn)橥ㄐ胖?#xff0c;因?yàn)楦鞣N因素干擾太多了,總會(huì)有可能產(chǎn)生錯(cuò)誤,那么出現(xiàn)錯(cuò)誤怎么辦?
發(fā)送幀的節(jié)點(diǎn)設(shè)備,發(fā)送這個(gè)幀的目的是發(fā)現(xiàn)總線上的幀有錯(cuò)誤,提醒總線上的其他設(shè)備。(比較少用)

(4) 過載幀:因?yàn)橥ㄐ艜r(shí),總是兩方或者多方通信,所以,發(fā)送數(shù)據(jù)的那一方不知道接收的那一方準(zhǔn)備好了沒有,所以,過載幀的作用就是接收方(接收節(jié)點(diǎn)設(shè)備)告訴發(fā)送方,接收方還沒有準(zhǔn)備好接收下一幀的工作,請緩一會(huì)。

(5)間隔幀:幀間隔就是上述四種幀的中間,都要有這個(gè)幀間隔,去隔離。以達(dá)到容易每個(gè)幀的類型。如果每個(gè)幀都直接連接在一起,變成一坨一坨的數(shù)據(jù)堆,接收方會(huì)非常難解讀的。所以幀間隔好比我們文字中的標(biāo)點(diǎn)符號中的句號一樣,起到讓通信密文更加易懂。

/**
?* struct can_frame - basic CAN frame structure
?* @can_id:??CAN ID of the frame and CAN_*_FLAG flags, see canid_t definition
?* @can_dlc: frame payload length in byte (0 .. 8) aka data length code
?*???????????N.B. the DLC field from ISO 11898-1 Chapter 8.4.2.3 has a 1:1
?*???????????mapping of the 'data length code' to the real payload length
?* @data:????CAN frame payload (up to 8 byte)
?*/
struct can_frame {
?canid_t can_id;??/* 32 bit CAN_ID + EFF/RTR/ERR flags */
?__u8????can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */
?__u8????data[CAN_MAX_DLEN] __attribute__((aligned(8)));
};

can_id定義如下所示,是一個(gè)無符號的32位整形數(shù)

typedef __u32 canid_t;

can_id數(shù)據(jù)組織形式如下

/*
?* Controller Area Network Identifier structure
?*
?* bit 0-28?: CAN identifier (11/29 bit)
?* bit 29?: error message frame flag (0 = data frame, 1 = error message)
?* bit 30?: remote transmission request flag (1 = rtr frame)
?* bit 31?: frame format flag (0 = standard 11 bit, 1 = extended 29 bit)
?*/

0-28位為標(biāo)識符,如果是擴(kuò)展幀,則高11位為標(biāo)準(zhǔn)ID

29位標(biāo)識是數(shù)據(jù)幀還是錯(cuò)誤消息

30位說明是否是遠(yuǎn)程幀

31位說明是標(biāo)準(zhǔn)幀還是擴(kuò)展幀。

以下是在處理can_frame時(shí)用到的掩碼和標(biāo)識符:

/* special address description flags for the CAN_ID */
#define CAN_EFF_FLAG 0x80000000U /* EFF/SFF is set in the MSB */
#define CAN_RTR_FLAG 0x40000000U /* remote transmission request */
#define CAN_ERR_FLAG 0x20000000U /* error message frame */

/* valid bits in CAN ID for frame formats */
#define CAN_SFF_MASK 0x000007FFU /* standard frame format (SFF) */
#define CAN_EFF_MASK 0x1FFFFFFFU /* extended frame format (EFF) */
#define CAN_ERR_MASK 0x1FFFFFFFU /* omit EFF, RTR, ERR flags */

總結(jié)

以上是生活随笔為你收集整理的【转】[硬件驱动] CAN接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。