第二章-1-Wire通信協(xié)議_第1頁
第二章-1-Wire通信協(xié)議_第2頁
第二章-1-Wire通信協(xié)議_第3頁
第二章-1-Wire通信協(xié)議_第4頁
第二章-1-Wire通信協(xié)議_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

時序ARM(32-BRISC)其次章1-Wire通信協(xié)議概述標準模式和高速模式復位脈沖寫0時隙寫1時隙讀時隙強上拉供電時隙(為總線供應額外的電源電流,用于EPROM/EEPROM編程、溫度轉(zhuǎn)換、SHA-1計算等)1概述單總線要求外接一個約5k的上拉電阻;1概述單總線的閑置狀態(tài)為高電平;傳輸過程須要短暫掛起,且要求傳輸過程還能夠接著的話,則總線必需處于空閑狀態(tài);總線保持低電平超過480μs,總線上的全部器件將復位;位傳輸之間的復原時間沒有限制,只要總線在復原期間處于空閑狀態(tài)。2單總線吩咐序列主機發(fā)起讀寫吩咐并限制整個過程。讀寫吩咐分三個階段:初始化ROM吩咐(跟隨須要交換的數(shù)據(jù))功能吩咐(跟隨須要交換的數(shù)據(jù))2單總線吩咐序列每次訪問單總線器件,必需嚴格遵守這個吩咐序列,假如出現(xiàn)序列混亂,則單總線器件不會響應主機;這個準則對于搜尋ROM吩咐和報警搜尋吩咐例外,在執(zhí)行兩者中任何一條吩咐之后,主機不能執(zhí)行其后的功能吩咐,必需返回至第一步。3.1初始化序列主機初始化過程,主機通過拉低單總線至少480μs,以產(chǎn)生(Tx)復位脈沖。接著,主機釋放總線,并進入接收模式(Rx)。當總線被釋放后,5k上拉電阻將單總線拉高。在單總線器件檢測到上升沿后,延時15-60μs,接著通過拉低總線60-240μs,以產(chǎn)生應答脈沖

