麥叔是搞嵌入式的,最近項目delay,他和我說用UART驅動1-Wire設備總是出現問題,故寫此文來拯救他。
作者之前寫過UART(點我),也寫過1-Wire(點我),本文介紹如何用主機的UART驅動1-Wire從機設備,建議先看看以上兩篇文章,再閱讀本文,效果更佳。
硬件電路
1-Wire結構簡單,一根線就可以通信,常見的18B20用的就是1-Wire結構。單片機的串口UART(多是TTL電平),如何用單片機控制通用的1-Wire設備呢?如果MCU和從設備的電平不一致如何解決?軟件協議又是如何控制的呢?本文主要解決這兩個問題。
主機或從機將數據線拉低到GND表示數據0,將數據線釋放為高表示數據1,高電平由上拉電阻(一般是4.7K)提供。
當MCU發送邏輯1時,經過反相器,總線呈現邏輯0,邏輯0經過1-WIRE器件的反相器,即會收到邏輯1;
當MCU發送邏輯0時,經過反向器,總線呈現邏輯1,邏輯1經過1-WIRE 器件的反相器,即會收到邏輯0;
當1WIRE 器件發送邏輯1時,Tx處有NMOS會導通,總線呈現邏輯0,經過MCU Rx 處的反相器,MCU會收到邏輯1;
當1WIRE器件發送邏輯0時,NMOS截止,總線呈現邏輯1,MCU會收到邏輯0;
主機端(BUS MASTER)多為MCU,因為MCU的TXD不是漏極開路,因此通常需要一個外部漏極開路緩沖電路,該電路可以由分立元件構成。
用兩個NMOS管2N7002,原理很簡單:
TXD輸出高電平時,左邊的2N7002導通,右邊的截止,DQ被4.7K電阻上拉至Vpullup高電平;
TXD輸出低電平時,左邊的2N7002截止,右邊的導通,DQ被拉低至低電平0;
用分立器件搭建的緩沖電路
也可以用集成芯片NC7WZ07,如下圖所示,TXD輸出高,DQ=Vpullup,TXD輸出低,DQ=0;
用集成芯片搭建的緩沖電路
解決了硬件電路,我們再來看軟件協議部分,1-Wire的協議可以分為復位/應答、寫0/寫1時隙、讀0/讀1時隙。
軟件協議
復位/應答
如下圖,上面部分是1-Wire的復位/應答時序,下面是UART的時序。
復位/應答信號時序
原理:
主機以9600的波特率發送數據0XF0,因為LSB在前,0XF0=00001111,加上最前面的Start Bit和最后面的Stop Bit,完整的數據為:0000011111,代表主機先發了5位的0,然后發了5位的1;9600波特率,一位傳輸時間是1/9600=104.2us,所以低電平持續時間為104.2*5=521us,滿足480~960us復位總線的時序要求。
那主機收到什么數據代表從機應答呢?
首先主機如果發送F0后收到還是F0,說明從機沒有應答,從機應答總線數據會改變,可以簡單的判斷收到的數據為非F0即代表從機應答。
根據1-Wire的時序波形,也可以進行推算,從上圖看,Data0~Data3均為0,因為1-Wire時序是有一定時間范圍,并不是固定的脈寬,如TPDH為15~60us,TPDL為60~240us,所以Data4~Data7是有一定的組合,返回0X10(00001000) to 0X90(00001001)都代表從機應答。
寫0/寫1時隙
主機寫0就是0X00,也可以加入回讀,回讀值即為寫的值。
寫0時隙
寫1就是0XFF,回讀值即為寫的值。
寫1時隙圖
讀0/讀1時隙
關于讀時隙,可以先看主機讀1時,主機先拉低總線,一般時間1us左右,UART的Start Bit會占1/115200=8.7us的脈寬(大于1us),所以從Data0開始,后面的數據都為1,即讀到的數據為11111111(0XFF)代表讀到的是1。
讀1時隙圖
那讀0也就很簡單,讀到的數據不為0XFF即為0。
讀0時隙圖
小結一下
實際代碼里面的判斷,可以簡單處理,復位/應答:發送F0,返回不為F0,即代表從機應答;讀0/讀1時隙:主機讀到0XFF即為1,讀到非0XFF即為0;簡單又可靠,麥叔還不會。
今天的文章到這里就結束了,希望對你有幫助,我們下一期見。
責任編輯:haq
-
芯片
+關注
關注
459文章
52253瀏覽量
437031 -
電路
+關注
關注
173文章
6022瀏覽量
174564 -
單片機
+關注
關注
6065文章
44934瀏覽量
647619
發布評論請先 登錄
DS28E01-100 1Kb、保護型1-Wire EEPROM,帶有SHA-1引擎技術手冊

DS28E10 1-Wire SHA-1認證器技術手冊

DS28E02 1-Wire SHA-1認證器,具有1Kb EEPROM,工作在1.8V技術手冊

DS2465 DeepCover安全認證器具有SHA-256協處理器和1-Wire主機功能技術手冊

DS24L65 DeepCover安全認證器,具有SHA-256協處理器和1-Wire主機功能技術手冊

DS2475帶1-Wire主機的DeepCover ECDSA協處理器技術手冊

DS28E16 1-Wire SHA-3安全認證器技術手冊

DS2430A 256位1-Wire EEPROM技術手冊

DS2408系列1-Wire、8通道、可編程 1-Wire IC技術手冊

DS2431 1024位1-Wire EEPROM技術手冊

DS28E04-100 4096位、可尋址、1-Wire EEPROM,帶有PIO技術手冊

DS2413系列雙通道可編程1-Wire芯片技術手冊

DS28EC20 20Kb 1-Wire EEPROM技術手冊

DS9490 USB至1-Wire/iButton適配器技術手冊

評論