当前位置:文档之家› 嵌入式USB主机

嵌入式USB主机

嵌入式USB主机
嵌入式USB主机

嵌入式系统TCP/IP网络解决方案

嵌入式USB主机

陈智荣(研04)温英林张辉勇

摘要:本文以一个实际USB设备枚举的数据过程,讲述了USB协议中的一些关键概念和重要的数据结构、时序;在此基础上,简单介绍本系统的硬件设计,然后围绕如何实现USB设备枚举,从底层到高层详细地介绍了本系统的软件设计。

关键词:USB主机 SL811HS 51单片机枚举嵌入式

1.前言

USB(通用串行总线)是最近几年逐步在PC领域广为应用的新型接口技术。USB接口通用性好、实时性强、传输方式多样、成本低、易于扩展且便于使用,这些优点使它受到许多硬件厂商的青睐,其相关设备种类越来越多,数量越来越大。

然而,USB的拓扑结构中居于核心地位的是主机,任何一次USB的数据传输都必须由主机来发起和控制,所有的USB外设都只能和主机建立连接,任何两个外设之间无法直接通信。目前,大量扮演主机角色的是个人电脑PC机。目前使用的USB移动设备,如U盘,MP3随身听,USB接口的移动硬盘、移动光驱及数码相机等等,都只能在PC机上使用,只能通过PC机来进行数据传输和文件交换,这无疑给USB移动设备的应用带来了局限性。

因此,如果能抛开PC机,使用轻便、廉价的设备就能读写操作USB外设,这将拓宽USB 接口的应用范围,使人们享受更多更方便的USB接口电子产品。本设计使用51系列单片机对USB主机接口芯片SL811HS进行控制,实现了USB主机的一项重要功能:枚举USB设备。

2.关于USB协议

在本设计中,由于采用了USB主机的接口芯片,所以不需要详细了解USB传输的底层物理特性,但必须深入理解USB的数据传输的协议层,具体来说,就是USB传输中数据包,数据字段的格式和时序是如何的。

2.1设备的枚举

主机对USB设备的枚举指的是主机对设备的检测和配置。

在说明主机的枚举功能前,需要说明一下USB传输的数据基本结构和格式。

从表1可见,在USB的数据传输中:

主要有四种传输事务类型(控制、批量、中断、同步),而主机枚举设备的功能是只需要通过控制传输实现的。

控制传输有三个传输阶段(建立、数据、状态,其中数据阶段是可选的)。

每个传输阶段又由三个包组成(令牌包、数据包、握手包、特殊包)。

表 1 USB传输的数据基本结构和格式

其中,包是由域来组成的,共有7种域,每种域的子类型如下表所列:

表 2 域和域的子类型

其中,同步域的实际二进制编码为”_0000 0001”;另外,每个包是以SE0态作为结束标志的。

下面,就以一个实际设备枚举的全过程为例,说明USB数据传输的一些具体细节(在这里,将不列出每个包的同步域和结束标志)。

2.1.1主机检测到有设备插上,总线复位

当设备与主机连接时,主机就会检测到一个连接条件(USB接口芯片向CPU发出中断请求),主机就开始进行总线复位(主机强制输出SE0,即强制把D+和D-两信号线拉为低电平)。

嵌入式系统TCP/IP网络解决方案

2.1.2主机第一次读取设备描述符

主机使用默认地址(地址0)读取设备描述符,如表3所示。

表 3 主机第一次读取设备描述符

阶段包序号

(包类

型)

数据内容

建立包#1

(令牌

包)

主机向默认地址(地址0)设备发送建立包

SETUP ADDR ENDP CRC5

0xB4 0x00 0x0 0x08

包#2

(数据

包)

主机发出建立阶段的数据包(请求获取设备描述符GET_DESCRIPTOR)

DATA0 DATA CRC16

0xC3 80 06 0001 0000 4000 0xBB29 包#3

(握手

包)

设备应答

ACK

0x4B

数据包#4

(令牌

包)

主机读取数据

IN ADDR ENDP CRC5

0x96 0x00 0x0 0x0B

包#5

(数据

包)

设备返回设备描述符

DATA1 DATA CRC16

0xD2

12 01 0001 DC 00 00 10 7104 6606 0001 00

00

0x42C6

包#6

(握手

包)

主机应答

ACK

0x4B

状态包#7

(令牌

包)

主机发送状态响应

OUT ADDR ENDP CRC5

0x87 0x00 0x0 0x08

包#8

(数据

包)

主机发送0字节数据作状态响应

DATA1 DATA CRC16

0xD2

0x000

包#9

(握手

包)

设备应答

ACK

0x4B

其中,包#2中的DATA含义如下:

bmRequestType=0x80:所请求数据将是从设备传到主机;标准请求命令;该命令接受者为设备

bRequest=0x06:请求命令代码是GET_DESCRIPTOR

wValue=0x0001:描述符索引值=0x00;描述符编号=0x01

wIndex=0x0000:接收者为设备,所以此字段为0

wLength=0x4000:要求设备返回的数据长度

2.1.3地址分配

在地址分配事务中,主机分配给设备一个地址,如表4所示,分配的地址为0x02,在以后的通信里,设备就只对0x02地址的信息作出应答,而把0地址让出来。

从这个地址分配事务中也可见,控制传输的数据状态是可选的。

表 4 地址分配

阶段包序号

(包类

型)

数据内容

建立包#10

(令牌

包)

主机向默认地址(地址0)设备发送建立包

SETUP ADDR ENDP CRC5

0xB4 0x00 0x0 0x08

包#11

(数据

包)

主机发出建立阶段的数据包(请求设置设备的地址)

DATA0 DATA CRC16

0xC3 00 05 02 00 00 00 00 00 0xD768 包#12

(握手

包)

设备应答

ACK

0x4B

状态包#13

(令牌

包)

主机要求读取传输状态

IN ADDR ENDP CRC5

0x96 0x00 0x0 0x08

包#14

(数据

包)

设备返回0字节数据作状态响应

DATA1 DATA CRC16

0xD2

0x000

包#15

(握手

包)

主机应答

ACK

0x4B

2.1.4主机从新的地址获取设备描述符(第二次读取设备描述符)

分配好地址后,主机就从新的地址获取设备描述符,如表5所示。由于设备返回的第一

嵌入式系统TCP/IP网络解决方案

个设备描述符中声明了该设备的端点0最大包尺寸为16个字节(0x10),所以设备分2次把设备描述符经过端点0发送出去,第一次发送16个字节,第二次发送2个。最后主机发送0字节的数据包给设备作为传输装态应答。

表 5 主机从新的地址获取设备描述符(第二次读取设备描述符)

阶段包序号

(包类

型)

数据内容

建立包#16

(令牌

包)

主机向新的地址(地址0x02)设备发送建立包

SETUP ADDR ENDP CRC5

0xB4 0x02 0x0 0x15

包#17

(数据

包)

主机发出建立阶段的数据包(请求获取设备描述符GET_DESCRIPTOR)

DATA0 DATA CRC16

0xC3 80 06 0001 0000 1200 0x072F 包#18

(握手

包)

设备应答

ACK

0x4B

数据包#19

(令牌

包)

主机读取数据

IN ADDR ENDP CRC5

0x96 0x02 0x0 0x15

包#20

(数据

包)

设备返回设备描述符(前16个字节)

DATA1 DATA CRC16

0xD2

12 01 0001 DC 00 00 10 7104 6606 0001 00

00

0x42C6

包#21

(握手

包)

主机应答

ACK

0x4B

