基于OHCI协议的S3C2440 USB Host Driver之协议介绍(三)

发布者:Ziyu2022最新更新时间:2022-05-24 来源: eefocus关键字:OHCI协议  S3C2440  USB  Host  Driver  协议 手机看文章 扫描二维码
随时随地手机看文章

OpenHCI通过两级仲裁在端点中选择哪一个服务。第一级是表级。每一个需要服务的端点类型在相应的类型表里。HC选择服务哪一个表。而在表内,端点都有差不多公平的机会被访问到。HCD通知设置HcPeriodicStart限制从帧开始到开始要服务周期表的时间。周期表服务时,当前帧下,中断表优先于同步表。当周期表服务完,控制和批量有可能会接着服务。


ED作为锚点,供一列TD依附在其上。当HC访问ED且找到一个有效的TD地址,HC完成与指定ED的单笔事务,TD表明了内存地址。


当一个TD所定义的所有数据都传输完,TD从他的ED上解下,且连到完成队列。



ED描述符

FA就是设备地址


EN就是端点地址


D为方向


S为速度


K为skip表明HC服务时,是否要跳过当前ED


F为格式(F=1为的话,使用的是ITD)


MPS最大包数据尺寸


H就是halted位,一般TD错误会设置该位


C就是toggleCarry位,一个TD退休,向该位写上一个数据的data toggle value


HeadP指向第一个要处理的TD


NextED若非0,表明表上下一个ED


HC处理一个ED,先检查skip和halted位决定ED的下一步任何操作是否允许。若任何一位设置,HC继续访问该表上下一个ED。如果任何一个都没设置,HC就会比较HeadP和TailP,若不等,那么由HeadP指向的TD定义了一个buffer,HC会与该buffer通信。


HCD把TD加到现有TD的尾部。当TD处理完成,HC从ED上解下TD且连在完成队列上。当TD从ED上断开,TD的NextTD拷贝到ED的HeadP上。


当HCD想HC跳过ED的处理,HCD可以设置skip和清除skip。当HCD必须修改HeadP的值,但是从表上移除ED的开销是不允许的,这个操作是必要的。


当HC处理TD时遇到了一个错误,HC设置halted位。当遇到错误的TD退休时,HC更新HeadP且设置了Halted位,导致HC跳过ED直到Halted位清除。当已经纠正一个错误且传输应该恢复时,HCD清除Halted位。HCD不应该写HeadP,toggleCarry,Halted位,除非Halted位已设置,skip位已设置,或ED已从该表移除。


若HCD需要修改一个TD队列而不是在队列里添加TD,它必须停止HC处理那个ED的TD队列,此时才可以改变。HCD停止TD处理的标准方法是从表上删除ED或者在ED上设置skip位。


TD有2种,通用的用于中断、控制、批量;同步的用于同步传输


GTD描述符

R bufferrounding位,若为0,来自于ED的最后一个数据包必须准确的填满剩余的内存空间。若为1,最后一个数据可以比剩余的buffer小且不引起一个TD上的错误。


DP 若ED中的D域设置为00b或11b表明TD决定令牌的PID。00SETUP;01OUT;10IN。


DI 如果一个TD完成,HC可能要等待DI帧才产生中断。若为111b,该TD退休不产生中断。


T  数据域PID。每一次一个数据包成功传输,该域会改变。MSb=0,data toggle值从ED中的toggleCarry位获得。若MSb=1,data toggle值从该域的LSb获得。


EC 错误计数。每一次传输类型错误,该值增加。


CC 该域包含最后一次尝试的事务的状态。


CBP 与端点通信的数据的内存物理地址。0表明0长度数据包或所有传输完毕。


NextTD 下一个TD


BE 该TD所表明的buffer的最后一个字节的物理地址


CBF所指的buffer为0到8192字节长度,可以跨越2个物理页。若正常传输一个数据包,CBF会更新。若在传输期间,CBF跨越了4k页的边界,BufferEnd的高20位就会拷贝到CBF的高20位,会导致下一个buffer地址指向同一4k页的第0th字节(该4K页是包含最后一个数据的页)。


对于SETUP或者OUT,数据包大小为min(MPS,buffer中的剩余空间)。对于IN,数据包的大小由端点决定。


CC域在每一次事务传输后会更新,不论是否成功。若成功,CC为NOERROR,不然会为错误类型代码。


数据传输顺序。数据传输会交替传输DATA0,DATA1。顺序要求数据传输器继续发相同的数据包要以相同的数据PID,除非数据包成功被接到或者发送。成功是说,发送一个数据包后,发送器收到ACK握手包。第一个数据包以DATA0传输。每一次成功传输后,data toggle值会切换。


对于批量和中断端点,大多数的GTDs以dataToggle=00b加入队列。ED中包含每次传输中的第一个data toggle值。第一个数据包成功传输后,data toggle域的MSb设置表明,对于剩下的传输,data toggle的LSb表明下一个toggle value。当GTD退休,ED中的HeadP更新,ED中的toggleCarry位写入值用来指明该端点下一个数据包传输使用的data toggle。


