精华内容
下载资源
问答
  • 串行总线技术(一)-串行总线结构(以PCIe为例)串行总线的出现在早期的计算机系统中,多数外围设备使用并行总线结构。这些总线包括PCI和PATA(并行ATA)。当通信速率较低时,并行总线结...

    3bb40fa785e836bab1494a6103cfce2b.png

    串行总线技术(一)-串行总线结构(以PCIe为例)

    串行总线的出现

    在早期的计算机系统中,多数外围设备使用并行总线结构。这些总线包括PCI和PATA(并行ATA)。当通信速率较低时,并行总线结构可以设计得非常简单和有效,可以连接大量外围设备。通过使用中央仲裁机制,可以方便地实现总线设备间的通信:然而,当速率和带宽不断增加时,并行结构的潜力不断被发掘并不再能够满足系统设计要求。

    并行总线结构的带宽可以通过增加总线宽度或者提高总线的工作频率来实现,但这种增加带宽的方式会逐渐变得困难。并行总线会占用很多引脚,而对现代数字芯片来说,单一芯片中集成了大量的功能,引脚本身就是一种非常紧张的资源,这为继续增加总线宽度带来了困难。

    另外,总线频率已经进行了多次增加(如PCI-->PCIX),继续对大量信号线提高工作频率也变得更加困难。除此之外,并行结构还有一些固有不足,如没有包的概念,没有错误检验机制等。在并行总线中,传输的是数据突发片段,不是完整的数据包,也没有与所传输数裾 相关的CRC校验结果以进行差错控制。并行总线的不足促进串行总线结构的发展,这不仅克服了原有的缺陷,还带来了其他好处。如图所示为并行总线与串行总线示例。

    447b79565efe60fd75ab5f99374ac1e2.png 538966c2d406f5b4c3040a8ae4c835df.png

    现在的数字系统中有很多种串行总线。PCI Express(代替了并行PCI总线)、SATA(代替PATA)以及USB等就是一些常用的高速总线。这些总线的速率也从MHz达到了GHz。

    串行总线的优缺点

    优点

    • 占用引脚数量少

    串行总线使用一对信号线发送数据(TX+ TX-),使用一对信号线接收数据(RX+ RX-)。而PCI和PCIX等并行总线会占用大量引脚。

    • 差分信号

    TX和RX信号线上采用的是差分信号传输方式,这种传输方式具有很高的抗噪声能力。

    • 强错误检测能力

    串行协议使用基干包的数据传输方式,对数据包采用了CRC校验。相比于PCI中采用的奇偶校验,CRC校验具有很强的检错能力。

    • 纠错与恢复

    因为采用基于包的传输方式并且带有CRC校验,接收设备能够检测出接收数据包中的错误并通知发送端出现了传输错误,发送端可以重新发送出现错误的数据包。

    • 全双工数据和控制流

    数据包可以在TX信号线上传输,同时可以在RX信号线上接收控制信息。SATA使用类似HOLD的流控原语来实时阻止数据发送以避免数据溢出。

    • 分割式数据传输

    在分割式数据传输中,request和completion可以不出现在同一个数据传输操作中。这不是串行总线所特有的必要特征。所有的串行总线都使用包和分割式数据传输协议进行数据传输。多数早期的并行总线(PCI、AHB)不支持分割式数据传输。最新的并行总线,如AXI 开始支持这一协议。

    缺点

    串行总线也存在一些不利之处。

    • 只支持点到点连接

    通过串行总线只能连接两个设备,而对于并行总线,可以在单一总线上连接多个设备,并目.很容易增减总线上的设备。对于串行总线,我们需要使用交换机和多个总线设备连接。

    • 更大的延迟

    由于串行及分层结构特点,串行结构的总线延迟更大一些。

    串行总线结构

    串行总线结构只允许点到点连接,一条串行总线只能连接两个设备,而并行总线可以同吋连接多个设备。在串行总线结构中,总线设备中需要包括两个基本电路部件:MAC控制器(通常简称为控制器)和PHY(主要实现模拟收发功能)。MAC具有分层结构,通常包括三个 层次。PHY包括两个部分:PCS和PMA。PCS(Physical Coding Sublayer,物理编码子层)主要实现编解码等数字逻辑功能。PMA主要实现时钟恢复、均衡和信号电平检测等模拟功能。

    下面我们将以PCIe和SATA为例,对串行总线结构加以分析,如图所示。

    2c62c0ff59219bbf1c1f9f34e0f37b58.png

    MAC控制器包括三个层次:PHY逻辑层 、 数据链路层和事务层。每一层都有自己特定的功能。

    PHY逻辑层

    两个相互联接设备的PHY逻辑层之间使用PHY层包进行通信,称为有序训练集合,如图所示。PHY层包被用于建立链路和确定交互的操作速度,在训练阶段结束时,双方进入连接阶段,此时它们已经做好了传输数据链路层和事务层包的准备。PHY层包产生于PHY层,终结于另一侧的PHY逻辑层,不会上交给其他层次。

    c57f1de5cd76df56330b490ed5b0ffc6.png

    数据链路层

    数据链路层使用短的、固定长度(2个dword/8字节)的包在两个设备间交互链路信息,如图所示。这些包也被称为DLLP(Data Link Layer Packet,数据链路层包)。DLLP被用于交换信用信息、ACK、NAK和功率管理协议。DLLP在本层产生,终止于对端的同一层, 不会进一步向上提交。

    28e72432b2e5353c9821d6f296acd7ff.png

    事务层

    本层在两个设备间进行实际的数据交互,如下图所示。这些包被称为TLP(Transaction Layer Packet,事务层包),TLP为变长包。TLP包括头域、数据净荷和CRC校验。一个TLP由start-of-packet符号开始,以END符号结束。

    0d05b15fd1039fc03ccd92a570a89a89.png

    串行总线时钟

    在PCIe中,平台提供100MHz参考时钟,通过PCIe插槽提供给总线设备。PCIe端点设备从PCIe连接器处获取该参考时钟并将其交给PHY PMA层。PMA内部有一个PLL,它根据输入的100MHz时钟和输入的RX数据流生成250MHz的时钟PCLK。PHY将PCLK提供给MAC发送数据(从MAC到PHY)和接收数据(从PHY到MAC)都同步于PCLK。对于PCIe,MAC的接收和发送电路工作在同一个时钟域。对于其他串行总线结构,如SATA收发电路时钟可能不同。在SATA中,发送和接收时钟是不同的,属于异步时钟。

    发送路径的微结构

    MAC和PHY PCS之间的接口是标准的,虽然这不一定必要,但标准化有利于IP核的开发,可提高不同芯片厂商IP核之间的互操作性。对于PCIe来说,该接口被称为PIPE接口。

    MAC提供的发送数据的位宽为8比特或16比特。PCLK的频率与数据总线的位宽有直接关系,数据位宽为8比特时,PCLK为250MHz数据位宽为16比特时,PCLK为125MHz,如图所示。

    00ca7a2918b58ad29b3e0755584b5048.png

    这两个频率是PCIe Genl所使用的,在Gen2中,二者都进行了翻倍。位宽变换电路模块可以将16比特的数据位宽转换成8比特的位宽,接着将其送入8b/10b编码器。编码器将每个8比特的数据转换成为10比特的编码值并将其传递到PHY的PMA层。PMA层使用一个高速时钟(Genl时为2.5GHz,Gen2时为5GHz)进一步将10比特的编码结果转换为单比特串行数据并通过TX信号线发出。

    接收路径的微结构

    PMA接收电路实现比特提取和串并变换功能,将单比特的串行接收数据变换成为10比特的并行数据,如图所示。

    88466fc5bea9f359e763c6ba2d7f96c8.png

    10比特的数据流从PMA接收电路进入PCS接收电路。此时的10比特数据流并非是字符对准的。在PCS内部,10比特数据流先后进入字符对准电路、弹性缓冲区、10b/8b解码电路并最终进入可选的8b/16b转换电路。

    字符对准

    PCIe接收的数据是以10比特的字符为组成单位的。PMA接收电路将接收数据组成10比特字符时没有按照字符边界进行。字符对准逻辑电路查找COMMA字符并以它为基础进行字符边界对准。对准后的字符流被送入弹性缓冲区,如图所示。

    19976dbf9a65f8790824289f7f5fd492.png

    弹性缓冲区

    PCIe链路两端所使用时钟的标称值均为250MHz。它们可以使用平台提供的同一个时钟,或者选择它们自带的时钟源来生成250MHz的工作时钟。当使用相互独立的时钟时,它们之间会有微小的偏差(偏差可能非常微小,但不会为0),此时,经过一段时间之后,会造成数据的上溢或下溢。总线一端的时钟频率可能比另一端略微高一些,频率低的一端会出现数据缓冲区上溢,频率高的一端会出现数据缓冲区下溢。串行总线中使用弹性缓冲区来处理时钟频率上的微小差别。我们将对PCIe和SATA中的弹性缓冲区加以介绍。

    位宽为10比特的接收符号流被写入一个FIFO。按照PCIe协议,在发送数据时,会按照一定的间隔定期发送填充包(称为SKIP集合)。这些填充包可以在不影响数据净荷、编码/解码、扰码/解扰码的情况下快速插入和去除。写入逻辑持续将10比特的字符写入FIFO,读岀逻辑持续将FIFO中的字符读出。如果写入速度比读出速度快,FIFO中的数据深度将逐渐增加。

    当FIFO中的数据深度达到了预先设定的上限时,写入逻辑会丢弃1个或多个SKIP字符。类似地,当写入速度低于读出速度时,FIFO中的数据深度会逐渐降低,当深度降至预先设定的下限时,读出逻辑不再从FIFO中读出数据,它会暂停读出数据,同时向数据通路中插入一个SKIP符号。这里的FIFO就是弹性缓冲区,其内部数据深度是变化的,可以用于调整读写时钟频率的微小偏差,如图所示。

    4a1e61ba9fb2709ff8e331b7c8e7b38a.png

    需要说明的是,这种工作机制可以用于处理微小的读写频率偏差,不适合处理较大的频率偏差(较大的时钟偏差需要深度较大的弹性缓冲区并且会引入较大的延迟)。规范中对频率偏差会提出限制,例如,PCIe中的频率偏差应小于300PPM。当时钟偏差被限定在一定PPM之内时,SKIP出现的间隔就可以计算得到。

    SATA使用了类似的机制,它会在每256个双字之间插入两个ALIGH原语。ALIGN原语根据两边的频率差可以快速地被丢弃或插入。

    10b/8b解码和8b/16b转换

    弹性缓冲区的输出进入解码器电路,它会将10比特的字符转换成为8比特的数据。如果PCS-MAC接口数据通道宽度为16比特,那么需要将两个连续的8比特数据拼接起来构成16比特的数据并送给接收MAC如果数据通路宽度为8比特,那么不需要做任何处理,直接送给接收MAC。

    后面会继续讲讲《串行总线更多结构》,敬请期待。

    032f0b24a3963054f4579f492b607e8c.gif

    NOW

    学习Xilinx FPGA最好的资料其实就是官方手册,下表总结了部分手册的主要介绍内容,关注我,持续更新中......

    文件名主标题内容简单介绍是否有中文版
    UG4767 Series FPGAs GTX/GTH  TransceiversGTX和GTH介绍,PCIe、serdes等学习必备
    UG4717 Series FPGAs SelectIO Resources描述 7 系列 FPGA 中可用的 SelectIO资源。
    UG1114PetaLinux Tools DocumentatonPetaLinux 工具文档 参考指南是,V2019.2
    UG949UltraFAST 设计方法指南(适用于 Vivado  Design Suite)赛灵思® UltraFast™  设计方法是用于为当今器件优化设计进程的一套最佳实践。这些设计的规模与复杂性需要执行特定的步骤与设计任务,从而确保设计每一个阶段的成功开展。依照这些步骤,并遵循最佳实践,将帮助您以最快的速度和最高的效率实现期望的设计目标是,V2018.1
    IP手册pg057FIFO GeneratorFIFO生成器IP使用手册
    pg104Complex Multiplier复数乘法器IP使用手册
    pg122RAM-Based Shift Register 移位寄存器IP使用手册

    45ca22f429c9dfff436af538e7189353.png

    推荐阅读

    【Vivado那些事】如何查找官网例程及如何使用官网例程

    【Vivado使用误区与进阶】总结篇

    【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键

    SystemVerilog数字系统设计_夏宇闻 PDF

    图书推荐|ARM Cortex-M0 全可编程SoC原理及实现

    简谈:如何学习FPGA

    Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目

    AD936x+ZYNQ搭建收音机(一)

    AD936x+ZYNQ搭建OpenWIFI

    无招胜有招-Vivado非工程模式下的详细设计

    面试中经常会遇到的FPGA基本概念,你会几个?

    推荐一些可以获取免费的国外的原版书籍(电子版)网站

    FPGA 的重构

    国产CPU概括

    从电子游戏历史看IC发展的助推剂

    80年代电子游戏及电脑游戏的发展历史

    PCIe总线的基础知识

    万字长文带你回顾电子游戏的七十多年历史(完整版)

    FPGA中异步复位,同步释放的理解

    OpenFPGA系列文章总结

    用Verilog设计一个16 位 RISC 处理器

    介绍一些新手入门FPGA的优秀网站(新增)

    Verilog数字系统基础设计-CR

    Verilog数字系统基础设计-奇偶校验

    建立和保持时间及时序简单理解

    (Xilinx)FPGA中LVDS差分高速传输的实现

    Xilinx Multiboot实例演示

    高速串行通信常用的编码方式-8b/10b编码/解码
    Verilog计时(微秒、毫秒和秒)脉冲的产生及同步整形电路

    图书推荐|一本图像/视频处理的强大工具书

    Verilog HDL-同步技术

    再说System Verilog 与 Verilog 的关系

    数模混合信号建模语言Verilog-AMS

    Intel/Altera 系列FPGA简介

    一块带给无数人年少欢乐的CPU,别说你没用过它

    Verilog在编写第一行代码之前

    【例说】Verilog HDL 编译器指令,你见过几个?

    穿越时空的爱恋-Z80 CPU的前世今生

    【Vivado】那些事儿-汇总篇

    古老CPU启示录-晶体管之路

    【Vivado那些事儿】约束的顺序

    童年修复系列-SNES芯片组介绍及FPGA实现

    优秀的 Verilog/FPGA开源项目介绍(二)-RISC-V

    展开全文
  • 随着嵌入式技术的发展,串行总线技术也被越来越多的应用于各个领域。比如CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性...
  • 目录 1.USB简介 2.... 2.1 USB的性能特点 2.2、 USB的电气特性 ... 4.1 包(package)是什么? 4.1.1 同步域(SYNC) 4.1.2 标识符字段(PID) 4.1.3 数据字段(DATA) 4.1.4 循环冗余校验字段(CRC) 4...
    
    

    USBUniversal Serial Bus通用串行总线是由CompaqDigital EquipmentIntelMicrosoftIBMNECNorthern  Telecom7家公司联合开发的一种流行的外设接口标准。

    ——1994年开始研究,

    ——1996年  USB 1.0 速度只有1.5Mb/s

    ——1998年  USB 1.1版本

    传输速率(两种模式):低速(Low Speed1.5Mbps

                                            全速(Full Speed)12Mbps

    ——20004月  USB 2.0版本

    USB 2.0兼容所有USB 1.0外部设备及电缆线等,传输速率达480Mbps(高速High Speed 系列)。

    ——200811月  USB 3.0版本 

    最大传输速率高达5.0Gb/s,也就是625MB/s ——Super Speed

    引入了新的电源管理机制,支持待机、休眠和暂停等状态。


    • 2. USB特性

     

    • 2.1 USB的性能特点

    Ø  传输速度快

    Ø 连接简单快捷 

    可以热插拔,

    Ø 通用连接器

    A型连接头用于固定的外围设备;B型连接头用于经常插拔的设备。 

    Ø 无须外接电源 数据线供电

    Ø  扩充外设能力强

    Ø  不需要系统资源

    USB设备不占用内存或I/O地址空间,而且也占用IRQDMA通道,所有事务处理都是由USB主机管理。

    Ø  错误检测和恢复

    USB事务处理包括错误保护机制,确保数据无错误发送。在发生错误时,事务处理可以重来。

     

    • 2.2 USB的电气特性

    (1)信号线

    连接序号

    信号名称

    典型连接线

    1

    VBUS USB电源)

    2

    D+(正差分信号)

    3

    D-(负差分信号)

    绿

    4

    GND (USB)

    外层

    屏蔽层

    (2)全速/低速USB总线设备连接方法

    全速设备:D+上接1.5k上拉电阻;

    低速设备: D-上接1.5k上拉电阻;

                                                                      USB全速(高速)设备硬件接线图 

                                                                                 USB低速设备硬件接线图

    (3)电气特性

    收发器:对地电源电压为4.75~5.25V,设备吸入的最大电流值为500mA D+D-上不加电压。

    USB设备:高速在D+上加3.0~3.6V电压, 低速反之

    D+、D-线电气特性:

        无驱动:高速VD+ 2.7V,  VD-0.8V, 低速反之;

        有驱动:高速VD+ 2.0V,  VD-2.0V, 低速反之。

    D+、D-线信号特性:

        高电平:VD+ VD-200mVVD+ 2.0V

        低电平:VD- VD+ 200mVVD- 2.0V

    D+、D-线数据特性:NRZI(不归零反向码)

        逻辑0D+D-线上电平高、低间跳变;

        逻辑1D+D-线上电平不变。


    • 3.  USB总线系统中的设备

    可以分为三个类型:

    USB主机( USB主控制器/根集线器(USB Host) ):只能有一个,管理USB系统,每秒产生一帧数据;发送配置请求对USB设备进行配置操作,对总线上的错误进行管理和恢复。

    USB 集线器(USB HUB):类似于网络集线器,完成USB设备的添加(扩展)、删除和电源管理等。

    USB总线设备(USB功能外设 USB function)。


    •  4. USB2.0 传输协议

    上面是UART协议一个8位数据传输的帧格式。

    上面是SPI协议一个8位数据传输的时序。片选拉低,对应外设被选中,在相应时钟沿进行数据采样,片选拉高停止传输。

    基本可以看出,要实现串口通信,想把数据一个接一个的传出去或收回来,至少传输数据前给个开始信号,传输结束后给个停止信号

    USB同样如此,以下是USB通信协议的几个重要概念:

    我们定义这样几个状态:假设D+,D-分别表示usb信号线的电平信号。那么对于usb full speed function(high speed ,low speed是不同的),我们定义差分数据线上可能出现的四个状态:

    Data J state:D+=1,D-=0;

    Data K state:D+=0,D-=1;

    SE0:D+=D-=0;

    SE1:D+=D-=1;


    •  4.1 包(package)是什么?

    数字串构成域,域再构成包,包是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。

      USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),包的基本格式如下:

    SYNC(8或32 bits)PID(8 bits)DATA(0-1023bytes)CRC(5或6bits )EOP(2 bit)

    域(字段)由若干位组成(多少位由具体的域决定),域可分为七个类型:

     

    • 4.1.1 同步域(SYNC)

    由8位/32位组成,作为每个数据包的前导,用来产生同步作用,使USB设备与总线的包传输率同步,它的数值固定为000000001。

    • 作用:① 通知USB串行接口引擎数据要开始传输;② 同步主机和设备之间的时钟。
    • 格式:Full/low-speed为8位,high-speed为32位。① 全速/低速设备的同步域为00000001;② 高速设备的同步域为31个0,后面跟1个1;注意:这是对发送端的要求,接收端在解码时,0的个数可以少于这个数。

     

    • 4.1.2 标识符字段(PID)

    • 包标识符PID是用来标识一个包的类型。
    • PID共有8位,目前USB协议仅使用4位(PID0~PID3),另外4位(PID4~PID7)是PID0~PID3的取反,用来校验PID。
    • 传输的顺序为PID0,PID1,PID2,PID3,...,PID7。
    PID0PID1PID2PID3~PID0~PID1~PID2~PID3

     包的类型包括令牌包(token packet, PID1~0为01)、数据包(data packet, PID1~0为11)、握手包(handshake packet, PID1~0为10)、特殊包(special packet, PID1~0为00):

    PID类型PID名PID[3:0]说明
    令牌类OUT0001B通知设备将要输出数据
    IN1001B通知设备将要输入数据
    SOF0101B通知设备这是一个帧起始包
    SETUP1101B通知设备将要开始一个控制传输
    数据类DATA00011B不同类的数据包
    DATA11011B
    DATA2*0111B
    MDATA*1111B
    握手类ACK0010B确认
    NACK1010B不确认
    STALL1110B挂起
    NYET*0110B未准备好
    特殊类PRE1100B前导(这是一个令牌包)
    ERR*1100B错误(这是一个握手包)
    SPLIT*1000B分裂事务(这是一个令牌包)
    PING*0100BPING测试(这是一个令牌包)
    -0000B保留,未使用
    • 4.1.2.1  令牌包

    (1)OUT、IN、SETUP令牌包格式:

    同步域8位标识符PID7位地址4位端点号5位CRC5校验EOP

    例如: 

    (2)SOF令牌包格式:

    在每帧(或微帧)开始时发送,以广播的形式发送,所有USB全速设备和高速设备都可以接收到SOF包。  

        1) 对于full-speed总线,每隔1.00 ms ±0.0005 ms发送一次;
        2) 对于high-speed总线,每隔125 μs ±0.0625 μs发送一次;

    同步域8位标识符PID11位帧号5位CRC5校验EOP

    例如:

    • 4.1.2.2 数据包

    • 用来携带主机与设备之间要传递的信息,其内容和长度根据PID、传输类型的不同而各不相同,有四种类类型的数据包:DATA0, DATA1, DATA2,and MDATA。

    数据包格式:

    同步域8位标识符PID字节0字节1字节n16位CRC16校验EOP

    例如:

    • 4.1.2.3 握手包

    • ACK:正确接收数据,并且有足够的空间容纳数据。主机和设备都可以使用ACK来确认,而NAK、STALL、NYET只有设备才能够返回,主机不能使用这些握手包。
    • NAK:① 没有数据需要返回;② 数据接收正确,但是没有足够的空间容纳数据。
    • STALL:设备无法执行这个请求或者设备已挂起。设备返回STALL,需要主机干预才能解除这种STALL状态。
    • NYET:只在USB2.0高速设备输出设备中使用,表示设备本次数据成功接收,但是没有足够的空间来接收下一次的数据。主机在下一次输出数据前,将使用PING令牌包来探测设备是否有足够的空间接收数据,以免浪费不必要的带宽和时间。

    握手包格式:

    同步域8位标识符PIDEOP

    例如: 

    • 4.1.2.4 特殊包不介绍 

     

    • 4.1.3  数据字段(DATA)

    在USB包中,数据字段可以包含设备地址、端点号、帧序列号以及数据等内容。它仅存于DATA数据包中,根据不同的传输类型,拥有不同的字节大小,从0到1023字节(同步传输)。在总线传输中,总是先传输字节的最低位,最后传输字节的最高位。

    (1)ADDR设备地址数据域:

    ADDR数据域由7位组成,可用来寻址多达127个外围设备。

    (2)ENDP端点数据域:

    ENDP数据域由4位组成,通过这4个位最多可寻址出32个端点。这个ENDP数据域仅用在IN、OUT与SETUP令牌信息包中。对于慢速设备可支持端点0以及端点1作为中断传输模式,而全速设备则可以拥有16个输入端点(IN)与16个输出端点(OUT)共32个端点。

    (3)Frame Number:

    当USB令牌包的PID为SOF时,其数据字段必须为11位的帧序列号。帧序列号由主机产生,且每个数据帧自动加一,最大数值为0x7FF。当帧序列号达到最大数时将自动从0开始循环。

     

    • 4.1.4  循环冗余校验字段(CRC)

    根据不同的信息包类型,CRC数据域由不同数目的位所组成。其中重要的数据信息包采用CRC16的数据域(16位),而其余的信息包类型则采用CRC5的数据域(5位)。

     

    • 4.1.5 包结尾字段

    全速/高速模式的EOP是一个约为2个数据宽度的SE0,高速模式的EOP是通过故意的位填充错误实现的。单端0(SE0):D+和D-同时保持低电平。单端0的用处:① 包结束;② 复位信号(USB集线器对USB设备的复位操作,就是将总线设置为SE0约10ms)。

    Q: 如何一个位填充错误是EOP还是传输错误?A: 通过CRC校验,即如果CRC正确,则说明这个位填充是EOP;否则说明传输错误。


    • 4.2 事务(transaction)是什么?

    在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transaction)即:The delivery of service to an endpoint。 一个transaction由一个到几个packet组成,具体由哪些packet组成,它取决于具体的事务。

    Transaction可以分成INOUTSETUP三大事务,如下: 

    Setup transaction:主机用来向设备发送控制命令 ;
                           Data IN transaction:主机用来从设备读取数据 ;
                                       Data OUT transaction:主机用来向设备发送数据  ;

    Transaction可能由如下包组成:

           • 一个token packet

           • 可选的data pcket

           • 可选的handshake packet

           • 可选的special packet

     

    • 4.2.1 输入(IN)事务处理

         输入事务处理:表示USB主机从总线上的某个USB设备接收一个数据包的过程。

            •【正常】的输入事务处理

           •【设备忙】时的输入事务处理    


         •【设备出错】时的输入事务处理

      

    4.2.2. 输出(OUT)事务处理

            输出事务处理:表示USB主机把一个数据包输出到总线上的某个USB设备接收的过程。

        •【正常】的输出事务处理

        •【设备忙时】的输出事务处理

     

        •【设备出错】的输出事务处理

     

    4.2.3 设置(SETUP)事务处理  

       •【正常】的设置事务处理

     
       •【设备忙时】的设置事务处理


       •【设备出错】的设置事务处理


     4.3 什么是传输?

      在USB的传输中,定义了4种传输类型:

           • 控制传输 (Control Transfer)

           • 中断传输 (Interrupt Transfer)

           • 批量传输 (Bulk Transfer)

           • 同步传输 (Isochronous)

    4.3.1 控制传输 (Control Transfer)

          控制传输由2~3个阶段组成:

          1) 建立阶段(Setup)

          2) 数据阶段(无数据控制没有此阶段)(DATA)

          3) 状态阶段(Status)

         •每个阶段都由一次或多次(数据阶段)事务传输组成(Transaction)。

          控制数据由USB系统软件用于配置设备(在枚举时),其它的驱动软件可以选择使用control transfer实现具体的功能,数据传输是不可丢失的。

    4.3.1.1 建立阶段

         主机从USB设备获取配置信息,并设置设备的配置值。建立阶段的数据交换包含了SETUP令牌封包、紧随其后的DATA0数据封包以及ACK握手封包。它的作用是执行一个设置(概念含糊)的数据交换,并定义此控制传输的内容(即:在Data Stage中IN或OUT的data包个数,及发送方向,在Setup Stage已经被设定)。

    4.3.1.2 数据阶段

         根据数据阶段的数据传输的方向,控制传输又可分为3种类型:

         1) 控制读取(读取USB描述符)

         2) 控制写入(配置USB设备)

         3) 无数据控制

         数据传输阶段:用来传输主机与设备之间的数据。

         • 控制读取

         是将数据从设备读到主机上,读取的数据USB设备描述符。该过程如下图的【Control Read】所示。对每一个数据信息包而言,首先,主机会发送一个IN令牌信息包,表示要读数据进来。然后,设备将数据通过DATA1/DATA0数据信息包回传给主机。最后,主机将以下列的方式加以响应:当数据已经正确接收时,主机送出ACK令牌信息包;当主机正在忙碌时,发出NAK握手信息包;当发生了错误时,主机发出STALL握手信息包。

         • 控制写入

           是将数据从主机传到设备上,所传的数据即为对USB设备的配置信息,该过程如下的图【Control Wirte】所示。对每一个数据信息包而言,主机将会送出一个OUT令牌信息包,表示数据要送出去。紧接着,主机将数据通过DATA1/DATA0数据信息包传递至设备。最后,设备将以下列方式加以响应:当数据已经正确接收时,设备送出ACK令牌信息包;当设备正在忙碌时,设备发出NAK握手信息包;当发生了错误时,设备发出STALL握手信息包。

    4.3.1.3 状态阶段

           状态阶段:用来表示整个传输的过程已完全结束。
           状态阶段传输的方向必须与数据阶段的方向相反,即原来是IN令牌封包,这个阶段应为OUT令牌封包;反之,原来是OUT令牌封包,这个阶段应为IN令牌封包。

           对于【控制读取】而言,主机会送出OUT令牌封包,其后再跟着0长度的DATA1封包。而此时,设备也会做出相对应的动作,送ACK握手封包、NAK握手封包或STALL握手封包。

          相对地对于【控制写入】传输,主机会送出IN令牌封包,然后设备送出表示完成状态阶段的0长度的DATA1封包,主机再做出相对应的动作:送ACK握手封包、NAK握手封包或STALL握手封包。
     

     4.3.2 批量传输 (Bulk Transfer)

          •用于传输大量数据,要求传输不能出错,但对时间没有要求,适用于打印机、存储设备等。

          •批量传输是可靠的传输,需要握手包来表明传输的结果。若数据量比较大,将采用多次批量事务传输来完成全部数据的传输,传输过程中数据包的PID 按照 DATA0-DATA1-DATA0-…的方式翻转,以保证发送端和接收端的同步。
          • USB 允许连续 3次以下的传输错误,会重试该传输,若成功则将错误次数计数器清零,否则累加该计数器。超过三次后,HOST 认为该端点功能错误(STALL),放弃该端点的传输任务。
          • 一次批量传输(Transfer)由 1 次到多次批量事务传输(Transaction)组成。
          • 翻转同步:发送端按照 DATA0-DATA1-DATA0-…的顺序发送数据包,只有成功的事务传输才会导致 PID 翻转,也就是说发送端只有在接收到 ACK 后才会翻转 PID,发送下一个数据包,否则会重试本次事务传输。同样,若在接收端发现接收到到的数据包不是按照此顺序翻转的,比如连续收到两个 DATA0,那么接收端认为第二个 DATA0 是前一个 DATA0 的重传。

          它通过在硬件级执行“错误检测”和“重传”来确保host与device之间“准确无误”地传输数据,即可靠传输。它由三种包组成(即IN事务或OUT事务):

            1) token

            2) data

            3) handshake

    1) For IN Token (即:IN Transaction)

         • ACK: 表示host正确无误地接收到数据

         • NAK: 指示设备暂时不能返回或接收数据  (如:设备忙)

         • STALL:指示设备永远停止,需要host软件的干预 (如:设备出错) 

    2) For OUT Token (即:OUT Transaction)

         如果接收到的数据包有误,如:CRC错误,Device不发送任何handshake包

         • ACK: Device已经正确无误地接收到数据包,且通知Host可以按顺序发送下一个数据包

            • NAK: Device 已经正确无误地接收到数据包,且通知Host重传数据,由于Device临时状况(如buffer满)

            • STALL: 指示Device endpoint已经停止,且通知Host不再重传

    3) Bulk读写序列

          即由一系统IN事务或OUT事务组成。

    4.3.3 中断传输(Interrupt Transfer)

        中断传输由IN或OUT事务组成。 

        中断传输在流程上除不支持PING 之外,其他的跟批量传输是一样的。他们之间的区别也仅在于事务传输发生的端点不一样、支持的最大包长度不一样、优先级不一样等这样一些对用户来说透明的东西。
         主机在排定中断传输任务时,会根据对应中断端点描述符中指定的查询间隔发起中断传输。中断传输有较高的优先级,仅次于同步传输。
         同样中断传输也采用PID翻转的机制来保证收发端数据同步。下图为中断传输的流程图。

         中断传输方式总是用于对设备的查询,以确定是否有数据需要传输。因此中断传输的方向总是从USB设备到主机。

        

         DATA0或DATA1中的包含的是中断信息,而不是中断数据。

    4.3.4 同步传输(Isochronous Transfer)

    1) 它由两种包组成:

            1) token

            2) data

           同步传输不支持“handshake”和“重传能力”,所以它是不可靠传输。

          同步传输是不可靠的传输,所以它没有握手包,也不支持PID翻转。主机在排定事务传输时,同步传输有最高的优先级。

          同步传输适用于必须以固定速率抵达或在指定时刻抵达,可以容忍偶尔错误的数据上。实时传输一般用于麦
    克风、喇叭、UVC Camera等设备。实时传输只需令牌与数据两个信息包阶段,没有握手包,故数据传错时不会重传。

    4.4  USB总线上的工作情况


     5. 几点重要备注

     

    5.1 几个概念之间的关系

    •  一个【传输】(控制、批量、中断、等时)由多个【事务】组成;一个【事务】(IN、OUT、SETUP)由一个或多个【Packet】组成。
    • 包是USB总线上数据传输的最小单位,不能被打断或干扰,否则会引发错误。若干个数据包组成一次事务传输,一次事务传输也不能打断,属于一次事务传输的几个包必须连续,不能跨帧完成。一次传输由一次到多次事务传输构成,可以跨帧完成。
    • USB数据在【主机软件】与【USB设备特定的端点】间被传输。【主机软件】与【USB设备特定的端点】间的关联叫做【pipes】。一个USB设备可以有多个管道(pipes)。
    • 帧(frame)是什么?

    帧是一个时间概念,在USB中,高速USB 总线的帧周期为125us,全速以及低速 USB 总线的帧周期为 1ms,它是一个独立的单元,包含了一系列总线动作,USB将1帧分为好几份,不同的部分执行不同的功能。

    数据在 USB总线上的传输以包为单位,包只能在帧内传输。帧的起始即帧头由一个特定的包(SOF 包)表示,帧尾为 EOF。EOF不是一个包,而是一种电平状态,EOF期间不允许有数据传输。 

     

    5.2 几点补充

    (1) 虽然高速USB总线和全速/低速USB总线的帧周期不一样,但是SOF包中帧编号的增加速度是一样的,因为在高速USB系统中,SOF包中帧编号实际上取得是计数器的高11位,最低三位作为微帧编号没有使用,因此其帧编号的增加周期也为 1mS。

    (2) PC机识别USB设备是否插入

    USB接口只有4条线: VCC(5V),GND,D-,D+。 PC机的USB插孔的D-和D+数据线均连接15K欧姆的下拉电阻。而USB设备端的D-或D+数据线连接1.5K欧姆的上拉电阻。当设备插入PC机的时候,会将PC机的D-或D+端的电压拉高,当PC机在D-或D+端检测到高电平时,就知道有设备插入了如果是PC机D-端被拉高,接入的则是USB低速设备;如果是PC机D+端被拉高,接入的则是USB全速或高速设备,具体是全速设备还是高速设备,会由PC机和USB设备发包握手确定。

    (3) PC机获取外部设备信息

    检测到设备插入,主机以描述符的形式向从机索要它的信息,从机同样以描述符的形式实话实说(一旦知道你插入了,人家就得问你是谁,你也必须说实话,获取她的同意,否则违法)。明确一点:和其他主从机设备通信一样,USB外部设备(从机)不会主动给PC机(主机)发数据,除非主机有那个需求,向从机索要。

    (4)USB的传输类型:

          a. 控制传输:可靠,时间有保证,比如:USB设备的识别过程
          b. 批量传输: 可靠, 时间没有保证, 比如:U盘
          c. 中断传输:可靠,实时,比如:USB鼠标
          d. 实时传输:不可靠,实时,比如:USB摄像头

    • 所有USB通信数据的来源和目的都是基于端点,每个USB外设只有唯一一个地址,最多包含16个端点,注意:3.(IN) 和3.(OUT)是两个不同的端点。
    • USB传输的对象:端点(endpoint)

         每一个端点都有传输类型,传输方向。我们说"读U盘"、"写U盘",可以细化为:把数据写到U盘的端点1,从U盘的端点2里读出数据。除了端点0外,每一个端点只支持一个方向的数据传输。注意:端点0用于控制传输,既能输出也能输入。 主从模式通信中,不特别声明,程序里说的输入(IN)、输出(OUT) "都是" 基于USB主机的立场说的。比如鼠标的数据是从键盘传到PC机, 对应的端点称为"输入端点"。

    (5)数据编解码和位填充 

    USB采用NRZI(非归零编码)对发送的数据包进行编码 。
           输入数据0, 编码成“电平翻转” ;输入数据1, 编码成“电平不变” ;(NRZI遇0翻转,遇1不变)。
           编码出来的序列,高电平:J状态;低电平:K状态 。

    在USB中,每个USB数据包,最开始都有个同步域(SYNC),这个域固定为 0000 0001,这个域通过NRZI编码之后,就是一串方波,接受者可以用这个 SYNC 域来同步之后的数据信号。此外,因为在 USB的NRZI编码下,逻辑0会造成电平翻转,所以接受者在接受数据的同时,根据接收到的翻转信号不断调整同步频率,保证数据传输正确.但是,这样还是会有一个问题,就是虽然接受者可以主动和发送者的频率匹配,但是两者之间总会有误差。假如数据信号是 1000 个逻辑1,经过 USB 的 NRZI 编码之后,就是很长一段没有变化的电平,在这种情况下,即使接受者的频率和发送者相差千分之一,就会造成把数据采样成 1001 个或者 999 个 1了。USB 对这个问题的解决办法,就是强制插 0,也就是传说中的 bit-stuffing,如果要传输的数据中有 7 个连续的 1,发送前就会在第 6 个 1 后面强制插入一个 0,让发送的信号强制出现翻转,从而强制接受者进行频率调整。接受者只要删除 6个连续1之后的 0,就可以恢复原始的数据了。 

    展开全文
  • PS/2接口是目前最常见的鼠标接口,最初是IBM公司的专利,俗称“小口”。这是一种鼠标和键盘的专用接口,是一种6针的圆型接口。但鼠标只使用其中的4针传输数据和供电,其余2个为空脚。...在BTX主板规范中,这也是即将被...
  • 通用串行总线控制器出现叹号是什么情况?而我们又该如何解决呢?小编为大家整理了几种不同情况下的解决方法!1、U盘使用过U盘量产工具等系统操作后,经常会出现以下问题:通用串行总线控制器总是感叹号,插入外设时...

    通用串行总线控制器出现叹号是什么情况?而我们又该如何解决呢?小编为大家整理了几种不同情况下的解决方法!

    1、U盘

    使用过U盘量产工具等系统操作后,经常会出现以下问题:通用串行总线控制器总是感叹号,插入外设时USB无反应。问题描述:通用串行总线控制器总是感叹号?无论我怎么更新驱动都还是感叹号 如图:

    f0cb5ca8e8c78e94eb46bbbfa32bf7a4.png

    然后驱动提示 如图:

    99f12d42af7fce09b31ae68f76491bda.png

    解决方法如下:

    “开始菜单”-“运行”-输入命令:regedit,打开系统注册表。依次展开下面的注册表项:

    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass{36FC9E60-C465-11CF-8056-444553540000}

    在右面窗口找到“upperfilter”项或“lowerfilter”项,并删除,然后进入设备管理器中把通用串行总线控制器下面的所有带叹号的设备都卸载掉。在设备管理器的菜单中,点“操作”-“扫描检测硬件改动”,让系统自动重装一下驱动即可。另外补充:对于使用过U盘量产工具的,造成这种现象的原因,是由于量产工具自带的驱动造成的,并且一般量产工具也都提供驱动卸载的功能。所以在量产完成后,执行驱动卸载工具,把量产工具自带的驱动卸载掉,即不会发生此现象。

    2、win7 系统

    1、运行注册表编辑器(开始--》运行--》regedit);

    2、依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\

    3、在这下面有很多用“{}”括起来的项,如{36FC9E60-C465-11CF-8056-444553540000}(不同的机器可能不一样);

    4、右边发现有个表项的值为“Universal Serial Bus controllers“,找到并删除“upperfilters”项或“lowerfilters”项;

    5、右键“我的电脑”,“属性”,“设备管理器”,把通用串行总线控制器下面的所有带叹号的设备都删除,扫描检测硬件改动,会一直安装,OK后重启。

    3、XP系统

    1、注册表打开 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\

    2、在这下面“{}”括起来的项,查看“通用串行总线控制器”,在右面窗口找到并删除“upperfilter”项或“lowerfilter”项,然后进入设备管理器中把通用串行总线控制器下面的所有带叹号的设备都删除,扫描检测硬件安装即可。

    4、Win10系统

    问题背景:更新某软件并重启后,USB插入外设无反应。

    问题查找:打开设备管理器,发现通用串行总线控制器下的设备驱动全部显示黄色感叹号

    解决办法:

    1、运行注册表编辑器(开始--》运行--》regedit)

    2、依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\

    3、在这下面有很多用“{}”括起来的项,如:{36FC9E60-C465-11CF-8056-444553540000}

    4、依次查看,如果在右边发现有个表项的值为“USB“,则找到并删除其下的 “upperfilters” 或 “lowerfilters” 项;

    5、右键“我的电脑”,“属性”,“设备管理器”,把通用串行总线控制器下 面的所有带叹号的设备都删除

    6、右键设备管理器,扫描检测硬件改动,问题解决。

    展开全文
  • I2C总线是由Philips(飞利浦)公司开发的一种简单、双向二线制同步串行总线。 它只需要两根线即可在连接于总线上的器件之间传送信息。 SDA(串行数据线) ----> 双向 I/O 线,需通过上拉电阻接电源VCC。 SCL ...

    1、简介

    I2C总线是由Philips(飞利浦)公司开发的一种简单、双向二线制同步串行总线。
    它只需要两根线即可在连接于总线上的器件之间传送信息。

    SDA(串行数据线) ----> 双向 I/O 线,需通过上拉电阻接电源VCC。
    SCL (串行时钟线) ----> 总线空闲时,两根线都是高电平。

    每个连到总线的器件都有 唯一的地址。

    I2C总线是一个多 master 总线,通过仲裁防止数据破坏,但同一时刻只允许有一个 master 。

    可编程器件既可作为 master 也可作为 slave。任何器件都可以作为transmitter 或 receiver。

    1

    2、术语

    master (主机) :初始化start数据传送,产生时钟信号,stop数据传送的器件。
    slave (从机) :被寻址的器件均被认为是从器件

    transmitter(发送器):发送数据到总线的器件
    receiver (接收器):从总线接收数据的器件

    仲裁:多个主机同时想控制总线,只允许一个主机控制总线并使报文不被破坏的过程
    在总线上主和从、从和收、发的关系不是恒定的,取决于此时数据传送方向。
    I2C通信方式为半双工,只有一根SDA线,同一时间只可以单向通信。

    3、仲裁

    I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。

    3.1、SCL线的同步(时钟同步)

    SCL同步,是由于总线具有线“与”的逻辑功能。
    只要有一个器件发低电平时,总线就为低电平。
    所有的器件都发高电平时,总线才为高电平。

    SCL 时钟的低电平周期由低电平时钟周期最长的器件决定,
    SCL 时钟的高电平周期由高电平时钟周期最短的器件决定。

    在这里插入图片描述

    (1)、SCL 线的高->低切换会使器件开始数它们的低电平周期,而且一旦器件的时钟变低电平,它会使 SCL 线保持这种状态直到到达时钟的高电平。

    (2)、如果另一个时钟仍处于低电平周期,这个时钟的低到高切换不会改变 SCL 线的状态,因此SCL 线被有最长低电平周期的器件保持低电平。此时低电平周期短的器件会进入高电平的等待状态。

    (3)、当所有有关的器件数完了它们的低电平周期后,时钟线被释放并变成高电平。所有器件会开始数它们的高电平周期,首先数完成高电平周期的器件会再次SCl线拉低。

    3.2、SDA仲裁

    SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。节点在发送 1 bit数据后,比较总线上所呈现的数据与自己发送的是否一致。一致,就继续发送;不一致,退出竞争。

    SDA线的仲裁可以保证I2C总线系统在多个master同时企图控制总线时通信正常进行并且数据不丢失。总线系统通过仲裁只允许一个master可以继续占据总线。

    在这里插入图片描述

    说明

    DATA1和DATA2分别是两个master向总线所发送的数据信号,SDA为总线上所呈现的数据信号,SCL是总线上所呈现的时钟信号。

    仲裁过程:

    当master1、2同时发送start时,两个主机都发送了高电平信号。这时总线上呈现的信号为高电平,两个主机都检测到总线上的信号与自己发送的信号相同,继续发送数据。

    第2个T,2个主机都发送低电平信号,在总线上呈现的信号为低电平,仍继续发送数据。在第3个T ,主机1发送高电平信号,而主机2发送低电平信号。根据总线的线“与”的逻辑功能,总线上的信号为低电平,这时主机1检测到总线上的数据和自己所发送的数据不一样,就断开数据的输出级,转为从机接收状态。这样主机2就赢得了总线,而且数据没有丢失,即总线的数据与主机2所发送的数据一样,而主机1在转为从机后继续接收数据,同样也没有丢掉SDA线上的数据。因此在仲裁过程中数据没有丢失。

    4、常见的器件

    器件名主机/从机发送器/接收器
    微控制器master、slavetransmitter、receiver
    存储器slavetransmitter、receiver
    es8388slavetransmitter、receiver
    LCD驱动器slavereceiver

    5、特征

    数据单位:以字节(8位)为单位进行双向传输,高位在前。

    传输字节数量:不受限制。

    器件地址:7bit,还有1个bit预留给读写标志位,代表传输方向。

    传输速率
    标准模式 100 kbit/s,
    快速模式 400 kbit/s,
    高速模式 3.4 Mbit/s。

    6、传输条件

    传输必须以一个起始信号(start)作为开始条件。当SCL为高电平而SDA由高到低的跳变,表示产生一个起始条件。

    传输必须以一个结束信号(stop)作为停止条件。当SCL为高电平而SDA由低到高的跳变,表示产生一个停止条件。

    start和stop都是由master产生的。

    起始条件后总线被认为处于忙(busy)的状态, 在停止条件后总线被认为再处于空闲(idle)状态。

    在这里插入图片描述

    7、数据传输

    master在SCL产生单个时钟脉冲,transmitter将在SDA上传输一个bit。一个byte按高位到低位的顺序传完后,紧接着receiver回复ACK。每个字节后必须跟一个响应位。

    ACK (acknowledge 告知已收到) : receiver已经成功地接收了该字节。
    NACK(not acknowledge 告知未收到) :一般表示receiver没有成功接收该字节。

    在这里插入图片描述

    7.1、响应(ACK)如何产生?

    传送数据时,SCL高电平期间,SDA上电平必须稳定。
    低电平为数据0,高电平为数据1。

    在SCL为低电平期间,才允许SDA上的电平改变状态。

    在响应的时钟脉冲期间transmitter释放SDA线,receiver将 SDA 线拉低(ACK)。

    在这里插入图片描述

    7.2、不响应(NACK)如何产生?

    当slave不能响应address时,slave必须使SDA保持高电平(NACK)。

    当slave响应了address,但不能接收更多字节,需slave 在last byte后产生NACK。

    当有master receiver,它必须在接收完last byte后产生一个NACK,向slave transmitter通知结束。

    在这里插入图片描述

    7.3、slave如何响应从机address?

    当master发送slave地址到总线上,系统中的每个器件都在起始条件后,将总线上前7 位与自己的地址比较,如果一样器件会认为被寻中,回复ACK,至于是从机 receiver还是从机transmitter都由 R/ W 位决定。

    在这里插入图片描述
    例如:上图发出的地址数据是0x40,前7位是0x20,被寻址的器件做从机 receiver

    8、时序

    第1种:master往slave写数据

    第2种:master往slave写数据,再从slave读数据

    第3种:master从slave读数据

    8.1、master往slave写数据(传输方向不变)

    假设微控制器 A ,发送数据到,微控制器 B,传输数据过程如下:
    在这里插入图片描述
    规则:

    在这里插入图片描述
    示例:

    在这里插入图片描述
    slave地址 : 0x20
    写标志 : 0x00
    寄存器地址 : 0x03
    数据 : 0x00 , 0x01

    byte1 = ( slave地址<< 1 ) | 写标志 = 0100 0000 = 0x40

    8.2、master往slave写数据,再从slave读回数据(传输方向改变)

    假设微控制器 A ,想先往微控制器 B写数据,再从微控制器 B接收信息,传输数据过程如下:

    在这里插入图片描述
    规则:

    在这里插入图片描述
    示例:

    在这里插入图片描述
    slave地址 : 0x20
    数据 : 0x01
    寄存器地址 : 0x01
    读写标志 : 0x00(写),0x01(读)
    Sr : 重复开始

    byte1 = ( slave地址<< 1 ) | 写标志 = 0100 0000 = 0x40
    byte3 = ( slave地址<< 1 ) | 读标志 = 0100 0001 = 0x41

    8.3、master从slave读数据

    假设微控制器 A ,想直接从微控制器 B,接收信息,传输数据过程如下:

    在这里插入图片描述
    规则:

    在这里插入图片描述
    示例:

    假如slave地址 : 0x20
    读标志 : 0x01

    byte1 = ( slave地址<< 1 ) | 读标志 = 0100 0001 = 0x41

    9、IIC控制器描述

    支持 IIC Master/Slave 模式,master时支持7位和10位寻址;
    支持 IIC transmitter 和 receiver 功能;

    Controller slave 为7位地址,可配置,支持地址广播呼叫;
    IIC 总线速率可配置;
    支持中断和查询操作方式操作。

    9.1、寄存器分类

    (1)控制寄存器
    (2)参数寄存器
    (3)中断相关寄存器
    (4)状态寄存器
    (5)数据发送寄存器、数据接收寄存器
    (6)Slave地址寄存器

    10、实测图片

    10.1、高低电平宽度

    在这里插入图片描述

    10.2、START/STOP hold time

    在这里插入图片描述

    10.3、DATA hold time

    在这里插入图片描述

    展开全文
  • 前言 眼图的测量对于高速串行总线的重要性不言而喻,眼图反映了总线通道环境的优劣,信号的好坏等等,正确的识别眼图是一项基础技能,如果具体识别眼图呢? 下面详细地与你分享! 眼图的形成原理 简单来说,眼图的...
  • I2C总线(Inter Integrated-Circuit)是由PHILIPS公司在上世纪80年代发明的一种电路板级串行总线标准,通过两根信号线——时钟线SCL和数据线SDA——即可完成主从机的单工通信。总线硬件连接极其简单,不同I2C设备挂...
  • Universal Serial Bus (USB ) 通用串行总线

    千次阅读 2015-09-14 10:49:52
    USB是英文 Universal Serial Bus 的缩写,翻译成中文的含义是“通用串行总线”。   USB,是英文Universal Serial Bus(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑...
  • 几乎任何地改变都是趋利避害:拿芯片间通信为例,过去几乎完全是并行总线,碍于技术限制,使用串行总线所需的serialize(串行化)以及deserialize(解串行化)所需的逻辑量远远超过了减少引脚数量所带来的节省。...
  • 文章目录总线概念常用术语总线位宽总线的工作频率总线带宽写在最后 总线概念 总线最开始是计算机里的概念,它表示计算机内部以及计算机之间传输数据的共同通道。 计算机中...
  • CAN)的简称,是由以研发和生产汽车电62616964757a686964616fe59b9ee7ad9431333365643661子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。 在北美和西欧,CAN...
  • 第一节、IIC总线AT24C02芯片工作原理 ...用串行总线技术可以使系统的硬件设计大大简化,系统的体积减小,可靠性提高,同时系统更容易更改和扩充 常用的串行扩展总线有:I2C总线,单总线,SPI...
  • 树莓派 SPI,I2C,UART串行总线介绍

    千次阅读 2019-06-09 03:08:50
    很多人对总线串行等概念不熟悉特别是SPI,I2C,UART,GPIO等概念。 因此我收集了一些资料,用于总结。希望对大家有所帮助。 首先看一下树莓派上的接口: GPIO引脚 x 26 UART总线 x 1 SPI总线 x 1...
  • 参考文章:USB 根集线器是什么
  • CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的32313133353236313431303231363533e4b893e5b19e31333365643533,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。...
  • 高速串行总线系列(3)GTX/GTH 物理层结构分析 以及UG476中都有讲。 我们的TX用户接口的并行数据是先到PCS之后再到PMA的,而RX的接收到的串行数据先到PMA在到PCS。 中间存在串并转换,不在细讲。 由此可见,要做...
  • 我第一次知道I2C总线是1995年,项目中用到电视机高频头(也叫调谐器、Tuner),能够方便买到的高频头要么是飞利浦(Philips)的,要么是日系厂商的,但日系厂商联系起来比较费劲。Tuner其实就是通过I2C总线送控制字...
  • 这又是啥意思呢?模态,说到底还是用来描述差分对上的信号状态的。   图 4 如上图4所示,信号线1和2上的信号可以是同向的,也可以是反向的。信号的流向不同,对应的电磁场不同,如下图5:   ...
  • 展开全部CAN总线的含义是控制器局域网络(Controller Area Network, CAN)的简称,是ISO国际标准化的串行通信协议。是国际上应用最广泛的现场总32313133353236313431303231363533e78988e69d8331333431343634线之一,...
  • 展开全部回路32313133353236313431303231363533e4b893e5b19e31333431363566总线是从系统回路板上引出的负责各个回路的信号线。...在要求通信距离为几十米到上千米时,广泛采用RS-485串行总线标准...
  • usb2.0是什么意思

    2021-07-29 04:27:13
    usb2.0是指Universal Serial Bus2.0,是一种应用在计算机领域的新型接口技术,USB接口具有传输速度更快、支持热插拔以及连接...USB(Universal Serial Bus2.0,通用串行总线)是一种应用在计算机领域的新型接口技术。U...
  • 计算机组成原理-总线

    千次阅读 2020-10-23 14:34:39
    1.2为什么要用总线? 早期计算机外部设备少时大多采用分散连接方式,不易实现随时增减外部设备。为了更好地解决I/O设备和主机之间连接的灵活性问题,计算机的结构从分散连接发展为总线连接。 1.3总线的特性:
  • STM32单线串口对总线舵机的控制

    万次阅读 多人点赞 2017-03-07 16:19:30
    总线伺服舵机即串行总线智能舵机,实际上可以理解为数字舵机的衍生品,数字舵机与模拟舵机相比而言是控制系统设计上的颠覆,而总线伺服舵机对于舵机而言则是在功能和运用上的颠覆。舵机的运用方式实际上只能发挥出...
  • 总线概述及常见总线

    万次阅读 多人点赞 2015-12-07 18:07:40
    一. 总线概念 所谓总线(Bus),是指计算机设备和设备之间传输信息的公共数据通道。总线是连接计算机硬件系统内多种设备的通信线路,它的一个重要...微机中的总线分为数据总线、地址总线和控制总线3类。不同型号的C
  • SPI总线

    2021-09-04 16:41:02
    SPI(Serial Peripheral Interface)是串行外设接口的缩写,SPl是一种高速的、全双工、同步的串行通信总线;SPl采用主从方式工作,一般有一个主设备和一个或多个从设备;SPI需要至少4根线,分别是MISO(主设备输入从...
  • modbus分为master和slave模式,master是主机,slave是从机,一个总线网络只能有一个主机,多个从机 2、消息帧 modbus有ascii和 rtu 3、传输模式 modbus ascii、 modbus rtu、modbus tcp三种,其中m
  • CAN总线含义

    2020-12-21 13:24:35
    总线的产生与发展控制器局部网(CAN-CONTROLLERAREANETWORK)是BOSCH公司为现代汽车应用领先推出的一种多主机局部网,由于其高性能、高可靠性、实时性等优点现已广泛应用于工业自动化、多种控制设备、交通工具、医疗...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,523
精华内容 3,809
关键字:

串行总线什么意思