1-wire協議

來源:互聯網
上載者:User
1-wire協議

  作為一種單主機多從機的匯流排系統,在一條1-Wire匯流排上可掛接的從器件數量幾乎不受限制。為了不邏輯上的衝突,所有從器件的1-Wire匯流排介面都是漏極開路的,因此在使用時必須對匯流排外加上拉電阻(一般取5kΩ 左右)。主機對1-Wire匯流排的基本操作分為複位、讀和寫三種,其中所有的讀寫操作均為低位在前高位在後。複位、讀和寫是1-Wire匯流排通訊的基礎,下面通過具體程式詳細介紹這3種操作的時序要求。(程式中DQ代表1-Wire匯流排,定義為P1.0,uchar定義為unsigned
char)

  1-Wire匯流排的複位

  複位是1-Wire匯流排通訊中最為重要的一種操作,在每次匯流排通訊之前主機必須首先發送複位訊號。如程式1.1所示,產生複位訊號時主機首先將匯流排拉低480~960μs然後釋放,由於上拉電阻的存在,此時匯流排變為高電平。1-Wire匯流排器件在接收到有效跳變的15~60μs內會將匯流排拉低60~240μs,在此期間主機可以通過對DQ採樣來判斷是否有從器件掛接在當前匯流排上。函數Reset()的傳回值為0表示有器件掛接在匯流排上,傳回值為1表示沒有器件掛接在匯流排上。
  程式1.1 匯流排複位

  uchar Reset(void)
  {
   uchar tdq;
   DQ=0; //主機拉低匯流排
   delay480μs(); //等待480μs
   DQ=1; //主機釋放匯流排
   delay60μs(); //等待60μs
   tdq=DQ; //主機對匯流排採樣
   delay480μs(); //等待覆位結束
   return tdq; //返回採樣值
  }

  1-Wire匯流排的寫操作

  由於只有一條I/O線,主機1-Wire匯流排的寫操作只能逐位進行,連續寫8次即可寫入匯流排一個位元組。如程式1.2所示,當MCS-51單片機的時鐘頻率為12MHz時,程式中的語句_nop_();可以產生 1μs的延時,調用此函數時需包含標頭檔“intrins.h”。向1-Wire匯流排寫1bit至少需要60μs,同時還要保證兩次連續的寫操作有1μs 以上的間隔。若待寫位wbit為0則主機拉低匯流排60μs然後釋放,寫0操作完成。若待寫位wbit為1,則主機拉低匯流排並在1~15μs內釋放,然後等待60μs,寫1操作完成。

  程式1.2 向匯流排寫1bit
  void Writebit(uchar wbit)
  {
   _nop_();
   //保證兩次寫操作間隔1μs以上
   DQ=0;
   _nop_();
   //保證主機拉低匯流排1μs以上
   if(wbit)
   {
   //向匯流排寫1
   DQ=1;
   delay60μs();
   }
   else
   {
   //向匯流排寫0
   delay60μs();
   DQ=0;
   }
  }

  1-Wire匯流排的讀操作

  與寫操作類似,主機對1-Wire匯流排的讀操作也只能逐位進行,連續讀8次,即可讀入主機一個位元組。從1-Wire匯流排讀取1bit同樣至少需要60μs,同時也要保證兩次連續的讀操作間隔1μs以上。如程式 1.3所示,從匯流排讀資料時,主機首先拉低匯流排1μs以上然後釋放,在釋放匯流排後的1~15μs內主機對匯流排的採樣值即為讀取到的資料。
  程式1.3 從匯流排讀1bit

  uchar Readbit()
  {
   uchar tdq;
   _nop_();
   //保證兩次連續寫操作間隔1μs以上
   DQ=0;
   _nop_();
   //保證拉低匯流排的時間不少於1μs
   DQ=1;
   _nop_();
   tdq=DQ;
   //主機對匯流排採樣
   delay60μs();
   //等待讀操作結束
   return tdq;
   //返回讀取到的資料
  }

  1-Wire匯流排ROM功能命令

  在DS18B20內部光刻了一個長度為64bit的ROM編碼,這個編碼是器件的身份識別標誌。當匯流排上掛接著多個DS18B20時可以通過ROM編碼對特定器件進行操作。ROM功能命令是針對器件的ROM編碼進行操作的命令,共有5個,長度均為8bit(1Byte)。

  ①讀ROM(33H)

  當掛接在匯流排上的1-Wire匯流排器件接收到此命令時,會在主機讀操作的配合下將自身的ROM編碼按由低位到高位的順序依次發送給主機。匯流排上掛接有多個DS18B20時,此命令會使所有器件同時向主機傳送自身的ROM編碼,這將導致資料的衝突。

  ②匹配ROM(55H)

  主機在發送完此命令後,必須緊接著發送一個64bit的ROM編碼,與此ROM編碼匹配的從器件會響應主機的後續命令,而其他從器件則處於等待狀態。該命令主要用於選擇匯流排上的特定器件進行訪問。

  ③跳過ROM(CCH)

  發送此命令後,主機不必提供ROM編碼即可對從器件進行訪問。與讀ROM命令類似,該命令同樣只適用於單節點的1-Wire匯流排系統,當匯流排上有多個器件掛接時會引起資料的衝突。

  ④尋找ROM(F0H)

  當主機不知道匯流排上器件的ROM編碼時,可以使用此命令並配合特定的演算法尋找出匯流排上從器件的數量和各個從器件的ROM編碼。

  ⑤警示尋找(ECH)

  此命令用於尋找匯流排上滿足警示條件的DS18B20,通過警示尋找命令並配合特定的尋找演算法,可以尋找出匯流排上滿足警示條件的器件數目和各個器件的ROM編碼。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.