0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

UART傳輸?shù)臄?shù)據(jù)被封裝成數(shù)據(jù)包

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2022-02-21 11:17 ? 次閱讀

介紹UART

最早的串行通訊設(shè)備可以追溯到電報(bào)機(jī),它使用長度可變的脈沖信號(hào)進(jìn)行數(shù)據(jù)傳輸。要說早期的芯片級(jí)UART,不得不提一下DEC,該公司的PDP系列計(jì)算機(jī)用上了第一個(gè)UART。當(dāng)時(shí)的UART的線路占據(jù)了整個(gè)電路板,體積巨大!可以聯(lián)想一下早期計(jì)算機(jī)的樣子,如下圖。

如今PC機(jī)上的串口早已被USB取代,對(duì)RS-232(也稱標(biāo)準(zhǔn)串口)有需求的用戶通常使用USB轉(zhuǎn)串口線,這里常見的有CH340串口驅(qū)動(dòng)程序。在UART通信中,兩個(gè)UART直接通信。

發(fā)送端的UART將來自控制設(shè)備(如CPU)的并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù),以串行方式將其發(fā)送到接收端的UART,然后由接收端的UART將串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)以用于接收設(shè)備的正常處理。這里只需要兩條線RX/TX即可在兩個(gè)UART之間傳輸數(shù)據(jù),如下圖所示。

UART傳輸?shù)臄?shù)據(jù)被封裝成數(shù)據(jù)包。每個(gè)數(shù)據(jù)包包含1個(gè)起始位,5~9個(gè)數(shù)據(jù)位(取決于UART的具體設(shè)置),一個(gè)可選的奇偶校驗(yàn)位以及1個(gè)或2個(gè)停止位,如下圖所示。

起始位

UART數(shù)據(jù)傳輸線通常在不傳輸數(shù)據(jù)時(shí)保持在高電平。為了開始數(shù)據(jù)傳輸,發(fā)送端UART在一個(gè)時(shí)鐘周期內(nèi)將傳輸線從高電平拉低到低電平。當(dāng)接收端UART檢測到高電壓到低電壓轉(zhuǎn)換時(shí),它開始以波特率的頻率讀取數(shù)據(jù)位中的每一位數(shù)據(jù)。

數(shù)據(jù)

數(shù)據(jù)位包含正在傳輸?shù)膶?shí)際數(shù)據(jù)。如果使用奇偶校驗(yàn)位,則可以是5位,最多8位。如果不使用奇偶校驗(yàn)位,則數(shù)據(jù)幀的長度可以為9位。在大多數(shù)情況下,數(shù)據(jù)首先以低有效位發(fā)送。

校驗(yàn)位

在串口通信中一種簡單的檢錯(cuò)方式。有四種檢錯(cuò)方式:

偶校驗(yàn)

奇校驗(yàn)

高校驗(yàn)

低校驗(yàn)

對(duì)于偶和奇校驗(yàn)的情況,串口會(huì)設(shè)置校驗(yàn)位(數(shù)據(jù)位后面的一位),用一個(gè)值確保傳輸?shù)臄?shù)據(jù)有偶個(gè)或者奇?zhèn)€邏輯高位。

停止位

發(fā)送端UART將數(shù)據(jù)傳輸線從低電壓驅(qū)動(dòng)到高電壓至少持續(xù)兩位數(shù)據(jù)的時(shí)間寬度來表示整個(gè)數(shù)據(jù)包的傳輸已經(jīng)結(jié)束。由于數(shù)據(jù)是在傳輸線上定時(shí)的,并且每一個(gè)設(shè)備有其自己的時(shí)鐘,很可能在通信中兩臺(tái)設(shè)備間出現(xiàn)了小小的不同步。因此停止位不僅僅是表示傳輸?shù)慕Y(jié)束,并且提供計(jì)算機(jī)校正時(shí)鐘同步的機(jī)會(huì)。適用于停止位的位數(shù)越多,不同時(shí)鐘同步的容錯(cuò)性越好,但是數(shù)據(jù)傳輸率同時(shí)也越慢。

波特率

波特率是串口數(shù)據(jù)的傳輸速度,即Bit/s,常見的波特率比如:9600,19200,38400,57600,115200等。假設(shè)目前UART的配置為,1個(gè)起始位,8個(gè)數(shù)據(jù)位,0個(gè)校驗(yàn)位,1個(gè)停止位,那么9600的波特率,可以計(jì)算出每一位數(shù)據(jù)的時(shí)間寬度為:

