色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

解析常用串行總線——UART協議(上)

jf_78858299 ? 來源:Cascatrix ? 作者:Carson ? 2023-01-21 16:50 ? 次閱讀

01

UART基礎知識

通用異步收發傳輸器 (Universal Asynchronous Receiver/Transmitter),通常稱作UART。它將要傳輸的資料在串行通信與并行通信之間加以轉換。作為把并行輸入信號轉成串行輸出信號的芯片,UART通常被集成于其他通訊接口的連結上。

具體實物表現為獨立的模塊化芯片,或作為集成于微處理器中的周邊設備。一般是RS-232C規格的,與類似Maxim的MAX232之類的標準信號幅度變換芯片進行搭配,作為連接外部設備的接口。在UART上追加同步方式的序列信號變換電路的產品,被稱為USART(Universal Synchronous Asynchronous Receiver Transmitter)。

1.1 早期串行通訊設備

早期的電報機器使用長度可變的脈沖信號(摩斯電碼)進行數據傳輸,后來出現的電傳打印機(teleprinters )使用5、6、7或8個數據位來表示各種字符編碼。隨著電傳打印機的普及,最終發展成為計算機外圍設備。

由于歷史的發展原因,早期在Unix終端是一個名字為ASR33的電傳打字機,而電傳打字機的英文單詞為Teletype(或Teletypewritter),縮寫為TTY。因此,終端設備也被稱為tty設備。這就是TTY這個名稱的來源。

1.2 早期的芯片級UART

DEC(Digital Equipment Corporation)公司的Gordon Bell 為該公司的PDP系列計算機設計了第一個UART,不過體積龐大,UART的線路占據了整個電路板;后來DEC將串行線路單元的設計濃縮為早期的UART單芯片,以方便自己使用。西部數據(Western Digital)公司在1971年左右將其開發為第一個廣泛可用的UART單芯片 WD1402A。這是中型集成電路的早期產品。

DEC是美國一家計算機公司;Western Digital是美國計算機硬盤驅動器制造商和數據存儲公司。

1.3 現代串行通訊設備

2000年開始,大多數IBM或者相關的計算機都刪除了其外部RS232的COM端口,將其替換為帶寬性能更加出色的USB端口;對于仍然需要RS-232串行COM端口的用戶,現在通常使用外部USB轉UART轉換器,常見的有CH340,Silicon Labs 210x的驅動程序,現在很多處理器和芯片都內置了UART。

02

UART傳輸協議

2.1 UART協議

在串口通信中,數據在1位寬的單條線路上進行傳輸,一個字節的數據要分為8次,由低位到高位按順序一位一位的進行傳送,這個過程稱為數據的"串行化(serialized)"過程。由于串口通信是一種異步通信協議,并沒有時鐘信號隨著數據一起傳輸,而且空閑狀態(沒有數據傳輸的狀態)的時候,串行傳輸線為高電平1,所以發送方發送一個字節數據之前會先發送一個低電平0,接收方收到這個低電平0以后就知道有數據要來了,準備開始接收數據從而實現一次通信。串口通信的時序如下圖所示:

圖片

串口通信的規范如下:

1. 空閑狀態(沒有數據傳輸的狀態)下,串行傳輸線上為高電平1;

2. 發送方發送低電平0表示數據傳輸開始,這個低電平表示傳輸的起始位;

3. 8-bit的數據位(1 Byte)是從最低位開始發送,最高位最后發送;

4. 數據位的最高位發送完畢以后的下一位是奇偶校驗位,這一位可以省略不要,同時,當不發送奇偶校驗位的時候接收方也相應的不接收校驗位;

5. 最后一位是停止位,用高電平1表示停止位。

下面以發送字節0x55為例來說明整個的發送過程:

先把0x55轉化成二進制為:01010101。顯然0x55的最低位bit 0是1,次低位bit 1是0,……..,最高位bit 7是0,由于串口是從最低位開始發送一個字節,所以0x55各個位的發送順序是1-0-1-0-1-0-1-0,波形如下圖所示:

