完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在中断函数中触发输入输出中断后,判定为IN端点或OUT端点,即调用一个transfer_callback函数,该函数处理了0端点和非0端点(分为非0-IN端点和非0-OUT端点)的数据......然同时当调用cdc_acm_read和cdc_acm_write函数收发数时,会一路调用一个transfer_request函数,在该函数中也对IN端点和OUT端点做了数据处理,仔细对比了下,transfer_callback函数和transfer_request函数中对IN端点和OUT端点的处理程序非常相似,两者的具体区别能帮忙分析下吗?再有,在两个函数中,当为OUT端点时,传输大小和包个数的计数代码为:
endpoint_size = ((fifo_length - 1 + endpoint.wMaxPacketSize) / endpoint.wMaxPacketSize) * endpoint.wMaxPacketSize; endpoint_size |= ((fifo_length - 1 + endpoint.wMaxPacketSize) / endpoint.wMaxPacketSize) << UX_DCD_OTG_FS_DIEPTSIZ_PKTCNT_SHIFT; 不动这两个代码,USB的写速率只能接近2MB/s...... 再网上看到这个博客http://www.stmcu.org/module/forum/thread-613504-1-1.html,将这两个代码在transfer_request函数中改为如下: endpoint_size |= (UX_DCD_OTG_FS_DOEPTSIZ_XFRSIZ_MASK & (endpoint.wMaxPacketSize * (fifo_length - 1 + endpoint.wMaxPacketSize))); endpoint_size |= (UX_DCD_OTG_FS_DOEPTSIZ_PKTCNT_SHIFT & (((fifo_length - 1 + endpoint.wMaxPacketSize) / endpoint.wMaxPacketSize) << 19)); 而这时USB的写速率能达到20MB/s,测试了下,有时候会丢包1...... 想请教下这两个函数和速率的问题,还有这个计算传输大小和包个数的公式是怎么理解呢?如果对问题还有疑问,本人会及时回应,拜托大家了,谢谢! |
|
相关推荐
22个回答
|
|
这个我是看过的,我调试的USB模块其实是Synopsys的IP核,但对比STM的寄存器信息,STM使用的USB控制器也是Synopsys的IP核,只不过实现的模式不一样,当然,我调试的USB的驱动部分是参考STM32的,所以在这上面找思路...... |
|
|
|
您好,我想问下,就我上面对OUT端点的传输大小和数据包的计算,那对应的IN端点该如何设计呢?您能提供下思路吗 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
253 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
806 浏览 2 评论
1991 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1095 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1520 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 01:23 , Processed in 0.456294 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号