数据包#22

(令牌

包)

主机读取数据

IN ADDR ENDP CRC5

0x96 0x02 0x0 0x15

包#23

(令牌

包)

设备返回设备描述符(后2个字节)

DATA0 DATA CRC16

0xC3 0019 0FCA1 包#24

(令牌

包)

主机应答

ACK

0x4B

状态包#25

(令牌

包)

主机发送状态响应

OUT ADDR ENDP CRC5

0x87 0x02 0x0 0x15

包#26

(数据

包)

主机发送0字节数据作状态响应

DATA1 DATA CRC16

0xD2

0x000

包#27

(握手

包)

设备应答

ACK

0x4B

2.1.5主机读取配置描述符

主机读取完设备描述符后就读取设备的配置描述符,如表6所示:

表 6 主机读取配置描述符

阶段包序号

(包类

型)

数据内容

建立包#1

(令牌

包)

主机向默认地址(地址0)设备发送建立包

SETUP ADDR ENDP CRC5

0xB4 0x02 0x0 0x15

包#2

(数据

包)

主机发出建立阶段的数据包(请求获取设备描述符GET_DESCRIPTOR)

DATA0 DATA CRC16

0xC3 80 06 0002 0000 0900 0x7520 包#3

(握手

包)

设备应答

ACK

0x4B

数据包#4

(令牌

包)

主机读取数据

IN ADDR ENDP CRC5

0x96 0x02 0x0 0x15

包#5

(数据

包)

设备返回设备描述符

DATA1 DATA CRC16

0xD2 09 02 2E 00 01 01 00 60 01 0xA01E 包#6

(握手

包)

主机应答

ACK

0x4B

嵌入式系统TCP/IP网络解决方案

状态包#7

(令牌

包)

主机发送状态响应

OUT ADDR ENDP CRC5

0x87 0x02 0x0 0x15

包#8

(数据

包)

主机发送0字节数据作状态响应

DATA1 DATA CRC16

0xD2

0x000

包#9

(握手

包)

设备应答

ACK

0x4B

2.1.6主机读取描述符集合

主机除了读取设备描述符和配置描述符外,还有读取接口描述符和端点描述符。在这里主机使用再次读取配置描述符的方法来实现。注意这里请求的字节数为0xff,如表7所示。

表 7 主机读取描述符集合(配置、接口、端点描述符)

阶段包序号

(包类

型)

数据内容

建立包#16

(令牌

包)

主机向新的地址(地址0x02)设备发送建立包

SETUP ADDR ENDP CRC5

0xB4 0x02 0x0 0x15

包#17

(数据

包)

主机发出建立阶段的数据包(请求获取设备描述符GET_DESCRIPTOR)

DATA0 DATA CRC16

0xC3 80 06 0002 0000 FF00 0x9725 包#18

(握手

包)

设备应答

ACK

0x4B

数据包#19

(令牌

包)

主机读取数据

IN ADDR ENDP CRC5

0x96 0x02 0x0 0x15

包#20

(数据

包)

设备返回设备描述符(第一组16个字节)

DATA1 DATA CRC16

0xD2

09 02 2E 00 01 01 00 60 01 09 04 00 00 04

DC A0

0x5C5E

包#21 (握手包)主机应答ACK

0x4B

数据包#22

(令牌

包)

主机读取数据

IN ADDR ENDP CRC5

0x96 0x02 0x0 0x15

包#23

(令牌

包)

设备返回设备描述符(第二组16个字节)

DATA0 DATA CRC16

0xC3

B0 00 07 05 81 03 04 00 0A 07 05 01 03 04

00 0A

0A1BF 包#24

(令牌

包)

主机应答

ACK

0x4B

数据包#22

(令牌

包)

主机读取数据

IN ADDR ENDP CRC5

0x96 0x02 0x0 0x15

包#22

(令牌

包)

设备返回设备描述符(剩余字节)

DATA0 DATA CRC16

0xD2 07 05 82 02 40 00 0A 07 05 02 02 40 00 0A 0xC515 包#22

(令牌

包)

主机应答

ACK

0x4B

状态包#25

(令牌

包)

主机发送状态响应

OUT ADDR ENDP CRC5

0x87 0x02 0x0 0x15

包#26

(数据

包)

主机发送0字节数据作状态响应

DATA1 DATA CRC16

0xD2

0x000

包#27

(握手

包)

设备应答

ACK

0x4B

2.1.7主机设置配置

主机读取完描述符后,就需要对设备进行配置,使得设备从地址状态进入配置状态,如下表8所示:

嵌入式系统TCP/IP 网络解决方案

表 8 主机设置配置

包序号 (包类型)

数据内容

包#10 (令牌包) 主机向0x02地址发送建立包 SETUP ADDR ENDP CRC5

0xB4

0x02

0x0

0x15

包#11 (数据包)

主机发出建立阶段的数据包(请求设置配置) DATA0 DATA

CRC16 0xC3 00 09 01 00 00 00 00 00

0xE4A4

包#12 (握手包) 设备应答

ACK 0x4B

包#13 (令牌包)

主机要求读取传输状态 IN ADDR ENDP CRC5

0x96

0x02

0x0

0x15

包#14 (数据包)

设备返回0字节数据作状态响应

DATA1 DATA CRC16

0xD2

0x0000

包#15 (握手包)

主机应答 ACK 0x4B

2.1.8主机读取配置状态

主机设置完配置后,设备就可以使用。主机有时会对设备的配置状态进行读取,其工作数据如表9所示。

表 9 主机读取配置状态

包)0xC3 80 08 00 00 00 00 01 00 0xFC23

包#18 (握手包)设备应答ACK

0x4B

数据包#19

(令牌

包)

主机读取数据

IN ADDR ENDP CRC5

0x96 0x02 0x0 0x15

包#20

(数据

包)

设备返回设备配置(设备配置值)

DATA1 DATA CRC16

0xD2 01 0x81FE 包#21

(握手

包)

主机应答

ACK

0x4B

状态包#25

(令牌

包)

主机发送状态响应

OUT ADDR ENDP CRC5

0x87 0x02 0x0 0x15

包#26

(数据

包)

主机发送0字节数据作状态响应

DATA1 DATA CRC16

0xD2

0x000

包#27

(握手

包)

设备应答

ACK

0x4B

2.1.9主机读取接口状态

在配置完成后,主机会对接口的状态进行读取,这和读取配置一样也是可选的,其数据传输如表10所示。

表 10 主机读取接口状态

阶段包序号

(包类

型)

数据内容

建立包#16

(令牌

包)

主机向地址0x02设备发送建立包

SETUP ADDR ENDP CRC5

0xB4 0x02 0x0 0x15

嵌入式系统TCP/IP网络解决方案

包#17 (数据包)主机发出建立阶段的数据包(请求获取接口状态)

DATA0 DATA CRC16 0xC3 81 0A 00 00 00 00 01 00 0xBB13

包#18 (握手包)设备应答ACK

0x4B

数据包#19

(令牌

包)

主机读取数据

IN ADDR ENDP CRC5

0x96 0x02 0x0 0x15

包#20

(数据

包)

设备返回接口状态(接口描述符编号)

DATA1 DATA CRC16

0xD2 00 0x02FD 包#21

(握手

包)

主机应答

ACK

0x4B

状态包#25

(令牌

包)

主机发送状态响应

OUT ADDR ENDP CRC5

0x87 0x02 0x0 0x15

包#26

(数据

包)

主机发送0字节数据作状态响应

DATA1 DATA CRC16

0xD2

0x000

