资料.docx
- 文档编号:15552818
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:31
- 大小:552.25KB
资料.docx
《资料.docx》由会员分享,可在线阅读,更多相关《资料.docx(31页珍藏版)》请在冰点文库上搜索。
资料
芯片总体描述
STM32FI03RBT6增强型系列基于高性能的ARMCortex-M332位的RISC内核,工作频率72MHz,内置包高速存储器,包含128KFLASH,20KRAM。
丰富的增强I/O端口和连接到两条APB总线的外设。
包含2个12位的ADC、3个通用16位定时器和一个PWM定时器,还包含标准和先进的通信接口:
多达两个I2C和SPI、3个USART、1个USB和一个CAN,还有很实用的FSMC总线接口,SDIO接口。
STM32F103RBT6增强型系列工作于-40℃至105℃的温度范围,供电电压2.0V至3.6V,一系列的省电模式保证低功耗应用的要求。
该芯片拥有64个引脚,其中51个引脚是IO引脚,每一个引脚都可以配置成中断输入接口,IO均支持位操作,端口可映射,先进的中断控制器NVIC等等。
丰富的IO资源加上灵活内部结构和先进指令集的支持使设计变得更加容易。
USB是英文UniversalSerialBus的缩写,中文含义是“通用串行总线”。
它是应用在PC领域的新型接日技术。
1997年,微软在WIN950SR2 (WIN97 )中开始用外挂模块提供对USB的支持,1998年后随着微软在Windows98中内置了对USB接口的支持模块,加上USB设备的日渐增多,USB逐步走进了实用阶段,串口的出现是在1980年左右,数据传输率是115kbps-230kbps,一般用来连接鼠标和Modem;并行口的数据传输率比串口快8倍,标准并口的数据传输率为1Mbps,一般用来连接打印机、扫描仪等原则上每一个外设必须插在一个接口,如果所有的接口均被用上了就只能通过添加插卡来追加接口了,当然机器内部可增插卡的数量还受到计算机上插槽个数的限制。
多功能卡的出现,及有些厂家针对自己的产品线开发的自家适用的通用接日,很大程度是为了解决多种设备连接到主机及提高传输速率而出现的解决方案。
1994年Intel,Compaq,Digital,IBM, NEC,Northe rnTelecom等世界上著名的七家计算机公司和通讯公司成立了USB论坛,大概花了近两年的时间才形成统一的意见,于95年11月正式制定了USBO.9 通用串行总线(UniversalSerialBus)规范,把USB接口真正设计在主板上用了一年的时间。
1997年开始有真正符合USB技术标准的外设出现。
USB1.1是支持USB的计算机与外设上普遍采用的标准。
USB2.0规范发布以后,支持者除了原有的康柏、Intel、微软和NEC四个成员外,还有惠普、朗讯和飞利浦于个新成员。
USB2.0将向下兼容USB1.1,数据的传输率将达到120Mbps-24OMbps,目前已经能支持扫描仪、打印机及存储设备。
现在电脑系统接驳外围设备的接口并无统的标准,如键盘的插口是圆的、连接打印机要用9针或25针的并行接口、鼠标则要用9针或25针的串行接口。
USB把这些不同的接日统一起来,使用一个4针插头作为标准插头。
通过这个标准插头,采用菊花链形式可以把所有的外设连接起来,并且不会损失带宽。
也就是说,USB以取代当前PC机的串口和并口.....
首先,我们来看看usb的工作过程。
当usb设备接入到主机时,主机开始枚举usb设备,并向usb设备发出指令要求获取usb设备的相关描述信息,其中包括设备描述(devicedescriptor)、配置描述(configurationdescriptor)、接口描述(interfacedescriptor)、端点描述(endpointdescriptor)等。
这些信息是通过端点0(endpoint0)传送到主机的。
获取各种描述信息后,操作系统会为其配置相应的资源。
这样主机就可以与设备之间进行通信了。
usb通讯有四种通讯方式控制(control)、中断(interrupt)、批量(bulk)和同步(synchronous)。
usb通讯是通过管道(pipe)实现的。
管道是一个抽象的概念,指的是主机与设备之间通讯的虚拟链路。
不如说一个usb通讯主机A和设备B,其中有bulkin(批量输入)、bulkout(批量输出)、controlout(控制输出)三种通讯方式,那么A与B之间的通讯管道就有三个。
(这里明确一个概念,在usb通信中数据流向都是相对设备来说的,in表示设备向主机传送数据,out表示表示主机箱设备传输数据)。
在设备一端,每个管道对应一个端点,端点配置相关的寄存器和缓冲区。
在通讯之前需对端点进行相关设置。
在通信中,只需向缓冲写或读数据,并置位相关比特位即可。
下面具体从usb的中断输入输出来讲述基于keilCmdk开发环境的stm32的USB接口单片机程序设计。
值得一提的是,st或相关公司给我们提供许多封装函数和相关例子,我们可以根据其中的例子并进行修改即可实现我们自己需要的usb通讯程序。
SD卡(Secure Digital Memory Card)是一种为满足安全性、容量、性能和使用环境等各方面的需求而设计的一种新型存储器件,SD卡允许在两种模式下工作,即SD模式和SPI模式,本系统采用SPI模式。
本小节仅简要介绍在SPI模式下,STM32处理器如何读写SD卡,如果读者如希望详细了解SD卡,可以参考相关资料。
SD卡内部结构及引脚如图2-1 所示
SD卡主要引脚和功能为:
CLK:
时钟信号,每个时钟周期传输一个命令或数据位,频率可在0~25MHz之间变化,SD卡的总线管理器可以不受任何限制的自由产生0~25MHz的频率;
CMD:
双向命令和回复线,命令是一次主机到从卡操作的开始,命令可以是从主机到单卡寻址,也可以是到所有卡;回复是对之前命令的回答,回复可以来自单卡或所有卡;
DAT0~3:
数据线,数据可以从卡传向主机也可以从主机传向卡。
SD卡以命令形式来控制SD卡的读写等操作。
可根据命令对多块或单块进行读写操作。
在SPI模式下其命令由6个字节构成,其中高位在前。
SD卡命令的格式如表1所示,其中相关参数可以查阅SD卡规范。
第二章USB2.0协议概述
13
4.控制传输
控制传输是一种可靠的双向传输,一次控制传输可分为三个阶段。
第一阶段
为从HOST到Device的SETUP事务传输,这个阶段指定了此次控制传输的请求
类型;第二阶段为数据阶段,也有些请求没有数据阶段;第三阶段为状态阶段,
通过一次IN/OUT传输表明请求是否成功完成。
控制传输通过控制管道在应用软
件和Device的控制端点之间进行,控制传输过程中传输的数据是有格式定义的,
USB设备或主机可根据格式定义解析获得的数据含义。
其他三种传输类型都没有
格式定义。
控制传输可用于低速、全速或高速设备,且所有的USB设备都必须支持控制
传输。
具体的说,任何USB设备都必须在0号端点的缺省管道中支持控制传输。
2.4.2数据流模型
本小节首先介绍数据的发送和接收实体——端点,然后分析端点之间建立的数
据和传输连接,最后总体分析数据的发送和接受过程,
1.端点
端点(Endpoint),实际上就是设备硬件上具有一定大小的缓存区。
USB系统中
每一个端点都有惟一的地址,这是有设备地址和端点号给出的。
所以每一个USB
设备在主机看来就是一系列端点的集合,主机通过端点与设备进行通信。
端点的特性,主要有数据传输方式(用于IN事务的端点、OUT事务的端点和
SETUP事务的端点)、总线的访问频率、带宽、端点号和数据包大小容量等。
除了端点0(用作控制传输端点,默认)之外,端点必须在设备被主机配置后
才能使用。
2.管道
管道(Pipe),并不像端点那样具有实际意义。
它只有一种逻辑上的概念。
管道
就是数据传输的管道,代表了主机的数据缓存区与设备端点之间交换的数据的能
力。
设备被配置后,端点就可以使用了,管道也就存在了。
管道包括数据流管道和消息管道两种。
USB没有定义通过数据流管道移动的数
据的格式。
而消息管道中的数据有USB定义好的格式。
管道的概念主要用于PC上驱动程序和用户程序的编写,再设计USB设备的时
候,一般都不会涉及到。
3.USB数据传输过程
完整的数据传输过程是这样的:
在PC机上,设备驱动程序通过调用USB驱动
程序接口USBD(USBDriverInterface),发出输入输出请求包IRP;这样,在USB
驱动程序接到请求之后,调用主控制器驱动程序接口HCD(HostControllerDriver
Interface),将IRP转化为USB的传输。
当然一个IRP可以包含一个或多个USB传2.4.1数据传输概述
USB的传输,是USB面向用户的、最高级的数据结构。
USB定义了4种数据
传输的类型,即控制传输、中断传输、批量传输和同步传输。
USB运用这4种包
可以完成各种类型的数据传输。
1.中断传输
中断传输适用于传输少量或中量的、且对服务周期有要求的数据。
USB为中
断传输保留了总线带宽,以保证其能在规定的周期内得到服务,但其并不是一直
使用准确的传输速率。
另外,USB还采用差错控制和重试机制来确保中断传输的
正确性。
总的来说,中断传输特别适合于键盘、鼠标类设备,因为对它们来讲,
所需处理的事件只是键盘的按下,鼠标的点击和移动,其数据量很少,而且用户
在使用键盘和鼠标时出现明显的延时,这意味着需要固定的服务周期。
中断传输可以用于低速、全速或高速设备,但USB设备可以不支持高速传输。
中断事务处理包括IN传输和OUT传输,可具有令牌、数据和握手三个阶段。
2.批量传输
批量传输是一种可靠的单向传输,但延迟没有保证,它尽量利用可以利用的
带宽来完成传输,适合数据量比较大的传输。
低速USB设备不支持批量传输,高速批量端点的最大包长度为512,全速批
量端点的最大包长度可以为8、16、32、64。
批量传输在访问USB总线时,相对
其他传输类型具有最低的优先级,USBHOST总是优先安排其他类型的传输,当
总线带宽有富余时才安排批量传输。
高速的批量端点必须支持PING操作,向主机报告端点的状态,NYET表示
否定应答,没有准备好接收下一个数据包,ACK表示肯定应答,已经准备好接收。
批量传输只适用于高速或全速设备,但全速/高速设备可以不支持批量传输。
3.同步传输
同步传输适用于传输大量的、速度恒定的、且对服务周期有要求的数据。
USB
为同步传输保留了总线带宽,以保证其能在每帧中得到服务。
即同步传输将一直
使用准确的传输速率,因此其传输事件是可以预测的。
另外,为确保数据传输的
及时性,同步传输没有采用差错控制和重试机制,即不能保证每次传输都是成功
的。
总的来说,同步传输特别适用于音频和视频类设备,因为数据被及时发送和
接收远比其正确性重要。
同步传输只适用于全速或高速USB设备,但全速/高速设备可以不支持同步传
输。
14
输;接着主控制驱动程序将USB传输分解为总线事务,主控制器以包的形式发送
给设备。
这里各种驱动程序和IRP的概念,都是基于PC和操作系统的,当在设计
嵌入式USB的时候,完全可摆脱这种框架,而仅以最简单的能够实现USB各种传
输为目标即可。
最基本的数据单元——包
包(Packet)是最基本的USB的数据单元,由一系列的域组成。
USB定义了
4种类型的包,即令牌包、数据包、握手包和特殊包。
1.令牌包
根据标识域PID的不同,令牌包(TokenPacket)又可细分为输入包IN、输出
包OUT、设备包SETUP和帧起始包SOF。
而IN、OUT和SETUP这3中包的结
构式是一样的。
如表2.2所示。
表2.2IN、OUT和SETUP包的数据包的格式
2.数据包
根据PID的不同,数据包(DataPacket)分为DATA0和DATA1两种包。
两
种数据包的数据结构都是一样的,用法也想同。
当USB发送数据包的时候,如果第二章USB2.0协议概述
11
一次发送的数据长度大于相应端点的容量的时候,就需要把该数据分为好几个包,
分批传送。
如果第一个数据包被定为DATA0,那么第二个数据包就应该是DATA1,
如此交替下去。
而数据的接收方在接收数据时检查此类型是否是DATA0、DATA1
交替的,这是保证数据正确的机制之一。
如表2.3所示:
表2.3数据包的结构
3.握手包
握手包(HandshakePacket)是结构最为简单的包,其数据结构如表2.4所示。
表2.4握手包
根据PID的不同,握手包可以分为3种中类型,即确认包ACK、无效包NAK
和停止包STALL。
这3种包的具体意义如下:
确认包ACK:
用于表示数据包被成功接收,具体的说就是:
l标识域PID被正确接收;
l并且没有发生数据位错误;
l没有发生数据域的CRC校验错误等。
根据确认包ACK的这种意义,可知期一般由接收到数据的一方来发送。
无效包NAK:
主要用于两种场合:
l在接收到主机发来的OUT命令后,设备无法接收数据;
l接到主机的IN命令,但是设备没有数据发送给主机。
在这两种情况下,NAK包都由设备来发送。
错误包STALL:
主要用于三种场合:
l设备无法发送数据;
l设备无法接受数据;
l不支持某一种控制管道的命令。
同无效包NAK一样,STALL也只能是由设备来发送的,而不是主机来发送的。
usb控制器与集线器都在机箱里,集线器检测到了新设备信号,它先要和usb控制器商量一下,下面是商量的内容:
1.主机的集线器检测新设备
电脑主机的主板上都会有几个集线器,每个集线器都会有多个usb口,usb口就是我们肉眼看到的机箱外部的usb插口。
主机集线器轮巡每个端口的信号电压,当有新设备接入usb口时就会察觉。
原因在于集线器端口的两根信号线的每一根都有一个15KΩ的下拉电阻,每一个设备在D+线上都有一个1.5KΩ的上拉电阻。
当总线将主机和设备接通后,设备的上拉电阻使信号线上的电位升高,此时主集线器就会检测到这个信号。
2.报告集线器事件
当检测到接入信号后,集线器用中断来报告给主机usb控制器(简称主机),控制器知道后,给集线器发送一个Get_Status请求,集线器告诉主机新设备是什么时候连接到主机上的。
3.重新设置新设备
当主机确定此时有新设备后,主机给集线器发送一个Set_Feature请求,集线器使得usb数据线处于reset状态至少10ms
4.重发Get_Status请求
主机重发Get_Status请求以检查设备是否真的处于重启态。
当集线器释放重启态后,设备进入默认态,此时可以通过端点0进行控制传输了,使用默认地址0x0与主机通信。
5.集线器通过D+/D-信号线在空闲时电压的高低来断定usb此时是全速还是低速。
好了,控制器与集线器商量了一会,心里有底了,现在可以询问设备了
1.主机向端点0发送获取设备描述符请求,在有限时间内等待usb设备回答,不管usb设备此时返回多少字节,主机只读前8个字节
,如果等待几ms设备没有反应,会持续三次
2.主机发送Set_Address请求给设备,同时为设备分配一个新地址。
设备读到这个请求后,返回给主机确认信息,同时保存新地址,下面开始用新地址通信。
3.主机重发获取设备描述符请求给设备,这次会读取全部的usb设备描述符,了解设备的VID,PID等信息。
一次读不全,会重复发送该请求。
4.主机发送获取字符串描述符,获得厂商,产口描述,型号等信息。
5.到这儿主机右下角就会弹出发现新硬件,接着弹出厂商,产品描述,型号等
6.主机设备描述符和设备配置信息在自己的驱动库中查找是否有合适的驱动,win98以上的windows系统(不包括98)支持HID设备,打印机,扫描仪等,如果搜不到,会弹出对话框,提示安装设备驱动。
7.驱动加载以后,主机发送设置配置请求为设备选一个合适的配置。
如果配置成功,usb进入配置状态,设备可以和主机上应用软件通信了。
USB枚举详细过程USB枚举详细过程剖析
1.主机集线器检测到新设备
主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。
(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。
当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此被主机集线器检测到。
)
2.主机发送Get_Status请求
每个集线器用中断传输来报告在集线器上的事件。
当主机知道了这个事件,它给集线器发送一个Get_Status请求来了解更多的消息。
返回的消息告诉主机一个设备是什么时候连接的。
3.主机发送Set_Feature请求,集线器重启端口
当主机知道有一个新的设备时,主机给集线器发送一个Set_Feature请求,请求集线器来重启端口。
集线器使得设备的USB数据线处于重启(RESET)状态至少10ms。
4.集线器在设备和主机之间建立一个信号通路
主机发送一个Get_Status请求来验证设备是否激起重启状态。
返回的数据有一位表示设备仍然处于重启状态。
当集线器释放了重启状态,设备就处于默认状态了,设备已经准备好通过Endpoint0的默认流程响应控制传输,即设备现在使用默认地址0x0与主机通信。
5.集线器检测设备速度
集线器通过测定哪根信号线(D+或D-)在空闲时有更高的电压来检测设备是低速设备还是全速设备。
(全速和高速设备D+有上拉电阻,低速设备D-有上拉电阻)。
以下需要USB的firmware进行干预。
6.获取最大数据包长度
PC向address0发送USB协议规定的Get_Device_Descriptor命令,以取得缺省控制管道所支持的最大数据包长度,并在有限的时间内等待USB设备的响应。
该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8个字节。
注意,主机一次只能枚举一个USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。
以下操作雷同,不同操作系统设定时延是不一样的,比如说win2k大概是几毫秒,如果没有反应就再发送一次命令,重复三次。
7.主机分配一个新的地址给设备
主机通过发送一个Set_Address请求来分配一个唯一的地址给设备。
设备读取这个请求,返回一个确认,并保存新的地址。
从此开始所有通信都使用这个新地址。
8.主机重新发送Get_Device_Descriptor命令,读取完整设备描述符
主机向新地址重新发送Get_Device_Descriptor命令,此次读取其设备描述符的全部字段,以了解该设备的总体信息,如VID,PID。
9.主机发送Get_Device_Configuration命令,获取完整配置信息
主机向设备循环发送Get_Device_Configuration命令,要求USB设备回答,以读取全部配置信息。
10.主机发送Get_Device_String命令,获得描述字符集(unicode)
描述字符集包括了产商、产品描述、型号等信息。
11.主机展示新设备信息
此时主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。
12.PC判断能否提供该类USB的驱动
根据Device_Descriptor和Device_Configuration应答,PC判断是否能够提供USB的Driver,一般win2k能提供几大类的设备,如游戏操作杆、存储、打印机、扫描仪等,操作就在后台运行。
但是Win98却不可以,所以在此时将会弹出对话框,索要USB的Driver。
13.主机发送Set_Configuration(x)命令,请求为设备选择一个配置
加载了USB设备驱动以后,主机发送Set_Configuration(x)命令请求为该设备选择一个合适的配置(x代表非0的配置值)。
如果配置成功,USB设备进入“配置”状态,并可以和客户软件进行数据传输。
此时,常规的USB完成了其必须进行的配置和连接工作。
查看注册表,能够发现相应的项目已经添加完毕,至此设备应当可以开始使用。
不过,USB协议还提供了一些用户可选的协议,设备如果不应答,也不会出错,但是会影响到系统的功能。
剖析
1.主机集线器检测到新设备
主机集线器监视着每个端口的信号电压,当有新设备接入时USB枚举详细过程剖析
1.主机集线器检测到新设备
主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。
(集线器端口的两根信号线的每一根都有15kΩ的下拉电阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。
当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此被主机集线器检测到。
)
2.主机发送Get_Status请求
每个集线器用中断传输来报告在集线器上的事件。
当主机知道了这个事件,它给集线器发送一个Get_Status请求来了解更多的消息。
返回的消息告诉主机一个设备是什么时候连接的。
3.主机发送Set_Feature请求,集线器重启端口
当主机知道有一个新的设备时,主机给集线器发送一个Set_Feature请求,请求集线器来重启端口。
集线器使得设备的USB数据线处于重启(RESET)状态至少10ms。
4.集线器在设备和主机之间建立一个信号通路
主机发送一个Get_Status请求来验证设备是否激起重启状态。
返回的数据有一位表示设备仍然处于重启状态。
当集线器释放了重启状态,设备就处于默认状态了,设备已经准备好通过Endpoint0的默认流程响应控制传输,即设备现在使用默认地址0x0与主机通信。
5.集线器检测设备速度
集线器通过测定哪根信号线(D+或D-)在空闲时有更高的电压来检测设备是低速设备还是全速设备。
(全速和高速设备D+有上拉电阻,低速设备D-有上拉电阻)。
以下需要USB的firmware进行干预。
6.获取最大数据包长度
PC向address0发送USB协议规定的Get_Device_Descriptor命令,以取得缺省控制管道所支持的最大数据包长度,并在有限的时间内等待USB设备的响应。
该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8个字节。
注意,主机一次只能枚举一个USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。
以下操作雷同,不同操作系统设定时延是不一样的,比如说win2k大概是几毫秒,如果没有反应就再发送一次命令,重复三次。
7.主机分配一个新的地址给设备
主机通过发送一个Set_Address请求来分配一个唯一的地址给设备。
设备读取这个请求,返回一个确认,并保存新的地址。
从此开始所有通信都使用这个新地址。
8.主机重新发送Get_Device_Descriptor命令,读取完整设备描述符
主机向新地址重新发送Get_Device_Descriptor命令,此次读取其设备描述符的全部字段,以了解该设备的总体信息,如VID,PID。
9.主机发送Get_Device_Configuration命令,获取完整配置信息
主机向设备循环发送Get_Devi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 资料