完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Dears,
最近在开发FX3作为PC与FPGA开发板间数据传输通路。 欲实现功能:PC通过1个Bulk endpoint out 各种长度的数据至FPGA。 实现过程中发现host发送与USB3.0 endpoint max length成整数倍的长度数据时,FX3识别不出host发送数据结束了,有FX2/FX3开发经历的童鞋请指导下这个问题: FX3是怎么做到能正确接收USB host发送过来的任意长度数据的? 以下是我的代码实现的一些关键内容和分析: 关键的一些配置信息如下, USB3.0 这个endpoint配置: Max length:1024B burst:16 transfer type:Bulk 从这个endpoint搬运数据至GPIF socket的DMA Channel配置: buffer size:32KB buffer count:4 dma mode:CY_U3P_DMA_MODE_BYTE notification:CY_U3P_DMA_CB_PROD_EVENT DMA channel配置为Manual type 通过以上配置想通过Manual DMA channel的CY_U3P_DMA_CB_PROD_EVENT来进入callback处理接收到的data,CY_U3P_DMA_CB_PROD_EVENT产生的条件我了解到的有2个: 1、host发送了一个shortpacket,我的endpoint配置下就是<1024B的data length就是个shortpacket 2、DMA channel的32KB buffer被filled,即buffer被填满了 如果是使用CY_U3P_DMA_CB_PROD_EVENT来做数据接收的notification,会有一个问题: 如果host刚好发送的data length是1KB的倍数且不满32KB,如就发2KB,那FX3根本不知道host发完2KB了。 然后我继续探索能让FX3识别到host发送过来的任意长度的数据,找到一个CY_U3P_DMA_CB_XFER_CTRL,即把DMA channel的notification配置为: notification:CY_U3P_DMA_CB_XFER_CTRL 这个CY_U3P_DMA_CB_XFER_CTRL的作用是如果producer接收到的数据长度与CyU3PDmaChannelSetXfer()函数配置的Xfer值一致时就会产生CY_U3P_DMA_CB_XFER_CTRL notification,我就可以进入这个 notification的cb处理接收到的数据,但是我实测并没有产生,我把CyU3PDmaChannelSetXfer()函数的源码看了看,源码里写到如果Xfer size == 0或者DMA channel type是Manual channel,那么producer并不会引起产生CY_U3P_DMA_CB_XFER_CTRL notification。 |
|
相关推荐
2 个讨论
|
|
只有小组成员才能发言,加入小组>>
754个成员聚集在这个小组
加入小组2110 浏览 1 评论
1858 浏览 1 评论
3673 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1791 浏览 6 评论
1540 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
576浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
430浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
440浏览 2评论
390浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
933浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 16:25 , Processed in 1.006983 second(s), Total 62, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号