3.1初始化序列MResetPulse>480uSS0…SN15uS<T<60uS60uS<4T<240uS45uS<3T<180uSPresencePulseRecoveryPullUpMasterSlaveLegend:3.2復位和應答脈沖unsignedcharow_reset(void){unsignedcharpresence;DQ=0;//pullDQlinelowdelay(29);//leaveitlowfor480μsDQ=1;//allowlinetoreturnhighdelay(3);//waitforpresencepresence=DQ;//getpresencesignaldelay(25);//waitforendoftimeslotreturn(presence);//presencesignalreturned}//presence4讀/寫時隙在寫時隙期間,主機向單總線器件寫入數(shù)據(jù);而在讀時隙期間,主機讀入來自從機的數(shù)據(jù)。在每一個時隙,總線只能傳輸一位數(shù)據(jù)4讀/寫時隙Write1Write0Read1Read015uS<T<60uSMMSlavedevice(s)samplelineMMastersampleslineat15uSMS0…SNoverdriveresistorT=0T=15T=60Slavedevice(s)samplelinePullUpMasterSlaveLegend:4.1寫時隙存在兩種寫時隙:“寫1”和“寫0”。主機接受寫1時隙向從機寫入1,而接受寫0時隙向從機寫入0。寫時隙至少須要60μs,且在兩次獨立的寫時隙之間至少須要1μs的復原時間。產(chǎn)生寫1時隙的方式:主機在拉低總線后,接著必需在15μs之內(nèi)釋放總線,由5k上拉電阻將總線拉至高電平;而產(chǎn)生寫0時隙的方式:在主機拉低總線后,只需在整個時隙期間保持低電平即可(至少60μs)。在寫時隙起始后15-60μs期間,單總線器件采樣總線電平狀態(tài)。假如在此期間采樣為高電平,則邏輯1被寫入該器件;假如為0,則寫入邏輯04.2寫時序4.3寫時序voidwrite_bit(charbitval){DQ=0;//pullDQlowtostarttimeslotif(bitval==1)DQ=1;//returnDQhighifwrite1delay(5);//holdvalueforremainderoftimeslotDQ=1;}//Delayprovides16μsperloop,plus24μsTherefore,delay(5)=104μs4.4寫時序voidwrite_byte(charval){unsignedchari;unsignedchartemp;for(i=0;i<8;i++)//writesbyte,onebitatatime{temp=val>>i;//shiftsvalright‘i’spacestemp&=0x01;//copythatbittotempwrite_bit(temp);//writebitintempinto}delay(5)}4.5讀時序單總線器件僅在主機發(fā)出讀時隙時,才向主機傳輸數(shù)據(jù),在主機發(fā)出讀數(shù)據(jù)吩咐后,必需立刻產(chǎn)生讀時隙,以便從機能夠傳輸數(shù)據(jù)。讀時隙至少須要60μs,且在兩次獨立的讀時隙之間至少須要1μs的復原時間。每個讀時隙都由主機發(fā)起,至少拉低總線1μs。在主機發(fā)起讀時隙之后,單總線器件才起先在總線上發(fā)送0或1。若從機發(fā)送1,則保持總線為高電平;若發(fā)送0,則拉低總線。當發(fā)送0時,從機在該時隙結(jié)束后釋放總線,由上拉電阻將總線拉回至空閑高電平狀態(tài)。從機發(fā)出的數(shù)據(jù)在起始時隙之后,保持有效時間15μs,因而,主機在讀時隙期間必需釋放總線,并且在時隙起始后的15μs之內(nèi)采樣總線狀態(tài)。4.6讀時序4.7讀時序unsignedcharread_bit(void){unsignedchari;DQ=0;//pullDQlowtostarttimeslotDQ=1;//thenreturnhighfor(i=0;i<3;i++);//delay15μsfromstartoftimeslotreturn(DQ);//returnvalueofDQline}4.7讀時序unsignedcharread_byte(void){unsignedchari;unsignedcharvalue=0;for(i=0;i<8;i++){if(read_bit())value|=0x01<<i;//readsbytein,onebyteatatimeandthen//shiftsitleftdelay(6);//waitforrestoftimeslot}return(value);5ROM吩咐主機檢測到應答脈沖后,可以發(fā)出ROM吩咐;ROM吩咐與各個從機設備的唯一64位ROM代碼相關;允許主機在單總線上連接多個從機設備時,指定操作某個從機設備;允許主機能夠檢測到總線上有多少個從機設備以及其設備類型,或者有沒有設備處于報警狀態(tài)5ROM吩咐從機設備可能支持5種ROM吩咐(實際狀況與具體型號有關);每種吩咐長度為8位;主機在發(fā)出功能吩咐之前,必需送出合適的ROM吩咐。如圖2所示。下面將簡要地介紹各個ROM吩咐的功能,以及運用在何種狀況下ROM吩咐的操作流程5.1ROM吩咐搜尋ROM[F0h];讀ROM[33h](僅適合于單節(jié)點);匹配ROM[55h];跳越ROM[CCh];報警搜尋[ECh](僅少數(shù)1-wire器件支持);(1)搜尋ROM[F0h]當系統(tǒng)初始上電時,主機必需找出總線上全部從機設備的ROM代碼,這樣主機就能夠推斷出從機的數(shù)目和類型;主機通過重復執(zhí)行搜尋ROM循環(huán)(搜尋ROM吩咐跟隨著位數(shù)據(jù)交換),以找出總線上全部的從機設備。假如總線只有一個從機設備,則可以接受讀ROM吩咐來替代搜尋ROM吩咐。在每次執(zhí)行完搜尋ROM循環(huán)后,主機必需返回至吩咐序列的第一步(初始化)。(2)讀ROM[33h]僅適用于總線上只有一個從機設備;允許主機干脆讀出從機的64位ROM代碼,而無須執(zhí)行搜尋ROM過程;假如該吩咐用于多節(jié)點系統(tǒng),則發(fā)生數(shù)據(jù)沖突,因為每個從機設備都會響應當吩咐。(3)匹配ROM[55h]匹配ROM吩咐跟隨64位ROM代碼,允許主機訪問多節(jié)點系統(tǒng)中某個指定的從機設備。僅當從機完全匹配64位ROM代碼時,才會響應主機隨后發(fā)出的功能吩咐;其它設備將處于等待復位脈沖狀態(tài)。(4)跳越ROM[CCh]主機能夠接受該吩咐同時訪問總線上的全部從機設備,而無須發(fā)出任何ROM代碼信息;例如,主機通過在發(fā)出跳越ROM吩咐后跟隨轉(zhuǎn)換溫度吩咐[44h],就可以同時吩咐總線上全部的DS18B20起先轉(zhuǎn)換溫度,這樣大大節(jié)約了主機的時間。假如跳越ROM吩咐跟隨的是讀暫存器[BEh]的吩咐(包括其它讀操作吩咐),則該吩咐只能應用于單節(jié)點系統(tǒng),否則將由于多個節(jié)點都響應當吩咐而引起數(shù)據(jù)沖突。(5)報警搜尋[ECh]只有那些報警標記置位的從機才響應當吩咐,其工作方式完全等同于搜尋ROM吩咐。該吩咐允許主機設備推斷那些從機設備發(fā)生了報警(如最近的測量溫度過高或過低等)。同搜尋ROM吩咐一樣,在完成報警搜尋循環(huán)后,主機必需返回至吩咐序列的第一步。6功能吩咐在主機發(fā)出ROM吩咐后,發(fā)送功能吩咐;如訪問某個指定的DS18B20,接著就可以發(fā)出DS18B20支持的某個功能吩咐。這些吩咐允許主機寫入或讀出DS18B20暫存器、啟動溫度轉(zhuǎn)換以及推斷從機的供電方式。并在圖3流程圖中作了說明表1、DS18B20功能吩咐集命令描述命令代碼發(fā)送命令后,單總線上的響應信息注釋溫度轉(zhuǎn)換命令轉(zhuǎn)換溫度啟動溫度轉(zhuǎn)換44h無1存儲器命令讀暫存器讀全部的暫存器內(nèi)容,包括CRC字節(jié)BEhDS18B20傳輸多達9個字節(jié)至主機2寫暫存器寫暫存器第2、3和4個字節(jié)的數(shù)據(jù)(即TH,TL和配置寄存器)4Eh主機傳輸3個字節(jié)數(shù)據(jù)至DS18B203復制暫存器將暫存器中的TH,TL和配置字節(jié)復制到EEPROM中48h無1回讀EEPROM將TH,TL和配置字節(jié)從EEPROM回讀至暫存器中B8hDS18B20傳送回讀狀態(tài)至主機1.在溫度轉(zhuǎn)換和復制暫存器數(shù)據(jù)至EEPROM期間,主機必需在單總線上允許強上拉。并且在此期間,總線上不能進行其它數(shù)據(jù)傳輸;2.通過發(fā)出復位脈沖,主機能夠在任何時候中斷數(shù)據(jù)傳輸;3.在復位脈沖發(fā)出前,必需寫入全部的三個字節(jié)功能吩咐流程圖7ROM搜尋ROM搜尋過程的三步循環(huán)程序:讀一位讀該位的補碼寫入一個期望的數(shù)據(jù)位總線主機在ROM的每一位上都重復這三步循環(huán)程序;當完成某個器件后,主機就能夠知曉該器件的ROM信息;剩下的設備數(shù)量及其ROM代碼通過相同的過程即可獲得。7ROM搜尋過程四個不同的器件被連接至同一條總線上:ROM100110101…ROM210101010…ROM311110101…ROM400010001…(1)初始化單總線上的全部傳輸過程都是以初始化起先的;初始化過程由主機發(fā)出的復位脈沖和從機響應的應答脈沖組成;應答脈沖使主機知道,總線上有從機設備,且準備就緒。(2)發(fā)送ROM吩咐主機在總線上發(fā)出ROM搜尋吩咐ROM[F0h](3)執(zhí)行三步循環(huán)程序從總線上準備讀入一個數(shù)據(jù)位;ROM100110101…ROM210101010…ROM311110101…ROM400010001…總線上讀到的是0(邏輯“與”)主機起先讀另一位(第一位的補碼);總線上讀到的是0(邏輯“與”)總線上有些器件的ROM代碼第一位為0,有些則為1(3)執(zhí)行三步循環(huán)程序兩次讀到的數(shù)據(jù)位具有以下含義:00在該位處,存在設備沖突;01在該位處,全部器件為0;10在該位處,全部器件為1;11單總線不存在任何設備。(3)執(zhí)行三步循環(huán)程序主機寫入0,從而禁止了ROM2和ROM3響應余下的搜尋吩咐,僅在總線上留下了ROM1和ROM4ROM100110101…ROM210101010…ROM311110101…ROM400010001…(4)搜尋其次位主機再執(zhí)行兩次讀操作,依次收到0和1,這表明ROM1和ROM4在ROM代碼的其次位都是0;ROM100110101…ROM210101010…ROM311110101…ROM400010001…接著主機寫入0,在總線上接著保持ROM1和ROM4。(5)搜尋第三位主機又執(zhí)行兩次讀操作,收到兩個0,表明所連接的設備的ROM代碼在第三位既有0,也有1;ROM100110101…ROM210101010…ROM311110101…ROM400010001…主機再次寫入0,從而禁止了ROM1響應余下的搜尋吩咐,僅在總線上留下了ROM2。(6)搜尋第四位主機讀完ROM4余下的ROM數(shù)據(jù)位。這樣就完成了第一次搜尋,并找到了位于總線上的第一個設備。(7)搜尋其他器件重復執(zhí)行第1至第7步,起先新一輪的ROM搜尋吩咐。主機寫入1,使ROM4離線,僅在總線上留下ROM1;主機讀完ROM1余下的ROM數(shù)據(jù),這樣就完成了其次次的ROM搜尋,找到了其次個ROM代碼。重復執(zhí)行第1至第3步,起先新一輪的ROM搜尋吩咐;主機寫入1,這次禁止了ROM1和ROM4響應余下的搜尋吩咐,僅在總線上留下了ROM2和ROM3ROM100110101…ROM210101010…ROM311110101…ROM400010001…8搜尋ROM時間每次搜尋ROM操作,主機只能找到某一個單總線器件的ROM代碼,所須要的最短時間為:960μs+(8+3×64)×61μs=13.16ms所以,主機能夠在1秒之內(nèi)讀出75個單總線的ROM代碼。利用串口實現(xiàn)1-WIRE通訊復位intResetOneWire(void){ //definetheresponseoftheone-wiredevice unsignedcharucResponse; intret; ret=0; //settheUARTBaud:9600,8bits,noparity,1stop BAUT=9600; Comm_Init(COM,BAUT,MODE_NO,'N');//initCOM //Transmittingan0xF0fromuartformstheproperResetpulse Comm_Send_Char(COM,0xF0); //ChecktheUARTbuffer,ifnodevicispresent,thereceivevalue //willequalthetransmitvalue;otherwisethereceivevaluecanvary. //Asingleslavedevicerunningatminimuminternaltimingwillchange //theresponseto0xE0,andthemaximuminternaltimingwillchangethe //theresponseto0x90 ucResponse=Comm_Rec_Char(COM);#if0//TEST_ONEWIRE printf("Resetonewire\n"); printf("Resetvalue=0x%x\n",ucResponse);#endif if(ucResponse!=0xF0) ret=1;//devicesonlinearepresent else ret=0;//nodeviceispresent //settheUARTBaud:115200,8bits,noparity,1stop BAUT=115200; Comm_Init(COM,BAUT,MODE_NO,'N');//initCOM returnret;}讀一位intOW_ReadBit(void){ unsignedcharucResponse; //transimit0xFFfirst Comm_Send_Char(COM,0xFF); //readtheUARTbuffer ucResponse=Comm_Rec_Char(COM); if(ucResponse==0xff) return1;//1isread else return0;//0isread}讀一個字節(jié)unsignedcharOW_ReadByte(void){ //definethereadvalue unsignedcharucResponse; unsignedcharucValue; inti; ucValue=0; for(i=0;i<8;i++) { //transimit0xFFfirst Comm_Send_Char(COM,0xFF); //readtheUARTbuffer ucResponse=Comm_Rec_Char(COM); if(ucResponse==0xff) ucValue=ucValue|(0x1<<i);//1isread //else0isread } //8-bitsdataisreadandreturn returnucValue;}寫一位intOW_WriteBit(intdata){ unsignedcharucResponse; //transimit0xFFfirst if(data==0) { Comm_Send_Char(COM,0x00); //readtheUARTbuffer

溫馨提示

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

評論

0/150

提交評論