tft每日頭條

 > 圖文

 > 串口通訊基礎知識大彙總

串口通訊基礎知識大彙總

圖文 更新时间:2024-06-12 14:34:19

對于串口,我們知道不管是RS232還是RS485、RS422這些典型的串口标準通訊協議,隻是定義了部分物理層,對于數據鍊路層等基本沒有涉及,這也就體現了串口協議的靈活性,沒有統一的标準,需要使用者自己來定義合适的數據協議來傳輸自己的數據。

串口通訊的數據格式為:起始位(1bit)、數據位(7bit)、奇偶校驗位(1bit)、停止位(1bit)。

如圖:

串口通訊基礎知識大彙總(怎麼自己定義一個串口通訊協議)1

數據格式

對于這個協議其實略顯的簡單了一點,具體體現在:

  • 校驗位的能力太差。
  • 不能區分數據的類型。
  • 不能确定設備的地址。
  • 發送成功與否沒有标識位。
  • 無法定位錯誤的數據等等。

對于此,我們特意給出一種比較常用的簡單的數據幀形式。

1.幀起始

一般大家喜歡用0x55或者0xaa作為幀的起始位。我習慣用0x3C即"<"作為起始位。

2.命令域

主要要包含這幾類數據,如:上行為0x10,下行為0x30,重新傳輸為0x50,應答為0x70。

3.地址域

假如地址域用一個字節表示,基地址為0x20,每一個從節點的偏移地址為上一個從節點的偏移地址加0x20。

4.數據域

這個可根據自己的數據傳輸的需要,設定合适的字節數。

假如我的數據需要為:1byte的硬件版本号、1byte的軟件版本号、1byte的電池電量、10byte的動作數據。

那麼我定義的數據就是13字節了。

5.校驗域

常規使用CRC校驗。2個字節。

6.幀結束

我習慣使用0x3E即“>”。

對于一幀的數據,我習慣使用兩個連續的幀起始和幀結束,假如PC為主機,現在要從主機給從機偏移地址為0x04的設備傳輸一幀數據,數據格式即為:

<< 30 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 >>

隻是列出了了一個格式,沒有具體的數據,也沒有做CRC。

這樣的數據格式基本就能有一些實用的價值了。

接下來我們來看一個實際的例子。

案例分享

假如現在有一個藍牙主機和從機組成的無線網絡,藍牙從機是一塊手環,它具有檢測手部動作的功能,主機對應的是我們的目标設備,如我們家裡面的智能窗簾。我們預實現的功能有:

1.主設備給從設備發送的數據流包含的信息需有:

  • 需綁定的從設備的MAC地址
  • 時間
  • 指令包括但不限制于連接從機、斷開從機、查詢從機的狀态即手環是否正确佩戴、待機、喚醒、低功耗模式、請求從機發送數據、禁止從機發送數據。

協議定義如下:

主機給從機發送指令(22字節),發送間隔不能小于800ms。

串口通訊基礎知識大彙總(怎麼自己定義一個串口通訊協議)2

主機給從機發送數據的協議格式

其中:

指令信息對應關系如下

  • 0x00 連接
  • 0x01 斷開
  • 0x02 查詢狀态
  • 0x03 待機
  • 0x04 喚醒
  • 0x05 低功耗
  • 0x06 請求數據
  • 0x07 禁止發送數據;

6 個字節的時間按十進制存儲 , 年月日時分秒各占一個字節, 其中年用(20000 1Byte) 來計

算, 其他直接用二進制直接轉化成十進制。

直觀列表如下:

串口通訊基礎知識大彙總(怎麼自己定義一個串口通訊協議)3

協議列表

2.從設備給主設備發送的狀态數據流包含的信息需有:

  • 從機設備的電量
  • 工作狀态
  • 錯誤信息
  • 版本信息
  • 時間
  • 本機設備編号

協議定義如下:

從機給主機發送狀态數據(34字節),發送間隔2500ms。

串口通訊基礎知識大彙總(怎麼自己定義一個串口通訊協議)4

從設備給主設備發送的狀态數據流

其中(主要):

電量信息:0X0-0X64(十進制 0-100), 代表設備電量的百分比。

工作狀态:

  • 0X00 表示串口數據透傳模式
  • 0X01 睡眠模式
  • 0X02 待機模式
  • 0X06 正确佩戴
  • 0X07 解鎖成功
  • 0X08 未解鎖
  • 0X09 充電模式
  • 0X0A 未正确佩戴
  • 0X0C 指令接收成功

直觀列表如下:

串口通訊基礎知識大彙總(怎麼自己定義一個串口通訊協議)5

協議列表

3.從機給主機發送的手勢控制信息包含的數據需有:

  • 陀螺儀數據
  • 手勢數據
  • 時間
  • 設備MAC

協議定義如下:

從機給主機發送手勢數據(共32字節 ),發送間隔20ms。

串口通訊基礎知識大彙總(怎麼自己定義一個串口通訊協議)6

從機給主機發送的手勢數據協議格式

其中:

8 位數據是陀螺儀手勢數據

  • 0X00 鎖定
  • 0X01 解鎖
  • 0X02 不動
  • 0X03 向上(X )
  • 0X04 向下(X-)
  • 0X07 外旋(Y )
  • 0X05 向外(Z )
  • 0X08 内旋(Y-)
  • 0X06 向内(Z-)

手勢數據

  • 0X00 空
  • 0X01 放松
  • 0X02 握拳
  • 0X03 伸掌

直觀列表如下:

串口通訊基礎知識大彙總(怎麼自己定義一個串口通訊協議)7

協議列表

好了,到此我們隻要有了這一套協議,就可以完成一套簡單的手環控制的智能家居(窗簾)的動作了,後續就是具體程序的實現了。

這就是串口協議的特點,沒有規定數據鍊層,我們需要結合自己的項目完成數據格式的定義和數據的定義。

有了我這樣一套簡單的demo模塊,我相信簡單的串口協議的定義應該是沒有什麼問題了。


喜歡我文章的朋友,歡迎轉發、留言、評論。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved