硬件:串口握手基礎知識筆記

 RS-232通行方式允許簡單連接三線:Tx、Rx和地線。但是對于數據傳輸,雙方必須對數據定時采用使用相同的波特率。盡管這種方法對于大多數應用已經足夠,但是對于接收方過載的情況這種使用受到限制。這時需要串口的握手功能。在這一部分,我們討論三種最常用的RS-232握手形式:軟件握手、硬件握手和Xmodem。

  1、軟件握手

  我們討論的第一種握手是軟件握手。通常用在實際數據是控制字符的情況,類似于GPIB使用命令字符串的方式。必須的線仍然是三根:Tx、Rx和地線,因為控制字符在傳輸線上和普通字符沒有區別,函數SetXModem允許用戶使能或者禁止用戶使用兩個控制字符XON和OXFF。這些字符在通信中由接收方發送,使發送方暫停。

640?wx_fmt=jpeg

  例如:假設發送方以高波特率發送數據。在傳輸中,接收方發現由于CPU忙于其他工作,輸入buffer已經滿了。為了暫時停止傳輸,接收方發送XOFF,典型的值是十進制19,即十六進制13,直到輸入buffer空了。一旦接收方準備好接收,它發送XON,典型的值是十進制17,即十六進制11,繼續通信。輸入buffer半滿時,LabWindows發送XOFF。此外,如果XOFF傳輸被打斷,LabWindows會在buffer達到75%和90%時發送XOFF。顯然,發送方必須遵循此守則以保證傳輸繼續。

  2、硬件握手

  第二種是使用硬件線握手。和Tx和Rx線一樣,RTS/CTS和DTR/DSR一起工作,一個作為輸出,另一個作為輸入。第一組線是RTS(RequesttoSend)和CTS(CleartoSend)。當接收方準備好接收數據,它置高RTS線表示它準備好了,如果發送方也就緒,它置高CTS,表示它即將發送數據。另一組線是DTR(DataTerminalReady)和DSR(DataSetReady)。這些現主要用于Modem通信。使得串口和Modem通信他們的狀態。例如:當Modem已經準備好接收來自PC的數據,它置高DTR線,表示和電話線的連接已經建立。讀取DSR線置高,PC機開始發送數據。一個簡單的規則是DTR/DSR用于表示系統通信就緒,而RTS/CTS用于單個數據包的傳輸。

640?wx_fmt=jpeg

  在LabWindows,函數SetCTSMode使能或者禁止使用硬件握手。如果CTS模式使能,LabWindows使用如下規則:當PC發送數據:RS-232庫必須檢測CTS線高后才能發送數據。

  當PC接收數據:

  如果端口打開,且輸入隊列有空接收數據,庫函數置高RTS和DTR。

  如果輸入隊列90%滿,庫函數置低RTS,但使DTR維持高電平。

  如果端口隊列近乎空了,庫函數置高RTS,但使DRT維持高電平。

  如果端口關閉,庫函數置低RTS和DTR。

  3、XModem握手

  最后討論的握手叫做XModem文件傳輸協議。這個協議在Modem通信中非常通用。盡管它通常使用在Modem通信中,XModem協議能夠直接在其他遵循這個協議的設備通信中使用。在LabWindows中,實際的XModem應用對用戶隱藏了。只要PC和其他設備使用XModem協議,在文件傳輸中就使用LabWindows的XModem函數。函數是XModemConfig,XModemSend和XModemReceive。

