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

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
楼主: come_on_sn

[求助] 自己写的uart模块和主机通信的速率最高只能到400多K

[复制链接]
发表于 2022-5-9 23:18:34 | 显示全部楼层


   
come_on_sn 发表于 2022-5-9 22:47
非常感谢前辈耐心为后学解惑,仍旧有几处不解之处,能麻烦您拨冗点拨下吗?谢谢了
1、我使用的是basys3 ...


按照由简单到复杂的顺序来吧:



   
2、您说到示波器是指将主机发送给FPGA的串行数据,通过I/O输出到示波器,然后观测波特率吗?

不用这么复杂。按照你这个方案,你自己写的UART核的RX端口应该映射在FPGA的B18这个管脚?看看开发板的图纸,FT2232的TXD管脚到FPGA的B18管脚之间有没有可以测试的点位,比如说,开发板的设计,这个连线之间串联得有端接电阻,就可以在端接电阻处用示波器测量FT2232发送信号的实际波特率。

如果在FT2232到FPGA之间实在找不到测试点,你倒是可以加一个逻辑电路,把FPGA管脚B18直接映射到一个方便测量的管脚!

回复 支持 反对

使用道具 举报

发表于 2022-5-9 23:44:17 | 显示全部楼层


   
come_on_sn 发表于 2022-5-9 22:47
非常感谢前辈耐心为后学解惑,仍旧有几处不解之处,能麻烦您拨冗点拨下吗?谢谢了
1、我使用的是basys3 ...




   
这是否意味着basys3上所使用的UART芯片,要求波特率误差在3%以内,才可实现正常的通信功能呢?



   
好像不太对,我测试了下在460.8K时,波特率误差在4%多,但是功能还是正常的



   
就UART收、发两端的综合波特率误差而言,良好设计的UART 接收IP在收、发两端综合波特率误差5%以内可以工作。所以商用UART器件基本都会在手册中给出波特率分频器的结构和典型波特率的误差指标。

首先,UART的波特率精度没有成文的国际或国内规范来约束。收、发两端的综合(总)误差控制在5%来源于咱们设计UART接收IP时,以检测到Start bit后,后续bit采样点设计为按波特率计算的理论比特中点,当波特率出现偏差时,自start bit开始,后续比特的实际采样点会偏离理想采样点,并逐渐累加,直到下一个start bit重新同步采样起始点,自start bit开始,到最后stop bit,总的定时偏差不能超过半个比特即50%,由于最后一位的采样点偏差是前面所有比特累积的,用最常见的UART格式一帧传输10比特平均来计算得到收、发两端波特率的综合(总)误差控制在5%以内。

商用器件的正常和你在学校里面简单发一串数看看收发情况来判断是否正常是完全不一样的,商用器件确认通讯是否正常是要设计计算并测试误码率,以误码率低于某个限值来判断的。

商用器件的标称指标和设计指标之间会留一个余量,以确保量产产品的合格率,就像世界上没有两片相同的树叶一样的,也没有两片完全相同的芯片的,同一型号、同一批次的两颗芯片,指标总有点儿差别的,所以厂家的设计、测试指标和手册标称指标之间会留有余量

商用器件更重要的是要考虑器件的指标在不同的工作环境下,指标会变化的,所以标称指标要留有余量。

所以,FT2232手册标称建议波特率偏差控制在3%,你实测4%在你的测试条件下能正常工作。



回复 支持 反对

使用道具 举报

发表于 2022-5-9 23:52:24 | 显示全部楼层


   
come_on_sn 发表于 2022-5-9 22:47
非常感谢前辈耐心为后学解惑,仍旧有几处不解之处,能麻烦您拨冗点拨下吗?谢谢了
1、我使用的是basys3 ...



   
另外,第一幅图显示FT2232芯片可支持上到12M的波特率,是否意味着只要波特率误差合理,理论上也可正常通信呢?

你这两幅图应该是两个文件的哦,FT2232应该是系列芯片,第一幅图是FT2232H,这个H后缀多半是系列内的高速版本。你第二幅图里面估计是低速版本的,文件里面说的是到3Mbps。

12Mbps是可以实现的,那得看你逻辑设计的功底咯。当然,你这个开发板的FT2232限制了只能到3Mbps。
回复 支持 反对

使用道具 举报

发表于 2022-5-10 00:07:12 | 显示全部楼层
本帖最后由 innovation 于 2022-5-10 00:21 编辑


   
come_on_sn 发表于 2022-5-9 22:47
非常感谢前辈耐心为后学解惑,仍旧有几处不解之处,能麻烦您拨冗点拨下吗?谢谢了
1、我使用的是basys3 ...


就你这个开发板而言,能否到921.6k bps?
1.你的逻辑设计先考虑不能实现小数分频,那么你的接收波特率:100,000,000/7/16 = 892,857.1 bps, 误差-3.12%

