第7章 第2部分 CAN總線_第1頁(yè)
第7章 第2部分 CAN總線_第2頁(yè)
第7章 第2部分 CAN總線_第3頁(yè)
第7章 第2部分 CAN總線_第4頁(yè)
第7章 第2部分 CAN總線_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第七章之第4節(jié)

CAN總線原理及實(shí)驗(yàn)主要內(nèi)容:了解SPI總線的原理,掌握通過SPI總線訪問器件的方法掌握CAN總線通訊原理學(xué)習(xí)CAN總線控制器MCP2510驅(qū)動(dòng)的開發(fā)實(shí)驗(yàn)部分內(nèi)容1、添加CAN總線驅(qū)動(dòng)的write操作,實(shí)現(xiàn)CAN數(shù)據(jù)自回環(huán)模式的收發(fā)。2、修改應(yīng)用程序,實(shí)現(xiàn)兩臺(tái)CAN總線之間數(shù)據(jù)的收發(fā)。SPI(SerialPeripheralInterface)SPI總線概述SPI總線是Motorola公司推出的三線同步接口,同步串行3線方式進(jìn)行通信:一條時(shí)鐘線SCK,一條數(shù)據(jù)輸入線MOSI,一條數(shù)據(jù)輸出線MISO;用于CPU與各種外圍器件進(jìn)行全雙工、同步串行通訊。SPI主要特點(diǎn)有:可以同時(shí)發(fā)出和接收串行數(shù)據(jù);可以當(dāng)作主機(jī)或從機(jī)工作;提供頻率可編程時(shí)鐘;發(fā)送結(jié)束中斷標(biāo)志;寫沖突保護(hù);總線競(jìng)爭(zhēng)保護(hù)等。SPI(SerialPeripheralInterface)SPI的四種傳輸數(shù)據(jù)的四種模式:根據(jù)時(shí)鐘的極性和相位的不同工作于四種模式CPOL:時(shí)鐘極性,表示SPI在空閑時(shí),時(shí)鐘信號(hào)是高電平還是低電平。若CPOL被設(shè)為1,那么該設(shè)備在空閑時(shí)SCK管腳下的時(shí)鐘信號(hào)為高電平.當(dāng)CPOL被設(shè)為0時(shí)則正好相反。CPHA:時(shí)鐘相位,表示SPI設(shè)備是在SCK管腳上的時(shí)鐘信號(hào)變?yōu)樯仙貢r(shí)觸發(fā)數(shù)據(jù)采樣,還是在時(shí)鐘信號(hào)變?yōu)橄陆笛貢r(shí)觸發(fā)數(shù)據(jù)采樣。若CPHA被設(shè)置為1,則SPI設(shè)備在時(shí)鐘信號(hào)變?yōu)橄陆笛貢r(shí)觸發(fā)數(shù)據(jù)采樣,在上升沿時(shí)發(fā)送數(shù)據(jù)。當(dāng)CPHA被設(shè)為0時(shí)也正好相反。SPI(SerialPeripheralInterface)SPI工作模式查詢模式中斷模式DMA模式SPI(SerialPeripheralInterface)S3C2410x的SPI模塊SPI相關(guān)的寄存器功能介紹;SPCON0--SMOD//選擇SPI的工作模式:查詢、中斷、DMA--ENSCK//輸出CLK使能控制位

--MSTR//主從方式選擇

--CPOL//時(shí)鐘極性選擇

--CPHA//相位選擇

--TAGD//(?)SPSTA0--DCOL//數(shù)據(jù)沖突檢測(cè)

--MULF//多主模式檢測(cè)

--REDY//發(fā)送或接受準(zhǔn)備就緒標(biāo)志位,SPTDATn可以讀寫標(biāo)志位SPPIN0//SPI管腳控制寄存器SPPRE0//SPI傳輸速率控制寄存器SPTDAT0//從模式下發(fā)送數(shù)據(jù)寄存器主模式下反SPRDAT0//從模式下接受數(shù)據(jù)寄存器..SPI(SerialPeripheralInterface)設(shè)置SPI接口參考以下步驟:

1、設(shè)置SPI的波特率(對(duì)應(yīng)的波特率控制寄存器SPPREn)

2、設(shè)置SPI控制寄存器(SPCONn),配置SPI的工作模式