包#27

(握手

包)

设备应答

ACK

0x4B

3.关于SL811HS接口芯片

SL811HS是Cypress公司的嵌入式主机或外设接口控制器,支持USB1.1的全速和低速设备,提供USB主机的硬件接口及总线管理的物理机制,带有在片的SIE、USB发送器、256字节RAM以及在片的根集线器。除了8位的数据/地址总线外,有读、写、片选、复位及中断输出信号端口,控制方便。

4.嵌入式USB主机设计

4.1硬件设计

选用廉价的51系列单片机(89C52)控制USB主机接口芯片SL811HS,同时,通过MAX232芯片与PC机通信。硬件接线示意图如下所示:

图 1 硬件接线示意图

4.2软件设计

下面将从底层到高层详细地介绍本系统的软件设计。

4.2.1单片机读写SL811HS

4.2.1.1读取SL811HS内存的数据

根据SL811HS的读写时序要求,读取数据前首先发送地址:

void SetHostAddress(char AddressP)

{

P_BUS=AddressP;/*数据总线发送地址,但此时地址还不会被SL811HS接收*/

P_CTRL=0x90;/*设置总线控制信号为SL811HS接收地址信号,具体含义如下所示:*/ /*P_CTRL ;0x90, 98, F0

P_CTRL.0 ; - - -

P_CTRL.1 ; - - -

P_CTRL.2 ; - - -

A0 ; 0 1 0

nRST ; 1 1 1

nCS ; 0 0 1

nWR ; 0 0 1

nRD ; 1 1 1 */

nWR=1;

nCS=1; /*地址传输完毕后,关闭片选、写等信号*/

P_CTRL=0xF0;

}

地址发送完毕之后,SL811HS就接到了需要读取的内存单元地址(包括寄存器的地址)。紧接着单片机就可以读取数据:

unsigned char HostRead(void)

{

嵌入式系统TCP/IP网络解决方案

A0=1; /* 满足SL811HS的时序要求,先保证A0和nCS的有效*/

NCS=0;

P_CTRL=0x58; /*设置控制位信号,读取SL811HS内的数据*/

/*P_CTRL ;0x90, 58, F0

P_CTRL.0 ; - - -

P_CTRL.1 ; - - -

P_CTRL.2 ; - - -

A0 ; 0 1 0

nRST ; 1 1 1

nCS ; 0 0 1

nWR ; 0 1 1

nRD ; 1 0 1 */

return P_BUS; /*函数返回读取的SL811HS内存的数据*/

}

4.2.1.2写入数据到SL811HS内存

与读数据类似,单片机要往SL811HS的内存单元写数据时,也要首先发送地址,然后再发送要写入的数据。为了简便起见,写数据过程中发送地址和数据的功能都放在一个函数中执行。

Void HostWrite(char HostWriteAddress, char WriteConstent)

{ /*参数HostWriteAddress输入要写入数据的SL811HS内存的地址,WriteConstent为要写入的地址*/

P_BUS=HostWriteAddress; /*准备好需要发送的地址*/

P_CTRL=0x90;

/*P_CTRL ;0x90, 98, F0

P_CTRL.0 ; - - -

P_CTRL.1 ; - - -

P_CTRL.2 ; - - -

A0 ; 0 1 0

nRST ; 1 1 1

nCS ; 0 0 1

nWR ; 0 0 1

nRD ; 1 1 1 */

nWR=1;

nCS=1;

P_BUS=WriteContent; /*准备好需要发送的数据*/

P_CTRL=0x98; /*重新安排好控制信号,发送数据*/

P_CTRL=0xF4;

}

4.2.1.3读写批量数据

有时单片机和SL811HS之间要进行批量数据的传输,为方便操作,设计了能够批量进行数据读或写的函数:

/*批量写*/

void HostBulkWrite(char addr, unsigned char *s, char c)

{ /*参数addr为SL811HS中写入数据的起始地址,*s为单片机内存放的需要写入的数据缓冲区,c为总共要写入的字节数*/

if(c<=0) return;

while(c--)

{

HostWrite(addr++,*s++);

}

}

/*批量读*/

void HostBulkRead(char addr, unsigned char *s, char c)

{ /*参数addr为SL811HS中读取数据的起始地址,*s为单片机内存放读取来的数据的数据缓冲区,c为总共要读入的字节数*/

if(c<=0) return;

while(c--)

{

SetHostAddress(addr++);

*s++=HostRead();

}

}

4.2.2阶段USB传输的实现

4.2.2.1 SL811HS的初始化

初始化主要是对SL811HS的部分内部寄存器进行设置:

Void SL811HS_Init(void)

{

HostWrite(IntEna,0x20);

HostWrite(CSOFcnt, 0xAE);

HostWrite(CtrlReg, 0x08);

HostWrite(CtrlReg, 0x00);

HostWrite(CSOFcnt, 0xAE);

HostWrite(CtrlReg, 0x08);

DelayMs(10);

HostWrite(CtrlReg, 0x00);

DelayMs(1);

HostWrite(IntStatus, 0xFF);

}

4.2.2.2三种阶段USB传输的实现

三种阶段USB传输都可以由这个函数(下称“阶段传输实现函数”)实现:

void USB_Transaction(unsigned char PID, unsigned char EP_Address, unsigned char Address, int Length, char *pDataBuf);

嵌入式系统TCP/IP网络解决方案

4.2.2.2.1发送或接收前的准备工作

4.2.2.2.1.1设置EP0Status寄存器

本设计涉及到了多种阶段的USB传输,但这里需要考虑的只有3种,分别是建立(SETUP)、数据输入(IN)和数据输出(OUT)阶段。阶段传输实现函数的输入参数中,PID就是用来区别这3种传输阶段。

#define PID_SETUP 0x2D

#define PID_IN 0x69

#define PID_OUT 0xE1

阶段传输实现函数的第二个需要输入的参数就是端点号EP_Address,大小为1字节(实际只有低4位有效,高4位为0),类型为unsigned char 。U盘等类似的USB Mass Storage 类设备一般具有3个端点:一个是端点0,用于处理控制传输;另一个是批量输出Bulk_OUT 端点,该端点用于接收主机发来的批量数据,端点号有设备定义;还有一个就是批量输入Bulk_IN端点,用于给÷向主机发送批量数据,其端点号也由设备定义。

从硬件角度来讲,程序需要把PID和EP_Address组合在一起后写入EP0Status寄存器。unsigned char PID_EPA; /*用于储存PIN和EP_Address的组合值*/

PID_EPA=PID&0x0F; /*PID的高4位位校验码,低4位为有效值*/

PID_EPA=(PID_EPA<<4)+EP_Address; /*按照EP0Status寄存器的要求合并PID和EP_Address*/

HostWrite(EP0Status,PID_EPA);

4.2.2.2.2设置EP0Counter寄存器

阶段传输实现函数的第三个需要输入的参数是设备的地址Address,大小为1字节,类型为unsigned char。

HostWrite(EP0Counter,Address);/*设备地址的D7位值为0,D6~D0位代表地址*/

4.2.2.2.3设置EP0XferLen寄存器

第四个参数是发送或接收的数据的长度Length,大小为2字节,类型为int。这个长度还需要和相应端点的最大包尺寸MaxPacketSize进行比较。如果Length小于MaxPacketSize,就说明需要发送或接收的数据长度比相应端点的最大包尺寸还小,因此,主机和该端点之间只要进行一次数据传输就可以实现数据的发送或接收。反之,如果Length 大于MaxPacketSize,那么就需要将发送或接收的数据进行分割,第一批发送或接收的数据长度就是MaxPacketSize,剩下的数据就利用 SL811HS的“乒乓”机制进行发送。最后需要把实际要发送的数据长度写入SL811HS的EP0XferLen寄存器中。