圖片

下面在給出一個波形,根據上面的規則也可以很容易判斷這是發送字節0x13的波形:

圖片

2.1.1 起始位

UART數據傳輸時在不傳輸數據時保持在高電平,當開始傳輸數據時,先發出1bit位寬的低電平,表示數據開始傳輸,即為起始位。

2.1.2 數據位

數據位包含正在傳輸的實際數據,位寬可以為4bit到10bit,大多數情況下,數據首先從低有效位發送。

2.1.3 校驗位

串口通信中的一種交錯方式,通常有偶校驗、奇校驗、高校驗和低校驗四種檢錯方式,沒有校驗位也是可以的。

偶校驗:數據位加上校驗位后,“1”的位數應為偶數;

奇校驗:數據位加上校驗位后,“1”的位數應為奇數;

圖片

2.1.4 停止位

在數據發送結束后發送一位高電平用于停止標識。

由于數據是在傳輸線上定時的,并且每一個設備有其自己的時鐘,很可能在通信中兩臺設備間出現了小小的不同步。因此停止位不僅僅是表示傳輸的結束,并且提供計算機校正時鐘同步的機會。適用于停止位的位數越多,不同時鐘同步的容錯性越好,但是數據傳輸率同時也越慢。

3.1.5 波特率

串口數據的傳輸速度用波特率(bit/s)進行衡量,常見的波特率有:9600、19200、38400、57600、115200。假設UART配置為1bit起始位,8bit數據位,沒有校驗位,1bit停止位,那么9600bit/s的波特率可得出每一位數據的時間寬度為:T=1/9600*10=1.04ms,即每個字節(10bit數據)傳輸需要1.04ms。同理可得各個波特率下數據位傳輸時間寬度。

2.2 UART傳輸過程

  1. 發送端數據總線將數據包并行傳輸給發送端UART;
  2. 發送端UART將起始位、奇偶校驗位和停止位添加到數據包中;
  3. 接收端UART解析數據包數據;
  4. 接收端UART將所解析的數據傳輸給接收端數據總線。

03

UART代碼實現

3.1 UART目標實現功能

設計一個UART發送模塊和接收模塊,具體要求如下:

  1. 設計一個UART發送模塊,該模塊接收一個8位輸入數據并采用UART協議發送,UART 采用10位傳輸協議,即一位起始位,8位數據位,一位終止位。發送數據時先發低位數據,最后發高位數據。要求波特率為1K。模塊的定義如下:

module uart_tx (

clk_40k, //clock signal, 40kHz

rst_n, //reset signal, active low

din, //the input data which will be sent by the UART module, 8 bit width

send_start,//the start enable signal, active high, the width is one clock period

bit_out //the serial output data

);

  1. 設計一個UART接收模塊,模塊的定義如下:

module uart_rx (

clk_40k, //clock signal, 40kHz

rst_n, //reset signal, active low

bit_in, //the input serial bit,

dout_vld,//the output valid signal, active high,the dout is valid when this signal is high.

dout //received data, 8 bit width

);

  1. 設計一個testbench,對發送模塊和接收模塊進行測試,測試過程如下,testbench產生一個隨機數,然后啟動uart_tx模塊發送至uart_rx模塊,當uart_rx模塊接收到有效數據后,自動判斷接收的數據是否正確。

3.2 Verilog代碼

1. 發送模塊 (uart_tx):

module uart_tx (

clk_40k,//clock signal, 40kHz

rst_n, //reset signal, active low

din,//the input data which will be sent by the UART module, 8 bit width

send_start,//the start enable signal, active high, the width is one clock period

bit_out//the serial output data

);

input [7:0] din;

input clk_40k;

input rst_n;

input send_start;

output bit_out;

reg flag;

reg tx_flag;

reg [6:0] cnt;

reg [5:0] tx_cnt;

reg [9:0] din_temp;

//flag: 發送過程flag始終拉高

