精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

您好,歡迎來電子發(fā)燒友網! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網>電子百科>通信技術>

如何提高串口通信速度

2018年02月01日 16:12 網絡整理 作者: 用戶評論(0

  串口通信簡介

  串口是計算機上一種非常通用設備通信的協(xié)議。大多數(shù)計算機包含兩個基于RS232的串口。串口同時也是儀器儀表設備通用的通信協(xié)議;很多GPIB兼容的設備也帶有RS-232口。同時,串口通信協(xié)議也可以用于獲取遠程采集設備的數(shù)據。

  串口通信結構

  串口通信是指外設和計算機間,通過數(shù)據信號線 、地線、控制線等,按位進行傳輸數(shù)據的一種通訊方式。這種通信方式使用的數(shù)據線少,在遠距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)汀?/p>

  串口是計算機上一種非常通用的設備通信協(xié)議。大多數(shù)計算機(不包括筆記本電腦)包含兩個基于RS-232的串口。串口同時也是儀器儀表設備通用的通信協(xié)議;很多GPIB兼容的設備也帶有RS-232口。同時,串口通信協(xié)議也可以用于獲取遠程采集設備的數(shù)據。

  RS-232(ANSI/EIA-232標準)是IBM-PC及其兼容機上的串行連接標準。可用于許多用途,比如連接鼠標、打印機或者Modem,同時也可以接工業(yè)儀器儀表。用于驅動和連線的改進,實際應用中RS-232的傳輸長度或者速度常常超過標準的值。RS-232只限于PC串口和設備間點對點的通信。RS-232串口通信最遠距離是50英尺。

  如何提高串口通信速度

  串口通信原理

  串口通信的概念非常簡單,串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據的同時用另一根線接收數(shù)據。它很簡單并且能夠實現(xiàn)遠距離通信。比如IEEE488定義并行通行狀態(tài)時,規(guī)定設備線總長不得超過20米,并且任意兩個設備間的長度不得超過2米;而對于串口而言,長度可達1200米。典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成:(1)地線,(2)發(fā)送,(3)接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據同時在另一根線上接收數(shù)據。其他線用于握手,但是不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據位、停止位和奇偶校驗。對于兩個進行通信的端口,這些參數(shù)必須匹配:

  1、波特率

  這是一個衡量通信速度的參數(shù)。它表示每秒鐘傳送的bit的個數(shù)。例如300波特表示每秒鐘發(fā)送300個bit。當我們提到時鐘周期時,我們就是指波特率例如如果協(xié)議需要4800波特率,那么時鐘是4800Hz。這意味著串口通信在數(shù)據線上的采樣率為4800Hz。通常電話線的波特率為14400,28800和36600。波特率可以遠遠大于這些值,但是波特率和距離成反比。高波特率常常用于放置的很近的儀器間的通信,典型的例子就是GPIB設備的通信。

  2、數(shù)據位

  這是衡量通信中實際數(shù)據位的參數(shù)。當計算機發(fā)送一個信息包,實際的數(shù)據不會是8位的,標準的值是5、7和8位。如何設置取決于你想傳送的信息。比如,標準的ASCII碼是0~127(7位)。擴展的ASCII碼是0~255(8位)。如果數(shù)據使用簡單的文本(標準 ASCII碼),那么每個數(shù)據包使用7位數(shù)據。每個包是指一個字節(jié),包括開始/停止位,數(shù)據位和奇偶校驗位。由于實際數(shù)據位取決于通信協(xié)議的選取,術語“包”指任何通信的情況。

  3、停止位

  用于表示單個包的最后一位。典型的值為1,1.5和2位。由于數(shù)據是在傳輸線上定時的,并且每一個設備有其自己的時鐘,很可能在通信中兩臺設備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數(shù)越多,不同時鐘同步的容忍程度越大,但是數(shù)據傳輸率同時也越慢。

  4、奇偶校驗位

  在串口通信中一種簡單的檢錯方式。有四種檢錯方式:偶、奇、高和低。當然沒有校驗位也是可以的。對于偶和奇校驗的情況,串口會設置校驗位(數(shù)據位后面的一位),用一個值確保傳輸?shù)臄?shù)據有偶個或者奇?zhèn)€邏輯高位。例如,如果數(shù)據是011,那么對于偶校驗,校驗位為0,保證邏輯高的位數(shù)是偶數(shù)個。如果是奇校驗,校驗位為1,這樣就有3個邏輯高位。高位和低位不真正的檢查數(shù)據,簡單置位邏輯高或者邏輯低校驗。這樣使得接收設備能夠知道一個位的狀態(tài),有機會判斷是否有噪聲干擾了通信或者是否傳輸和接收數(shù)據是否不同步。

  串口通信的傳輸速率與傳輸距離

  1、波特率

  在串行通信中,用 “ 波特率 ” 來描述數(shù)據的傳輸速率。所謂波特率,即每秒鐘傳送的二進制位數(shù),其單位為 bps ( bits per second )。它是衡量串行數(shù)據速度快慢的重要指標。有時也用 “ 位周期 ” 來表示傳輸速率,位周期是波特率的倒數(shù)。國際上規(guī)定了一個標準波特率系列: 110 、 300 、 600 、 1200 、 1800 、 2400 、4800 、 9600 、 14.4Kbps 、 19.2Kbps 、 28.8Kbps 、 33.6Kbps 、 56Kbps 。 例如: 9600bps ,指每秒傳送 9600 位,包含字符的數(shù)位和其它必須的數(shù)位,如奇偶校驗位等。 大多數(shù)串行接口電路的接收波特率和發(fā)送波特率可以分別設置,但接收方的接收波特率必須與發(fā)送方的發(fā)送波特率相同。通信線上所傳輸?shù)淖址麛?shù)據(代碼)是逐為位傳送的, 1 個字符由若干位組成,因此每秒鐘所傳輸?shù)淖址麛?shù)(字符速率)和波特率是兩種概念。在串行通信中,所說的傳輸速率是指波特率,而不是指字符速率,它們兩者的關系是:假如在異步串行通信中,傳送一個字符,包括 12 位(其中有一個起始位, 8 個數(shù)據位, 2 個停止位),其傳輸速率是 1200b/s ,每秒所能傳送的字符數(shù)是 1200/(1+8+1+2)=100 個。

  2、發(fā)送/接收時鐘

  在串行傳輸過程中,二進制數(shù)據序列是以數(shù)字信號波形的形式出現(xiàn)的,如何對這些數(shù)字波形定時發(fā)送出去或接收進來,以及如何對發(fā)/收雙方之間的數(shù)據傳輸進行同步控制的問題就引出了發(fā)送/接收時鐘的應用。

  在發(fā)送數(shù)據時,發(fā)送器在發(fā)送時鐘(下降沿)作用下將發(fā)送移位寄存器的數(shù)據按串行移位輸出;在接收數(shù)據時,接收器在接收時鐘(上升鹽)作用下對來自通信線上串行數(shù)據,按位串行移入移位寄存器。可見,發(fā)送/接收時鐘是對數(shù)字波形的每一位進行移位操作,因此,從這個意義上來講,發(fā)送/接收時鐘又可叫做移位始終脈沖。另外,從數(shù)據傳輸過程中,收方進行同步檢測的角度來看,接收時鐘成為收方保證正確接收數(shù)據的重要工具。為此,接收器采用比波特率更高頻率的時鐘來提高定位采樣的分辨能力和抗干擾能力。

  3、波特率因子

  在波特率指定后,輸入移位寄存器 / 輸出移位寄存器在接收時鐘 / 發(fā)送時鐘控制下,按指定的波特率速度進行移位。一般幾個時鐘脈沖移位一次。要求:接收時鐘/ 發(fā)送時鐘是波特率的 16 、 32 或 64 倍。波特率因子就是發(fā)送/接收 1 個數(shù)據( 1 個數(shù)據位)所需要的時鐘脈沖個數(shù),其單位是個/位。如波特率因子為 16 ,則16 個時鐘脈沖移位 1 次。 例:波特率 =9600bps ,波特率因子 =32 ,則接收時鐘和發(fā)送時鐘頻率 =9600 × 32=297200Hz 。

  4、傳輸距離

  串行通信中,數(shù)據位信號流在信號線上傳輸時,要引起畸變,畸變的大小與以下因素有關:

  波特率 -- 信號線的特征(頻帶范圍)

  傳輸距離 -- 信號的性質及大小(電平高低、電流大小) 當畸變較大時,接收方出現(xiàn)誤碼。

  在規(guī)定的誤碼率下,當波特率、信號線、信號的性質及大小一定時,串行通信的傳輸距離就一定。為了加大傳輸距離,必須加MODEM。

  如何提高串口通信速度(舉例說明)

  硬件工程師開發(fā)了一塊單片機板,只要按通信協(xié)議上位機發(fā)數(shù)據給下位機,下位機立即回數(shù)據,我用串口調試助手試過了,1分鐘約可以收發(fā)最大6000,可是我用VB的MSCOMM編程,計時,1分鐘約2400次,如何提高速度?要求是3600次以內。除出代碼,計算機高速運行?

  你試的數(shù)據有多大啊?就一次一個字符那肯定快了。

  計算機高速運行,僅僅是消息處理的速度快了。

  速度也是受波特率限制的,你把波特率提高一點不就相對快很多了嗎?

  發(fā)5個字節(jié),收4個字節(jié),串口調試助手1分鐘最大約6000次,VB的MSCOMM編程2400次,

  是否API會快些?

  字節(jié)到緩沖區(qū),出去串口?直接用底層的API快些?

  大哥,不要玩我呀?只是個EXE,哪有源程序?而且好像很慢????

  字節(jié)到緩沖區(qū),到串口,不通過控件,直接從API走?

  那么波特率9600的話 就是能發(fā)6萬個字符 跑去亂七八糟的時間 如果單片機程序寫得再爛,發(fā)3600個字符沒啥問題。

  所以你的問題應該出現(xiàn)在串口助手編寫的有點對付不了這種高速發(fā)數(shù)的情況

  1、更改到更高的波特率

  2、 如果用VB的MSCOMM,可以:

  1)不要用查詢方式,而應事件方式,使用OnComm事件,并且不要在里面使用界面處理代碼,如不要用類似這樣的代碼:Text1.Text = Text1.Text & Recv_Char

  2)因為每次都收4個字節(jié),所以可以設置Rthreshold=4,至少收到4個字符才觸發(fā)一次OnComm事件,節(jié)省三次事件調用時間。

  3)收到數(shù)據后,立即發(fā)送,利用對方發(fā)送時間內做數(shù)據處理。

  1、應該不是波特率的問題。要改波特率,必須和底層一起改。現(xiàn)在的情況是,串口助手可以滿足你的速率要求,而自己寫的程序比較慢。

  2、不要用 Timer 這類方式去查詢串口的接收狀態(tài)。用 OnComm 事件或循環(huán)查詢都可以。注意一下你接收到數(shù)據后再發(fā)命令是如何銜接的。

  3、對于串口這種低速接口,如果沒有特殊的連續(xù)設置改變,我認為控件和 API 的差別不大。

  再次謝謝myjian,SupermanKing。現(xiàn)在是存在這個需求,目的是找最佳的方案去解決問題。因為我不熟驅動,所以采用編寫驅動的方案從時效上來說,可行性不強。

  看來得考慮下方案三:RING3方案,把目標進程的ReadFile與WriteFile給HOOK了。。。。。。。

  其實有個簡單的方法,找個虛擬串口的源碼。運行此虛擬串口程序時建1個虛擬串口(如com10),把那個軟件的串口號由com1改為com10,你就可接到數(shù)據了,然后此虛擬程序再將數(shù)據轉發(fā)到com1去。

  反之則由com1接收,再轉發(fā)到com10。就是用虛擬串口程序做個轉發(fā),順便就監(jiān)聽了

  有個簡單的想法,HOOK軟的不如HOOK硬的簡單點:

  直接作個串口一拖二的線,其中一個口反接成對聯(lián)線,插到另一個串口上就可以監(jiān)視串口事件了。

  對于3線通訊的串口來說應該是很簡單的.

非常好我支持^.^

(1) 25%

不好我反對

(3) 75%

( 發(fā)表人:陳翠 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?