8 Replies Latest reply on Aug 24, 2011 12:49 AM by ken.takahashi

    FX3 CyU3PDmaChannelSetupSendBuffer

              Hi, I have question about API function CyU3PDmaChannelSetupSendBuffer. I use CyU3PDmaChannelSetupSendBuffer API to send packet from FX3 to USB3.0 Host. In Super Speed periodic transfer (i.e. Interrupt In, Isochronous In), I want to transmit the data for two or more interval by ONE API call. For example, Max packet size : 1023 Byte Transfer data size : 16368 Byte(i.e. 1023Byte x 16packets) I expect that FX3 sends packets for 16 service intervals.(size of one packet :1023byte) I tried it. Result is Max packet size is 1024byte -> OK FX3 sent packets for 16 service intervals. (size of one packet : 1024byte. last packet is short packet) Max packet size is 1023byte -> does'nt work well FX3 sent packets for 16 service intervals.But packet size is illegal. (size of first packet : 1023byte. second packet : 1byte, third packet:2byte, fourth packet: 2byte ......The following are the same.) Is this API such a specification? I use API as follows. Let me know if usage of CyU3PDmaChannelSetupSendBuffer is wrong. --- Abstract of Source code ------------------------------------------ function A () { CyU3PDmaBuffer_t DmaBufInfo_src, DmaBufInfo_dst; uint32_t ret; ======= DmaBufInfo_src.buffer = (uint8_t *)adr; // Pointer to stored transfer data // The address is allocated by using CyU3PDmaBufferAlloc API DmaBufInfo_src.status = 0; // Buffer status. I don't use this. So I set 0. DmaBufInfo_src.size = bufsize; // Buffer size. I set bufsize multiple of 32bytes. // If Transfer data size is 16368bytes, then bufsize is 16384bytes. DmaBufInfo_src.count = length; // Byte count of valid data in buffer (Actual data size) // If Transfer data size is 16368bytes, then bufsize is 16368bytes. ret = CyU3PDmaChannelSetupSendBuffer(&(DmaCh[ep].DmaChHandle), &DmaBufInfo_src); } ---------------------------------------------------------------------- Regards,