对于控制传输,序列不依赖于上一个包的data toggle历史。SETUP DATA STATUS包的dataToggle域为10 11 11。


一个GTD的data toggle域在每一次成功的包事务后会更新。只要有ACK,必然会更新,即便其它的错误会遇到。


传输完成。当 传输完由BE指向的最后一字节后,表明成功。成功后,设置CBP=0,设置CC=NOEEROR,且退休。


传输也可以完成。当从一个端点上接受的最后一个数据包没填满buffer且小于MPS。在这种情况,CBP更新为写到内存的最后一个字节后的一个位置。若bufferrounding=1,该情况正常。若bufferrounding=0,该情况错误,HC设置CC=DATAUNDERRUN,设置Halted位,且TD也退休了。


传输错误。传输错误、序列错误、系统错误。


传输错误:CRC错误、BITSTUFFING错误、DEVICENOTRESPONDING错误。只要错了3次,就会退休了且ED会halted。IN数据的数据切换位不匹配也是该种错误。该错误是由于端点接受ACK失败,或设备坏了。该数据会丢弃。PID检查域错误也是该种。


序列错误:


Sequenceerror仅在读端点数据到HC时发生。Sequence错误直到数据接收且未发生transmission error才被检查。


两种该错误:数据overrun和数据underrun。


任何一种发生了,ConditionCode自动被设置,通用TD退休且端点halted。


一个data overrun错误当从一个ED接收到的数据大小超过了MPZ或者超过了TD buffer剩余空间大小会发生。假如发生overrun错误,HC将接收到的数据写到内存直到overrun产生为止。当TD退休,CurrentBufferPointer指向错误数据包的起始。然而,所有接收的数据是有效的且data toggle会更新。


第二种类型,data underrun,当从来自ED的接收数据少于规定的大小的时候会发生。虽然当从ED接收到的数据少于MPZ时候,通用TD退休,但是它不总是产生一个错误。如果接收到的数据填满了buffer,即一个数据包的最后一个字节写到了BufferEnd,不管数据包的大小是多少,它都被当做正常完成的情况。


如果该数据包没有填满buffer且小于MPZ,那么bufferRounding位决定通用TD以何种方式退休。如果bufferRounding= 0,那么underrun被当做一种错误发生了。ConditionCode被设为DATAUNDERRUN,TD退休,ED halted。如果bufferRounding = 1,那么TD正常退休,没错误产生。这里CurrentBufferPointer都指向实际写到内存的最后一个字节的后一个位置。


与该种情况的buffer-filled完成不一样,buffer-filled完成是完全正常的情况,CurrentBufferPointer=0。


系统错误:


对于通用TDs,系统错误是有限的。尤其是,一个ohci的HC对于通用TD来说,不可能发生它内部缓冲的overrun和underrun错误。一个OHCI的HC不允许发IN令牌给一个ED除非HC内部有足够的缓冲空间接收一个MPZ大小的数据而不需要访问系统内存。类似的,HC不允许发起OUT or SETUP令牌包,除非它已经在内部缓冲里预先取得所有发往ED的数据。


特殊处理


NAK当ED返回一个NAK握手,所有通用TD域在当前事务后保持不变。HC不做任何改变。


STALL如果ED返回STALL PID,HC退休TD,设置ConditonCode= STALL且haltsED。CurrentBufferPointer,ErrorCount, and dataToggle保持事务开始时的数值。

关键字:OHCI协议  S3C2440  USB  Host  Driver  协议 引用地址:基于OHCI协议的S3C2440 USB Host Driver之协议介绍(三)

上一篇:基于OHCI协议的S3C2440 USB Host Driver之协议介绍(四)
下一篇:基于OHCI协议的S3C2440 USB Host Driver之协议介绍(二)

推荐阅读最新更新时间:2024-11-10 19:52

