串行通信

AI summary
文档详细介绍了基于UART协议的串行通信,包括接收器和发送器的实现、数据格式、波特率设置、全双工功能测试以及基于FPGA的通信显示系统设计。重点讨论了UART的工作原理、数据传输过程、波特率调节和简易通信显示系统的架构与实现。
Last edited time
Sep 24, 2024 06:58 AM
Last edited by
Tags
Serial Communication
Communication Protocols
Data Transmission Methods

通信基本知识

一:处理器和外围设备通信的方式

  1. 并行通信
    1. 发送设备和接收设备交互数据时,通过多条数据线对数据进行同时传输。
      notion image
      优点:传输数据速度快
      缺点:占用引脚资源多
  1. 串行通信
    1. 发送设备和接收设备交互数据时,通过一条数据线对数据一位一位进行传输。
      notion image
      MSB(高位)~LSB(低位):高位数据优先 LSB~MSB:低位数据优先
      优点:线路简单(占用引脚资源少)
      缺点:传输数据速度慢

二:串行通信的通信方式

  1. 同步通信
    1. 发送设备和接收设备传输数据时,需要采用同步时钟来进行数据的交互。
      notion image
  1. 异步通信
    1. 发送设备和接收设备传输数据时,发送设备可以拟定时钟进行数据的发送;接收设备也可以拟定时钟用于数据的接收。
      notion image

三:串行通信的通信方向

  1. 单工
    1. 数据只能沿一个方向进行传输。
      notion image
  1. 半双工
    1. 数据可以沿两个方向进行传输,但需要分时进行。
      notion image
      时间1:可以认为是数据的写入(FPGA和存储器间的通信)
      时间2:可以认为是数据的读取(存储器和FPGA间的通信)
  1. 全双工
    1. 数据可以同时沿两个方向进行传输。
      notion image

四:常用的串行通信(3大串行总线协议)

通信协议
通信接口
通信方式
通信方向
说明
UART:通用异步收发器
TXD,RXD
异步通信
全双工
SPI:串行外设接口
CS_N,SCLK,MISO,MOSI
同步通信
全双工
IIC:集成电路总线
SCL,SDA
同步通信
半双工
  1. UART
    1. Universal  Asynchronous Receiver-Transmitter:通用异步收发器(俗称串口)。
      notion image
  1. SPI(4线制)
    1. Serial Peripheral Interface:串行外设接口
      notion image
  1. IIC
    1. Inter-Integrated Circuit(集成电路总线)
      notion image
      assign SDA = (en == 1’b1) ? sda_buff : 1’bz;

五:UART(通用异步收发器)

  1. 物理层
    1. DB9:USB转RS232
      DB9:USB转RS232
      DB9:公对公/母对母
      DB9:公对公/母对母
      notion image
      引脚编号
      端口描述
      Pin1
      悬空
      Pin2
      RXD:接收信号线
      Pin3
      TXD:发送信号线
      Pin4~pin9
      悬空/接地
      notion image
      在ZX-1开发板原理图中,电平标准采用MAX232电平转换芯片。
      可以详见max232手册。
  1. 协议层
    1. (1):数据格式
      数据格式中要求:起始位、数据位、校验位、停止位…
      notion image
      校验位:奇校验/偶校验/忽略校验
      奇校验:数据中1的个数为奇数时,校验位为0,反之为1;
      偶校验:数据中1的个数为偶数时,校验位为0,反之为1;
      (2):传输数据速率
      一般采用波特率进行表示:Baud(简称:Bd),每秒传输二进制数的位数。常用的波特率9600/19200/38400/57600/115200…
      波特率和比特率的关系:
      比特率=波特率*单个调制状态对应的二进制位数。

六:UART接收器实现

