USB
USB 是英文 Universal Serial BUS(通用串行总线)的缩写。
USB 是在 1994 年底由英特尔、康柏、IBM、Microsoft 等多家公司联合提出的。
USB2.0 规范
标准 USB 共四根线组成,除 VCC/GND 外,另外为 D+和 D-。
- 两根数据线采用的是差分电压的方式进行数据传输
在 USB 主机上,D-和 D+都是接了 15K 的电阻到地的
- 所以在没有设备接入的时候,D+、D-均是低电平。
如果是高速设备,则会在 D+上接一个 1.5K 的电阻到 VCC,而如果是低速设备,则会在 D-上接一个 1.5K 的电阻到 VCC。
如此,当设备接入主机的时候,主机就可以判断是否有设备接入,并能判断设备是高速设备还是低速设备。
USB OTG
OTG ,On - The - Go,即插即用
STM32F407 系列芯片自带有 USB OTG FS(全速)和 USB OTG HS(高速)。
- 在主机模式下,OTG FS 支持全速(FS,12Mb/s)和低速(LS,1.5 Mb/s)收发器,
- 从机模式下则仅支持全速(FS,12 Mb/s)收发器。

时钟
STM32F4通过AHB总线访问(AHB频率必须大于14.2Mhz)USB OTG FS功能模块
48Mhz 的 USB 时钟,是来自时钟树图里面的 PLL48CK(和 SDIO 共用)
ST的USB库

设备类(Device,即 Slave)、②主从一体类(Host_Device)和③主机类(Host),总共 10 个例程。
USB 读卡器
移植:STM32_USB-Host-Device_Lib_V2.1.0\Project\USB_Device_Examples\MSC
软件

要修改的就是 USB_APP 文件夹下面的代码。
其他代码(USB_OTG 和USB_DEVICE 文件夹下的代码)一般不用修改
usb_bsp.c
底层初始化函数,包括:IO 设置、中断设置、VBUS配置以及延时函数等。
USB Device(Slave)和 USB Host 共用这个.c 文件。
usbd_desc.c
USB 设备类的描述符,直接决定了 USB 设备的类型、断点、接口、字符串、制造商等重要信息。这个里面的内容,我们一般不用修改。
usbd_usr.c
应用层接口函数,即 USB 设备类的一些回调函数
- 当 USB 状态机处理完不同事务的时候,会调用这些回调函数
- 通过这些回调函数,就可以知道 USB 当前状态
所有 USB 事务,都是通过 USB 中断触发,并由 USB 驱动库自动处理。
USB 中断服务函数在usbd_usr.c , OTG_FS_IRQHandler
usbd_storage_msd.c
一些磁盘操作函数,包括支持的磁盘个数,以及每个磁盘的初始化和读写等函数。
- 这里设置了 2 个磁盘:SD 卡和 SPI FLASH。
移植注意
- 全局宏定义里面,定义:USE_USB_OTG_FS
- 没有用到 VUSB 电压检测,所以要在 usb_conf.h 里面,将宏定义:#define VBUS_SENSING_ENABLED,屏蔽掉。
- 通过修改 usbd_conf.h 里面的 MSC_MEDIA_PACKET 定义值大小,提高USB 读写速度(越大越快),本例程我们设置 12*1024。
- 修改 usbd_msc_scsi.c 里面的 SCSI_blk_addr 类型为 uint64_t,才可以支持大于 4G 的卡,官方默认是 uint32_t,最大只能支持 4G 卡。
- usbd_msc_scsi.c 文件,是只读的,得先修改属性,去掉只读属性,才可以更改。
3578

被折叠的 条评论
为什么被折叠?



