chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

jf_78858299 ? 來源:Cascatrix ? 作者:Carson ? 2023-01-21 16:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

01

UART基礎(chǔ)知識

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

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

1.1 早期串行通訊設(shè)備

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

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

1.2 早期的芯片級UART

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

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

1.3 現(xiàn)代串行通訊設(shè)備

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

02

UART傳輸協(xié)議

2.1 UART協(xié)議

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

圖片

串口通信的規(guī)范如下:

1. 空閑狀態(tài)(沒有數(shù)據(jù)傳輸?shù)臓顟B(tài))下,串行傳輸線上為高電平1;

2. 發(fā)送方發(fā)送低電平0表示數(shù)據(jù)傳輸開始,這個低電平表示傳輸?shù)钠鹗嘉唬?/p>

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

4. 數(shù)據(jù)位的最高位發(fā)送完畢以后的下一位是奇偶校驗位,這一位可以省略不要,同時,當不發(fā)送奇偶校驗位的時候接收方也相應(yīng)的不接收校驗位;

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

下面以發(fā)送字節(jié)0x55為例來說明整個的發(fā)送過程:

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

圖片

下面在給出一個波形,根據(jù)上面的規(guī)則也可以很容易判斷這是發(fā)送字節(jié)0x13的波形:

圖片

2.1.1 起始位

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

2.1.2 數(shù)據(jù)位

數(shù)據(jù)位包含正在傳輸?shù)膶嶋H數(shù)據(jù),位寬可以為4bit到10bit,大多數(shù)情況下,數(shù)據(jù)首先從低有效位發(fā)送。

2.1.3 校驗位

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

偶校驗:數(shù)據(jù)位加上校驗位后,“1”的位數(shù)應(yīng)為偶數(shù);

奇校驗:數(shù)據(jù)位加上校驗位后,“1”的位數(shù)應(yīng)為奇數(shù);

圖片

2.1.4 停止位

在數(shù)據(jù)發(fā)送結(jié)束后發(fā)送一位高電平用于停止標識。

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

3.1.5 波特率

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

2.2 UART傳輸過程

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

03

UART代碼實現(xiàn)

3.1 UART目標實現(xiàn)功能

設(shè)計一個UART發(fā)送模塊和接收模塊,具體要求如下:

  1. 設(shè)計一個UART發(fā)送模塊,該模塊接收一個8位輸入數(shù)據(jù)并采用UART協(xié)議發(fā)送,UART 采用10位傳輸協(xié)議,即一位起始位,8位數(shù)據(jù)位,一位終止位。發(fā)送數(shù)據(jù)時先發(fā)低位數(shù)據(jù),最后發(fā)高位數(shù)據(jù)。要求波特率為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. 設(shè)計一個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. 設(shè)計一個testbench,對發(fā)送模塊和接收模塊進行測試,測試過程如下,testbench產(chǎn)生一個隨機數(shù),然后啟動uart_tx模塊發(fā)送至uart_rx模塊,當uart_rx模塊接收到有效數(shù)據(jù)后,自動判斷接收的數(shù)據(jù)是否正確。

3.2 Verilog代碼

1. 發(fā)送模塊 (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: 發(fā)送過程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: 發(fā)送結(jié)束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: 發(fā)送數(shù)據(jù)計數(shù),clk_40k分頻至1k波特率對傳輸數(shù)據(jù)進行計數(shù)

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數(shù)據(jù)移位操作,串行輸出

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

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

    關(guān)注

    22

    文章

    1287

    瀏覽量

    105522
  • 通訊接口
    +關(guān)注

    關(guān)注

    2

    文章

    82

    瀏覽量

    16781
  • 異步收發(fā)傳輸器

    關(guān)注

    0

    文章

    10

    瀏覽量

    6438
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    常用的串口通信協(xié)議UART異步串行通信簡析

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

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

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

    UART串口通訊協(xié)議解析

    ,協(xié)議如下: 起始位 數(shù)據(jù)位 奇偶校驗位 停止位 1bit 5-9bit 0-1bit 1-2bit 空閑位 :UART協(xié)議規(guī)定,當總線處于空閑狀態(tài)時信號線的狀態(tài)為‘1’即高電平,表示
    發(fā)表于 09-12 16:01

    SPI、I2C、UART三種串行總線協(xié)議的區(qū)別

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

    UART串口通訊協(xié)議是什么

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

    常用串行總線協(xié)議有哪些

    一、常用串行總線協(xié)議目前常用的微機與外設(shè)之間進行數(shù)據(jù)傳輸?shù)?b class='flag-5'>串行
    發(fā)表于 11-03 07:14

    常用串行總線協(xié)議有哪些

    常用串行總線協(xié)議I2C總線、SPI總線、SCI總線
    發(fā)表于 11-19 06:46

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

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

    SPI、I2C、UART串行總線協(xié)議

    串口通訊通信協(xié)議UART,以及常用外設(shè)通信協(xié)議 SPI、I2C的介紹與他們之間的區(qū)別
    發(fā)表于 11-30 11:28 ?96次下載

    SPI、I2C、UART三種串行總線協(xié)議的區(qū)別

    SPI、I2C、UART三種串行總線協(xié)議的區(qū)別
    發(fā)表于 07-17 17:23 ?0次下載

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

    通用異步收發(fā)傳輸器** (Universal Asynchronous Receiver/Transmitter),通常稱作UART。它將要傳輸?shù)馁Y料在串行通信與并行通信之間加以轉(zhuǎn)換。作為把并行輸入信號轉(zhuǎn)成串行輸出信號的芯片,
    的頭像 發(fā)表于 01-21 16:53 ?1585次閱讀
    <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'>協(xié)議</b>(下)

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

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

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

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

    討論使用UART通信協(xié)議的基本原則

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

    UART協(xié)議的工作原理和應(yīng)用場景

    UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)傳輸器)協(xié)議是一種廣泛使用的串行通信協(xié)議,它允許計算機與外部設(shè)備之間通過
    的頭像 發(fā)表于 08-25 17:15 ?6430次閱讀