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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: 71875456

[求助] UART传输出错问题,怀疑是波特率的误差。

[复制链接]
 楼主| 发表于 2016-1-18 14:47:41 | 显示全部楼层
回复 10# ddxx


   十分感谢
发表于 2016-1-18 15:24:13 | 显示全部楼层
回复 7# 71875456


你的时钟是PLL直接分频的,还是自己写的?我看这个数可能是你自己手写的,这样没准真的是时钟的问题。我做过921600波特率的,虽然仿真上,10几个ns以内的时钟周期偏差,都不影响工作,但是实际上电路的时候发现时钟抖动会导致偶尔出现字节错误,最后把时钟周期偏差降到10个ns一下,才通过。如果是rtl自己写的分频,这个问题会更明显估计
发表于 2016-1-18 15:55:30 | 显示全部楼层
回复 6# 71875456


   16倍太高了,采样频率太高会出错的。5倍最好了。沿变矫正的意思是,在出现沿的时候就做一次矫正,我给个比喻:
假设datain是输入的采样信号

reg d_reg0 ,d_reg1 ;
always @ (posedge clock)
if ()
else begin
      d_reg0 <= datain ;
      d_reg1 <= d_reg1 ;
      end
assign d_neg_pos = (d_reg0 === d_reg1) ? 1'd0 : 1'd1 ;


这代码的意思是如果有沿变就会出来一个脉冲的有效信号。这个时候你的采样 (假设是5倍关系)计数器,常规是计数5次再返回到0 (0-4)。当有了这个信号有效的时候不管这个计数器到多少都回到 1 (记住这个不是0,是1或者是2,这个要看你的代码具体延时多少,依据自己的波形图去调整,因为从d_neg_pos有效到下面一段代码的判定有2个脉冲的延时)。

if(puls_cnt == 3'd4) puls_cnt <= 3'd0 ;
else (d_neg_pos) puls_cnt <= 3'd2 ;
else puls_cnt <= puls_cnt + 3'd1 ;
发表于 2016-1-18 15:59:59 | 显示全部楼层
回复 11# 71875456


   还有一个更简单的。你把输入的信号datain  用 reg  打两拍。就是我写的代码最上面一个always。然后把f降低到波特率的5倍,再对d_reg1进行 采样  一切搞定。哈哈哈
再不行,把采样时钟(这么低的频率你如果用到了计数分频的话)再打两拍。
发表于 2016-1-18 16:21:05 | 显示全部楼层
回复 8# 71875456

16倍过采样,你的采样点是固定在8吗还是?

每次uart传输的起始,就是start bit的时候没有清零吗?
我算了下你的误差,每个bit差0.41个clk,8个bit也就差3.2个高频的clk,根本不会对采样造成印象。唯一的可能是你的代码没有在start bit的时候,对cnt进行清零
发表于 2016-1-18 16:48:53 | 显示全部楼层
回复 11# 71875456
这个是自己写的,已经在很多场合用过了,是PC16550的简化版,软件兼容PC16550,支持Modem功能。
发表于 2016-1-18 16:52:25 | 显示全部楼层
同楼上所述,
怀疑两点:
1、UART每笔传输是要校准的,按理不会出现误差累积导致错误的情况,是否校准没有做好?
2、信号是否干净,这个可以使用内部高频的时钟进行去毛刺处理,一种做法就是连续采几拍,几拍同时为1,才认为信号真正变为1了(0也一样)
希望有帮助~
发表于 2016-1-18 23:31:16 | 显示全部楼层
不懂什么意思
发表于 2016-1-19 10:44:58 | 显示全部楼层
看到大家回复的好多,感觉不是很复杂啊!
1、你的分频是否合理
2、检测uart的起始信号要检测个10次左右,确实是启动了,才能确认
3、然后就按照波特率分频,计数到了就接收一个数,整个流程结束,就把数据锁存到一个寄存器里。等待下一次启动信号。
发表于 2021-4-2 14:33:44 | 显示全部楼层


whz7783478 发表于 2016-1-18 16:21
回复 8# 71875456

16倍过采样,你的采样点是固定在8吗还是?


新手提问,请问这个误差是怎么算出来的呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-28 12:50 , Processed in 0.022133 second(s), 6 queries , Gzip On, Redis On.

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