1 Reply Latest reply on Sep 18, 2017 1:22 PM by user_190129316

    FX2LP CY7C68013A Hi Speed Bulk problem on latest generation laptops

    claudio.reginelli

      Dear all,

         

      This is a puzzling question we can't figure out.

         

      We use FX2LP family (CY7C68013A) since a long time (10 years) in BULK mode to transfer blocks of 2048 bytes in Hi Speed and I never had big problems while computers were evolving. During the last months I am having a lot of problems with laptops because it seems that transfer is often unsuccessful.

         

      To be precise, I had the chance to observe this problem on two different pc ASUS with these specs: controller usb Intel xHCI, s.o. Windows 10, processor Intel i3

         

      The data to transfer are took from a FIFO using the GPIF interface according to a typical mechanism of "clock and read, clock and read...".

         

      The weird thing is that it GPIF waveform has a strange behavior (see attached files) when the transfer is unsuccessful. The attached file are the two waveforms of a same "flag output" that I use to trace when the GPIF starts reading (flag goes high) and when it finishes reading (flag goes low). As you can see when the transfer is unsuccessful there is a longer reading cycle in the middle (sometimes are more than one).

         

      Additional information about the driver: we have used WinDriver (Jungo) for many years and now we tried WinUSB (Microsoft).

         

      Here is the configuration of the endpoints. I have tried to configure them also both 512x4 and both 1024x2 but same result.

      ;; Endpoint Descriptor
            db   DSCR_ENDPNT_LEN      ;; Length of this descriptor = 7 bytes
            db   DSCR_ENDPNT         ;; Descriptor type = Endpoint
            db   01H               ;; Endpoint number, and direction (01H = EP1, out)
            db   ET_BULK             ;; Endpoint type
            db   40H               ;; Maximun packet size (LSB)
            db   00H               ;; Max packect size (MSB) --> 64 bytes
            db   00H               ;; Polling interval (in # of frames. Ignored for Bulk and Control EPs)
      ;; Endpoint Descriptor
            db   DSCR_ENDPNT_LEN      ;; Length of this descriptor = 7 bytes
            db   DSCR_ENDPNT         ;; Descriptor type = Endpoint
            db   81H               ;; Endpoint number, and direction (81H = EP1, in)
            db   ET_BULK             ;; Endpoint type
            db   40H               ;; Maximun packet size (LSB)
            db   00H               ;; Max packect size (MSB) --> 64 bytes
            db   00H               ;; Polling interval (in # of frames. Ignored for Bulk and Control EPs)

         



      SYNCDELAY;
      EP2CFG = 0xAA; // b7=1 (valid)
      // b6=0 (dir OUT: PC -> Periph)
      // b5=1 (BULK)
      // b4=0 (BULK)
      // b3=1 (size 1024)
      // b2=0
      // b1=1 (buffering 2x)
      // b0=0 (buffering 2x)
      SYNCDELAY;
      EP6CFG = 0xE0; // b7=1 (valid)
      // b6=1 (dir IN: PC <- Periph)
      // b5=1 (BULK)
      // b4=0 (BULK)
      // b3=0 (size 512)
      // b2=0
      // b1=0 (buffering 4x)
      // b0=0 (buffering 4x)

         

      Thank you