640?wx_fmt=jpeg

  XModem使用介于如下參數的協議:start_of_data、end_of_data、neg_ack、wait_delay、start_delay、max_tries、packet_size。這些參數需要通信雙方認定,標準的XModem有一個標準的定義:然而,可以通過XModemConfig函數修改,以滿足具體需要。這些參數的使用方法由接收方發送的字符neg_ack確定。這通知發送方其準備接收數據。它開始嘗試發送,有一個超時參數start_delay;當超時的嘗試超過max_ties次數,或者收到接收方發送的start_of_data,發送方停止嘗試。如果從發送方收到start_of_data,接收方將讀取后繼信息數據包。包中含有包的數目、包數目的補碼作為錯誤校驗、packet_size字節大小的實際數據包,和進一步錯誤檢查的求和校驗值。在讀取數據后,接收方會調用wait_delay,然后想發送方發送響應。如果發送方沒有收到響應,它會重新發送數據包,直到收到響應或者超過重發次數的最大值max_tries。如果一直沒有收到響應,發送方通知用戶傳輸數據失敗。

  由于數據必須以pack_size個字節按包發送,當最后一個數據包發送時,如果數據不夠放滿一個數據包,后面會填充ASCII碼NULL(0)字節。這導致接收的數據比原數據多。在XModem情況下一定不要使用XON/XOFF,因為XModem發送方發出包的數目很可能增加到XON/OFF控制字符的值,從而導致通信故障。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271935.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271935.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271935.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyV8

待完善 pyv8是個js解析引擎, PyV8 是 V8 引擎的 Python 語言封裝,這是 Python 和 JavaScript 對象之間的橋,支持在 Python 腳本中調用 V8 引擎。 # -*- coding: cp936 -*-import PyV8class Test():def js(self):ctxt PyV8.JSContext()ctxt.e…

抽象類能使用 final 修飾嗎?

抽象類就是要被繼承的,不能用final聲明,final聲明的類不可繼承

python高斯求和_二、算法分析

一、什么是算法分析程序和算法的區別:算法是對問題解決的分步描述程序是采用某種編程語言實現的算法,同一個算法通過不同的程序員采用不同的編程語言,能產生很多程序算法分析的概念:算法分析主要就是從計算資源消耗的角度來評判和…

硬件:交換機基礎知識

1、交換機的概念交換機(Switch)意為“開關”,是一種用于電(光)信號轉發的網絡設備。它可以為接入交換機的任意兩個網絡節點提供獨享的電信號通路。最常見的交換機是以太網交換機。其他常見的還有電話語音交換機、光纖交…

PhantomJS 與python的結合

待完善 一.簡介 PhantomJS是一個基于webkit的JavaScript API。它使用QtWebKit作為它核心瀏覽器的功能,使用webkit來編譯解釋執行JavaScript代碼。任何你可以在基于webkit瀏覽器 做的事情,它都能做到。它不僅是個隱形的瀏覽器,提供了諸如CSS選…

mysql對數據庫的操作_MySQL數據庫對數據庫的操作

1.創建數據庫mysqlgt; create database if not exists tongcheng; Query OK, 1 row affected (0.01 sec) mysqlgt; 2.查看創建數1.創建數據庫mysql> create database if not exists tongcheng;Query OK, 1 row affected (0.01 sec)mysql>2.查看創建數據庫時的選項mysql&g…

static用途

static關鍵字的用途 一句話描述就是:方便在沒有創建對象的情況下進行調用(方法/變量)。 顯然,被static關鍵字修飾的方法或者變量不需要依賴于對象來進行訪問,只要類被加載了,就可以通過類名去進行訪問。 static可以用來修飾類的…

硬件:寬帶貓(光貓)的基礎知識

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

篩法求素數

一般&#xff1a; #include<stdio.h> int main() { int a[100], i, j; for(i 2; i < 100; i) a[i] 1;//令2-99都為1 for(i 2; i < 100/2; i)//2 - 到 范圍的一半的所有倍數 { if(a[i] 1)//還未被篩 素數不會被篩 合數會被篩 …

mysql實用管理器添加外鍵_MySQL 添加外鍵

MySQL 添加外鍵MySQL 添加外鍵DROP TABLE IF EXISTS nation;CREATE TABLE nation(pii_Nation smallint(2) unsigned NOT NULL default 0,pii_NatinoName varchar(40) NOT NULL default ,PRIMARY KEY (pii_Nation))ENGINEInnoDB DEFAULT CHARSETutf8;DROP TABLE IF EXISTS user…

