当前位置: 首页 > news >正文

STM32F4_USB读卡器(USB_Slave)/USB U盘(Host)

前言

        STM32F4芯片自带了USB OTG FS(FS,即全速,12Mbps)和USB OTG HS,支持USB Host和USB Device。

1. USB简介

        USB,是英文Universal Serial BUS(通用串行总线)的缩写,是一个外部总线标准,用以规范电脑与外部设备的连接和通讯。应用在PC领域的接口技术上。USB接口技术支持设备的即插即用和热插拔功能。USB是在1994年底由因特尔、康柏、IBM、Microsoft等多家公司联合提出的。USB发展到现在已经有了USB1.0/1.1/2.0/3.0等多个版本。目前USB3.0 已经开始普及。

        标准的USB共四根线组成,除VCC/GND外,还有的就是D+和D-,这两根线采用的是差分电压的方式进行数据传输的。在USB主机上,D-和D+都是接了15K 的电阻到地的,所以在没有设备接入时,D+和D-都是低电压。在USB设备中,如果是高速设备,则会在D+上接一个1.5K的电阻到VCC,如果是低速设备,则会在D-接一个1.5K的电阻到VCC。当设备接入主机的时候,主机可以判断是否有设备接入,并且还能判断设备是高速设备还是低速设备。

        STM32F4芯片中自带有USB OTG FS(全速)和USB OTG HS(高速),其中HS需要外扩高速PHY芯片实现。

        STM32F4的USB OTG FS是一款双角色设备(DRD)控制器,同时支持从机功能和主机功能,完全符合USB 2.0规范的On-The-Go(就是OTG,实现在没有Host主机的情况下,实现设备间的数据传送)补充标准。并且该控制器还可以配置为 “仅主机” 模式“仅从机” 模式。主机模式下,OTG FS支持全速(FS,12Mb/s)和低速(LS,1.5Mb/s)收发器,在从机模式下仅支持全速(FS,12Mb/s)收发器。

        STM32F4的USB OTG FS主要特性可以分为:通用特性、主机模式特性和从机模式特性

1. 通用特性

  1.         支持A-B器件识别(ID线)
  2.         支持主机协商协议(HNP)和会话请求协议(SRP)
  3.         允许主机关闭VBUS,以保证在OTG应用中节省电池电量
  4.         支持通过内部比较器对VBUS电平采取监控
  5.         支持主机到从机的角色动态切换

2. 主机 Host 模式特性

  1.         通过外部电荷泵生成VBUS电压
  2.         多达8个主机通道:每个通道都可以动态实现重新配置,可以支持任何类型的USB传输
  3.         内置硬件调度器可: 1,在周期性硬件队列中存储多达 8 个中断加同步传输请求 2,在非周期性硬件队列中存储多达 8 个控制加批量传输请求
  4.         管理一个共享 RX FIFO、一个周期性 TX FIFO 和一个非周期性 TX FIFO,以有效使用USB 数据 RAM。

3. 从机 Slave 模式特性

  1.         1个双向控制端点0
  2.         3个 IN 端点EP,可配置为支持批量传输、中断传输或同步传输
  3.         3 个 OUT 端点(EP),可配置为支持批量传输、中断传输或同步传输
  4.         管理一个共享 Rx FIFO 和一个 Tx-OUT FIFO,以高效使用 USB 数据 RAM
  5.         管理多达 4 个专用 Tx-IN FIFO(分别用于每个使能的 IN EP),降低应用程序负荷支持 软断开功能。

USB 拓扑结构:

USB总线基于分层的星状拓扑结构;USB 总线以Hub为中心,连接周围设备;总线上最多可连接127个设备;Hub串联数量最多5个;线缆长度最长5米;

连接和断开连接:

没有设备连上主机时

        D+和D-数据线上的下拉电阻起作用,使得两根数据线在空闲状态下都处于低电平;主机端看来就是SE0状态;同样的,当数据线上的SE0状态持续一段时间了,就认为主机处于断开状态

设备连上主机时

        根据之前的学习,我们知道如果是高速设备,那么D+上会接一个1.5K的上拉电阻到VCC,如果是低速设备,那么D-上会接一个1.5K的上拉电阻到VCC;那么当设备连上主机时,主机检测到某一数据线电平拉高并保持了一段时间,此时就认为有设备连上来啦;主机在驱动SE0状态复位设备之前,采样总线状态来判断设备的速度(究竟是高速设备还是低速设备)。

USB传输:Packet、Transaction、Transfer

Packet的组成:SOP、SYNC、Packet Content、EOP

Packet主要分为四类:命令(Token)Packet、帧首(Start of Frame)Packet、数据(Data)Packet、握手(Handshake)Packet

2. USB U盘(Host)

        U盘,全称 USB 闪存盘,英文名 “USB flash disk”。它是一种使用 USB 接口的无需物理驱动器的微型高容量移动存储产品,通过USB接口和主机连接,实现即插即用,是最常用的移动存储设备之一。

相关文章:

STM32F4_USB读卡器(USB_Slave)/USB U盘(Host)

前言 STM32F4芯片自带了USB OTG FS(FS,即全速,12Mbps)和USB OTG HS,支持USB Host和USB Device。 1. USB简介 USB,是英文Universal Serial BUS(通用串行总线)的缩写,是一…...

【网络安全入门】学习网络安全必须知道的100 个网络基础知识

前言 先领取资料再阅读哦 【282G】网络安全&黑客技术零基础到进阶全套学习大礼包(附面试题答案),免费分享! 【282G】网络安全&黑客技术零基础到进阶全套学习大礼包(附面试题答案),免…...