/*定义变量CurentLength,用于保存当前需要发送的数据长度*/

if(Length>MaxPacketSize)

{

CurrentLength=MaxPacketSize;

}

else

CurrentLength=Length;

HostWrith(EP0XferLen,(unsigned char)CurrentLength);/*注意这里的变量类型转换*/ 4.2.2.2.4设置EP0Address寄存器

最后一个需要确定是发送或接收数据的缓冲地址*pDataBuf,大小为1字节。

在这里pDataBuf是指向单片机内存单元的指针,但实际读写数据是要以SL811HS的数据缓冲区作为中介的。

为加快数据传输,把SL811HS的数据缓冲区分成两部分:SL811HS_Buf0和SL811HS_Buf1。SL811HS_Buf0的起始地址就可以定为0x10。而SL811HS_Buf1的地址就根据端点最大包尺寸进行调整。

Unsigned char SL811_HS_Buf0 =0x10, SL811HS_Buf1;

If(Length>MaxPackeSize)

{

SL811HS_Buf1= SL811HS_Buf0+MaxPacketSize;

}

HostWrite(EP0Address, SL811HS_Buf0);/*当前数据发送从SL811HS_Buf 0开始*/ 如果主机要发送数据给设备,就需要把*pDataBuf中的数据复制到SL811HS的数据缓冲区中:

HostBulkWrite(SL811HS_Buf0,pDataBuf,CurrentLength);

如果是主机接收数据,那么在以下的处理中,就会把SL811HS缓冲区中的接收到的设备的数据通过HostBulkRead()函数复制到单片机的缓冲区中。

HostBulkRead(SL811HS_Buf0,pDataBuf,CurrentLength);

4.2.2.2.5启动发送或接收

启动USB数据的发送或接收实际上是通过向SL811HS的EP0Control寄存器发送命令字CmdWord来实现的。

首先,PID等参数的不同,CmdWord的值也不同,根据EP0Control寄存器每一位的属性,有如下配置程序:

unsigned char CmdWord;

if(PID==PID_SETUP)

{

CmdWord=0x03; /*控制传输的SETUP事务*/

}

else

{

if(EP_Address==0)

{

if(PID==PID_IN)

{

CmdWord=0x47; /*控制传输的输入IN事务*/

}

else

{

CmdWord=0x43; /*控制传输的OUT事务*/

}

}

else

嵌入式系统TCP/IP网络解决方案

{

if(PID==PID_IN)

{

CmdWord=0x07; /*批量传输IN事务*/

}

else

{

CmdWord=0x03; /*批量传输OUT事务*/

}

}

}

将CmdWord命令字发送到SL811HS的EP0Control寄存器后,就启动了数据包的发送或接收了:

HostWrite(IntStatus, 0xFF); /*清除中断状态位*/

HostWrite(EP0Control, CmdWord);

剩下的工作就是查询SL811HS的IntStatus寄存器,以查看发送或接收的完成情况,有需要时,最后还可以查看EP0status获取握手包的有关信息,但其实所有的握手包信息都是有硬件自动完成的。

4.2.3事务USB传输的实现

4.2.3.1控制传输

包含了三个阶段:建立阶段、可选数据阶段以及状态阶段。

Void Control_Transfer(pRequestCMD RequestCMD, unsigned char* pDataBuf_x);

4.2.3.1.1建立阶段的实现

任务就是发送建立的8字节请求命令,命令的数据结构为(注意该段定义是放在Control_Transfer()函数之外的):

typedef struct{

unsigned char bmRequest Type;

unsigned char bRequest;

unsigned int wValue;

unsigned int wIndex;

unsigned int wLength;

}REQUESTCMD,*pRequestCMD;

在这里只需调用一次USB_Transaction()函数即可:

USB_Transaction(PID_SETUP, 0 , Device_Address, 0x08, (char *)RequestCMD);

/*发送的令牌为PID_SETUP,端点号为0,设备地址为Device_Address,发送数据长度为8字节,发送内容为相应的请求命令*/

4.2.3.1.2可选数据阶段的实现

注意数据传输方向,实现过程如下:

if(RequestCMD->wLength)

{

if(RequestCMD->bmRequestType & 0x80) /*判断为PID_OUT*/

{

USB_Transaction(PID_OUT, 0, Device_Address, RequestCMD->wLength, pDataBuf_x);

}

else /*判断为PID_IN*/

{

USB_Transaction(PID_IN, 0, Device_Address, RequestCMD->wLength, pDataBuf_x);

}

}

4.2.3.1.3状态信息阶段的实现

在需要时(如可选数据阶段为IN),主机发送控制传输的状态信息:

USB_Transaction(PID_OUT, 0, Device_Address, 0, pDataBuf_x);

4.2.3.2批量传输

类似与控制传输中的可选数据阶段,有两个函数,分别对应于批量传输IN和批量传输OUT:

void Bulk_Transfer_IN(int Length_bi, unsigned char* pDataBuf_bi)

{

USB_Transaction(PID_IN,EP_Bulk_IN,Device_Address, Length_bi, pDataBuf_bi); }

void Bulk_Transfer_OUT(int Length_bo, unsigned char* pDataBuf_bo)

{

USB_Transaction(PID_OUT,EP_Bulk_OUT,Device_Address, Length_bi, pDataBuf_bo); }

4.2.4 USB设备枚举的实现

现在,各种枚举所需的传输实现函数已经好了,要实现USB请求动作进而实现设备枚举是很容易的了。下面是两个典型请求动作的实现函数:

/*获取描述符请求命令*/

void Get_Descriptor(unsigned int wValue_d, unsigned char Length_d, unsigned char * pDataBuf_d)

{

REQUESTCMD RequestCMD; /*建立该请求命令的结构*/

RequestCMD.bmRequestType=0x80; /*填入该请求命令的内容*/

RequestCMD.bRequest=GET_DESCRIPTOR;

RequestCMD.wValue=wValue_d;

RequestCMD.wIndex=0;

RequestCMD.wLength=Length_d;

Control_Transfer(&RequstCMD,pDataBuf_d);

}

嵌入式系统TCP/IP网络解决方案

/*设置设备地址请求命令*/

void Set_Address(unsigned int Device_address_e)

{

REQUESTCMD RequestCMD; /*建立该请求命令的结构*/

RequestCMD.bmRequestType=0x00; /*填入该请求命令的内容*/

RequestCMD.bRequest=SET_ADDRESS;

RequestCMD.wValue=w Device_address_e;

RequestCMD.wIndex=0;

RequestCMD.wLength=0;

Control_Transfer(&RequstCMD,0);

}

5.结语

本设计使用廉价的51系列单片机实现了USB主机的一项重要功能:枚举USB设备(U 盘),并且本系统可以通过与PC机连接实现对枚举过程的观测和对系统运作的监控。在本系统的基础上增加信号输入或输出的外围电路后,可以实现现场数据采集、存储或可编程现场控制等功能。另外,由于软件是使用高级语言编写的,所以便于把源程序移植到其他微控制器、微处理器上,为进一步深入开发(如采用复杂微处理器,使用嵌入式操作系统)作了很好的铺垫。

参考文献:

[1] 马伟编著:《计算机USB系统原理及其主/从机设计》,北京,北京航空航天大学出版社,2004