3、如果要初始化MMC或者SDCARD,則要寫入數(shù)據(jù)OxFF到寄存器SPIDATn十次

4、啟動(dòng)MMC或者SDCARD,要設(shè)置nSS對(duì)應(yīng)的GPIO為低電平

5、發(fā)送數(shù)據(jù)時(shí),首先檢測(cè)REDY是否為1,然后在寫數(shù)據(jù)到SPTDATn6、讀數(shù)據(jù)方式一:SPCONn的控制位TAGD=0//normalmode時(shí),先寫數(shù)據(jù)0xFF到寄存器SPTDATn,然后再檢測(cè)傳輸就標(biāo)志位REDY是否為1,在讀取數(shù)據(jù)到本地緩存;

7、讀數(shù)據(jù)方式二:SPCONn的控制位TAGD=1//TxAutoGarbageDatamode時(shí)檢測(cè)傳輸就標(biāo)志位REDY是否為1,在讀取數(shù)據(jù)到本地緩存

8、設(shè)置nSS對(duì)應(yīng)的GPIO為高電平,關(guān)閉MMC或者SDCARD;SPI(SerialPeripheralInterface)SPI讀寫數(shù)據(jù)的檢測(cè)當(dāng)寫入數(shù)據(jù)時(shí):REDY時(shí)鐘是零,寫入完成之后賦值為1例:SPTDAT0=val;//寫數(shù)據(jù)到發(fā)送數(shù)據(jù)寄存器while(!(SPSTA0&1));//等待發(fā)送全部完成SPI(SerialPeripheralInterface)SPI初始化初始化SPI連接外部設(shè)備的端口

//初始化與SPI相關(guān)的三個(gè)GPIO//PIMISOSPIMOSISPICLKset_gpio_ctrl(GPIO_TC_SPIMISO);set_gpio_ctrl(GPIO_TC_SPIMOSI);set_gpio_ctrl(GPIO_TC_SPICLK);注:關(guān)于GPIO的設(shè)置在后面詳細(xì)介紹SPI(SerialPeripheralInterface)SPI初始化設(shè)置傳遞模式設(shè)置工作模式設(shè)置波特率設(shè)置時(shí)鐘//設(shè)置SPI的工作模式為查詢模式//開通外部時(shí)鐘使能//設(shè)置主從模式為主模式//設(shè)置時(shí)鐘脈沖極性為高電平//設(shè)置時(shí)鐘脈沖相位為模式A(上升沿)//設(shè)置時(shí)鐘分頻參數(shù)為40PCLK/2/(40+1)=BaudrateSPI(SerialPeripheralInterface)SPI讀寫數(shù)據(jù)(8位數(shù)據(jù))讀操作inlinestaticcharSPIRecv(intchannel){ if(channel==0){

