RS232/485、UART及波特率相关

波特率描述了单片机或计算机在串口通信时的速率。如每秒钟传送960个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为960Bd,比特率为10位*960个/秒=9600bps。又比如每秒钟传送960个二进制位,这时的波特率为960Bd,比特率也是960bps。

波特率,可以通俗的理解为一个设备在一秒钟内发送(或接收)了多少码元的数据。它是对符号传输速率的一种度量,1波特即指每秒传输1个码元符号(通过不同的调制方式,可以在一个码元符号上负载多个bit位信息),1比特每秒是指每秒传输1比特(bit)。


解决波特率转化的途径有两种。一是用单片机,接收时设置为跟上位PC机一致的波特率进行接收。发送时再设置为跟下位系统相同的波特率发送数据;二是用FPGA,利用VHDL设计出异步串行通信电路,直接接收PC 机的数据,自行转化为另一种波特率的数据再发送出去。

从某种意义上,可以说,线路上存在的仅仅是电流,RS232/RS485规定了这些电流在什么样的线路上流动和流动的样式;在UART那里,电流才被解释和组装成数据并变成CPU可直接读写的形式。

 

EIA-RS-232C对电气特性、逻辑电平和各种信号线功能都作了规定。

在TxD和RxD上:

逻辑1(MARK)=-3V~-15V

逻辑0(SPACE)=+3~+15V

在RTS、CTS、DSR、DTR和DCD等控制线上:

信号有效(接通,ON状态,正电压)=+3V~+15V

信号无效(断开,OFF状态,负电压)=-3V~-15V

 

RS-485的电气特性:

逻辑“0”以两线间的电压差为+(2—6)V表示;

逻辑“1”以两线间的电压差为-(2—6)V表示。

接口信号电平比RS-232降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。数据最高传输速率为10Mbps。因为RS485接口组成的半双工网络,一般只需二根连线(一般叫AB线),所以RS485接口均采用屏蔽双绞线传输。

 

参考资料:UART和RS232/RS485的关系是什么?

http://www.360doc.com/content/13/1119/18/13253385_330564821.shtml

说了这么多,其实笔者,只想弄明白一个问题,那就是Xilinx FPGA中的串口波特率支持动态修改吗,在此过程中了解了一些关于波特率和UART的知识,特此分享给大家。


UART(Universal AsynchronousReceiver/Transmitter,通用异步收发器)是用于控制CPU与串行设备通信的芯片。常见UART主要有INS8250,PC16450和PCI6550,其中16550发送和接收都带有16 B的FIFO,为协调发送、接收端的速率匹配提供了更大的缓冲余地,同时也可以提高CPU的使用效率,从而提高系统的整体性能。

 

UART16550的基本结构由CPU接口模块、波特率发生器、FIFO控制器、发送/接收FIFO和发送/接收模块共7个部分组成。

CPU通过UART的CPU接口模块配置整个UART,波特率发生器在CPU写入初始值后产生需要的波特率,控制发送和接收模块在设定的波特率下工作。CPU通过接口模块向发送FIFO内写入需要发送的8位数据,同时发送模块开始读取FIFO中的数据,并加入起始位、奇偶校验位和停止位后以串行发送的方式传输给串行接收设备。接收模块时刻监视串行输入端口,发现有数据发送来的时候马上启动接收模块开始接收数据并有效的判断出奇偶校验位来检测数据的正确性,最后把剩下的8位数据放入接收FIFO,并通知CPU有数据进来进行接收。

在使用UART16550前,CPU必须要对控制寄存器进行配置,包括波特率、数据位数、奇偶校验、停止位位数及FIFO的控制等。这也是16550区别于一般UART的具有可编程的特点。

UARTl6550在可编程逻辑器件FPGA上的实现,可以方便地用串口协议与PC机进行串行通信,而且扩展了板级系统的接口功能。应用在可编程器件FPGA内部,可以很大程度地减少电路板的使用面积,并提高系统的稳定性和可编程性。

猜你喜欢

转载自blog.csdn.net/songkai320/article/details/78810226
今日推荐