68336016 发表于 2014-3-10 17:32:01

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

本帖最后由 68336016 于 2014-3-10 17:33 编辑

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

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

Jordan?? 发表于 2014-3-10 17:46:58

之前贪便宜买了三四块钱的U转串。。结果各种怪事
最后买了个FT232的{:mad:}{:mad:}

ysu533 发表于 2014-3-10 19:13:27

你确定同样的情况下, PC自带串口没有问题吗? 一般成熟商业化的产品在一般应用是没有那么多问题的, 尤其是实验状态下, 而不是工业现场. 出现问题你先要问自己到底发生了什么, 你这么做合不合理

68336016 发表于 2014-3-10 19:25:09

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

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

ysu533 发表于 2014-3-10 19:40:11

68336016 发表于 2014-3-10 19:25
USB转串口,你如果没有遇到奇怪的问题,一般也不会有疑问。

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

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

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

Auir 发表于 2014-3-10 22:21:47

我对这个很熟悉,无非是2种问题,
1. 驱动。
2. IC。

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

其他的就算了把。

68336016 发表于 2014-3-10 22:35:28

Auir 发表于 2014-3-10 22:21
我对这个很熟悉,无非是2种问题,
1. 驱动。
2. IC。


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

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

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

咖啡可乐 发表于 2014-3-10 22:38:06

usb转串口就不适合工控用,抗干扰太差。如果非要选,那有限考虑usb隔离器。如果不隔离,ft232算最好的,不过也容易出问题

68336016 发表于 2014-3-10 22:42:05

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

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

Auir 发表于 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上用,而是在嵌入式系统中用。

68336016 发表于 2014-3-10 22:57:10

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

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

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

lhn0409 发表于 2014-3-11 07:48:52

个人认为是软件问题。

funnynypd 发表于 2014-3-11 08:01:33

PL2303, price?

wsh 发表于 2014-3-11 08:05:41

个人觉得这种USB转串口的线真不稳定,我在一些高干扰的场合经常死机。{:sweat:}

gongxd 发表于 2014-3-11 08:49:00

真实问题是usb不行
usb在工业场合下抗干扰不行
开吹风机 usb键盘鼠标都会丢失设备
usb要用超好的线材可能会好点

68336016 发表于 2014-3-11 08:58:43

funnynypd 发表于 2014-3-11 08:01
PL2303, price?

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

68336016 发表于 2014-3-11 09:01:31

lhn0409 发表于 2014-3-11 07:48
个人认为是软件问题。

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

mhw 发表于 2014-3-11 09:34:11

从没丢过数据的路过……
关键是你的上位机程序要有起码的速度,能把接收数据及时读走;写数据的时候也要考虑串口瓶颈,不要连续狂发海量数据

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

68336016 发表于 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转串口芯片缓冲区没被及时读取出来,这跟读串口的线程没关系了吧?







mhw 发表于 2014-3-11 11:59:07

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

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

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

68336016 发表于 2014-3-11 12:03:30

本帖最后由 68336016 于 2014-3-11 12:05 编辑

mhw 发表于 2014-3-11 11:59
还真没研究过在上位机能调用API给串口分配更大的缓冲区,一直都是默认的……

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

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

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

huxiaoping 发表于 2014-3-11 12:29:56

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

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

brant08 发表于 2014-3-11 23:07:09

怪不得有时调试出问题,原来是这样。那usb转并口也这样吗?

gzhuli 发表于 2014-3-11 23:27:36

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

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

wujh 发表于 2014-7-28 01:24:00

usb转串口抗干扰能力是真的不行。
页: [1]
查看完整版本: 想起一个老问题:为什么usb转串口容易丢数据?