notion image
  1. RXD数据格式
    1. notion image
      规定:在一个完整的字符帧中,有1个起始位,8个数据位,忽略校验位,2个停止位。
  1. UART接收器功能
    1. 将数据一位一位进行接收(LSB~MSB),称为串行方式,接收的数据往往放置在存储器中,称为并行方式(串行~并行)。
  1. UART接收器分析
    1. 功能:UART接收数据时,将接收到的数据转换成并行数据。
      分析:对于接收器而言,需要对每一位数据进行采样,一般情况下采样数据会在每一位数据的中心点位置(中心点位置数据最稳定)。所以在一般应用当中,采样数据的中心时刻的电平就可以认为是此刻数据的电平。
      需要设置合适的采样点,采样点多(数据稳定)/少(数据不稳定)。
      notion image
      如果采样点个数比较少,设置4个采样点,那么中心点位置趋近于2/3采样点,此时偏离中心点比较远,可能会出现数据不稳定的时间。
      notion image
      如果采样点个数比较多,设置16个采样点,那么中心点位置趋近于7/8采样点,此时距离中心点比较近,数据比较稳定。
      由于UART属于异步传输,没有传输的同步时钟,为了保证传输数据的正确性,UART采用16倍的波特率进行采样,每一个数据都会有16个采样点,以保证采样到的数据不会出现误码/滑码现象,一般UART传输的数据往往是8bit,如果出现一个周期的误差,接收端也会正确的接收到数据。
      notion image
      假设UART传输数据时采用Baud=9600,接收端一个UART时钟16*Baud=16*9600HZ。
  1. UART接收器端口
    1. notion image
  1. UART接收器实现
    1. notion image
      采用线性序列机实现:LSM
      LSM_1S:节拍计数(RXD拉低后,记录接收一帧时序中时钟的个数:采样点个数)
      LSM_2S:在指定的时钟节拍下,完成动作(接收数据:中心点位置)
      1个起始位,8个数据位,忽略校验位,2个停止位。
      将每一位数据都设置为16个采样点,起始位需要16个采样点(0~15),第一个数据位D0需要16个采样点(16~31)…直到满足规定的数据格式(11*16);在1*16+7采样点接收D0数据,在2*16+7采样点接收D1数据,依次在8*16+7采样点接收D7数据,将数据接收完成后,放置在接收数据寄存器中同时产生接收8bit数据完成标志。
  1. UART接收器测试
    1. 需要模拟RXD线上的数据,D0~D7这8位数据,每一位数据持续时间均为波特率周期
      `timescale 1ns/1ps
      Baud=9600 TBaud=10^9/9600
      `timescale 1us/1ps
      Baud=9600 TBaud=10^6/9600
      notion image
      可以自行模拟一组/多组数据,模拟时必须按照数据格式,从起始位~停止位(RXD=1);可以接着模拟下一组数据(RXD=0),模拟数据和第一组情况一致。
  1. 线性序列表
    1. 节拍
      LSM_1S:节拍计数
      LSM_2S:节拍上发生动作
      说明
      0
      (rxd==1’b0):cnt=0
      rec_data=8’h0,temp_data=8’h0,rec_data_flag=1’b0
      初始值
      1*16+7
      cnt=cnt+1
      temp_data[0]=rxd
      接收第一位数据:D0(LSB)
      2*16+7
      cnt=cnt+1
      temp_data[1]=rxd
      接收第二位数据:D1
      3*16+7
      cnt=cnt+1
      temp_data[2]=rxd
      接收第三位数据:D2
      4*16+7
      cnt=cnt+1
      temp_data[3]=rxd
      接收第四位数据:D3
      5*16+7
      cnt=cnt+1
      temp_data[4]=rxd
      接收第五位数据:D4
      6*16+7
      cnt=cnt+1
      temp_data[5]=rxd
      接收第六位数据:D5
      7*16+7
      cnt=cnt+1
      temp_data[6]=rxd
      接收第七位数据:D6
      8*16+7
      cnt=cnt+1
      temp_data[7]=rxd
      接收第八位数据:D7(MSB)
      9*16+1
      cnt=cnt+1
      rec_data=temp_data,rec_data_flag=1’b1
      产生输出数据和标志
      9*16+2
      cnt=cnt+1
      rec_data_flag=1’b0
      尖峰脉冲(占UART时钟一个周期高电平)
  1. 仿真测试
    1. 模拟RXD线上两组数据(8’h55和8’h66)。
      notion image
  1. 下板验证
    1. notion image
      notion image
  1. 通过FIFO对UART接收器接收的数据进行缓存
    1. notion image
      notion image
  1. 仿真测试
    1. notion image
      notion image