returnSPRDAT0; }elseif(channel==1){ returnSPRDAT1; }else return-1;}SPI(SerialPeripheralInterface)寫操作inlinestaticvoidSPISend(unsignedcharval,intchannel){

intflags;

local_irq_save(flags); if(channel==0){ SPTDAT0=val; while(!(SPSTA0&1));//等待寫入全部完成

}elseif(channel==1){ SPTDAT1=val; while(!(SPSTA1&1)); }

local_irq_restore(flags);}CAN總線的原理CAN全稱為ControllerAreaNetwork,即控制器局域網(wǎng),是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。最初CAN總線被設(shè)計(jì)作為汽車環(huán)境中的微控制器通訊,在車載各電子控制裝置ECU之間交換信息,形成汽車電子控制網(wǎng)絡(luò)。比如,發(fā)動(dòng)機(jī)管理系統(tǒng)、變速箱控制器、儀表裝備、電子主干系統(tǒng)中均嵌入CAN控制裝置。ECU(ElectronicControlUnit):電子控制單元,又稱“行車電腦”、“車載電腦”等CAN總線的原理CAN的主要優(yōu)點(diǎn)包括:低成本極高的總線利用率很遠(yuǎn)的數(shù)據(jù)傳輸距離(長(zhǎng)達(dá)10公里)高速的數(shù)據(jù)傳輸速率(高達(dá)1Mbit/s)可根據(jù)報(bào)文的ID決定接收或屏蔽該報(bào)文可靠的錯(cuò)誤處理和檢錯(cuò)機(jī)制發(fā)送的信息遭到破壞后可自動(dòng)重發(fā)節(jié)點(diǎn)在錯(cuò)誤嚴(yán)重的情況下具有自動(dòng)退出總線的功能報(bào)文不包含源地址或目標(biāo)地址僅用標(biāo)志符來指示功能信息優(yōu)先級(jí)信CAN總線的原理一個(gè)由CAN總線構(gòu)成的單一網(wǎng)絡(luò)中,理論上可以掛接無(wú)數(shù)個(gè)節(jié)點(diǎn)。實(shí)際應(yīng)用中,節(jié)點(diǎn)數(shù)目受網(wǎng)絡(luò)硬件的電氣特性所限制 例如,當(dāng)使用TJA1050作為CAN收發(fā)器時(shí),同一網(wǎng)絡(luò)中允許掛接110個(gè)節(jié)點(diǎn)。CAN總線的電氣特征物理介質(zhì),“顯性”和“隱性” CAN能夠使用多種物理介質(zhì)進(jìn)行傳輸,例如:雙絞線、光纖等。最常用的就是雙絞線。信號(hào)使用差分電壓傳送,兩條信號(hào)線被稱為CAN_H和CAN_L,靜態(tài)時(shí)均是2.5V左右,此時(shí)狀態(tài)表示為邏輯1也可以叫做“隱性”。用CAN_H比CAN_L高表示邏輯0,稱為“顯性”。CAN總線的原理CAN總線的MAC幀結(jié)構(gòu)CAN總線的原理典型系統(tǒng)實(shí)現(xiàn)方法節(jié)點(diǎn)控制器-S3C2410微處理器,CAN控制器-MCP2510、MCP2515芯片,CAN收發(fā)器-TJA1050、TJA1040芯片。CAN總線的原理CAN總線控制器MCP2510支持標(biāo)準(zhǔn)格式和擴(kuò)展格式的CAN數(shù)據(jù)幀結(jié)構(gòu)

0-8字節(jié)的有效數(shù)據(jù)長(zhǎng)度,支持遠(yuǎn)程幀最大1Mbps的可編程波特率兩個(gè)支持過濾器(Fliter、Mask)的接收緩沖區(qū),三個(gè)發(fā)送緩沖區(qū)支持回環(huán)(LoopBack)模式

SPI高速串行總線,最大5MHz(4.5V供電)

3V到5.5V供電CAN總線的原理MCP2510芯片CAN總線的原理芯片內(nèi)部功能結(jié)構(gòu)CAN總線的原理CAN模塊原理圖CAN總線的原理MCP2510的控制字命令格式定義復(fù)位11000000設(shè)置內(nèi)部寄存器為默認(rèn)值,并設(shè)置MCP2510到配置狀態(tài)讀取00000011從選定的寄存器的地址開始讀取數(shù)據(jù)寫入00000010向選定的寄存器的地址開始寫入數(shù)據(jù)發(fā)送請(qǐng)求10000nnn設(shè)置一個(gè)或者多個(gè)發(fā)送請(qǐng)求位,發(fā)送緩沖區(qū)中的數(shù)據(jù)讀取狀態(tài)10100000輪流檢測(cè)發(fā)送或者接收的狀態(tài)修改位00000101按位修改寄存器CAN總線的原理典型時(shí)序--讀取命令

CAN總線的原理典型時(shí)序--單字節(jié)寫入命令

CAN總線的原理波特率的設(shè)置:通過設(shè)置MCP2510中的CNF1、CNF2、CNF3三個(gè)寄存器,實(shí)現(xiàn)不同時(shí)鐘下,CAN總線通訊的波特率的設(shè)置。在本實(shí)驗(yàn)平臺(tái)中,MCP2510的輸入時(shí)鐘為16MHz。相位1與相位2以采樣點(diǎn)分割CAN波特率同步段傳輸段相位1相位2CNF1CNF2CNF3125Kpbs17440x030x9E0x03250Kpbs17440x010x9E0x03500Kpbs17440x000x9E0x031Mbps13220x000x9E0x03實(shí)驗(yàn)內(nèi)容1、在驅(qū)動(dòng)模塊中添加write接口,實(shí)現(xiàn)can總線發(fā)送數(shù)據(jù)功能2、參考main.c程序,編寫系統(tǒng)的應(yīng)用程序,實(shí)現(xiàn)讀取的功能。3、修改Mikefile文件,編譯應(yīng)用程序代碼分析--應(yīng)用程序接口(API)驅(qū)動(dòng)程序提供給用戶應(yīng)用程序的接口write,//發(fā)送read,//接收ioctl,//其他操作open,//打開設(shè)備release:,//關(guān)閉設(shè)備分析應(yīng)用程序代碼:代碼分析--驅(qū)動(dòng)程序驅(qū)動(dòng)程序?qū)崿F(xiàn):staticstruct