[2] USB Implementer’s Forum. USB Specification Rev1.1 https://www.doczj.com/doc/b98529173.html,,1998

[3] USB Implementer’s Forum. USB Specification Rev2.0 https://www.doczj.com/doc/b98529173.html,,1998

[4] SL811HS Enbedded USB Host/SlaveController Data Sheet.Cypress Semiconductor Corporation.2002

[5] Jan Axelson :《USB大全》,陈逸等译,北京,中国电力出版社,2001

三级嵌入式系统

三级嵌入式系统学习总结 一第一章 1.嵌入式系统概论 嵌入式系统中的软件一般都固化在只读存储器中,用户不能随意更改其中的程序功能。 嵌入式系统的逻辑组成:1)处理器2)存储器3)I/O设备与I/O接口4)数据总线5)软件 嵌入式处理芯片有四种类型:1)微处理器2)数字信号处理器3)微控制器(单片机)4)片上系统 微控制器MCU的低端产品并不会因为高端产品的出现而衰落 在32位MCU中,绝大多数使用RAM内核 EDA:电子设计自动化 IP核可以分为三种:软核、硬核、固核 2.嵌入式系统与数字媒体 计算机中常用的最广泛的西文字符及其编码是ASCII字符集和ASCII码,即美国标准信息交换码,共有128个字符,一个字符占一个字节。 我国目前广泛使用的汉字编码国家标准有GB2312和GB18030 GB2312只有6763个汉字,不够用 GB18030字符集与国际标准UCS/Unicode字符集基本兼容。GB18030采用不等长的编码方法,单字节编码表示ASCII码,双字节编码表示汉字,与GB2312保持向下兼容,四字节编码表示其他字符 Unicode最新版本是6.3。UCS/Unicode在计算机中具体实现时采用不同的编码方案,最常用的是UTF-8和UTF-16,UTF-8采用的是单字节可变长编码;UTF-16采用的是双字节可变长编码 文本的类型可以分为简单文本、丰富格式文本、超文本 图像的数据量=图像水平分辨率*图像垂直分辨率*像素深度/8(像素深度指的是每个像素用多少个二进制数来表示) 数字视频的数据量非常大,在进行传输时必须进行压缩,压缩编码标准是国际标准化组织(ISO)制定的,其名称为MPEG。 无线局域网采用的协议主要是IEEE 802.11(俗称WIFI) 3.数字通信与计算机网络 微波是一种300MHz-300GHz的电磁波 计算机网络的组成:1)计算机等智能电子设备2)数据通信链路3)通信协议4)网络软件 以太局域网: 1)发送数据设备必须把要传输的数据分成小块(帧)进行传输,一次只能传输1帧; 2)局域网中的每一个终端都有自己唯一的标识,称为物理地址或MAC地址,在发送的每一帧数据中,必须包含自己的MAC地址和接收终端的MAC地址 3)IP协议定义了主机的概念,所有主机及使用一种统一格式的地址标识,称为IP地址。4)以太局域网大多是由集线器或者交换机组网 计算机网络的类型:1)局域网2)城域网2)广域网 IP地址分为A、B、C三类。 IP是由四段数字组成,共32位,8位一段。 A类IP段0.0.0.0 到127.255.255.255 (0段和127段不使用)

嵌入式系统原理与接口复习要点及思考题答案(计)

各位:根据掌握要点认真复习,后面附有作业题答案。 第1章掌握要点 1.1.1节嵌入式系统的概念 1.1.3节嵌入式系统的特点 1.3节嵌入式处理器 1.4节嵌入式系统的组成(看课件,有补充的内容) 补:1.嵌入式系统开发过程? 2.嵌入式系统调试常用的基本方法 3.交叉编译和交叉调试 4.嵌入式操作系统 第2章掌握要点 2.1节计算机体系结构分类 2.3.1节 ARM和Thumb状态 2.3.2节 RISC技术 2.3.3节流水线技术 2.4.1 ARM存储系统 2.4.2 Cache:写通、写回、读操作分配cache、写操作分配cache、工作原理、地址映像 2.4.3节 ARM存储系统 补充: (见课件) 1. ARM简介:ARM的命名方式、5种变形

2.理解片内Flash的3种编程方法。 3.理解ARM7芯片存储器存储空间分布。(8个bank,每个bank32MB)第3章掌握要点 3.1节ARM编程模式:处理器模式、处理器工作状态、寄存器组织、 异常中断 3.2节指令格式和寻址方式 3.3节指令系统:掌握和熟练应用课件所讲的指令、可编程序段 第5章掌握要点 5.1节键盘接口:行扫描法原理、掌握编写驱动程序 5.2节 LED显示器接口:理解工作原理,掌握编写驱动程序 5.5.1节 UART异步串行接口:异步通信格式、接收的4种错误类型、初始化、发送程序、接收程序 第1章作业题答案: 1.什么是嵌入式系统? ?第一种,根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。 ?第二种,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专 用计算机系统。

嵌入式系统与接口技术-复习资料

一、单项选择题 1. 下面哪个系统属于嵌入式系统() A、“天河一号”计算机系统 B、联想T400笔记本计算机 C、联想S10上网本 D、苹果IPhone手机 2. 下面关于哈佛结构描述正确的是() A、程序存储空间与数据存储空间分离 B、存储空间与IO空间分离 C、程序存储空间与数据存储空间合并 D、存储空间与IO空间合并 3. 下面哪一种工作模式不属于ARM特殊模式的是() A、用户模式B、管理模式C、软中断模式D、FIQ模式 4. 下面哪个系统不属于嵌入式系统() A、MP3播放器B、GPS接收机 C、“银河玉衡”核心路由器 D、“天河一号”计算机系统 5. A RM(Advanced RISC Machines)既可以认为是一个公司的名字,也可以认为是对一种微 处理器体系结构的通称。1990年11月ARM公司成立于英国剑桥,设计了大量高性能、廉价、耗能低的( )处理器。 A.RISC B.CISC C.MISC D.SISC 6. 在计算机体系结构中,( )表示每条计算机指令执行所需的时钟周期。 A.时钟周期(节拍) B.机器周期 C.CPI D.总线周期 7. 下面异常中,优先级最高的是( )。 A.数据中止 B.复位 C.未定义指令 D.预取中止 8. ( )指令集支持ARM核所有的特性,具有高效、快速的特点。 A.ARM B.Thumb C.Mics D.AAC 9. ()带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个 字节,可以像其他SRAM存储器那样与微处理器连接。 A.NAND Flash B.NOR Flash C.EPROM D.EEPROM 10. ( ) 使得几个指令可以并行执行。 A.超标量(Superscalar)技术 B.流水线(Pipeline) 技术 C.高速缓存(Cache)技术 D.软内核技术 11. Cache结构中,数据和指令都放在同一个Cache中,称为()。 A.普林斯顿结构 B. 梅普结构 C.哈佛结构 D.哈林结构 12. 关于ARM处理器的异常描述不正确的是() A. 复位属于异常 B. 除数为0会引起异常 C. 所有异常都要返回 D. 外部中断会引起异常 13. 下面哪个信号低电平时请求存储器访问信号() A. nWAIT B. nRESET C. nOPC D. nMREQ 14. ( )是专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊 设计,使其适合于执行DSP算法,编译效率较高,指令执行速度也较高。在数字滤波、FFT、谱分析等各种仪器上DSP获得了大规模的应用。 A.微处理器(Microprocessor Unit, MPU) B.微控制器(Microcontroller Unit, MCU) C.嵌入式DSP (Embedded Digital Signal Processor, EDSP) D.片上系统(System On Chip,SoC)