o4YBAGAHxKWADljhAAAQjK6T-sg963.png

那么傳輸一個(gè)字節(jié)(也就是10 bit 數(shù)據(jù))需要的時(shí)間為 1.04 毫秒。

UART傳輸過程

①發(fā)送端UART從數(shù)據(jù)總線轉(zhuǎn)換并行數(shù)據(jù)。

②發(fā)送端UART將起始位,奇偶校驗(yàn)位和停止位添加到數(shù)據(jù)包中,示意圖如下。

③整個(gè)數(shù)據(jù)包從發(fā)送端UART串行發(fā)送到接收端UART,接收端UART按照預(yù)先配置好的波特率對(duì)數(shù)據(jù)線進(jìn)行采樣,示意圖如下。

④接收端UART解析接收的數(shù)據(jù),丟棄數(shù)據(jù)包中的起始位,奇偶校驗(yàn)位和停止位。

⑤接收UART將串行數(shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù),并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線。

本文轉(zhuǎn)自: STM32嵌入式開發(fā)(微信號(hào):c-stm32),作者:acket,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。

審核編輯:何安

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628315
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1199

    瀏覽量

    100824
  • 異步串行
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    6612
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問DCTCP與DCUDP 的登錄數(shù)據(jù)包和心跳數(shù)據(jù)包與服務(wù)器端是如何交互的?

    DCTCP與DCUDP的登錄數(shù)據(jù)包和心跳數(shù)據(jù)包與服務(wù)器端是如何交互的?
    發(fā)表于 07-25 06:37

    esp8266怎么做才能每秒發(fā)送更多的數(shù)據(jù)包呢?

    在我的項(xiàng)目中,我需要通過WIFI實(shí)時(shí)傳輸大量數(shù)據(jù)。在 esp8266 參考手冊(cè)中指出,我可以將 UART 波特率提高到 4 Mbits 左右,以實(shí)現(xiàn)更快的通信。 問題是,增加波特率不會(huì)改變整體發(fā)送
    發(fā)表于 07-22 08:00

    如何在UART上制作一個(gè)偵聽器來接收數(shù)據(jù)包?

    我想在 UART 上制作一個(gè)偵聽器來接收數(shù)據(jù)包。 我該怎么做?有沒有任何形式的假多線程?
    發(fā)表于 07-19 09:54

    使用AT SAVETRANSLINK時(shí)UDP數(shù)據(jù)包丟失怎么解決?

    Android 發(fā)送一個(gè)小 UDP 數(shù)據(jù)包(5 字節(jié))。這個(gè)小數(shù)據(jù)包被我的微控制器在UART上接收到。微控制器將更大的數(shù)據(jù)包(可變長度,約 100 字節(jié))發(fā)送回
    發(fā)表于 07-18 07:17

    能否在ESP結(jié)束之前通過串行端口停止傳入的UDP數(shù)據(jù)包傳輸以解析下一個(gè)UDP數(shù)據(jù)包?

    丟棄在ESP完成之前不需要的數(shù)據(jù)包,以便通過串行端口發(fā)送它以接收下一個(gè)數(shù)據(jù)包, 如果沒有,我必須按順序讀取所有傳入的數(shù)據(jù)包,需要的和不需要的, 而且波特率不足,主機(jī)處理器開銷大, 我能否在 ESP 結(jié)束之前通過串行端口停止傳入
    發(fā)表于 07-16 06:18

    請(qǐng)問如何使用AT CIPSEND或AT CIPSENDBUF發(fā)送多個(gè)數(shù)據(jù)包

    我可以使用 AT CIPSEND 發(fā)送單個(gè)數(shù)據(jù)包。但是我必須發(fā)送一系列二進(jìn)制數(shù)據(jù)包。如何使用AT CISEND或AT CIPSENDBUF發(fā)送多個(gè)數(shù)據(jù)包,什么是正確的算法? 到目前為止,我嘗試
    發(fā)表于 07-15 07:37

    NONOS如何檢查是否實(shí)際發(fā)送了UDP數(shù)據(jù)包?

    我發(fā)現(xiàn)進(jìn)入深度睡眠通常無法傳輸發(fā)送的最后一個(gè) UDP 數(shù)據(jù)包。我現(xiàn)在將睡眠延遲 30 毫秒,這是一個(gè)黑客。 我寧愿有一種方法來檢查是否可以休眠,或者以其他方式能夠注冊(cè)指示數(shù)據(jù)包已發(fā)送的回調(diào)(無線電發(fā)送緩沖區(qū)為空)。 說清楚:
    發(fā)表于 07-12 06:14

    在AN65974中短數(shù)據(jù)包和零長數(shù)據(jù)包是什么意思?

    在 AN65974 中,短數(shù)據(jù)包和零長數(shù)據(jù)包是什么意思? 非常感謝!
    發(fā)表于 05-30 07:41

    如何在AIROC GUI上獲取良好數(shù)據(jù)包和總數(shù)據(jù)包?

    使用 IQxel-MW LifePoint 作為發(fā)生器并發(fā)送波形BT_1DH5_00001111_Fs80M.iqvsg,但無法在 AIROC 工具中接收數(shù)據(jù)包。 以下是從 IQxel 發(fā)送
    發(fā)表于 05-22 06:39

    請(qǐng)問高端網(wǎng)絡(luò)芯片如何處理數(shù)據(jù)包呢?

    隨著網(wǎng)絡(luò)芯片帶寬的持續(xù)提升,其內(nèi)部數(shù)據(jù)包處理單元的工作負(fù)載也隨之增加。然而,如果處理單元無法與網(wǎng)絡(luò)接口的傳入速率相匹配,將無法及時(shí)處理數(shù)據(jù)包,這不僅會(huì)導(dǎo)致數(shù)據(jù)包隨機(jī)丟失,更會(huì)降低網(wǎng)絡(luò)的吞吐量。
    的頭像 發(fā)表于 04-02 16:36 ?451次閱讀
    請(qǐng)問高端網(wǎng)絡(luò)芯片如何處理<b class='flag-5'>數(shù)據(jù)包</b>呢?

    STM32H7接收數(shù)據(jù)包異常,一接收的數(shù)據(jù)出現(xiàn)兩發(fā)送的內(nèi)容怎么解決?

    );__HAL_UART_DISABLE_IT( huart1, DMA_IT_HT); 2、發(fā)送數(shù)據(jù)包1
    發(fā)表于 03-08 08:05

    DPDK在AI驅(qū)動(dòng)的高效數(shù)據(jù)包處理應(yīng)用

    傳統(tǒng)的數(shù)據(jù)包處理方式是數(shù)據(jù)包先到內(nèi)核最后再到用戶層進(jìn)行處理。這種方式會(huì)增加額外的延遲和CPU開銷,嚴(yán)重影響數(shù)據(jù)包處理的性能。 DPDK 繞過內(nèi)核,在用戶空間中實(shí)現(xiàn)快速數(shù)據(jù)包處理。
    的頭像 發(fā)表于 02-25 11:28 ?713次閱讀
    DPDK在AI驅(qū)動(dòng)的高效<b class='flag-5'>數(shù)據(jù)包</b>處理應(yīng)用

    Linux場景下數(shù)據(jù)包是如何在協(xié)議層傳輸

    所有互聯(lián)網(wǎng)服務(wù),均依賴于TCP/IP協(xié)議棧。懂得數(shù)據(jù)是如何在協(xié)議棧傳輸的,將會(huì)幫助你提升互聯(lián)網(wǎng)程序的性能和解決TCP相關(guān)問題的能力。 我們講述在Linux場景下數(shù)據(jù)包是如何在協(xié)議層傳輸
    的頭像 發(fā)表于 11-11 11:33 ?960次閱讀
    Linux場景下<b class='flag-5'>數(shù)據(jù)包</b>是如何在協(xié)議層<b class='flag-5'>傳輸</b>的

    modbus在通信的過程中如何實(shí)現(xiàn)大數(shù)據(jù)包傳輸

    modbus在通信的過程中如何實(shí)現(xiàn)大數(shù)據(jù)包傳輸
    發(fā)表于 10-15 12:23

    數(shù)據(jù)包的生命周期

    電子發(fā)燒友網(wǎng)站提供《數(shù)據(jù)包的生命周期.pdf》資料免費(fèi)下載
    發(fā)表于 10-13 14:44 ?0次下載