file_operationss3c2410_fops={ owner: THIS_MODULE, write: s3c2410_mcp2510_write, read: s3c2410_mcp2510_read,

ioctl: s3c2410_mcp2510_ioctl, open: s3c2410_mcp2510_open, release: s3c2410_mcp2510_release,};代碼分析--MCP2510驅(qū)動(dòng)框架代碼分析MCP2510的初始化:MCP2510的初始化如下步驟:軟件復(fù)位,進(jìn)入配置模式設(shè)置CAN總線波特率關(guān)閉中斷設(shè)置ID過濾器切換MCP2510到正常狀態(tài)(Normal)清空接受和發(fā)送緩沖區(qū)開啟接收緩沖區(qū),開啟中斷(可選)代碼分析代碼分析--

CanData數(shù)據(jù)結(jié)構(gòu)typedef

struct{ unsignedintid; //CAN總線ID unsignedchardata[8]; //CAN總線數(shù)據(jù)

unsignedchardlc; //數(shù)據(jù)長(zhǎng)度

int

IsExt; //是否是擴(kuò)展幀

int

rxRTR; //是否是遠(yuǎn)程幀}CanData,*PCanData;代碼分析--MCP2510Write操作1、在local處理器上關(guān)閉中斷2、MCP2510片選ENABLE3、CAN總線單字節(jié)寫入操作4、MCP2510片選DISABLE5、打開中斷代碼分析--MCP2510Write操作在local處理器上關(guān)閉/打開中斷操作:

local_irq_save(flags);

local_irq_restore(flags);代碼分析--MCP2510Write操作CAN總線單字節(jié)寫入操作1、SPI總線發(fā)送數(shù)據(jù)函數(shù):SendSIOData()//一個(gè)封裝函數(shù)2、發(fā)送單字節(jié)寫入命令:0x103、發(fā)送寫入的地址4、發(fā)送寫入的內(nèi)容代碼分析--MCP2510Read操作staticunsignedcharMCP2510_Read(intaddress){ unsignedcharresult;

intflags;

local_irq_save(flags); MCP2510_Enable(); SendSIOData(MCP2510INSTR_READ); //發(fā)送讀命令

SendSIOData((unsigned

char)address); //發(fā)送讀取數(shù)據(jù)的地址 SendSIOData(0); result=ReadSIOData(); MCP2510_Disable();

local_irq_restore(flags); returnresult;}Can總線發(fā)送流程1、在s3c2410_fops結(jié)構(gòu)中添加寫接口

2、用戶程序使用CanData數(shù)據(jù)結(jié)構(gòu)給驅(qū)動(dòng)模塊傳遞參數(shù)3、從用戶空間讀取待發(fā)送的內(nèi)容

4、將用戶空間傳遞的數(shù)據(jù)加以解析

5、MCP2510通過SPI接口與處理器傳遞數(shù)據(jù)Can總線發(fā)送流程通過CanData結(jié)構(gòu)發(fā)送數(shù)據(jù): (1)申請(qǐng)CanData大小的空間

charsendbuffer[sizeof(CanData)]

(2)判斷只操作CanData大小的數(shù)據(jù)結(jié)構(gòu)的情況(其他數(shù)量的字節(jié)報(bào)錯(cuò)返回) (3)copy數(shù)據(jù)從用戶空間到內(nèi)核空間中

(4)調(diào)用CAN總線發(fā)送數(shù)據(jù)函數(shù)(注意數(shù)據(jù)類型)

