Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
USB
stm32f429作为设备(U盘)例程分析(已经实现)
发布于 2019-07-15 10:12:46 浏览:2392
订阅该版
* 本帖最后由 xingyanchen 于 2019-7-15 16:32 编辑 * 每次设备升级,放入字库,图片都很麻烦,索性把429 配合SDRAM 做成一个U盘,用电脑传输完成了,直接用RTT 的指令放入到flash中去 顺便借着这次机会把usb也学习一下。 作为硬件人员,在学习任何一种协议的时候,肯定想知道的数据是怎么来的,以及怎么没的。 下面写一下我的学习经历以及一些感想,大家随便看看。 在学习USB 协议的时候,推荐去看 《圈圈教你USB》 这本书,入门级的好书 **如果想让 USB 主机和 USB 设备通信,第一步就是知道数据是怎么发给对方的,** 就像我们使用串口的时候,从来不关心数据在硬件上,是怎么按照时间划分和切割形成了高低电平的。 使用USB,我们也不关心那些硬件已经帮忙完成的事情,比如NRZI是个什么鬼,我们并不需要深入学习。 我们需要知道的是,USB的数据传输的最小单元是** 数据包(令牌包和握手包好像不在此列,有知道的亲可以留言告之一下)**,就像串口的最小传输单元是一个**字节,一个数据包可以是一个字节** 但是由于USB的复杂性,我们做为设备或者主机,想直接给对方发送一个数据包,比如 hello 给对方打个招呼行不行??不好意思不行,USB协议的规矩太大,想传数据,必须按照规矩来。规矩是什么呢?规矩就是: 1.主机必须先发个**令牌包,**声明后面那个包是谁传给谁的,比如令牌包声明了,下面请设备给主机发个信息 2.这时候我们才可以发送hello**数据包**给主机,还没完,主机收到了之后,还需要告诉设备,我收到了亲。 3.也就是主机返回设备一个**握手包。** ** 每次传输必须三步走(也又意外不要第三步,暂时不谈论这种情况),而且还特意造了个词,叫事务,虽然我们能控制到数据包,但是如不按照事务的方式传输数据,人家可是不认的。**严格如军队一样。 我现在需要开发的是设备方,干的事情就是等主机的令牌包,按照令牌吧,收数据或者发数据,然后返回ACK或者等着ACK。 **插上USB之后发生了什么?** 插上USB之后,主机会经历重启总线等操作,我们不关心这些,我们关心的是,数据的收发,按照USB协议规定,usb设备刚插上的时候**地址是 0 ,** ** 1.主机给0地址设备,进行获取设备描述符 的操作 过程如下:** ** a.令牌包:我要发SETUP包了,设备你记得收** ** b.发给设备这组数据 C3 80 06 00 01 00 00 40 00 DD 94 其中C3 和后面的DD 94 这是硬件加上去的,****80 06 00 01 00 00 40 00这是主机发来的。含义就是要设备描述符** ** c.设备给主机个ACK** ** e.令牌包:我要上面的返回数据了(69 00 10),让设备给主机发数据。** ** f.设备的数据发送给主机:注意,数据是在上面的过程的时候,就已经准备好的,在收到SETUP数据的时候,把要发送的数据填写到一个USB的句柄中,在发送FIFO为空的时候,会在中断中填入到FIFO 中,并且在收到IN数据包的时候,通过硬件自动发送出去(如有错误,请高手指出)。** ** g.主机给设备发个ACK** ** (按照规定,一旦在第一步中确定了传输方向,在传输结束以前,都必须是一个方向传输的)** ** 传输结束了****还必须有个状态过程** ** 状态过程的传输必须和上面的数据过程相反,而且必须用DATA1数据包,别问为什么,问就是规定的。** 写到这儿要重点写下,USB数据在STM32F429芯片内部是怎么传输和发送的了: a.主机给设备发送SETUP包并且发送了数据包,单片机是怎么把这个数据包接收到内部ram中使用的呢,其实ST的手册上写的很清楚,请看如下: ** 2.后面就是配置设备的地址:** (未完待洗)
查看更多
4
个回答
默认排序
按发布时间排序
whj467467222
认证专家
2019-07-15
开源,分享,交流,共同进步
[https://blog.csdn.net/newbie_Blogger/article/details/92617242](https://blog.csdn.net/newbie_Blogger/article/details/92617242) 自己弄一个看看, STM32F469的BSP已经支持,可以参考一下
xingyanchen
2019-07-15
这家伙很懒,什么也没写!
>https://blog.csdn.net/newbie_Blogger/article/details/92617242 >自己弄一个看看, >STM32F469的BSP已经支 ... --- 还是你聪明,我咋就没想到,光想着找个现成的看了,谢谢
xingyanchen
2019-07-15
这家伙很懒,什么也没写!
另外,我还想咨询一下,我看在配置的时候,每个端口都是配置FIFO为64字节,这个字节数是不是可以加大
雁山情缘
2019-07-31
这家伙很懒,什么也没写!
我使用STM32F429做虚拟U盘时候老是不成功,能分享一下具体实现方法吗?我用的W25Q64,使用虚拟文件系统组件,W25Q64挂载文件系统成功,也能正常读写文件。有一个问题,如果我将W25Q64挂载到文件系统,USB打开W25Q64设备时则不成功,是不能做虚拟U盘是不能使用文件系统?
撰写答案
登录
注册新账号
关注者
0
被浏览
2.4k
关于作者
xingyanchen
这家伙很懒,什么也没写!
提问
19
回答
38
被采纳
1
关注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
简单两步配置RTT源码阅读环境 vsc+clangd
2
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
3
LVGL使用字库IC芯片显示中文
4
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
5
freemodbus主机在freertos的适配,参考rtthread例程
热门标签
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
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部