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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

[硬件驱动] CAN接口

發(fā)布時(shí)間:2023/12/15 综合教程 82 生活家
生活随笔 收集整理的這篇文章主要介紹了 [硬件驱动] 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ù)量說(shuō),單線CAN只需1條導(dǎo)線,低速容錯(cuò)CAN和高速CAN通過(guò)雙絞線傳輸。雙絞線能有效減少外部電磁場(chǎng)對(duì)信息內(nèi)部電平的干擾。還有電平的邏輯的區(qū)別,定義邏輯為1稱作隱性,邏輯為0稱作顯性。這個(gè)區(qū)別可從以下幾種情況來(lái)說(shuō)明:空閑時(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)有信號(hào)修改時(shí),CAN_High 線上的電壓值變高了,一般來(lái)說(shuō)會(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),對(duì)每個(gè)節(jié)點(diǎn)來(lái)說(shuō),無(wú)論數(shù)據(jù)是否是發(fā)給自己的,都對(duì)其接收。

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

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

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

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

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

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

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

/**
* 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 */
__u8can_dlc; /* frame payload length in byte (0 .. CAN_MAX_DLEN) */
__u8data[CAN_MAX_DLEN] __attribute__((aligned(8)));
};

can_id定義如下所示,是一個(gè)無(wú)符號(hào)的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)識(shí)符,如果是擴(kuò)展幀,則高11位為標(biāo)準(zhǔn)ID

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

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

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

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

/* 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接口的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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