嵌入式系统IO接口与编程复习题汇编

《嵌入式IO接口与编程》复习题 一、选择题 1、按照ATPCS规则,返回值为int型的子程序或函数,其返回值通过() 返回。 A、r1 B、r0 C、r14 D、r8 2、若寄存器r2的值为0x1,执行完指令mov r2,r2,lsl#4后,r2的值为(B)。 A、0x2 B、0x10 C、0x8 D、0x4 3、在收到主机发出的44H命令后,模块DS18B20所检测温度值的长度为()。 A、2字节 B、3字节 C、4字节 D、不一定 4、DS18B20使用前必须要确认器件是否存在,也就是完成复位和应答的过程中 (如图一),在这两个阶段总线DQ对应的引脚工作模式为()。 A、都为输出 B、先输入再输出 C、先输出再输入 D、都为输入 5、以下关于IIC总线起始信号和终止信号的描述,正确的是()。 A、SCL为低电平期间,SDA由低电平向高电平变化,表示终止信号。 B、SCL为低电平期间,SDA由低电平向高电平变化,表示起始信号。 C、SCL为高电平期间,SDA由高电平向低电平变化,表示终止信号。 D、SCL为高电平期间,SDA由高电平向低电平变化,表示起始信号。 6、ST32F439的SPI总线接口配置好后,若要发送数据,只需把数据赋值给 ()。 A、SPI_CR1 B、SPI_CR2 C、SPI_SR D、SPI_DR 7、SPI控制器的状态寄存器SPI_SR的bit0为1时,表示SPI接收缓冲区为空;

该位为0时表示,表示SPI接收缓冲区非空。下列循环语句中能够退出循环并保证SPI已接收完数据操作的是()。 A、while(!(SPI1->SR| 0x1)) B、while(!(SPI1->SR&0x1)) B、while(SPI1->SR&0x1) D、while(SPI1->SR|0x1) 8、STM32F439中SPI控制器工作在I2S模式还是SPI模式由设置寄存器() 来实现。 A、SPI_CR2 B、SPI_I2SCFGR C、SPI_I2SPR D、SPI_CR1 9、触摸屏首次使用时需要调校,调校好的数据一般保存在()中。 A、RAM B、寄存器 C、EEPROM D、堆栈 10、nRF24L01可以工作在一对一通信模式或一对多通信模式,其中一对多工作 模式下最多允许几个发送节点()。 A、四个 B、五个 C、六个 D、十个 11、STM32F439的串口1初始化完成后,若要发送一个字节的数据,只需将数据 写入寄存器()。 A、USART_SR B、USART_DR C、USART_CR1 D、USART_BRR 12、在nRF24L01的Enhanced ShockBurstTM收发模式下,使用片内的先入先出 堆栈区,数据可以低速从微控制器送入,再高速(1Mbps/2Mbps)发射,这样可以尽量节能。与射频协议相关的所有高速信号处理都在片内进行,这种做法的优点不包括( C )。 A、节能 B、低的系统费用(低速微处理器也能进行高速射频发射) C、大大增加通信距离 D、数据在空中停留时间短,抗干扰性高; 13、描述TFT LCD中像素点的数据长度有多种方法,常用的16位真彩色描述方 法为565,即RGB比例为5:6:5,对于480*320分辨率的TFT LCD来说,以565方式显示一帧图像需要的数据量大小为()。 A、5120字节 B、76800字节 C、307200字节 D、153600字节 14、在LCD控制器SSD1289中,入口模式指令03h的三个位共同控制了屏幕的 显示方向,其中I/D[0]和I/D[1]分别表示横向地址和纵向地址计数器的增减,AM表示地址更新方向。当I/D[1:0]=11,AM=0时,表示以下哪种显示方

嵌入式系统原理及接口技术

中国海洋大学本科生课程大纲 课程属性:公共基础/通识教育/学科基础/专业知识/工作技能,课程性质:必修、选修 一、课程介绍 1.课程描述(中英文): 嵌入式原理及接口技术课程是自动化专业的一门重要的、实践性较强的学科基础课。通过本课程的学习,学生可以了解微型计算机系统的工作原理,掌握微型计算机的体系结构和接口技术,掌握一种主流单片机的应用技术。本课程可为后续课程学习、嵌入式系统设计、智能仪器开发提供基础。 本课程内容设置兼顾基础原理和实践应用。基础原理部分主要包括经典的8086微型计算机系统的组成结构、指令系统、存储器、输入输出接口、中断系统、总线等,CPU常用外设定时器、串行通信控制器、模数与数模转换器、DMA控制器的工作原理;实践应用部分主要包括目前常用的STM32F系列微控制器(单片机)的体系结构、接口应用技术、系统扩展方法和程序设计方法。 Microprocessor principle and interface technology is an important and practical basic course for automation specialty. Through the study of this course, students can understand the working principle of microcomputer system, master the architecture and interface technology of microcomputer, and the application technology of a popular microcontroller. This course can provide the basis for the follow-up course study, embedded system design, and intelligent - 6 -

最新完整所有答案----嵌入式系统原理及接口技术复习

