在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2320|回复: 8

[讨论] 关于一些UART代码与异步信号同步化的疑问?

[复制链接]
发表于 2016-10-27 15:55:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
在网上下载了几个UART的接收程序,发现里面都做如下处理:
(1)用波特率时钟clk_baud对输入串行数据打若干拍。
(2)然后在clk_baud的控制下,做下降沿检测,然后将串行信号移位到8位的寄存器中。
      我的疑问是,UART进来的只有数据信号,没有同步时钟,应该相对于FPGA来说属于异步信号,
而且这些异步信号宽度应该都只是clk_baud的宽度,但是因为不同源,所以打拍只能防止亚稳态,
并不能保证进来的数据将会一直正确。数据的采集迟早会出现滑码、错误等情况才对。感觉只有一个
用clk_baud*16倍的时钟的程序才靠谱。
      但是看这些代码流传这么广,不敢确定都是错的,所以问一下大家怎么看。
发表于 2016-10-27 19:38:43 | 显示全部楼层
UART是按照字节发的,每个字节都有开始和结束标志,你可以看下具体的协议,按照baud也没有太大的问题,因为不存在积累的问题,最长的话,也就11个baud就清除了,所以不存在滑码的问题,多谢!
发表于 2016-10-27 22:31:48 | 显示全部楼层
我个人感觉重点在于确定起始位,用16倍波特率比较靠谱吧!中间点采集数据,共8个数据,每个数据偏差一个时钟也还行
发表于 2016-10-28 08:40:24 | 显示全部楼层
首先uart通信是要保证tx rx是相同的波特率
首发的时钟频率偏差不会很大
而且uart rx在接收的时候是要过采样的,一般过采样4 8 16 都有,每个bit采样n次取中间那一次作为实际采样的值,一般两边波特率对的上的话基本没问题
发表于 2016-10-28 10:16:41 | 显示全部楼层
回复 1# YYFFLLMMNN


   的确如你所说,至少要用4X以上时钟,在计数中间点采数更加可靠。
 楼主| 发表于 2016-10-31 10:00:47 | 显示全部楼层
回复 2# neptune1983
(1)我用“N倍的波特率时钟N*clk_baud”进行处理的话,可以通过在每一帧的最后一个BIT通过计数器的控制消除偏差的影响。
(2)但是如果程序里面只有“波特率时钟clk_baud”的话,确实不知道怎么在每一帧都消除偏差的影响。望不吝赐教。
发表于 2016-10-31 10:01:09 | 显示全部楼层
3楼正解,当然要求低点8倍波特率采样也差不多了
发表于 2016-11-23 16:44:34 | 显示全部楼层
我自己也写过UART通信的程序,和楼主有同样的疑问,采用16倍频的采样时钟,还是很稳定的
发表于 2016-11-28 12:53:57 | 显示全部楼层
有开始和结束标志的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-28 02:06 , Processed in 0.026507 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表