|
|
View previous topic :: View next topic |
Author |
Message |
RossJ
Joined: 25 Aug 2004 Posts: 66
|
USB CDC communication is failing on Win2K |
Posted: Wed Jun 13, 2007 10:00 am |
|
|
Hi all,
I have a USB/CDC application based around the PIC18F2455. Essentially it just transfers bytes in both directions between a device on the USART and a PC via USB (for the purpose of this discussion, data is only sent towards the PC/host). I have found it to be very reliable under windows XP, but have problems with windows 2K pro (SP4). My implementation is based on the CCS examples for USB/CDC. I have tested it on several XP and 2K machines with consistent results.
As far as I can tell, when I call usb_cdc_putc(), a packet is sent to the host but the USB buffer used for transmission is never made free again. So nothing else is sent. This is of course only the case for win2K, XP is fine.
I tried running SnoopyPro on both XP and 2K. Both behaved the same during enumeration, but 2K is very different once data began to be sent to the PC. Under XP, a packet is sent from PIC to the PC typically containing one byte. A similar packet is sent back with zero bytes of data. This back and forth continues during transfer. Windows 2K receives the first packet with 1 byte but doesn't send a packet back. No further packets are exchanged.
In an effort to debug this, I ran the PIC under ICD2 on windows XP. What I found is that the application works correctly until I pause and resume execution (even for just a second). After this, no further communication occurs. Windows continues to regard the USB device as connected. I'm not sure if this behavior is related to my Win2K problem, but the result is similar.
Has anyone seen this kind of behavior? Any ideas as to where I should focus my attention? I have taken a look in the forums both here and at Microchip, and don't see much evidence of people having the problem...
/Thanks, Ross. |
|
|
RossJ
Joined: 25 Aug 2004 Posts: 66
|
|
Posted: Thu Jun 14, 2007 7:49 am |
|
|
Okay, so I have sorted out my problem...
The difference between Win2K and WinXP seems to be how the CDC driver acknowledges IN transactions when the virtual COM port is open or closed by an application. Under XP, the transaction is always acknowledged regardless of whether the COM port is open by the app. Win2K only acknowledges when an app has the port open.
The reason why communication didn't recover is that once the USB api stopped accepting new bytes, the serial port was overrun. I didn't include the 'errors' option in the use_rs232 directive... so once the error occurred, no more bytes were received from the serial port since the error condition was never cleared.
Doh! |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|