USB
  CP210x VCP speed at single-byte ping-pong (difference between VCP versions)

Post New Topic  Post A Reply
profile | register | preferences | faq | search

UBBFriend: Email This Page to Someone! next newest topic | next oldest topic
Author Topic:   CP210x VCP speed at single-byte ping-pong (difference between VCP versions)
ptu
New Member
posted December 01, 2009 01:18 AM     Click Here to See the Profile for ptu     Edit/Delete Message
As we know, it is not possible to achieve good transfer rate with an USB-serial converter if you are sending short data blocks, e.g. 1 byte at a time and waiting for a reply.

I wrote a small VB6 program (with MSCOMM32) to check the speed of the VCP driver in case of one-byte ping-pong (at 19200 b/s):

- Driver 5.4.24: ~27 ping-pongs/sec
- Driver 5.4: ~137 ping-pongs/sec
- Driver 4.40: ~192 ping-pongs/sec

Why the current driver is so much slower than the older one? This prevents using it with our legacy software using (too tight) timing.

Are there any workaround to tune the speed for the 5.4.24 driver, or is this again only an MSCOMM32 problem without any workaround? (However, the legacy software is a VC++ 6 program, which does not work, so there is probably a ping-pong speed difference also without MSCOMM32).

There is a similar topic http://www.cygnal.org/ubb/Forum9/HTML/001910.html; however is there any workaround for legacy software other than stay with obsolete version 5.4?

[This message has been edited by ptu (edited December 01, 2009).]

IP: Logged

UserMarcus
New Member
posted December 01, 2009 07:15 AM     Click Here to See the Profile for UserMarcus     Edit/Delete Message
This extactly the same we have observed today. Our Instrument work with the old 4.4 faster than with the 5.4.24. The low level trace confirmed this by comparing the time stamps of transfer action between 4.4 and 5.4.24. Is there any chance to speed up the 5.4.24 ?

We didn't use the MSComm32.ocx.

[This message has been edited by UserMarcus (edited December 01, 2009).]

IP: Logged

ptu
New Member
posted January 27, 2010 02:33 AM     Click Here to See the Profile for ptu     Edit/Delete Message
Portmon shows that IOCTL_SERIAL_GET_COMMSTATUS for Silabser0 (5.4.24) lasts always about 5 ms, which is a very long time compared to older versions and to real serial ports.

Some software seem to poll IOCTL_SERIAL_GET_COMMSTATUS all the time, causing the communication to slow down.

However, my competence is not enough to say if the slowness of that call is the reason or a result of something else.

IP: Logged

UserMarcus
New Member
posted January 28, 2010 03:24 AM     Click Here to See the Profile for UserMarcus     Edit/Delete Message
Exactly the same what we have observed and reported to SiLabs.

Example 4.4
0.00000142 IRP_MJ_READ
0.00000046 IOCTL_SERIAL_GET_COMMSTATUS
0.00000126 IRP_MJ_READ
0.00000051 IOCTL_SERIAL_GET_COMMSTATUS
0.00000143 IRP_MJ_READ
0.00000045 IOCTL_SERIAL_GET_COMMSTATUS
0.00000128 IRP_MJ_READ.
0.00000045 IOCTL_SERIAL_GET_COMMSTATUS

Example 5.40.00
0.00000159 IRP_MJ_READ
0.00001041 IOCTL_SERIAL_GET_COMMSTATUS
0.00000074 IRP_MJ_READ
0.00000923 IOCTL_SERIAL_GET_COMMSTATUS
0.00000076 IRP_MJ_READ
0.00000887 IOCTL_SERIAL_GET_COMMSTATUS
0.00000067 IRP_MJ_READ
0.00000911 IOCTL_SERIAL_GET_COMMSTATUS

Example 5.40.24
0.00000355 IRP_MJ_READ
0.00492866 IOCTL_SERIAL_GET_COMMSTATUS <- !
0.00000515 IRP_MJ_READ
0.00488680 IOCTL_SERIAL_GET_COMMSTATUS <- !
0.00000380 IRP_MJ_READ
0.00989548 IOCTL_SERIAL_GET_COMMSTATUS <- !
0.00000283 IRP_MJ_READ
0.00490763 IOCTL_SERIAL_GET_COMMSTATUS <- !

Regards
Marcus

[This message has been edited by UserMarcus (edited January 28, 2010).]

IP: Logged

ptu
New Member
posted March 10, 2010 09:13 AM     Click Here to See the Profile for ptu     Edit/Delete Message
- Driver 5.4.29: ~98 ping-pongs/sec

Newest driver is lot faster with many programs (more than you can expect from the figure above) but still not as fast as the old 4.40.

IP: Logged

UserMarcus
New Member
posted April 09, 2010 08:50 AM     Click Here to See the Profile for UserMarcus     Edit/Delete Message
Thanks to SiLabs for that improvement.

Speed of GET_COMMSTATUS :

0.00002926 IOCTL_SERIAL_GET_COMMSTATUS
0.00003660 IOCTL_SERIAL_GET_COMMSTATUS
0.00003205 IOCTL_SERIAL_GET_COMMSTATUS
0.00003784 IOCTL_SERIAL_GET_COMMSTATUS
0.00003652 IOCTL_SERIAL_GET_COMMSTATUS

Regards.

[This message has been edited by UserMarcus (edited April 09, 2010).]

IP: Logged

ptu
New Member
posted August 17, 2010 08:08 AM     Click Here to See the Profile for ptu     Edit/Delete Message
- Regular Windows XP serial port: ~381 ping-pongs/sec
- Driver 6.1: ~503 ping-pongs/sec

Now it is really fast compared to true serial ports, too! If it really does this, then the speed is not anymore an issue at all! (Honestly I think that there must be a problem in my measurement setup.)

IP: Logged

rmitchkzoo
New Member
posted September 09, 2010 10:14 AM     Click Here to See the Profile for rmitchkzoo     Edit/Delete Message
UserMarcus:

Your last post indicates an "improvement" in the getcommstatus response however our testing shows that all drivers since 5.24 have serious response problems.

We had been "getting by" with older drivers (although the blue-screens & other issues were always lurking in the background) however there will come a day when we can no longer just "get by". We already have customers who have installed the newer drivers causing our products to fail, (stuck in a loop waiting for data from the port).

We are preparing the documentation needed to run the support gauntlet at SiLabs but I was curious to know if your problems have been resolved in some way?

IP: Logged

Brent W
Administrator
posted September 09, 2010 04:15 PM     Click Here to See the Profile for Brent W   Click Here to Email Brent W     Edit/Delete Message
Rmitchkzoo,

The support gauntlet is standing by...

-Brent

IP: Logged

UserMarcus
New Member
posted October 12, 2010 07:19 AM     Click Here to See the Profile for UserMarcus     Edit/Delete Message
No Problems with speed since 5.4.29, but we had some problems with blue screen (often by special rise up conditions = communication to the Chip while this get powering up, not sure that this is fixed, because we change our Firmware to slower communication helps also) and memory leaks (pc memory rising up while com port is permanently opened, fixed with 6.1)

No Problems with Version 6.1 yet.

Regards
Marcus

IP: Logged

All times are CT (US)

next newest topic | next oldest topic

Administrative Options: Close Topic | Archive/Move | Delete Topic
Post New Topic  Post A Reply
Hop to:

Contact Us | MCU User Forum

Have you seen our MCU Knowledge Base?


Ultimate Bulletin Board 5.47b