简答题 1. 什么是嵌入式系统?嵌入式系统的特点是什么? 答:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能,可靠性,成本,体积,功耗严格要求的专用计算机系统 特点:与应用密切相关,实时性,复杂的算法,制造成本,功耗,开发和调试,可靠性,体积2. 简要说明嵌入式系统的硬件组成和软件组成。 答:硬件组成:微处理器,存储器,输入设备和输出设备。 软件组成:操作系统,文件系统,图形用户接口,网络系统,通用组建模块。 3. S3C2410A的AHB总线上连接了那些控制器?APB总线上连接了那些部件? AHB: LCD控制器,LCD DMA总线控制器,USB主控制器,中断控制器,ExtMaster,电源管理,Nandflash控制器,储存器控制器。 APB通用异步收发器,内部集成电路总线(IIC),USB设备控制器,集成电路内部 声音总线(IIS),MMC/SD/SDIO主控制器,通用I/O端口(GPIO),看门狗定时器(WDT), 定时时钟(RTC,总线控制器,A/D转换器,串行外设接口,定时器/脉宽调制。 4. ARM体系结构支持几种类型的异常,并说明其异常处理模式和优先级状态? 答,支持7种类型的异常 异常处理过程:(进入异常)PS LR CPR9 SPSR设置CPSR勺运行模式位,跳转到相应的异常处理程序,(异常返回)LF H PC, SPSR>CPSR若在进入异常处理时设置中断禁止位,要在此清楚,复位异常处理程序不需要返回。 Reset〉数据中指〉快速中断请求(F IQ)>中断请求(IRQ)>指令预取中止〉 未定义指令和软件中止。 5. 存储器生长堆栈可分为哪几种?各有什么特点? 4种,满递增堆栈:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA, STMFA等。 空递增堆栈:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA, STMEA等。 满递减堆栈:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD STMF等。 空递减堆栈:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空位置。指令如LDMEDSTME等。 6. 简述存储器系统层次结构及特点。 层次结构主要体现在"Cache-主存”层次和"主存-辅存”(Cache,主存储器,辅助存储器),前者主要解决CPU和主存速度不匹配的问题,后者主要解决存储器系统的问题。在存储器体系中Cache、主存能与CPU直接交换信息,辅存则要通过主存与CPU交换信息;主存与CPU Cache辅存都能交换信息。 7. 简述I2S总线接口的启动与停止过程。 通过I2S控制寄存器IISCON控制,当控制寄存器IISCON的地址为O=I2S禁止(停止);

嵌入式开发中常用的总线与接口总结

嵌入式开发中常用的总线与接口总结 任何一个微处理器都要与一定数量的部件和外围设备连接,但如果将各部件和每一种外围设备都分别用一组线路与CPU直接连接,那么连线将会错综复杂,甚至难以实现。为了简化硬件电路设计、简化系统结构,常用一组线路,配置以适当的接口电路,与各部件和外围设备连接,这组共用的连接线路被称为总线。采用总线结构便于部件和设备的扩充,尤其制定了统一的总线标准则容易使不同设备间实现互连。 微机中总线一般有内部总线、系统总线和外部总线。 (1)、内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连; (2)、系统总线是微机中各插件板与系统板之间的总线,用于插件板一级的互连; (3)、外部总线则是微机和外部设备之间的总线,微机作为一种设备,通过该总线和其他设备进行信息与数据交换,它用于设备 一级的互连。 另外,从广义上说,计算机通信方式可以分为并行通信和串行通信,相应的通信总线被称为并行总线和串行总线。并行通信速度快、实时性好,但由于占用的口线多,不适于小型化产品;而串行通信速率虽低,但在数据通信吞吐量不是很大的微处理电路中则显得更加简易、方便、灵活。串行通信一般可分为异步模式和同步模式。 随着微电子技术和计算机技术的发展,总线技术也在不断地发展和完善,而使计算机总线技术种类繁多,各具特色。下面仅对微机各类总线中目前比较流行的总线技术分别加以介绍。 一、内部总线 1.I2C总线 I2C(Inter-IC)总线10多年前由Philips公司推出,是近年来在微电子通信控制领域广泛采用的一种新型总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。

完整所有答案----嵌入式系统原理及接口技术复习

一、简答题 1.什么是嵌入式系统?嵌入式系统的特点是什么? 答:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能, 可靠性,成本,体积,功耗严格要求的专用计算机系统 特点:与应用密切相关,实时性,复杂的算法,制造成本,功耗,开发和调试,可 靠性,体积 2.简要说明嵌入式系统的硬件组成和软件组成。 答:硬件组成:微处理器,存储器,输入设备和输出设备。 软件组成:操作系统,文件系统,图形用户接口,网络系统,通用组建模块。 3.S3C2410A的AHB总线上连接了那些控制器?APB总线上连接了那些部件? AHB:LCD控制器,LCD DMA,总线控制器,USB主控制器,中断控制器,ExtMaster,电源管理,Nandflash控制器,储存器控制器。 APB:通用异步收发器,内部集成电路总线(IIC),USB设备控制器,集成电路内部 声音总线(IIS),MMC/SD/SDIO主控制器,通用I/O端口(GPIO),看门狗定时器(WDT),定时时钟(RTC),总线控制器,A/D转换器,串行外设接口,定时器/脉宽调制。 4.ARM体系结构支持几种类型的异常,并说明其异常处理模式和优先级状态? 答,支持7种类型的异常 异常处理过程:(进入异常)PC→LR,CPRS→SPSR,设置CPSR的运行模式位,跳转 到相应的异常处理程序,(异常返回)LR→PC,SPSR→CPSR,若在进入异常处理时 设置中断禁止位,要在此清楚,复位异常处理程序不需要返回。 Reset>数据中指>快速中断请求(FIQ)>中断请求(IRQ)>指令预取中止> 未定义指令和软件中止。 5.存储器生长堆栈可分为哪几种?各有什么特点? 4种,满递增堆栈:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效 数据项的最高地址。指令如LDMFA,STMFA等。 空递增堆栈:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一 个空位置。指令如LDMEA,STMEA等。 满递减堆栈:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含 有效数据项的最低地址。指令如LDMFD,STMFD等。 空递减堆栈:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈 下的第一个空位置。指令如LDMED,STMED等。 6. 简述存储器系统层次结构及特点。 层次结构主要体现在“Cache-主存”层次和“主存-辅存”(Cache,主存储器,辅助 存储器),前者主要解决CPU和主存速度不匹配的问题,后者主要解决存储器系统 的问题。在存储器体系中Cache、主存能与CPU直接交换信息,辅存则要通过主存 与CPU交换信息;主存与CPU、Cache、辅存都能交换信息。 7. 简述I2S总线接口的启动与停止过程。 通过I2S控制寄存器IISCON控制,当控制寄存器IISCON的地址为0=I2S禁止(停止);

嵌入式系统设计中常用的总线和接口

嵌入式系统设计中常用的总线和接口 任何一个微处理器都要与一定数量的部件和外围设备连接,但如果将各部件和每一种外围设备都分别用一组线路与CPU直接连接,那么连线将会错综复杂,甚至难以实现。为了简化硬件电路设计、简化系统结构,常用一组线路,配置以适当的接口电路,与各部件和外围设备连接,这组共用的连接线路被称为总线。采用总线结构便于部件和设备的扩充,尤其制定了统一的总线标准则容易使不同设备间实现互连。 微机中总线一般有内部总线、系统总线和外部总线。 (1)、内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连;(2)、系统总线是微机中各插件板与系统板之间的总线,用于插件板一级的互连;(3)、外部总线则是微机和外部设备之间的总线,微机作为一种设备,通过该总线和其他设备进行信息与数据交换,它用于设备一级的互连。 另外,从广义上说,计算机通信方式可以分为并行通信和串行通信,相应的通信总线被称为并行总线和串行总线。并行通信速度快、实时性好,但由于占用的口线多,不适于小型化产品;而串行通信速率虽低,但在数据通信吞吐量不是很大的微处理电路中则显得更加简易、方便、灵活。串行通信一般可分为异步模式和同步模式。 随着微电子技术和计算机技术的发展,总线技术也在不断地发展和完善,而使计算机总线技术种类繁多,各具特色。下面仅对微机各类总线中目前比较流行的总线技术分别加以介绍。 一、内部总线1.I2C总线 I2C(Inter-IC)总线10多年前由Philips公司推出,是近年来在微电子通信控制领域广泛采用的一种新型总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。 2.SPI总线 串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同

嵌入式系统原理及接口技术考试题库

1.什么是操作系统?它应具备什么功能? 管理电脑硬件与软件资源的程序,同时也是计算机系统的内核与基石. 1.)操作系统是计算机硬件的封装和扩充2).操作系统是计算机资源的管理者,包括处理器管理、存储器 存储空间管理、外部输入输出(I/O)设备管理、文件管理、网络和通信管理、提供用户接口。 2嵌入式操作系统与普通操作系统区别 嵌入式操作系统具有通用操作系统的基本特点,但嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点 3什么是实时系统?对实时系统有什么要求? 如果一个系统能及时响应外部事件的请求,并能在规定的时间内完成对事件的处理,这种系统称为实时系统. 1.实时系统的计算必须产生正确的结果,称为逻辑或功能正确. 2.实时系统的计算必须在预定的时间 内完成.称为时间正确. 4可剥夺内核:当一个进程正在被处理器所运行时,其他就绪进程可以按照事先规定的规定的规则,强行剥夺正在运行进程的处理器使用权,而使自己获得处理器使用权并得以运行 6一个应用程序为什么一定要使用空闲任务 在多任务系统运行时,系统经常会在某个时间内无用户任务运行而处于空闲状态,为了使CPU在此时有事可作,提供空闲任务。空闲任务是不能被软件删除的 7统计任务是必须使用的吗?简述它的功能 用户应用程序可根据实际需要来选择是否使用统计任务。每秒计算一次CPU在单位时间内被使用的时间,并把计算结果以百分比的形式存放在变量OSCPUsage中,以便应用程序通过访问它来了解CPU的利用率. 8什么是任务的优先权?UC/OS-II是用什么来描述任务的优先权的。 处于就绪态的任务优先获取其他任务cpu使用权的能力。 uC/OS-II是按可剥夺型内核来设计的,为此,每一个任务都必须具有唯一的优先级别,用来表示该任务在抢夺处理器时所具有的优先权力,共有64个优先级别,用数字“0”-“63”表示,数字“0”所表示的优先级最高 9在UC/OS-II中任务有哪5种状态?分别简述 5个状态的特征:睡眠状态:任务只是以代码的形式驻留在内存,还没有交给操作系统管理.就绪状态:任务配备了任务控制块且在任务就绪表中登记,具备了任务运行的充分条件.运行状态:处于就绪状态的任务获得了CPU的使用权,任何时候只有一个任务处于运行.等待状态:正在运行的任务,把CPU的使用权让给其他任务.中断服务状态:正在运行的任务一旦响应中断申请,就会中止运行而去执行中断服务程序. 10任务控制块记录了任务的那些信息 包括任务堆栈的各种指针及数目,任务优先级,任务的状态标志参数等。 11什么是空任务控制块链表?什么是任务控制块链表? 空任务块链表,其中所有任务控制块还没有分配给任务;任务控制块链表,其中所有任务块已经分配给任务16UC/OS-II的中断响应过程: 系统接收到中断请求后,如果这是CPU处于中断允许状态,系统会中止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统会根据情况返回到被中止的任务,或转向更高优先级的任 17全局变量OSIntNesting的作用: 记录中断嵌套的层数。 18操作系统的时钟:操作系统中特定的周期性中断为系统提供时间依据。 19在UC/OS-II中,时钟节拍服务做了什么工作?时钟节拍服务做了:可以使人物延时若干个整数的时钟节拍以及当任务等待事件发生时提供等待超时依据。 20说明延时函数OSTimeDly()与OSTimeDlyHMSM()的区别: OSTimeDly():时钟节拍数;OSTimeDlyHMSM():按照时分秒的设置延时 21使用信号量可在应用程序中完成哪些工作?任务间通信完成共享资源的访问任务的同步执行 22什么叫优先级反转?这种现象什么情况下发生?有什么危害?在可剥夺型内核中,当任务以独占方式使用共享资源时,会出现低优先级任务先于高优先级任务而被运行的情况。称优先级反转。 一个低优先级任务在获得信号量使用共享资源期间,被高优先级任务所打断而不能释放信号量,从而使正在等待该信号量的高优先级任务因得不到信号量而被迫处于等待状态。在等待期间,就让占据该信号量的低优先级任务先运行 如果这种情况发生较多,则会极大地恶化优先级任务地运行环境。 23互斥型信号量是如何防止优先级反转的?在低优先级的任务要使用共享资源前将其优先级提升到高于可能使用该共享资源的任务优先级,使用完共享资源后在讲其优先级恢复到原值。 25 1.UC/OS-II为什么要定义信号量集? 在实际运用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用得结果来决定任务得运行方式。信号量集就是实现这种功能的数据结构。