always @ (posedge clk_40k)

begin

if(~rst_n)

flag <= 1'b0;

else if(send_start == 1'b1)

flag <= 1'b1;

else if(tx_flag == 1'b1)

flag <= 1'b0;

end

//tx_flag: 發送結束tx_flag拉高

always @ (posedge clk_40k)

begin

if(~rst_n)

tx_flag <= 1'b0;

else if(flag == 1'b1 && din_temp[0] == 1'b0)

tx_flag <= 1'b1;

else if(tx_cnt == 7'd10)

tx_flag <= 1'b0;

end

//cnt: 發送數據計數,clk_40k分頻至1k波特率對傳輸數據進行計數

always @ (posedge clk_40k)

begin

if(~rst_n)

cnt <= 7'b0;

else if(tx_flag == 1'b1 && cnt != 7'd39)

cnt <= cnt + 1'b1;

else

cnt <= 7'b0;

end

always @ (posedge clk_40k)

begin

if(~rst_n)

tx_cnt <= 6'b0;

else if(tx_flag == 1'b1 && cnt == 7'd39)

tx_cnt <= tx_cnt + 1'b1;

else if(tx_flag == 1'b0)

tx_cnt <= 6'b0;

end

//din_temp: 8bit數據移位操作,串行輸出

always @ (posedge clk_40k)

begin

if(~rst_n)

din_temp <= 10'b1111111111;

else if(flag == 1'b1 || send_start == 1'b1)

din_temp <= {1'b1,din,1'b0};

else if(tx_flag == 1'b1 && cnt == 7'd39)

din_temp <= {1'b1,din_temp[9:1]};

end

assign bit_out = din_temp[0];

endmodule

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • uart
    +關注

    關注

    22

    文章

    1243

    瀏覽量

    101637
  • 通訊接口
    +關注

    關注

    2

    文章

    80

    瀏覽量

    16219
  • 異步收發傳輸器

    關注

    0

    文章

    10

    瀏覽量

    6361
收藏 人收藏

    評論

    相關推薦

    常用的串口通信協議UART異步串行通信簡析

    UART是異步串行通信口的總稱。它所包含的RS232RS449RS423等等是對應各種異步串行通信口的接口標準和總線標準。他們規定了通信口的電氣特性、傳輸速率、連接特性和機械特性等一系
    發表于 07-10 09:06 ?3287次閱讀

    常用串行總線(一)——UART協議(Verilog實現)

    通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART。它將要傳輸的資料在串行通信與并行通信之間加以轉換。作為把并行輸入信號轉成串行輸出信號的芯片,
    發表于 01-05 09:48 ?3982次閱讀

    UART串口通訊協議解析

    ,協議如下: 起始位 數據位 奇偶校驗位 停止位 1bit 5-9bit 0-1bit 1-2bit 空閑位 :UART協議規定,當總線處于空閑狀態時信號線的狀態為‘1’即高電平,表示
    發表于 09-12 16:01

    SPI、I2C、UART三種串行總線協議的區別

    實現從設備,則只需輸入口即可。I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標準,具有總線仲裁機制,非常適合在器件之間進行近距離、非經常性的數據通信。在它的
    發表于 11-02 09:48

    UART串口通訊協議是什么

    UART串口通訊協議解析概述接口通信協議概述通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作
    發表于 07-29 08:07

    常用串行總線協議有哪些

    一、常用串行總線協議目前常用的微機與外設之間進行數據傳輸的串行
    發表于 11-03 07:14

    常用串行總線協議有哪些

    常用串行總線協議I2C總線、SPI總線、SCI總線
    發表于 11-19 06:46

    串行通信中的IIC總線工作原理是什么

    串行通信中的IIC總線工作原理51本身不帶IIC總線 ,使用程序模擬IIC通信協議常用串行
    發表于 12-08 07:52

    SPI、I2C、UART串行總線協議

    串口通訊通信協議UART,以及常用外設通信協議 SPI、I2C的介紹與他們之間的區別
    發表于 11-30 11:28 ?95次下載

    SPI、I2C、UART三種串行總線協議的區別

    SPI、I2C、UART三種串行總線協議的區別
    發表于 07-17 17:23 ?0次下載

    解析常用串行總線——UART協議(下)

    通用異步收發傳輸器** (Universal Asynchronous Receiver/Transmitter),通常稱作UART。它將要傳輸的資料在串行通信與并行通信之間加以轉換。作為把并行輸入信號轉成串行輸出信號的芯片,
    的頭像 發表于 01-21 16:53 ?1157次閱讀
    <b class='flag-5'>解析</b><b class='flag-5'>常用</b><b class='flag-5'>串行</b><b class='flag-5'>總線</b>——<b class='flag-5'>UART</b><b class='flag-5'>協議</b>(下)

    常用串行總線——SPI協議()

    SPI(Serial Perripheral Interface, 串行外圍設備接口)** 是 Motorola 公司推出的一種同步串行接口技術。SPI 總線在物理上是通過接在外圍設備微控制器
    的頭像 發表于 01-21 17:00 ?1490次閱讀
    <b class='flag-5'>常用</b><b class='flag-5'>串行</b><b class='flag-5'>總線</b>——SPI<b class='flag-5'>協議</b>(<b class='flag-5'>上</b>)

    常用串行總線——SPI協議(下)

    SPI(Serial Perripheral Interface, 串行外圍設備接口)** 是 Motorola 公司推出的一種同步串行接口技術。SPI 總線在物理上是通過接在外圍設備微控制器
    的頭像 發表于 01-21 17:03 ?1024次閱讀
    <b class='flag-5'>常用</b><b class='flag-5'>串行</b><b class='flag-5'>總線</b>——SPI<b class='flag-5'>協議</b>(下)

    討論使用UART通信協議的基本原則

    UART,即通用異步接收器/發送器,是最常用的設備間通信協議之一,正確配置后,UART可以配合許多不同類型的涉及發送和接收串行數據的
    的頭像 發表于 02-01 17:54 ?1087次閱讀

    UART協議的工作原理和應用場景

    UART(Universal Asynchronous Receiver/Transmitter,通用異步收發傳輸器)協議是一種廣泛使用的串行通信協議,它允許計算機與外部設備之間通過
    的頭像 發表于 08-25 17:15 ?3647次閱讀
    主站蜘蛛池模板: 国产露脸无码A区久久 | 欧美日韩高清一区 | 日本久久不射 | 男人把女人桶到爽免费看视频 | 久草热8精品视频在线观看 久草青青在线 | adc年龄确认大驾光临入口 | 国产在线精品亚洲 | 久久综合一个色综合网 | 一本道综合久久免费 | 91系列在线观看免费 | 黑兽在线观看高清在线播放樱花 | 精品久久久久久电影网 | 伦理片秋霞免费影院 | 99久久伊人一区二区yy5o99 | 国产36d在线观看 | 国模玲玲自拍337p | 手机免费毛片 | 美女被爆羞羞天美传媒 | 两个客户一起吃我的奶 | 一本大道香蕉中文在线视频观看 | 久久亚洲午夜牛牛影视 | 欧美xxxxb| 亚洲欧美高清在线精品一区 | 亚洲精品高清视频 | 亚洲AV成人片色在线观看网站 | 亚洲99精品A片久久久久久 | 色欲AV精品人妻一区二区三区 | 亚洲精品国产自在在线观看 | 日韩一区精品视频一区二区 | 蜜桃臀无码内射一区二区三区 | 99久久亚洲综合精品 | 亚洲人成人77777在线播放 | 97欧美精品大香伊蕉在人线 | 桃花在线视频观看免费 | 97精品在线播放 | AV国产乱码一区二区三视频 | 久久精品视频在线看15 | 内射白嫩少妇超碰 | 成人免费看片又大又黄 | 欧美高清xxx| 亚洲三级视频 |