搜索
bottom↓
回复: 24

想起一个老问题:为什么usb转串口容易丢数据?

[复制链接]

出130入129汤圆

发表于 2014-3-10 17:32:01 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 68336016 于 2014-3-10 17:33 编辑

想起一个老问题,为什么连续大量通信时usb转串口容易丢数据?不知自己下面的理解是否正确。

        
        在真实串口情况下,假如pc串口软件设置了一个合适的缓冲区,数据会主动存储到缓冲区里面,等待软件处理。理论上缓冲区够大,通信不会有什么问题。
        
        如果是usb转串口,芯片上也有几百字节缓冲区。由于usb通信需要pc软件(或者驱动)主动去读,芯片缓冲区数据才能传上来。如果上位机(或者驱动)阻塞了一阵,没及时去读芯片缓冲区,那芯片缓冲区数据很可能就被新数据覆盖了。
      

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2014-3-10 17:46:58 | 显示全部楼层
之前贪便宜买了三四块钱的U转串。。结果各种怪事
最后买了个FT232的

出0入0汤圆

发表于 2014-3-10 19:13:27 | 显示全部楼层
你确定同样的情况下, PC自带串口没有问题吗? 一般成熟商业化的产品在一般应用是没有那么多问题的, 尤其是实验状态下, 而不是工业现场. 出现问题你先要问自己到底发生了什么, 你这么做合不合理

出130入129汤圆

 楼主| 发表于 2014-3-10 19:25:09 | 显示全部楼层
ysu533 发表于 2014-3-10 19:13
你确定同样的情况下, PC自带串口没有问题吗? 一般成熟商业化的产品在一般应用是没有那么多问题的, 尤其是实 ...

USB转串口,你如果没有遇到奇怪的问题,一般也不会有疑问。

出0入0汤圆

发表于 2014-3-10 19:40:11 | 显示全部楼层
68336016 发表于 2014-3-10 19:25
USB转串口,你如果没有遇到奇怪的问题,一般也不会有疑问。

我就是遇到问题多了才有这个感慨, 各种类型的虚拟串口(不一定是专门的USB串口)用了很多, 因为我是提供软件, 有时候USB转串口设备(包括USB转串口, 网络虚拟串口, STM32 USB转串口, mega8 软usb转串口)有的是客户提供的, 有的是自制的. 你要说别人的串口不行, 客户一句话就把你顶回来: 我用XXX软件就没事. 出了问题要分析确实是产品质量问题, 还是你超限使用产品, 还是你使用的就根本不合理. 大部分情况即是产品真有不合理也是可以规避的, 人家的产品不是卖你一个人的.

另外你根本就没提你的使用环境: 大数据量到底有多大? 是怎么发送的, 怎么接收的, 波特率是多少? 软件是自己写的还是使用串口调试软件? 网络上很多串口调试软件, 同样的产品下表现也是不同的

单就丢数据来说原生串口要模拟丢数据很简单的

出0入0汤圆

发表于 2014-3-10 22:21:47 | 显示全部楼层
我对这个很熟悉,无非是2种问题,
1. 驱动。
2. IC。

只推荐用2种IC做成的,
EXAR公司的XR21V1410
FTDI公司的FT232。

其他的就算了把。

出130入129汤圆

 楼主| 发表于 2014-3-10 22:35:28 | 显示全部楼层
Auir 发表于 2014-3-10 22:21
我对这个很熟悉,无非是2种问题,
1. 驱动。
2. IC。

我曾经用STM32以 115200波特率,每10ms发送18个字节到PC,一般都是连续试24小时以上。

PL2303在酷睿双核,四核电脑却都很正常,一个字节都不丢。

FT232在双核电脑不丢包,四核没开睿频(智能调速)时丢包很小,也可以接受,但是四核开睿频后,丢包很严重。

出0入0汤圆

发表于 2014-3-10 22:38:06 | 显示全部楼层
usb转串口就不适合工控用,抗干扰太差。如果非要选,那有限考虑usb隔离器。如果不隔离,ft232算最好的,不过也容易出问题

出130入129汤圆

 楼主| 发表于 2014-3-10 22:42:05 | 显示全部楼层
咖啡可乐 发表于 2014-3-10 22:38
usb转串口就不适合工控用,抗干扰太差。如果非要选,那有限考虑usb隔离器。如果不隔离,ft232算最好的,不 ...

其实我现在做东西也不用USB转串口,只是几年前一个公司产品,以前同事没事问起我,所以我又记起这事情了。
驱动+系统的原因,总会导致一些不可预料的问题,所以也不再用了。

出0入0汤圆

发表于 2014-3-10 22:52:36 | 显示全部楼层
68336016 发表于 2014-3-10 22:35
我曾经用STM32以 115200波特率,每10ms发送18个字节到PC,一般都是连续试24小时以上。

PL2303在酷睿双核 ...


你测试的速率比较慢。您说的情况,可能与你当时装的驱动有关,FTDI还是不错的。

我们是按照 1Mbps的波特率进行测试的。

你说的丢包我肯定是PC机的问题(PC机丢包见多了,是驱动的问题)。

我们测EXAR, FTDI并不是在PC上用,而是在嵌入式系统中用。

出130入129汤圆

 楼主| 发表于 2014-3-10 22:57:10 | 显示全部楼层
Auir 发表于 2014-3-10 22:52
你测试的速率比较慢。您说的情况,可能与你当时装的驱动有关,FTDI还是不错的。

我们是按照 1Mbps的波特 ...

这么说的话,可以确定丢包在PC上可以说其实是无解的,也许这台正常,但未必那台正常。

出0入0汤圆