96核的AMD锐龙Threadripper PRO 7995WX性能如何?

AMD新推出的锐龙Threadripper 7000系列可以说是目前最快的工作站处理器,最顶级的锐龙Threadripper PRO 7995WX拥有96个Zen 4内核,共192线程,基础频率2.5GHz,加速频率5.15GHz,拥有384MB L3缓存和多达128条PCI-E 5.0通道…...

TS和JS的区别

1.TS和JS的区别 ts 是js的超集。 从执行环境上来看,浏览器、node.js 可以直接执行js,但不能执行ts;编译层面,Ts 有编译阶段,js 没有,只有转译阶段和lint阶段;ts更难写一点,但类型更安全。ts 代码写出来就是…...

顺序栈的实现----数据结构

栈的概念 对于栈(Stack),后进先出(Last In First Out,LIFO),栈也是一种线性表,只不过是一种操作受限的线性表,只能在一端操作,也就是不允许在中间进行查找、…...

k8s calico 网络原理

一、cluster ip Cluster IP 是 Kubernetes 中 Service 的 IP 地址,它是一个虚拟 IP 地址,用于集群内的 Pod 相互通信。 例如: Cluster IP:2.2.2.2负载的真实Pod IP:1.1.1.1 场景: Pod A 的 IP 地址是 …...

【Python学习笔记】循环

Python中有两种类型的循环: while 循环 和 for 循环 1. while 循环 while循环是: 检查一个条件表达式,只要条件表达式计算结果为True 时, 就执行下面缩进的代码。 如此反复,直到条件表达式计算结果为False时,结束 循…...

1 如何入门TensorFlow

近年来人工智能的火爆吸引了很多人,网上相关的热门课程报名的人很多,但是坚持下去的人却少。那些晦涩的原理没有一定知识的积累很难能理解。 如果你对人工智能感兴趣,且想利用人工智能去实现某项功能,而不是对人工智能本身感兴趣&…...

QTday02(常用类、UI界面下的开发、信号与槽)

今日任务 1. 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin"&#x…...

自然语言处理---RNN经典案例之使用seq2seq实现英译法

1 seq2seq介绍 1.1 seq2seq模型架构 seq2seq模型架构分析: seq2seq模型架构,包括两部分分别是encoder(编码器)和decoder(解码器),编码器和解码器的内部实现都使用了GRU模型,这里它要完成的是一个中文到英文的翻译:欢迎…...

Python【判断列表的存在与否关系】

要求:使用列表判断一个列表是否在另外一个列表中 代码如下: list1 [1, 2, 6, 8, 7, 10, 5] print("列表1为:", list1) list2 [2, 6, 5, 10] print("列表2为:",list2) res False a 0 for i in list2:if …...

MyBatis篇---第三篇

系列文章目录 文章目录 系列文章目录一、如何执行批量插入?二、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?三、MyBatis实现一对一有几种方式?具体怎么操作的?一、如何执行批量插入? 首先,创建一个简单的insert语句: <insert id=”…...

uview1.0部分机型u-input组件禁用后无法触发click事件

最近&#xff0c;线上的一个 App 收到用户反馈&#xff0c;输入框禁用状态下点击无法拉起模态框。找了一下身边可用机型进行了测试&#xff0c;起初所有机型都没有复现这个问题&#xff0c;突然有一天 Redmi K30S Ultra 出现了异常&#xff0c;点击输入框无法触发点击事件&…...

Arduino IDE + Esp32 Cam + 实现视频流 + 开发环境部署

1、开发环境 Arduino ide 版本&#xff1a;2.2.1 esp32工具&#xff1a;2.0.5 示例代码 #include "esp_camera.h" #include <WiFi.h>// // WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality // Ensure ESP32 Wrover Modu…...

Day4力扣打卡

打卡记录 同积元组&#xff08;哈希表 排列组合&#xff09; 链接 思路&#xff1a;用哈希表将数组中出现的两不同数乘积依次记录&#xff0c;将出现两次以上的乘积组通过排列组合计算总情况个数。 class Solution { public:int tupleSameProduct(vector<int>& num…...

Paper Reading:《Consistent-Teacher: 减少半监督目标检测中不一致的伪目标》

目录 简介工作重点方法ASA, adaptive anchor assignmentFAM-3D, 3D feature alignment moduleGMM, Gaussian Mixture Model实施细节 实验与SOTA的比较消融实验 总结 简介 题目&#xff1a;《Consistent-Teacher: Towards Reducing Inconsistent Pseudo-targets in Semi-supervi…...

设计模式:观察者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

简介&#xff1a; 观察者模式&#xff0c;它是一种行为型设计模式&#xff0c;它允许一个对象自动通知其依赖者&#xff08;观察者&#xff09;状态的变化。当被观察者的状态发生改变时&#xff0c;它会通知所有的观察者对象&#xff0c;使他们能够及时做出响应。在观察者模式…...

kotling构造函数

Kotlin-继承与构造函数 - 简书 (jianshu.com) Kotlin语言中的继承与构造函数&#xff08;详解&#xff09;_kotlin 继承 构造函数_young螺母的博客-CSDN博客...

SpringMVC - 详解RESTful

文章目录 1. 简介2. RESTful的实现3.HiddenHttpMethodFilter4. RESTful案例1、准备工作2、功能清单3、具体功能&#xff1a;访问首页a>配置view-controllerb>创建页面 4、具体功能&#xff1a;查询所有员工数据a>控制器方法b>创建employee_list.html 5、具体功能&a…...

html表格标签

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><!--表格table 行 tr 列 td --> <table border"1px"><tr> <!--colsp…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...