This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

USB CDC-ACM function class

Hi,

I use a modified version of Keil's USB CDC-ACM function class implementation. It works really well but I am having a problem in the way I am using it.
I use the virtual COM-port to connect as a modem to the host PC.
My target connects through PPP to the USB CDC-ACM input/output. This allows me to create multiple sockets for multi-channel TCP/IP communication. This creates the problem! With increasing communication throughput my application showes signs of instability.
I am looking for a way how I could limit the data throughput at the USB device level.
Could someone provide me with an feasable example of how to achieve this?
I appreciate your help - thank you!

-Frank

Parents
  • Good morning Tsuneo,

    you suggested:
    - Select the bulk OUT EP (USB_CTRL)
    - Check PKT_RDY bit of RX_PLENGTH
    - if not ready, return

    Here is a part of my USB_ReadEP:

    
      USB_CTRL = ((EPNum & 0x0F) << 2) | CTRL_RD_EN;
    
      cnt = RX_PLENGTH;
    
      if ((cnt & PKT_RDY) == 0) {
    
        return (0);
      }
    
    

    I return if the packet is not ready. The function is then called again in USB_SOF_Event () until a packet is ready and can be processed.

    This solution doesn't work!
    It seems that after selecting the endpoint I have to finish the operation.

    Do you know what the problem is?

    Thank you!
    -Frank

Reply
  • Good morning Tsuneo,

    you suggested:
    - Select the bulk OUT EP (USB_CTRL)
    - Check PKT_RDY bit of RX_PLENGTH
    - if not ready, return

    Here is a part of my USB_ReadEP:

    
      USB_CTRL = ((EPNum & 0x0F) << 2) | CTRL_RD_EN;
    
      cnt = RX_PLENGTH;
    
      if ((cnt & PKT_RDY) == 0) {
    
        return (0);
      }
    
    

    I return if the packet is not ready. The function is then called again in USB_SOF_Event () until a packet is ready and can be processed.

    This solution doesn't work!
    It seems that after selecting the endpoint I have to finish the operation.

    Do you know what the problem is?

    Thank you!
    -Frank

Children
No data