文章目錄
- 一、DS18B20--DQ單總線
- 1.1 單總線時序結構分析
- 1.1.1 初始化:
- 1.1.2 發送一位
- 1.1.3 接收一位
- 1.1.5 發送字節
- 1.1.6 操作流程
- 1.1.7 數據幀的理解
- 1.1.8 數據幀的理解
- 二、UART
- 2.1 同步通信和異步通信
- 2.2 雙工通信
- 2.3 串行通信常用數據校驗方式
- 2.3.1 奇偶檢驗
- 2.3.2 和校驗/異或校驗
- 2.3.3 循環冗余校驗CRC
一、DS18B20–DQ單總線
在設計的時候一定要滿足單總線時序,
總線有一個基本要求:
每次初始化以后,總線的控制權都是主機掌握。默認是寫的狀態,
有一個讓從機發送的性質(從機此時具有控制權),因此此時主機就變成一個讀的狀態了。
1.1 單總線時序結構分析
1.1.1 初始化:
1.主機將總線拉低最少480us。
2.釋放總線,等待15us~60us,時間不能超過,一定按照嚴格的時序來表達。
3.如果存在從機會拉低總線60us~240us以響應主機,之后從機將釋放總線,總線回到高電平。
在從機拉低電平的時間,通過IO口讀取電平,判斷從機是否存在。
復位 和 響應兩個部分。
每個操作之前都要都一個初始化
1.1.2 發送一位
發送一位:主機將總線拉低60~120us,然后釋放總線,表示發送0主機將總線拉低1~15us
,然后釋放總線,表示發送1。從機將在總線拉低30us后(典型值)讀取電平,整個時間片應大于60us。
時間片就是時序結構的意思,
一定是30us的時候進行讀取電平。
60us一個周期進行理解,不管是發送還是接收。
1.1.3 接收一位
接收一位:主機將總線拉低1~15us,然后釋放總線,并在拉低后15us內讀取總線電平(盡量貼近15us的末尾),讀取為低電平則為接收0,讀取為高電平則為接收1,整個時間片應大于60us
60us一個周期進行理解,不管是發送還是接收。
1.1.5 發送字節
連續調用,低位在前。
1.1.6 操作流程
初始化:從機復位,主機判斷從機是否響應
ROM操作:ROM指令+本指令需要的讀寫操作
功能操作:功能指令+本指令需要的讀寫操作
1.1.7 數據幀的理解
溫度變化數據幀:當主機將這些數據發送給DS18N20以后,從機就會將溫度傳感器值刷新到RAM暫存器里面。
溫度讀取:讀取暫存器指令,連續讀操作(對于主機來說就是接收數據)。將這個指令發送給從機,目的就是告訴你,主機需要溫度數據了,接著就是從機發送數據,也就是主機接收數據的操作。
兩個溫度字節讀取以后,還可以繼續讀取,但是本次沒有必要就不用讀取。
1.1.8 數據幀的理解
二、UART
2.1 同步通信和異步通信
簡單說,同步通信需要時鐘信號,而異步通信不需要時鐘信號
如何通信,怎么知道這是高電平或者是低電平或者說是我怎么知道這是兩個高電平,
我可以假設這是在1ms內,我采集10次,那么其中有6次是高電平,那么我就認為這個1ms傳輸的就是高電平,那么這就是第一個第一個電平,同理,繼續下一個1ms,因此就引出了波特率的概念。
波特率:數據傳輸的速率。
波特率:串行通信中,數據傳送速率有兩種名稱,即比特率或波特率(對于二進制傳輸,兩者等價)它表示可以支持每秒鐘傳送多少位數據,常用包括,600、1200、2400、4800、9600、19200、38400、115200波特等;串行通信的收發雙方必須采用相同的波特率。
假設一幀是10位,那么1S可以傳輸960幀,也約等于1ms傳輸一幀。
-
起始位:位于數據幀開頭,占1位,始終為低電平,用于向接收設備表示發送端開始發送1幀數據,
-
數據位:要傳輸的數據信息,一般為7/8位,可配置,通常由低位到高位依次傳送:
-
校驗位:位于數據位之后,占1位,可配置,用于發送數據的校驗,或傳送多機串行通信的聯絡信息;
-
停止位:位于數據位未尾,占0.5~2位,可配置,始終為高電平,用于向接收端表示1幀數據已發送完畢。
一般都是起始位是低電平 停止位是高電平。空閑位一般也是高電平。
2.2 雙工通信
- 單工
指數據傳輸僅能沿一個方向,不能實現反向傳輸, - 半雙工(RS485 CAN IIC)
指數據傳輸可以沿兩個方向,但需要分時進行 - 全雙工(SPI)
指數據可以同時進行雙向傳輸。
2.3 串行通信常用數據校驗方式
2.3.1 奇偶檢驗
奇偶校驗
針對一幀數據進行校驗,在發送數據時,數據位尾隨的1位為奇偶校驗位(1或0)。奇校驗時,數據中"1”的個數與校驗位“1”的個數之和應為奇數;偶校驗時,數據中“1”的個數與校驗位“1”的個數之和應為偶數。接收字符時,對“1”的個數進行校驗,若發現不一致,則說明傳輸數據過程中出現了差錯。
2.3.2 和校驗/異或校驗
和校驗/異或校驗
針對一包數據進行校驗,和校驗是發送方將所發數據塊求和(或各字節異或),產生一個字節的校驗字符(校驗和)附加到數據塊未尾。接收方接收數據同時對數據塊(除校驗字節外)求和(或各字節異或),將所得的結果與發送方的“校驗和”進行比較,相符則無差錯,否則即認為傳送過程中出現了差錯。
2.3.3 循環冗余校驗CRC
循環冗余校驗(Cyclic Redundancy Check,CRC)
針對一包數據進行校驗,這種校驗是通過某種數學運算實現有效信息與校驗位之間的循環校驗,常用于對磁盤信息的傳輸、存儲區的完整性校驗等。這種校驗方法糾錯能力強,廣泛應用于同步通信中。
文章源碼獲取方式:
如果您對本文的源碼感興趣,歡迎在評論區留下您的郵箱地址。我會在空閑時間整理相關代碼,并通過郵件發送給您。由于個人時間有限,發送可能會有一定延遲,請您耐心等待。同時,建議您在評論時注明具體的需求或問題,以便我更好地為您提供針對性的幫助。
【版權聲明】
本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議。這意味著您可以自由地共享(復制、分發)和改編(修改、轉換)本文內容,但必須遵守以下條件:
署名:您必須注明原作者(即本文博主)的姓名,并提供指向原文的鏈接。
相同方式共享:如果您基于本文創作了新的內容,必須使用相同的 CC 4.0 BY-SA 協議進行發布。
感謝您的理解與支持!如果您有任何疑問或需要進一步協助,請隨時在評論區留言。