想起一个老问题:为什么usb转串口容易丢数据?
本帖最后由 68336016 于 2014-3-10 17:33 编辑想起一个老问题,为什么连续大量通信时usb转串口容易丢数据?不知自己下面的理解是否正确。
在真实串口情况下,假如pc串口软件设置了一个合适的缓冲区,数据会主动存储到缓冲区里面,等待软件处理。理论上缓冲区够大,通信不会有什么问题。
如果是usb转串口,芯片上也有几百字节缓冲区。由于usb通信需要pc软件(或者驱动)主动去读,芯片缓冲区数据才能传上来。如果上位机(或者驱动)阻塞了一阵,没及时去读芯片缓冲区,那芯片缓冲区数据很可能就被新数据覆盖了。
之前贪便宜买了三四块钱的U转串。。结果各种怪事
最后买了个FT232的{:mad:}{:mad:} 你确定同样的情况下, PC自带串口没有问题吗? 一般成熟商业化的产品在一般应用是没有那么多问题的, 尤其是实验状态下, 而不是工业现场. 出现问题你先要问自己到底发生了什么, 你这么做合不合理 ysu533 发表于 2014-3-10 19:13
你确定同样的情况下, PC自带串口没有问题吗? 一般成熟商业化的产品在一般应用是没有那么多问题的, 尤其是实 ...
USB转串口,你如果没有遇到奇怪的问题,一般也不会有疑问。
68336016 发表于 2014-3-10 19:25
USB转串口,你如果没有遇到奇怪的问题,一般也不会有疑问。
我就是遇到问题多了才有这个感慨, 各种类型的虚拟串口(不一定是专门的USB串口)用了很多, 因为我是提供软件, 有时候USB转串口设备(包括USB转串口, 网络虚拟串口, STM32 USB转串口, mega8 软usb转串口)有的是客户提供的, 有的是自制的. 你要说别人的串口不行, 客户一句话就把你顶回来: 我用XXX软件就没事. 出了问题要分析确实是产品质量问题, 还是你超限使用产品, 还是你使用的就根本不合理. 大部分情况即是产品真有不合理也是可以规避的, 人家的产品不是卖你一个人的.
另外你根本就没提你的使用环境: 大数据量到底有多大? 是怎么发送的, 怎么接收的, 波特率是多少? 软件是自己写的还是使用串口调试软件? 网络上很多串口调试软件, 同样的产品下表现也是不同的
单就丢数据来说原生串口要模拟丢数据很简单的 我对这个很熟悉,无非是2种问题,
1. 驱动。
2. IC。
只推荐用2种IC做成的,
EXAR公司的XR21V1410
FTDI公司的FT232。
其他的就算了把。 Auir 发表于 2014-3-10 22:21
我对这个很熟悉,无非是2种问题,
1. 驱动。
2. IC。
我曾经用STM32以 115200波特率,每10ms发送18个字节到PC,一般都是连续试24小时以上。
PL2303在酷睿双核,四核电脑却都很正常,一个字节都不丢。
FT232在双核电脑不丢包,四核没开睿频(智能调速)时丢包很小,也可以接受,但是四核开睿频后,丢包很严重。 usb转串口就不适合工控用,抗干扰太差。如果非要选,那有限考虑usb隔离器。如果不隔离,ft232算最好的,不过也容易出问题 咖啡可乐 发表于 2014-3-10 22:38
usb转串口就不适合工控用,抗干扰太差。如果非要选,那有限考虑usb隔离器。如果不隔离,ft232算最好的,不 ...
其实我现在做东西也不用USB转串口,只是几年前一个公司产品,以前同事没事问起我,所以我又记起这事情了。
驱动+系统的原因,总会导致一些不可预料的问题,所以也不再用了。 68336016 发表于 2014-3-10 22:35
我曾经用STM32以 115200波特率,每10ms发送18个字节到PC,一般都是连续试24小时以上。
PL2303在酷睿双核 ...
你测试的速率比较慢。您说的情况,可能与你当时装的驱动有关,FTDI还是不错的。
我们是按照 1Mbps的波特率进行测试的。
你说的丢包我肯定是PC机的问题(PC机丢包见多了,是驱动的问题)。
我们测EXAR, FTDI并不是在PC上用,而是在嵌入式系统中用。 Auir 发表于 2014-3-10 22:52
你测试的速率比较慢。您说的情况,可能与你当时装的驱动有关,FTDI还是不错的。
我们是按照 1Mbps的波特 ...
{:lol:} 这么说的话,可以确定丢包在PC上可以说其实是无解的,也许这台正常,但未必那台正常。 个人认为是软件问题。 PL2303, price? 个人觉得这种USB转串口的线真不稳定,我在一些高干扰的场合经常死机。{:sweat:} 真实问题是usb不行
usb在工业场合下抗干扰不行
开吹风机 usb键盘鼠标都会丢失设备
usb要用超好的线材可能会好点 funnynypd 发表于 2014-3-11 08:01
PL2303, price?
不能有问题就认为是国产pl2303导致,事实上用的都是力特成品线,做工质量算是不错的了。 lhn0409 发表于 2014-3-11 07:48
个人认为是软件问题。
对usb暂时没怎麽了解,不过在usb转串口应用中,应该是驱动不断去读芯片缓冲区 从没丢过数据的路过……
关键是你的上位机程序要有起码的速度,能把接收数据及时读走;写数据的时候也要考虑串口瓶颈,不要连续狂发海量数据
我的做法是用一个线程来单独管理收发,曾经试过别的软件把windows搞死(鼠标键盘无响应),从下位机的表现来看,我的上位机软件还跑得好好的…… 本帖最后由 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转串口芯片缓冲区没被及时读取出来,这跟读串口的线程没关系了吧?
68336016 发表于 2014-3-11 11:01
看来你用得比较多,那请教个问题。
整个USB转串口的流程应该是下面这样子:
1 ...
还真没研究过在上位机能调用API给串口分配更大的缓冲区,一直都是默认的……
从设备管理器看到的串口属性里,好像串口缓冲区最大就十几字节? 本帖最后由 68336016 于 2014-3-11 12:05 编辑
mhw 发表于 2014-3-11 11:59
还真没研究过在上位机能调用API给串口分配更大的缓冲区,一直都是默认的……
从设备管理器看到的串口属 ...
记得以前看过,也试过,如果不用SetupComm设置,默认设备输入输出缓冲区就是1024个字节。
只要设置缓冲区够大,读串口线程不及时去读应该都没关系,但是为什么还会丢数据?
那肯定就驱动或者系统层面上事情了,没及时去读,具体什么回事也不管了,研究不出来{:lol:}
在使用USB设备时,尽量不要使用超频的机器,我曾经见过一台机器属于AMD双核开四核超频的机器,使用上网都正常,但是经常说打印机有时候不能用,关打印机电源再开也不行,必须电脑重启才行,后来我发现其U盘也不能使用,于是把机器还原到双核及原来的频率,机器终于好了,如果在这个机器上使用其他USB设备肯定也会有问题。
如果IC方面我经过多次测试,PL2303会在大量数据的时候死机,这个时候电脑必须重启而且是按钮重启,而FT232测试是最好的,丢数据的问题一般通过MCU和PC端来解决,基本上就是这样了,USB速率现在已经不是问题,问题是如何万无一失的把数据取走以及处理才是关键。 怪不得有时调试出问题,原来是这样。那usb转并口也这样吗? huxiaoping 发表于 2014-3-11 12:29
在使用USB设备时,尽量不要使用超频的机器,我曾经见过一台机器属于AMD双核开四核超频的机器,使用上网都正 ...
大多数CPU都锁了倍频,超频只能超总线频率,有时候CPU没死芯片组已经受不了。 usb转串口抗干扰能力是真的不行。
页:
[1]