对Nor Flash的操作(S3C2440)
Nor Flash介绍 Nor Flash的连接线有地址线,数据线,片选信号读写信号等,Nor Flash的接口属于内存类接口,Nor Flash可以向内存一样读,但是不能像内存一样写,需要做一些特殊的操作才能进行写操作,读只需像内存一样读很简单。 nor 的原理图 FLASH简介 常用的Flash类型有Nor Flash和NAND Flash两种。 Nor Flash由Intel公司在1988年发明,以替代当时在市场上占据主要地位的EPROM和E2PROM。NAND Flash由Toshiba公司在1989年发明。两者的主要差别如下表: Nor Flash支持XIP,即代码可以直接在Nor Flash上执行,无需复制
[单片机]
对Nor Flash的操作(<font color='red'>S3C2440</font>)
LG和麦格纳成立合资公司,加速电驱动零部件开发进度
LG 电子(简称“LG”)和麦格纳国际(简称“麦格纳”)近日签署了合作协议,双方共同成立了一家新合资公司—— LG Magna e-Powertrain,总部位于韩国仁川,双方将建立一个强大的管理团队,整合双方在电动汽车动力系统方面的优势,从而加速电驱动零部件的开发进度。 合资公司将由Cheong Won-suk担任新公司的首席执行官。他曾任职LG汽车零部件解决方案旗下绿色业务事业部、大宇汽车研发部。在汽车制造和质量管理领域有近25年经验的哈维尔·佩雷兹(Javier Perez)将担任新公司的首席运营官,负责管理合资公司的日常运营。 合资公司将麦格纳在电动动力系统和世界级汽车制造领域的优势与LG在电机和逆变器开发方面的专长相
[手机便携]
SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍
SPI、I2C、UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynchronous Receiver Transmitter:通用异步收发器) 第二,区别在电气信号线上: SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可
[嵌入式]
英飞凌推出1EDI Compact驱动
EiceDRIVERTM 系列新产品:1EDI Compact驱动器采用无芯变压器技术适用于电压高达1200 V的应用 2013年12月4日——英飞凌科技股份公司(法兰克福股票交易所股票代码:IFX / 美国柜台交易市场股票代码:IFNNY)今日宣布,在今年的电气自动化系统及元器件(SPS IPC Drives)贸易展上,英飞凌科技股份有限公司推出针对绝缘电压高达1200伏的应用的1EDI EiceDRIVERTM Compact单通道栅极驱动器。该款电气绝缘驱动器的组件采用英飞凌研发的无磁芯变压器技术,该技术可以在独立的输出引脚上实现高达6安培的输出电流。该产品的基本系统包括适用于IGBT和MOFET的UVLO(欠压锁定)以及
[电源管理]
STM32 USB学习笔记3
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library 现在开始分析VCP示例代码,从最简单的usbd_desc开始。USB设备使用描述符来报告其功能特性,描述符是一个已知格式的数据结构,USB规范中定义了以下几种描述符:Device(设备)、Device_Qualifier(设备限定)、Configuration(配置)、Other_Speed_Configuration(其他速度配置)、Interface(接口)、Endpoint(端点)、String(字符串)。usbd_desc文件
[单片机]
STM32 <font color='red'>USB</font>学习笔记3
瑞萨新型32位元MCU内建USB 2.0 OTG功能
瑞萨电子(Renesas Electronics)的32位元微控制器(MCU) RX100 系列推出新款 RX111 产品,采用超低功耗零等待状态快闪记忆体制程,支援领先市场的 32位元耗电量/效能等级,并支援快速唤醒及各种标准周边装置与多种安全功能,并内建 USB 2.0 周边装置可支援主控、装置及On-The-Go (OTG)功能。 RX111将瑞萨8/16位元RL78 MCU系列的超低功耗带入32位元RX产品系列,提供更大范围的装置扩充性与功能。新款RX111的设计可支援多种低阶32位元嵌入式应用,包括行动医疗保健、智慧电表、感测器/侦测器,以及工业与大楼自动化。瑞萨真正的低功耗功能可在广大的温度与电压范围内,为设计工程师
[单片机]
三相全波无刷电机的正弦波驱动中施加更大电压的方法
下图是三相全波无刷电机中以电压代替正弦波电流PWM驱动的PWM后的波形,表示通过在三相全波无刷电机电源电压之间振荡的三相正弦波(各虚线),电机被施加了电压VM。 从波形中可以想象得到,如果只是单纯的正弦波驱动,那么VM将是电源电压的,只能施加最多87%的电压。不言而喻,在驱动电机时,尽可能地增加施加于电机的电压是必须的要求,而实际上,在正弦波驱动时,会使用一些尽可能提高施加电压的手法。 使正弦波驱动时的施加电压更大的手法 ① 该波形是将正弦波(虚线)下方圆弧的一半分别与其他两相上方相加 之后的波形(绿色箭头)。从波形图中可以看出,可以施加比只是单纯的正弦波时更大的VM。 虽然施加电压波形变成了失真波形而不是正弦波,但实
[嵌入式]
三相全波无刷电机的正弦波<font color='red'>驱动</font>中施加更大电压的方法
带SPI接口的16位AD7705驱动程序
最近在做一个印度项目时,应用到16位AD转换器AD7705,此器件是AD公司推出的双通道16位 - (电荷平衡式)A/D转换器。具有高分辨率、宽动态范围、自校准,低功耗及优良的抗噪声性能,因此非常适用于仪表测量和工业控制等领域。16位无丢失代码;0.003%的非线性度;内部放大器可选择1,2,4,8,16,32,64,128;8种增益;输出数据更新速率可编程;具有自校准和系统校准功能,三线串行接口,可缓冲模拟输入;低功耗。经努力,目前已调通一个通道,现将驱动程序共享,愿起到抛砖引玉的作用。此程序在项目板上调试通过,而且测试精度极高,显示的电压值准确稳定。 #include iom16v.h #include macros.h #
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved