usbscsi协议.docx
《usbscsi协议.docx》由会员分享,可在线阅读,更多相关《usbscsi协议.docx(7页珍藏版)》请在冰豆网上搜索。
usbscsi协议
竭诚为您提供优质文档/双击可除
usb,scsi协议
篇一:
usbhid协议中文版——usb接口hid设备
第8章usb接口hid设备
hid(humaninterfacedevice,人机接口设备)是usb设备中常用的设备类型,是直接与人交互的usb设备,例如键盘、鼠标与游戏杆等。
在usb设备中,hid设备的成本较低。
另外,hid设备并不一定要有人机交互功能,只要符合hid类别规范的设备都是hid设备。
wndows操作系统最先支持的hid设备。
在windows98以及后来的版本中内置有hid设备的驱动程序,应用程序可以直接使用这些驱动程序来与设备通信。
在设计一个usb接口的计算机外部设备时,如果hid类型的设备可以满足需要,可以将其设计为hid类型设备,这样可以省去比较复杂的usb驱动程序的编写,直接利用windows操作系统对标准的hid类型usb设备的支持。
8.1hid设备简介
8.1.1hid设备的特点
交换的数据储存在称为报表(Report)的结构内,设备的固件必须支持hld报表的
格式。
主机通过控制和中断传输中的传送和请求报表来传送和接收数据。
报表的格式非常灵活。
每一笔事务可以携带小量或中量的数据。
低速设备每一笔事务最大是8b,全速设
备每一笔事务最大是64b,高速设备每一笔事务最大是1024b。
一个报表可以使用多笔事务。
设备可以在未预期的时间传送信息给主机,例如键盘的按键或是鼠标的移动。
所以
主机会定时轮询设备,以取得最新的数据。
hid设备的最大传输速度有限制。
主机可以保证低速的中断端点每10ms内最多1
笔事务,每一秒最多是800b。
保证全速端点每lms一笔事务,每一秒最多是64000b。
保证高速端点每125us三笔事务,每一秒最多是24.576mb。
hid设备没有保证的传输速率。
如果设备是设置在10ms的时距,事务之间的时间
可能等于或小于10ms。
除非设备是设置在全速时在每个帧传输数据,或是在高速时在每个微帧传输数据。
这是最快的轮询速率,所以端点可以保证有正确的带宽可供使用。
hid设备除了传送数据给主机外,它也会从主机接收数据。
只要能够符合hld类别规范的设备都可以是hid设备。
设备除了hld接口之外,它可能同时还包含有其他的usb接口。
例如影像显示设备可能使用hid接口来做亮度、对比度的软件控制,而使用传统的影像接口来传送要显示的数据。
usb扩音器可以使用实时传输来播放语音,同时使用hid接口来控制音量、低音等。
hid类别设备的规范文件主要是以下两份:
deviceclassdefinitionforhumaninterfacedeviceshidusagetables
其中前者是hid的基本规范文件,后者可以是前者的附件,为开发人员提供实际的控制类型的描述。
文件是用来定义让主机了解以及使用hid数据的数值。
这两份文件是由usbdeviceworkinggroup制定的,可以在网址/retype/zoom/2c2ecd2fccbff121dd368396pn=2
intusb_sbc2410_init(void)
{
unsignedlongupllvalue=(0x78 printk("usbcontrol,(c)20xxsbc2410n");
s3c_device_usb.dev.platform_data=
while(upllvalue!
=__raw_readl(s3c2410_upllcon)){
__raw_writel(upllvalue,s3c2410_upllcon);
mdelay
(1);
}
return0;
}
/*****************zxladdend*****************/
(3)在machine_staRt与machine_end之间加上.init_machine=
s3c24xx_init_clocks(0);
s3c24xx_init_uarts(smdk2410_uartcfgs,aRRay_size(smdk2410_uartcfgs));
s3c24xx_set_board(
//zxladd
usb_sbc2410_init();
}
内核配置(Forusb)
--------------------------------------------------
让内核支持热插拔
generalsetup--->
[*]configurestandardkernelfeatures(forsmallsystems)--->
[*]supportforhot-pluggabledevices(new)
devicedrivers--->
genericdriveroptions--->
userspacefirmwareloadingsupport//
(1)
blockdevices--->
lowperformanceusbblockdriver
scsidevicesupport--->
scsidevicesupport
scsidisksupport
scsigenericsupport
usbsupport--->
supportforhost-sideusb
[*]usbdevicefilesystem
ohcihcdsupport
---note:
usb_stoRageenablesscsi,andscsidisksupport
---mayalsobeneeded;seeusb_stoRagehelpformoreinformation
usbmassstoragesupport
[*]usbmonitor
Filesystems--->
dos/Fat/ntFilesystems--->
msdosfssupport
VFat(windows-95)fssupport
(936)defaultcodepageforFat
(cp936)defaultiocharsetforFat
ntFsfilesystemsupport
partitiontypes--->
[*]pcbios(msdospartitiontables)support
nativelanguagesupport--->
simplifiedchinesecharset(cp936,gb2312)
nlsutF8
#makezimage
注:
系统正真支持u盘,busybox中还需要有udev应用程序(用户工具)
将zimage下载到开发板上,然后挂载u盘
#mount/dev/sda1/mnt
=========================================================================
转载地址:
配置usbformini2440同步(isochronous)方式传送;中断(interrupt)方式传送;大量(bulk)传送.但是所有的endpoint0都被用来传送配置和控制信息。
在host和设备的endpoint之间的连接叫作管道"pipe",endpoint0叫做缺省(defaultpipe)。
对于同样性质的一组的endpoint的组合叫做接口(interface),如果一个设备包扬声器modem键盘鼠标监视器类型常量(classconstant)usb_deVice_class_audiousb_decice_class_communicationsusb_deVice_class_humaninteRFaceusb_deVice_class_monitoR动力回馈式游戏操usb_deVice_class_physical_int纵杆eRFace不间断电源供应硬盘usb_deVice_class_poweRusb_deVice_class_pRinteRusb_deVice_class_stoRageusb_deVice_class_hub
含不止一个的接口就可以称之为复合设备(compositedevice)。
同样的道理,对于同样的类型的接口的组合可以称之为"配置"(configuration)。
但是每次只能有一个配置是可用的,而一旦该配置激活,里面的接口和endpoint就都同时可以使用。
host从设备发过来的描述字(descriptors)中来判断用的是哪个配置,哪个接口等等,而这些的描述字通常是在endpoint0中传送。
windowsusb驱动程序接口
系统中的usb的驱动程序完成许多的工作。
实际上对于一些hid的usb设备,象键盘,鼠标和游戏操纵杆之类的设备可以自动的被系统识别并且支持.而除此之外的设备就需要自己写一个驱动程序来完成硬件和软件之间的联系。
在核心模式(kernelmode)下,驱动程序用ioctl来组织和操作一些由其他部分发过来的要求和命令。
而ioctl又是通过uRb(usbrequestblocks)来实现数据的传送的。
在正式的介绍usb的驱动程序之前,先还是来看看usb的物理和逻辑结构。
传输方式
在usb的数据传送的方式下,有四种的传输方式:
控制(control)同步(isochronous)中断(interrupt)大量(bulk)。
如果你是从硬件开始来设计整个的系统,你还要正确选择传送的方式,而作为一个驱动程序的书写者,就只需要弄清楚他是采用的什么工作方式就行了。
通常所有的传送方式下的主动权都在pc边,也就是host边。
控制(control)方式传送:
控制传送是双向传送,数据量通常较小。
usb系统软件用来主要进行查询、配置和给usb设备发送通用的命令。
控制传送方式可以包括8、16、32和64字节的数据,这依赖于设备和传输速度。
控制传输典型地用在主计算机和usb外设之间的端点(endpoint)0之间的传输,但是指定供应商的控制传输可能用到其它的端点。
同步(isochronous)方式传送:
同步传输提供了确定的带宽和间隔时间(latency)。
它被用于时间严格并具有较强容错性的流数据传输,或者用于要求恒定的数据传送率的即时应用中。
例如执行即时通话的网络电话应用时,使用同步传输模式是很好的选择。
同步数据要求确定的带宽值和确定的最大传送次数。
对于同步传送来说,即时的数据传递比完美的精度和数据的完整性更重要一些。
中断(interrupt)方式传送:
中断方式传输主要用于定时查询设备是否有中断数据要传送。
设备的端点模式器的结构决定了它的查询频率,从1到255ms之间。
这种传输方式典型的应用在少量的分散的、不可预测数据的传输。
键盘、操纵杆和鼠标就属于这一类型。
中断方式传送是单向的并且对于host来说只有输入的方式。
大量(bulk)传送:
主要应用在数据大量传送传送和接受数据上,同时又没有带宽和间隔时间要求的情况下,要求保证传输。
打印机和扫描仪属于这种类型。
这种类型的设备适合于传输非常慢和大量被延迟的传输,可以等
到所有其它类型的数据的传送完成之后再传送和接收数据。
usb将其有效的带宽分成各个不同的桢(frame),每桢通常是1ms时间长。
每个设备每桢只能传送一个同步的传送包。
在完成了系统的配置信息和连接之后,usb的host就会对不同的传送点和传送方式做一个统筹安排,用来适应整个的usb的带宽。
通常情况下,同步方式和中断方式的传送会占据整个带宽的90%,剩下的就安排给控制方式传送数据。
usb的低层结构
usb设备
usb的设备可以接在pc上的任意的usb接口上。
而使用hub还可以扩展使更多的usb设备连接到系统中,usb的hub有一个上行的端口(到host),有多个的下行端口(连接其它的设备),从而可以使整个的系统可以扩展的连接127个外设,其中hub也酸外设。
对于usb系统来说,usb的host永远是pc边,所有的其他连接到host都称为设备,在设备与设备之间是无法实现直线通信的,只有通过host的管理与调节才能够实现数据的互相传送.在系统中,通常会有一个根hub,这个hub一般有两个下行的端口。
一个pc可以拥有一个或多个的usbhost控制器。
一般有两种类型的控制器:
uhci(usbhost控制器接口),ohci(开放的host控制器接口)。
windows的usb类驱动程序对于每一种的控制器类型都有一种miniclass驱动程序来支持。
usb的物理信号
usb的电缆有四根线,两根传送的是5V的电源,有一些直接和电源hub相连的设备可以直接利用它来供电。
另外的两根是数据线,数据线是单工的,在整个的一个系统中的数据速率是一定的,要么是高速,要么是低速,没有一个可以中间变速的设备来实现数据码流的变速.在这一点上,usb和1394有明显的差别。
usb的总线可以在不使用的时候被挂起,这样一来就可以节约能源。
在有些时候的总线还有可能挡机(stall),比如说象数据传送的时候突然被打断,这个时候通过host的重新配置可以实现总线的重新工作。
低层协议
usb的物理协议规定了大多数的在总线上的数据格式,通常一个全速的数据桢可以最多有的1500bytes,而对于低速的桢最多有187bytes。
桢通常是用来分配带宽给不同的数据传送方式。
同时由于桢结构的规律性,桢的这种特性也可以用来做同步信号来使用。
一个最小的usb的数据块叫做包(packet),包包括同步信号,包标识(packetid),cRc和传送的数据。
packetid共有以下四种:
transactions(数据交换)
一个transaction是在host和设备(device)之间的不连续相互数据交换,通常由host开始交换,交换的开始是由token的包开始的,接下来是双方向上的数据包,在数据包传送完之后,就会由设备(device)返回一个握手(handshake)包。
usb系统通过in,out,和setup的包来指定usb地址和endpoint(最多是128个,0通常被用来用做缺省的传送配置信息的),并且这些被指定的设备必须通过上面形式的包来回应这种形式的指定。
每个setup的包包含8个byte的数据,数据用来指示传送的数据类型。
对于data数据包来说,设置两种类型的数据包是为了能够在传送数据的时候做到更加的精确。
ackhandshake的包用来指示数据传送的正确性,而stallhandshake则表示数据包在传送的过程中出了故障,并且请示host重新发数据或者清除这次传送。
pRe格式的包主要是用在在一个usb的系统中如果存在不同速率的设备的时候,将不同于总线速度的设备中就会回应一个pRe的包从而会忽略该设备。
各种不同类型的包的大小是不同的,data的数据包最大是1023bytes.startofFrame(soF)
soF是host用来指示frame的开头的。
soF的包包括11个bit的桢序号,从0到0x7FF(i.e.usbd_iso_staRt_FRame_Range-1),soF对于所有的高速设备来说是有效的。
power
每个设备可以从总线上获得100ma的电流,如果特殊的向系统申请,最多可以获得500ma的电流,在挂机的状态下,电流只有500ua.
驱动程序的安装步骤
windows用设备描述字或者接口描述字来了解到底是什么样的设备被接入到系统。
windows初始化的hardwareid中有设备提供商的id域(idVendor,idproduct,和bcddevice)。
如果你没有向系统提供一个
inF文件的话,系统就会自动选择提供一个兼容id(可能不是工作得很好,就像你买了一个Rockswell的modem,而你使用标准modem的驱动程序,你的modem可能会工作的有很多的毛病,也可能跑得飞快,电脑的事情,什么都可能发生,就像中国足球........我在九四年就发誓不再为中国足球恼火,可是俺前不久还是骂了一下那个叫章鱼鳞的小伙子,怎么就.......好歹还是一孩子,就原谅一回吧,哎!
)
usb的新特性