Sentinel介紹和Windows下安裝Sentinel-dashboard

Sentinel 是什么&#xff1f; 隨著微服務的流行&#xff0c;服務和服務之間的穩定性變得越來越重要。Sentinel 以流量為切入點&#xff0c;從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。 Sentinel 具有以下特征: 豐富的應用場景&#xff1a;Sentinel 承接…

盤點物聯網常用的八種通信協議

目錄 1、藍牙 2、Zigbee 3、6LoWPAN 4、Wi-Fi 6、ModBus 7、PROFINET 8、EtherCAT 1、藍牙 兼容的藍牙IoT傳感器非常適合需要短距離連接和低功率通信的應用。藍牙協議的有效范圍為50到100米&#xff0c;支持高達1 Mbps的數據傳輸速率。 最近&#xff0c;物聯網開發人員已經表現…

java 發郵件_java實現郵件的發送

文章所用jar文件鏈接&#xff1a;https://pan.baidu.com/s/1YaxhdkaCTC4TUDL-y9-ASQ提取碼&#xff1a;30ow程序入口&#xff0c;發送工具類package test;import org.apache.commons.mail.EmailException;/*** 郵箱發送工具類* author Administrator**/public class EmailUtil …

軟件工程與程序算法

軟件工程包括需求分析、概要設計、詳細設計、代碼實現和維護五個部分。而具體的程序編碼只占其中的一小部分。算法是在代碼設計中的基礎&#xff0c;提供了解決問題的方法。軟件工程是應用計算機科學、數學及管理科學等原理&#xff0c;開發軟件的工程。軟件工程借鑒傳統工程的…

docker安裝Sentinel

1:拉取鏡像&#xff1a;docker pull bladex/sentinel-dashboard 2:啟動 docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard 3&#xff1a;訪問 http://公網ip:8858 4&#xff1a;登錄,用戶名和密碼都是sentinel

藍牙技術的工作原理及用途

所謂藍牙技術就是一種全球無線通訊標準&#xff0c;在一定距離內連接設備。目前&#xff0c;藍牙技術也已應用到各個領域中&#xff0c;并已成為接入物聯網&#xff08;IOT&#xff09;的主要技術。那關于藍牙技術的工作原理本文將進行介紹&#xff0c;并概括其特點。藍牙技術的…

什么是BusyBox?

BusyBox 是標準 Linux 工具的一個單個可執行實現。BusyBox 包含了一些簡單的工具&#xff0c;例如 cat 和 echo&#xff0c;還包含了一些更大、更復雜的工具&#xff0c;例如 grep、find、mount 以及 telnet。有些人將 BusyBox 稱為 Linux 工具里的瑞士軍刀.簡單的說BusyBox就好…

iOS十進制切割格式轉換

//"123456789" 轉換后 "123,456,789" interface NSString (num)- (NSString *)money;endimplementation NSString (num)- (NSString *)money{NSNumberFormatter *numFormat [[NSNumberFormatter alloc] init];[numFormat setNumberStyle:NSNumberFormatte…

同一接口有多個實現類,怎么來注入一個指定的實現?@Resource、@Autowired、@Qualifier

如果一個接口有2個以上不同的實現類, 那么如何Autowire一個指定的實現 1:首先,UserService接口有兩個實現類 UserService1和 UserService2 UserService接口 2:以下是UserService接口的兩個實現類UserService1和UserService2&#xff0c;請注意service注解的使用方式&#xff…

java類型比較_java 基本數據類型 ==和equals()比較

1.基本類型的存儲Java 8種基本類型都是存儲在堆棧中&#xff0c;例&#xff1a;int i 1;String str "hello world";也是存儲在堆棧中。new基本類型的包裝器類型和new String()都是存儲在堆內存中。例Integer i new Integer(1);String str new String("hello…