Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
USB
协议栈 _data_notify 理解
发布于 2019-06-03 14:23:13 浏览:1769
订阅该版
时隔一年再次回来研究研究USB框架,USB这部分可能难度比较大,使用者较少的原因USB框架更新的不多。这次产品切换到HAL库了,因此准备把RTT的usb框架用起来。 我的理解,框架中ep0的枚举过程都已经实现,用户编程只需处理数据收发部分即可,框架中数据收发的处理在“rt_usbd_thread_entry” 线程的 _data_notify 函数中,USB_DIR_IN 的代码较好理解,USB_DIR_IN的代码有疑问: 1、只有dcd_ep_read_prepare 这个函数才是从USB控制器的Buffer中读取数据到 ep 的缓冲区中的,如果请求类型是UIO_REQUEST_READ_BEST(这个请求类型具体什么意思也不太明白),还没有调用dcd_ep_read_prepare 函数就进入到 EP_HANDLER ,那岂不是什么数据都没有读到? 2、ep->request.remain_size -= size; ep->request.buffer += size; 这两句是在dcd_ep_read_prepare 之前调用的,也就是说数据还没读到ep的缓冲区中,就提前改变了ep的buffer指针,是否有问题? 3、else if(ep->request.remain_size == 0) { EP_HANDLER(ep, func, ep->request.size); }这一句只有remain_size为0 才会调用EP_HANDLER,实际当接收到的usb数据包的大小 小于max_package_size时,本次usb传输就结束了,如果request.remain_size 还不为0,EP_HANDLER就一直得到调用, ``` else { size = ep_msg->size; if(ep->request.remain_size == 0) { return RT_EOK; } if(size == 0) { size = dcd_ep_read(device->dcd, EP_ADDRESS(ep), ep->request.buffer); } ep->request.remain_size -= size; ep->request.buffer += size; if(ep->request.req_type == UIO_REQUEST_READ_BEST) { EP_HANDLER(ep, func, size); } else if(ep->request.remain_size == 0) { EP_HANDLER(ep, func, ep->request.size); } else { dcd_ep_read_prepare(device->dcd, EP_ADDRESS(ep), ep->request.buffer, ep->request.remain_size > EP_MAXPACKET(ep) ? EP_MAXPACKET(ep) : ep->request.remain_size); } }```
查看更多
3
个回答
默认排序
按发布时间排序
flyboy
2019-06-03
Do my self();
多谢楼主分享经验,楼主可以先按照自己的理解改改代码,然后看一下usb能否正常工作:P
flz615
2019-06-03
这家伙很懒,什么也没写!
USB协议栈比较复杂,整理没有搞的很明白,理解有所偏面,贸然修改怕是做无用功,楼上能否给些意见,谢谢
flz615
2020-06-02
这家伙很懒,什么也没写!
结论,见 [https://www.rt-thread.org/qa/thread-5624-1-1.html](https://www.rt-thread.org/qa/thread-5624-1-1.html)
撰写答案
登录
注册新账号
关注者
0
被浏览
1.8k
关于作者
flz615
这家伙很懒,什么也没写!
提问
10
回答
10
被采纳
0
关注TA
发私信
相关问题
1
请教USB Host
2
STM32F4调试USB 读卡器(Slave)提示格式化
3
急求 STM32F4 USB Device MSC+SD 的相关问题
4
USB 框架问题
5
USB键盘
6
LPC17xx 如何添加USB HOST设备
7
RT-Thread目前支持USB HOST了吗?
8
USB HOST的支持问题
9
RTT 2.0.1 USB存储设备问题,枚举到USBREQ_GET_MAX_LUN后复位
10
USB库已经很久没更新了
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-Thread项目助手v0.2.0 - 支持Env Windows
2
RttreadV5.10上,GD32F450Z RTC时间显示问题
3
rt-smart启动流程分析
4
EtherKit快速上手PROFINET
5
RTThread USB转串口无法接收数据
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部