2.开发板的FT2232,具备小数分频的功能,但这个需要驱动支持,我不确定你使用的串口调试助手和安装的开发板驱动是否提供了小数分频的功能?如果没有,按照整数分频的话,FT2232的发送波特率:48,000,000/16/3 = 1,000,000 bps,误差+8.5%,你和FT2232之间,你作为接收端,故发送波特率相对你的接收波特偏差+12%,你应该是会接收出错的,如果FT2232的发送波特率:48,000,000/16/4 = 750,000 bps,你作为接收端,故发送波特率相对你的接收波特偏差-16%,你还是不得行。

3.综上,你当前要跑921.6k bps,得想办法确认成功的使用了FT2232的小数分频功能,48,000,000/16/3.25 = 923,076.9bps,这样,发送波特率相对你的接收波特偏差+3.38%,应该能行了。

4. 或者,你把你FPGA的系统时钟修改为96MHz,这样,你可以96,000,000/16/6 = 1,000,000 bps,FT2232那边,整数分频肯定是可以用的,串口调试助手设1M的波特率,FT2232实际波特率48,000,000/16/3 = 1,000,000 bps,这样,你就可以试验比921.6k bps还高的波特率了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-13 10:35:12 | 显示全部楼层


   
innovation 发表于 2022-5-9 23:44
首先,UART的波特率精度没有成文的国际或国内规范来约束。收、发两端的综合(总)误差控制在5%来源于咱 ...





非常感谢前辈的答复了,也就是说手册上写3%,实际上波特率误差在4%多些,功能正常也是正常现象?



   
由于最后一位的采样点偏差是前面所有比特累积的,用最常见的UART格式一帧传输10比特平均来计算得到收、发两端波特率的综合(总)误差控制在5%以内。

这句没太看明白,采样时刻出现偏差,每一bit采样都会出现问题,为什么是累加的效果呢?我理解的是,以start bit为例,只要采样时刻不超过半个bit周期,就不会采错(比如超过半个bit周期,误把bit[0]当成s起始位)





回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-13 10:36:03 | 显示全部楼层


   
innovation 发表于 2022-5-9 23:52
你这两幅图应该是两个文件的哦,FT2232应该是系列芯片,第一幅图是FT2232H,这个H后缀多半是系列内的高速 ...


确实是两个手册

分别见附件

DS_FT2232H-UART芯片.pdf

2.13 MB, 下载次数: 1 , 下载积分: 资产 -2 信元, 下载支出 2 信元

AN232B-05_BaudRates-UART芯片波特率相关.pdf

93.96 KB, 下载次数: 1 , 下载积分: 资产 -2 信元, 下载支出 2 信元

回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-13 11:06:26 | 显示全部楼层


   
innovation 发表于 2022-5-9 23:52
你这两幅图应该是两个文件的哦,FT2232应该是系列芯片,第一幅图是FT2232H,这个H后缀多半是系列内的高速 ...


当然,你这个开发板的FT2232限制了只能到3Mbps。

请问从哪里可以看到这个信息呢?我只看到了最高能够支持12M的通信速率
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-13 11:46:22 | 显示全部楼层


   
innovation 发表于 2022-5-10 00:07
就你这个开发板而言,能否到921.6k bps?
1.你的逻辑设计先考虑不能实现小数分频,那么你的接收波特率:10 ...





   
3.综上,你当前要跑921.6k bps,得想办法确认成功的使用了FT2232的小数分频功能,48,000,000/16/3.25 = 923,076.9bps,这样,发送波特率相对你的接收波特偏差+3.38%,应该能行了。

看了下手册FT2232是支持小数分频功能,问题在于我的设计可能没法产生精确的921.6K的速率(100,000,000/16/7=892.86K 或者100,000,000/16/6=1041.7K)

我上板测试了下,串口调试软件设置波特率为1041.7e3(=电路中实际波特率),测试结果如下图所示:
image.png

这是否能说明我使用的串口调试软件不支持小数分频呢?



回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-13 11:57:55 | 显示全部楼层


   
innovation 发表于 2022-5-9 18:41
1. 就UART收、发两端的综合波特率误差而言,良好设计的UART 接收IP在收、发两端综合波特率误差5%以内可以 ...


如果你将逻辑设计修改为100,000,000/7/16 = 892,857.1 bps, 误差-3.12%,还得看发送端的波特率偏差情况!

这种情况下我测试了,功能正常!
回复 支持 反对

使用道具 举报

发表于 2022-5-14 14:47:29 | 显示全部楼层


   
come_on_sn 发表于 2022-5-13 11:06
当然,你这个开发板的FT2232限制了只能到3Mbps。

请问从哪里可以看到这个信息呢?我只看到了最高能够支 ...


3M bps这个来自你的第二个文件,如下图:

image.png

然后,我又专门去找了Basys 3开发板的资料,发现其手册中写明这款开发板的USB-UART Bridge选用的是FT2232HQ这颗芯片, 如下图:

image.png

那么,根据FT2232HQ芯片的手册,你这个开发板应该可以支持到12Mbps的UART 波特率!


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2025-8-21 09:07 , Processed in 0.023383 second(s), 4 queries , Gzip On, Redis On.

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