七:UART发送器实现

notion image
  1. TXD数据格式
    1. notion image
      规定:在一个完整的字符帧中,有1个起始位,8个数据位,忽略校验位,2个停止位。
  1. UART发送器功能
    1. 将待发送的数据(send_data[7:0])通过TXD数据线一位一位发送出去(并行数据串行输出)。
  1. UART发送器分析
    1. 功能:UART发送数据时,将待发送数据(并行数据)通过TXD数据线一位一位发送出去(串行数据)。
      分析:对于发送器而言,只需要在发送数据持续时间段内,将数据丢出去即可。(常见在数据刚开始时候发送数据)。
      notion image
  1. UART接收器和UART发送器区别
    1. 对于接收器而言:当接收完8bit数据后,接收数据完成。
      对于发送器而言:当发送完8bit数据后,还有没有数据需要再次发送/已经发送完成,停止位一旦出现(TXD=1),代表数据已经发送完成。
  1. UART发送器实现
    1. notion image
      采用线性序列机实现:LSM
      LSM_1S:节拍计数(在TXD=0时(起始位),需要将节拍计数从0开始)。
      LSM_2S:在指定的时钟节拍下,完成动作(发送数据:数据刚开始时:1*16 2*16~8*16),发送完成后,手动将TXD置高(停止位)。
  1. UART发送器端口
    1. notion image
  1. 采用线性序列机实现
    1. 节拍
      LSM_1S:节拍计数
      LSM_2S:节拍上发生动作
      说明
      `EP(12*16)
      (sys_rst_n==0):cnt=`EP
      (sys_rst_n==0):TXD=1,send_data_flag=0
      初始状态值
      0
      (cnt>=`EP):cnt=0
      TXD=0
      起始位(需要将TXD拉低)
      1*16
      cnt=cnt+1
      TXD=send_data[0]
      发送第一位数据(D0:LSB)
      2*16
      cnt=cnt+1
      TXD=send_data[1]
      发送第二位数据(D1)
      3*16
      cnt=cnt+1
      TXD=send_data[2]
      发送第三位数据(D2)
      4*16
      cnt=cnt+1
      TXD=send_data[3]
      发送第四位数据(D3)
      5*16
      cnt=cnt+1
      TXD=send_data[4]
      发送第五位数据(D4)
      6*16
      cnt=cnt+1
      TXD=send_data[5]
      发送第六位数据(D5)
      7*16
      cnt=cnt+1
      TXD=send_data[6]
      发送第七位数据(D6)
      8*16
      cnt=cnt+1
      TXD=send_data[7]
      发送第八位数据(D7:MSB)
      9*16
      cnt=cnt+1
      TXD=1,
      停止位(2个)
      9*16+1
      cnt=cnt+1
      send_data_flag=1
      产生发送8bit数据完成标志(尖峰脉冲)
      9*16+2
      cnt=cnt+1
      send_data_flag=0
  1. 仿真测试
    1. notion image
  1. UART发送器下板验证1
    1. notion image
      notion image
  1. UART发送器下板验证2
    1. 通过外部设备产生待发送数据,将产生待发送数据通过FIFO缓存,读取FIFO数据通过TXD一位一位发送数据。
      notion image
      notion image
  1. 仿真测试
    1. notion image
  1. 下板验证
    1. notion image

八:UART发送/接收器波特率可调节

常用的波特率9600/19200/38400/57600/115200…
Baud=9600 UART_CLK=153.6KHZ
Baud=19200/38400/57600 UART_CLK=XX
Baud=115200 UART_CLK=1.8432MHZ
波特率设置:baud_cnt
波特率
系统时钟:sys_clk
计算
说明:计数器最大值(CNT_MAX)
0
9600
T=1/sys_clk=20ns
Fsys_clk/Fuart_clk
~=325.52
1
19200
T=1/sys_clk=20ns
Fsys_clk/Fuart_clk
~=162.76
2
38400
T=1/sys_clk=20ns
Fsys_clk/Fuart_clk
~=81.38
3
57600
T=1/sys_clk=20ns
Fsys_clk/Fuart_clk
~=54.25
4
115200
T=1/sys_clk=20ns
Fsys_clk/Fuart_clk
~=27.13
以Baud=9600为例:Fuart_clk = 153.6KHZ=16*Baud
CNT_MAX(计数器最大值)= Fsys_clk / Fuart_clk = 50MHZ/153.6KHZ~=326
  1. 设计分析
    1. notion image
  1. 设计架构(以UART接收器为例)
    1. notion image
  1. 仿真测试(以UART接收器为例)
    1. notion image

九:UART全双工功能测试

notion image
  1. 讨论UART回环测试端口:
    1. notion image
  1. 讨论信号间时序关系:
    1. notion image
  1. 仿真测试
    1. notion image
  1. 下板验证
    1. notion image
      notion image

十:练习

  1. 理解通信基本知识
  1. 掌握UART物理层/协议层
  1. 尝试完成UART接收器实现(采用LSM)。
  1. 完成上课内容(UART_RX/UART_RX_ISSP/UART_RECEIVER)。
  1. 尝试完成UART发送器设计(考虑LSM)。
  1. 完成上课内容(UART发送器发送1个数据,串口调试期接收1个数据)
  1. 尝试完成波特率可调节(设置Baud_cnt为定值),在不同Baud下正常能够接收/发送数据(串口调试器:9600/19200 UART_CLK:16*Baud)

基于FPGA的通信显示系统

一:简易通信显示系统

通信协议:UART协议 显示接口:VGA接口
综合设计项目1:上位机软件(串口调试器)发送图片数据(图片大小:200*200)通过UART接收器对图片数据进行接收,接收到的数据通过VGA接口显示在显示器中。
notion image

二:图像采集系统

通信协议:SCCB协议(类似IIC协议) SDRAM芯片手册
算法实现:二值化/灰度化/Sobel算法… 显示接口:VGA接口
notion image

三:简易通信显示系统分析

  1. 选择片内存储
    1. DPRAM:双端口RAM(同一时钟/不同时钟)。
      DCFIFO:双时钟FIFO。
      由于VGA控制器在图片显示区域内,控制地址变化,将读取图片数据给到RGB。
      所以选择片内存储时,优先选择DPRAM(读写数据时,有读写地址和使能)。
      写数据写地址:1个地址写入1个图片的像素点数据(控制WREN:写使能)。
  1. 串口调试器
    1. 串口调试器:选择支持以文件的方式作为发送的数据(图片数据:200*200),以一定的速率对图片的数据进行传输,通过UART接收器对图片的像素点数据1个1个进行接收(串口调试器发送1个数据,UART接收端接收1个数据,对数据进行存储和终端显示)。
  1. 显示现象
    1. notion image

四:简易通信显示系统架构

  1. DPRAM采用双时钟(wr_clk和rd_clk不同)
    1. WR_CLK:UART时钟(16*Baud) RD_CLK:VGA时钟(40MHZ)
      notion image
  1. DPRAM采用双时钟(wr_clk和rd_clk不同)内部信号分析
    1. notion image
  1. DPRAM采用双时钟(wr_clk和rd_clk相同)
    1. WR_CLK:VGA时钟(40MHZ) RD_CLK:VGA时钟(40MHZ)
      notion image
  1. DPRAM采用双时钟(wr_clk和rd_clk相同)内部信号分析
    1. notion image
      如果DPRAM写时钟采用40MHZ,此时接收8bit数据标志依然给DPRAM写使能,在写时钟上升沿来时,检测到写使能为高,开始进行写数据(会将55数据写入N个地址:不满足接收1个数据写入1个地址要求)。
      notion image
  1. 仿真测试
      • 仿真第一部分:RXD接收到的数据写入DPRAM中(5组数据对应5个地址)
        • notion image
      • 仿真第二部分:读取DPRAM中数据在VGA显示区域内显示
        • notion image

五:练习

  1. 完成上课内容
  1. 完成第四部分(1和2),现象和上课演示一致。
Loading...