MCP2510_canWrite();實(shí)驗(yàn)內(nèi)容1、在驅(qū)動(dòng)模塊中添加write接口,實(shí)現(xiàn)can總線發(fā)送數(shù)據(jù)功能2、參考main.c程序,編寫系統(tǒng)的應(yīng)用程序,實(shí)現(xiàn)讀取的功能。3、修改Mikefile文件,編譯應(yīng)用程序代碼分析--用戶程序調(diào)用驅(qū)動(dòng)程序staticvoidCanSendString(char*pstr){

CanDatadata;

int

len=strlen(pstr);memset(&data,0,sizeof(CanData));

data.id=0x123;

data.dlc=8;

for(;len>MAX_CANDATALEN;

len-=MAX_CANDATALEN){

memcpy(data.data,pstr,8);if(write(can_fd,&data,sizeof(data))<0){

printf("writeerror!\n");return;}

pstr+=8;}

data.dlc=len;

memcpy(data.data,pstr,len);if(write(can_fd,&data,sizeof(data))<0){

printf("writeerror!\n");return;}}代碼分析--接收緩沖區(qū)數(shù)據(jù)結(jié)構(gòu)typedef

struct{

CanDataMCP2510_Candata[MCP2510_CanRevBuffer]; //recievedatabuffer

int

nCanRevpos; //recievebufferposforqueuedevents

int

nCanReadpos;//readbufferposforqueuedevents

int

loopbackmode;

wait_queue_head_t

wq;

spinlock_tlock;}Mcp2510_DEV;代碼分析--ioctl實(shí)現(xiàn)應(yīng)用程序與驅(qū)動(dòng)程序通信s3c2410_mcp2510_ioctl:UPCAN_IOCTRL_SETBANDUPCAN_IOCTRL_SETIDUPCAN_IOCTRL_SETLPBKUPCAN_IOCTRL_SETFILTERUPCAN_IOCTRL_PRINTRIGISTER代碼代碼分析--ioctl實(shí)現(xiàn)應(yīng)用程序與驅(qū)動(dòng)程序通信應(yīng)用程序中調(diào)用ioctl方法實(shí)現(xiàn)參數(shù)傳遞:ioctl(can_fd,UPCAN_IOCTRL_PRINTRIGISTER,NULL);ioctl(can_fd,UPCAN_IOCTRL_SETID,id);#ifdefDEBUG

ioctl(can_fd,UPCAN_IOCTRL_SETLPBK,1);#endif實(shí)驗(yàn)修改應(yīng)用程序,實(shí)現(xiàn)兩臺(tái)CAN總線之間數(shù)據(jù)的收發(fā)S3C2410x的I/O設(shè)置控制GPIO的控制寄存器:包括:GPACON-GPHCONs3c2410的很多管腳都是復(fù)用的因此需要設(shè)置相應(yīng)的控制寄存器,來決定管腳的用途;GPxCON//端口配置寄存器GPxDAT//端口數(shù)據(jù)寄存器GPxUP//端口上拉控制寄存器S3C2410x的I/O設(shè)置設(shè)置說明:1、因?yàn)镻ORTA只用于輸出,所以對(duì)應(yīng)的控制寄存器只有,GPACON和GPADAT2、另外還有一些端口設(shè)置寄存器:

MISCCR//這個(gè)寄存器里包含了USB、時(shí)鐘輸出、上拉控制寄存器使能等多個(gè)控制位;比較復(fù)雜EXTINTNx//控制外部中斷輸入請(qǐng)求的方式包括:高、低電平中斷方式,上、下降沿中斷方式和邊沿中斷方式;EINTMASK//外部中斷屏蔽控制寄存器EINTPENDx//還未知它是做什么用的(好象是未決什么的)GSTATUSx//普通io狀態(tài)寄存器訪問linux的外部IO設(shè)備CPU對(duì)外設(shè)IO端口物理地址的編址方式有兩種:一種是I/O映射方式(I/O-mapped)一種是內(nèi)存映射方式(Memory-mapped)。訪問I/O內(nèi)存資源映射I/O內(nèi)存資源讀寫I/O內(nèi)存資源注:關(guān)于linux的I/O管理內(nèi)容很多,如果要詳細(xì)講解,請(qǐng)參考linux操作系統(tǒng)的教程訪問linux的外部IO設(shè)備映射I/O內(nèi)存資源Linux在io.h頭文件中聲明了函數(shù)ioremap(),用來將I/O內(nèi)存資源的物理地址映射到核心虛地址空間(3G-4G)ioremap函數(shù)//完成物理地址到內(nèi)核虛擬地址的映射iounmap函數(shù)//取消映射訪問linux的外部IO設(shè)備讀寫I/O內(nèi)存資源在將I/O內(nèi)存資源的物理地址映射成核心虛地址后

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論