发表于 2014-3-11 07:48:52 来自手机 | 显示全部楼层
个人认为是软件问题。

出0入0汤圆

发表于 2014-3-11 08:01:33 | 显示全部楼层
PL2303, price?

出0入0汤圆

发表于 2014-3-11 08:05:41 | 显示全部楼层
个人觉得这种USB转串口的线真不稳定,我在一些高干扰的场合经常死机。

出0入0汤圆

发表于 2014-3-11 08:49:00 | 显示全部楼层
真实问题是usb不行
usb在工业场合下抗干扰不行
开吹风机 usb键盘鼠标都会丢失设备
usb要用超好的线材可能会好点

出130入129汤圆

 楼主| 发表于 2014-3-11 08:58:43 来自手机 | 显示全部楼层
funnynypd 发表于 2014-3-11 08:01
PL2303, price?

不能有问题就认为是国产pl2303导致,事实上用的都是力特成品线,做工质量算是不错的了。

出130入129汤圆

 楼主| 发表于 2014-3-11 09:01:31 来自手机 | 显示全部楼层
lhn0409 发表于 2014-3-11 07:48
个人认为是软件问题。

对usb暂时没怎麽了解,不过在usb转串口应用中,应该是驱动不断去读芯片缓冲区

出0入0汤圆

发表于 2014-3-11 09:34:11 | 显示全部楼层
从没丢过数据的路过……
关键是你的上位机程序要有起码的速度,能把接收数据及时读走;写数据的时候也要考虑串口瓶颈,不要连续狂发海量数据

我的做法是用一个线程来单独管理收发,曾经试过别的软件把windows搞死(鼠标键盘无响应),从下位机的表现来看,我的上位机软件还跑得好好的……

出130入129汤圆

 楼主| 发表于 2014-3-11 11:01:14 | 显示全部楼层
本帖最后由 68336016 于 2014-3-11 11:03 编辑
mhw 发表于 2014-3-11 09:34
从没丢过数据的路过……
关键是你的上位机程序要有起码的速度,能把接收数据及时读走;写数据的时候也要考 ...

看来你用得比较多,那请教个问题。
整个USB转串口的流程应该是下面这样子:

    1                        2                                                   3                                                                 4
下位机==>USB转串口芯片缓冲区==>windows上位机SetupComm函数设置的设备的内部输入缓冲区==>读串口的线程

我以前试过,只要windows上位机SetupComm函数设置的设备的内部输入缓冲区设置得足够大,读串口的线程运行中暂停几秒甚至比较长时间都可以。              
读串口的线程都暂停了,那谁把数据从USB转串口芯片缓冲区读取到windows上位机SetupComm函数设置的设备的内部输入缓冲区的呢?是驱动程序?(我不太了解这些比较底层的内容)。
如果windows上位机SetupComm函数设置的设备的内部输入缓冲区设置得足够大,这时候还丢数据,说明USB转串口芯片缓冲区没被及时读取出来,这跟读串口的线程没关系了吧?







出0入0汤圆

发表于 2014-3-11 11:59:07 | 显示全部楼层
68336016 发表于 2014-3-11 11:01
看来你用得比较多,那请教个问题。
整个USB转串口的流程应该是下面这样子:
    1                        ...

还真没研究过在上位机能调用API给串口分配更大的缓冲区,一直都是默认的……

从设备管理器看到的串口属性里,好像串口缓冲区最大就十几字节?

出130入129汤圆

 楼主| 发表于 2014-3-11 12:03:30 | 显示全部楼层
本帖最后由 68336016 于 2014-3-11 12:05 编辑
mhw 发表于 2014-3-11 11:59
还真没研究过在上位机能调用API给串口分配更大的缓冲区,一直都是默认的……

从设备管理器看到的串口属 ...


记得以前看过,也试过,如果不用SetupComm设置,默认设备输入输出缓冲区就是1024个字节。

只要设置缓冲区够大,读串口线程不及时去读应该都没关系,但是为什么还会丢数据?
那肯定就驱动或者系统层面上事情了,没及时去读,具体什么回事也不管了,研究不出来

出0入8汤圆

发表于 2014-3-11 12:29:56 | 显示全部楼层
在使用USB设备时,尽量不要使用超频的机器,我曾经见过一台机器属于AMD双核开四核超频的机器,使用上网都正常,但是经常说打印机有时候不能用,关打印机电源再开也不行,必须电脑重启才行,后来我发现其U盘也不能使用,于是把机器还原到双核及原来的频率,机器终于好了,如果在这个机器上使用其他USB设备肯定也会有问题。

如果IC方面我经过多次测试,PL2303会在大量数据的时候死机,这个时候电脑必须重启而且是按钮重启,而FT232测试是最好的,丢数据的问题一般通过MCU和PC端来解决,基本上就是这样了,USB速率现在已经不是问题,问题是如何万无一失的把数据取走以及处理才是关键。

出0入0汤圆

发表于 2014-3-11 23:07:09 来自手机 | 显示全部楼层
怪不得有时调试出问题,原来是这样。那usb转并口也这样吗?

出0入663汤圆

发表于 2014-3-11 23:27:36 | 显示全部楼层
huxiaoping 发表于 2014-3-11 12:29
在使用USB设备时,尽量不要使用超频的机器,我曾经见过一台机器属于AMD双核开四核超频的机器,使用上网都正 ...

大多数CPU都锁了倍频,超频只能超总线频率,有时候CPU没死芯片组已经受不了。

出0入0汤圆

发表于 2014-7-28 01:24:00 | 显示全部楼层
usb转串口抗干扰能力是真的不行。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 00:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表