0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32入门学习笔记之USB读卡器实验1

jf_78858299 来源:滑小稽笔记 作者:电子技术园地 2023-02-16 15:59 次阅读

22.1 USB概述

USB是英文Universal Serial BUS(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。

是在1994年底由英特尔、康柏、IBM、Microsoft等多家公司联合提出的。发展到现在已经有USB1.0/1.1/2.0/3.0/3.1等多个版本。目前用的最多的就是USB2.0和USB3.0,USB3.1目前已经开始普及。

STM32F103自带的USB符合USB2.0规范。标准USB共四根线组成,除VCC和GND外,另外为D+,D-,这两根数据线采用的是差分电压的方式进行数据传输的。在USB主机上,D-和D+都是接了15K的电阻到低的,所以在没有设备接入的时候,D+、D-均是低电平。

而在USB设备中,如果是高速设备,则会在D+上接一个1.5K的电阻到VCC,而如果是低速设备,则会在D-上接一个1.5K的电阻到VCC。这样当设备接入主机的时候,主机就可以判断是否有设备接入,并能判断设备是高速设备还是低速设备。

STM32F1自带一个USB从机控制器,符合USB规范通信,PC主机和微控制器之间的数据传输是通过共享一个专用的数据缓冲区来完成的,该数据缓冲区能被USB外设直接访问,这块专用数据缓冲区的大小由所使用的端点数目和每个端点最大的数据分组大小所决定,每个端点最大可使用512字节缓冲区,最多可用于16个单向或8个双向端点。

USB模块同PC主机通信,根据USB规范实现令牌分组的检测,数据发送/接收的处理,和握手分组的处理。整个传输的格式由硬件完成,其中包括CRC的生成和校验。

每个端点都有一个缓冲区描述块,描述该端点使用的缓冲区地址、大小和需要传输的字节数。当USB模块识别出一个有效的功能/端点的令牌分组时,(如果需要传输数据并且端点已配置)随之发生相关的数据传输。

USB模块通过一个内部的16位寄存器实现端口与专用缓冲区的数据交换。在所有的数据传输完成后,如果需要,则根据传输的方向,发送或接收适当的握手分组。在数据传输结束时,USB模块将触发与端点相关的中断,通过读状态寄存器和/或者利用不同的中断来处理。USB设备架构如图所示。

图片

USB的中断映射单元:将可能产生中断的USB事件映射到三个不同的NVIC请求线上:

(1)USB低优先级中断(通道20):可由所有USB事件触发(正确传输,USB复位等)。在处理中断前应首先确定中断源。

(2)USB高优先级中断(通道19):仅由同步和双缓冲批量传输的正确传输事件触发,为保证最大的传输速率。

(3)USB唤醒中断(通道42):由USB挂起模式的唤醒事件触发。

注:USB和CAN共用一个专用的512字节的SRAM存储器用于数据的发送和接收,因此不能同时使用USB和CAN(共享的SRAM被USB和CAN模块互斥地访问)。USB和CAN可以同时用于一个应用中但不能在同一个时间使用。

22.2 实验例程

如果需要正常的使用STM32F1系列的USB模块,就需要编写USB驱动程序,这部分程序非常复杂,需要了解整个USB通信的详细过程,针对这个问题,ST公司提供了一个官方的USB驱动库,用户可以通过直接移植官方驱动库来实现USB读写控制。

我们现在直接利用官方的USB驱动源码来通过计算机进行SD卡和Flash的读写,这里我们需要对官方源码进行一些修改,用于实现这个效果。

22.2.1 USB源码概述

USB Mass Storage类支持两个传输协议:

(1)Bulk-Only传输(BOT)

(2)Control/Bulk/Interrupt传输(CBI)

MassStorage类规范定义了两个类规定的请求:Get_Max_LUN和MassStorageReset,所有的MassStorage类设备都必须支持这两个请求。

(1)Get_Max_LUN(bmRequestType=10100001 bandb Request=11111110b)用来确认设备支持的逻辑单元数。MaxLUN的值必须是0~15。注意:LUN是从0开始的。主机不能向不存在的LUN发送CBW,本章我们定义MaxLUN的值为1,即代表2个逻辑单元。

(2)MassStorageReset(bmRequestType=00100001 bandb Request=11111111b)用来复位MassStorage设备及其相关接口。

支持BOT传输的MassStorage设备接口描述符要求如下:

(1)接口类代码bInterfaceClass=08h,表示为MassStorage设备。

(2)接口类子代码bInterfaceSubClass=06h,表示设备支持SCSIPrimaryCommand-2(SPC-2)。

(3)协议代码bInterfaceProtocol有3种:0x00、0x01、0x50,前两种需要使用中断传输,最后一种仅使用批量传输(BOT)。

(4)支持BOT的设备必须支持最少3个endpoint:Control,Bulk-In和Bulk-Out。USB2.0的规范定义了控制端点0。Bulk-In端点用来从设备向主机传送数据(本章用端点1实现)。Bulk-Out端点用来从主机向设备传送数据(本章用端点2实现)。

ST官方的例程是通过USB来读写SD卡(SDIO方式)和Nand Falsh,支持2个逻辑单元,我们在官方例程的基础上,只需要修改SD驱动部分代码,并将对Nand Falsh的操作修改为对SPI Falsh的操作。只要这两步完成了,剩下的就比较简单了,对底层磁盘的读写,都是在mass_mal.c文件实现的,所以我们只需要修改该函数的MAL_Init、MAL_Write、MAL_Read和MAL_GetStatus等4个函数,与我们的SD卡和SPI Falsh对应起来即可。

22.2.2 源码移植过程

(1)需要添加的文件如下表所示。

文件名 目录 功能
usb_core.c ....\\USB\\CORE 用于处理USB2.0协议
usb_init.c 用于USB控制器的初始化
usb_int.c 负责USB的中断处理
usb_mem.c 负责处理PMA数据,即STM32内部用于USB/CAN的专用数据缓冲区
usb_regs.c 负责USB控制寄存器的底层操作
usb_sil.c 为USB端点提供特殊简化的读写访问函数
usb_desc.c ...\\USB\\CONFIG 用于虚拟通信端口描述符的处理
usb_endp.c 用于非控制传输,处理正确传输中断回调函数
usb_istr.c 用于处理USB中断
usb_prop.c 用于处理所有虚拟通信端口相关事件,包括初始化,复位等
usb_pwr.c 用于管理USB的电源状态
usb_scsi.c 与SCSI命令相关的所有处理
scsi_data.c 定义了SCSI数据
memory.c 定义USB通信的存储区读写函数
mass_mal.c 定义了USB通信的读写操作底层函数接口
usb_bot.c 定义了BOT传输协议
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    60

    文章

    7945

    浏览量

    264657
  • PC
    PC
    +关注

    关注

    9

    文章

    2082

    浏览量

    154205
  • 总线
    +关注

    关注

    10

    文章

    2881

    浏览量

    88085
收藏 人收藏

    评论

    相关推荐

    STM32 SD-USB读卡器实验(神舟I号)

    STM32 SD-USB读卡器实验(神舟I号
    发表于 03-21 15:20

    stm32USB读卡器实验源码

    ***_bot.h"//ALIENTEK战舰STM32开发板实验50//USB读卡器 实验//设置USB
    发表于 07-04 02:29

    电脑相关的读卡器

    ,SM卡读卡器,PCMICA读卡器和记忆棒读卡器。此外,还有一个双插槽读卡器,可同时支持两个或更多卡。此外,根据端口类型,读卡器可分为三类:
    发表于 09-16 16:51

    usb读卡器万能驱动下载

    usb读卡器万能驱动下载
    发表于 01-12 10:15 451次下载

    读卡器的接口类型

    读卡器的接口类型              接口类型是指读卡器与电脑主机之间的连接方式和类型。目前读卡器都是采用
    发表于 01-09 15:06 4396次阅读

    ALIENTEK_MINISTM32_实验27_USB读卡器

    ALIENTEK MINISTM32 实验27 USB读卡器,很好的学习资料,快来下载吧
    发表于 02-19 11:41 12次下载

    基于STM32RFID的读卡器资料(全套完整)

    基于STM32RFID的读卡器资料(全套完整),吧友提供,我只是打包后上传,谢谢下载
    发表于 07-01 17:35 718次下载

    基于STM32USB读卡器的设计

    基于STM32USB读卡器的设计
    发表于 09-25 11:11 29次下载
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>USB</b><b class='flag-5'>读卡器</b>的设计

    usb3.0和usb2.0读卡器对比

    手里有个品胜的USB2.0读卡器,电脑配置更新之后带有3.0接口,所有买了个3.0的读卡器,选来选去感觉还是螃蟹芯片好些,入了一个“川宇C396”,之前有个老的8G内存卡。还有个前年买了一个威刚
    发表于 05-15 16:09 2.5w次阅读

    USB读卡器(SLAVE)应用实验的详细直流概述免费下载

    本文档的主要内容详细技术的是USB读卡器(SLAVE)应用实验的详细资料概述免费下载。
    发表于 09-11 08:00 4次下载

    笔记本的读卡器有何用处 读卡器的类型介绍

    曾几何时,多合一读卡器笔记本身上的标配,可以方便我们读取数码相机、行车记录仪等数码产品内置存储卡中的数据。然而,如今笔记本领域读卡器的境遇却发生了变化。 渐被遗忘的插槽 随着
    的头像 发表于 01-24 10:48 1.3w次阅读

    UM1799_STM32Nucleo的NFC读卡器入门

    UM1799_STM32Nucleo的NFC读卡器入门
    发表于 11-22 19:25 3次下载
    UM1799_<b class='flag-5'>STM32</b>Nucleo的NFC<b class='flag-5'>读卡器</b><b class='flag-5'>入门</b>

    STM32入门学习笔记USB读卡器实验2

    USB是英文Universal Serial BUS(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。
    的头像 发表于 02-16 15:59 809次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>入门</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b><b class='flag-5'>USB</b><b class='flag-5'>读卡器</b><b class='flag-5'>实验</b>2

    STM32入门学习笔记USB读卡器实验3

    USB是英文Universal Serial BUS(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。USB接口支持设备的即插即用和热插拔功能。
    的头像 发表于 02-16 16:00 1490次阅读

    基于STM32单片机USB读卡器使用库文件设计源代码

    基于STM32单片机USB读卡器使用库文件设计源代码
    发表于 04-26 14:53 4次下载