学习笔记之FPGA的串口通信

本文介绍了FPGA中的异步UART协议以及USB和RS232接口标准,包括它们的优缺点和接口配置。详细阐述了程序设计中的接收和发送模块,涉及状态机和时钟周期管理。
摘要由CSDN通过智能技术生成

        前段时间笔者已经就STM32的通讯协议发了一篇总结,最近在学FPGA时决定重新写一篇关于fpga的通讯协议的内容。本章将着重介绍异步UART协议和USB、RS232。

1. 接口标准

        在两个设备进行数据传输时,从硬件层面将数据定义为1为高电平,0为低电平,我们就可以通过改变传输线电平的高低实现这组数据的顺利传输。为了对这种硬件层面的数据传输形式进行规范定义便有了硬件通信接口协议,目前常用的接口标准有RS232、RS422、RS485等。

接口标准逻辑1逻辑0说明优缺点
TTL+3.3/5V0常见的控制芯片引脚均支持
RS232-15V+15V负逻辑电平,3线全双工,点对点通信传输速度低且距离短
RS422差值电压+(2~6)V差值电压 -(2~6)V差分传输,4线全双工,主从通信抗干扰能力强,传输距离远且高速
RS485差值电压+(2~6)V差值电压 -(2~6)V差分传输,2线半双工,多点双向通信能够实现多个设备的双向通讯

1.1 RS232接口

        RS-232标准采用的接口是9针或25针的D型插头,常用的一般是9针插头(DB9M)。

引脚号引脚名称功能说明
Pin1DCD载波检+测,接收线信号检出(Received Line detection-RLSD)
Pin2RXD接受数据,为接收数据的引脚
Pin3TXD发送数据(TXD) ,为发送数据的引脚
Pin4DTR数据终端准备好
Pin5GND信号地线
Pin6DSR当调制/解调器启动时,在经过自身检测后,用来声明准备就绪
Pin7RTS请求发送,取得发送信息
Pin8CTS清除发送,清除数据
Pin9RI振铃指示,发出提示

1.2 USB

        USB是一种常用的pc接口,他只有4根线,两根电源两根信号,故信号是串行传输的。USB接口的输出电压和电流是:+5V、500mA 实际上有误差,最大不能超过+/-0.2V 也就是4.8~5.2V 。usb接口的4根线一般是下面这样分配的,需要注意的是千万不要把正负极弄反了。

引脚号颜色名称说明
1VBUS+5V
2Data -数据-
3绿Data +数据 + 
4IDA型与地线连接,B型浮空
5GND

2. 程序设计

        由上图可以看到,当uart_rxd处于下降沿时会产生起始条件,此时star_flag和传输标志rx_flag会拉高,随后star_flag复位并开始传输数据,在8位数据后产生一个结束位(为了防止影响下次传输,我们这里一般让停止位只有半个位周期),并产生uart_done信号表示传输结束。

        值得注意的是,这里需要考虑到时钟周期和串口波特率的关系,我们将二者相比便可以得到 每一位所需要的时钟间隔(位周期),并且以时钟间隔为切换数据位的判断量。例如:

        Clk_cycle=Frequence(sys_clk)/Bps(clk_cnt);

        当count<Clk_cycle时,count<=count+1'b1;当count==Clk_cycle时,count<=1'b0且bit_count<=bit_count+1'b1,此时可以改变状态机的“状态”,具体如下: 

 2.1 接收模块

        串口接收模块是个参数化可配置模块,参数“CLK_FRE”定义接收模块的系统时钟频率,单位是 Mhz,参数“BAUD_RATE”是波特率。接收状态机状态转换图如下:

        “S_IDLE”状态为空闲状态,上电后进入“S_IDLE”,如果信号“RXD”有下降沿,我们认为是串口的起始位,进入状态“S_START,等一个 BIT 时间起始位结束后进入数据位接收状态“S_REC_BYTE”,接收完成以后进入“S_STOP”状态,在“S_STOP没有等待一个 BIT 周期,只等待了半个 BIT 时间这是因为如果等待了一个周期,有可能会错过下一个数据的起始位判断,最后进入“S_DATA”状态,将接收到的数据送到其他模块。

2.2 发送模块

        发送模式设计和接收模块相似,也是使用状态机,状态转换图如下:

        上电后进入“S_IDLE”空闲状态,如果有发送请求,进入发送起始位状态“S_START,起始位发送完成后进入发送数据位状态“S_SEND_BYTE”,数据位发送完成后进入发送停止位状态“S_STOP”,停止位发送完成后又进入空闲状态。在数据发送模块中,从顶层模块写入的数据直接传递给寄存器‘tx_reg’,并通过‘tx_reg’寄存器模拟串口传输协议在状态机的条件转换下进行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值