嵌入式系统学习心得共3篇

嵌入式系统学习心得共3篇 嵌入式系统学习心得一:嵌入式系统学习心得首先我声明,我是基于嵌入式系统平台级设计的,硬件这个方向我相对来讲比较有发言权,如果是其它方面所要具备的基本技能还要和我们培训中心其它专业级讲师沟通。他们的方面上我只能说是知道些,但不是太多,初级的问题也可以问我。 对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的modem射频模块,都采用成熟的套片,而当年国际上只有两家公司有此技术,自我感觉模拟功能不太强的人,不太适合搞这个,如果真能搞定到手机的射频模块,只要达到一般程度可能月薪都在15k以上。 另一类就是数字部分了,在大方向上又可分为51/arm的单片机类,dsp类,fpga类,国内fpga 的工程师大多是在ic设计公司从事ip核的前端验证,这部分不搞到门级,前途不太明朗,即使做个ic前端验证工程师,也要搞上几年才能胜任。dsp硬件接口比较定型,如果不向驱动或是算法上靠拢,前途也不会太大。而arm单片机类的内容就较多,业界产品占用量大,应用人群广,因此就业空间极大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互pk,判定水平高低的依据。而接口设计这块最关键的是看时序,而不是简单的连接,比如pxa255处理器i2c要求速度在100kbps,如果把一个i2c外围器件,最高还达不到100kbps 的与它相接,必然要导致设计的失败。这样的情况有很多,比如51单片机可以在总线接lcd,但为什么这种lcd就不能挂在arm的总线上,还有arm7总线上可以外接个winband的sd卡控制器,但为什么这种控制器接不到arm9或是xscale处理器上,这些都是问题。因此接口并不是一种简单的连接,要看时序,要看参数。一个优秀的硬件工程师应该能够在没有参考方案的前提下设计出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇到一个工程师把方案中的5v变1.8v的dc芯片,直接更换成ldo,有时就会把cpu烧上几个。前几天还有人希望我帮忙把他们以前基于pxa255平台的手持gps设备做下程序优化,我问了一下情况,地图是存在sd卡中的,而sd卡与pxa255的mmc控制器间采用的spi接口,因此导致地图读取速度十分的慢,这种情况是设计中严重的缺陷,而不是程序的问题,因此我提了几条建议,让他们更新试下再说。因此想成为一个优秀的工程师,需要对系统整体性的把握和对已有电路的理解,换句话说,给你一套电路图你终究能看明白多少,看不明白80%以上的话,说明你离优秀的工程师还差得远哪。其次是电路的调试能力和审图能力,但最最基本的能力还是原理图设计pcb绘制,逻辑设计这块。这是指的硬件设计工程师,从上面的硬件设计工程师中还可以分出ecad工程师,就是专业的画pcb板的工程师,和emc设计工程师,帮人家解决emc的问题。硬件工程师再往上就是板级测试工程师,就是c语功底很好的硬件工程师,在电路板调试过程中能通过自已编写的测试程序对硬件功能进行验证。然后再交给基于操作系统级的驱动开发人员。 总之,硬件的内容很多很杂,硬件那方面练成了都会成为一个高手,我时常会给人家做下方案评估,很多高级硬件工程师设计的东西,经常被我一句话否定,因此工程师做到我这种地步,也会得罪些人,但硬件的确会有很多不为人知的东西,让很多高级硬件工程师也摸不到头脑。

三种常用的嵌入式操作系统分析与比较

三种常用的嵌入式操作系统分析与比较 摘要:提要三种常用的嵌入式操作系统——Palm OS、Windows CE、Linux;在此基础上、分析、比较这三种嵌入式操作系统,给出它们之间的异同点及各自的适用范围。 1 嵌入式系统与嵌入式操作系统 1.1 嵌入式系统 嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。 嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力;嵌入式系统和具体应用有机地结合在一起,它的升级换代也是具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。 1.2 嵌入式操作系统 嵌入式操作系统EOS (Embedded Operating System)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、调度作,控制、协调并发活动;它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的EOS产品系列。随着Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。EOS是相对于一般操作系统而方的,它除具备了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件处理等外,还有以下特点: ①可装卸性。开放性、可伸缩性的体系结构。 ②强实时性。EOS实时性一般较强,可用于各种设备控制当中。

相关主题
文本预览
相关文档 最新文档