在有些系统中,另一种选择可能是在系统复位之后硬件主器件处于从接收方式。系统中一个主器件通知这个硬件主器件发送器必须发送的地址。这种编程过程以后,硬件主器件处于主发送方式。
6.2.9I2C总线定时
I2C总线上时钟最小低电平周期为4.7μs,最小高电平周期为4μs。主器件产生的总线时钟频率为0kHz~100kHz。连接到I2C总线上的所有器件必须遵从100kHz传送频率上限,包括发送、接收或利用时钟同步机制展宽低电平,迫使主器件处于等待状态。后面这种情况频率将适当降低。
6.3单总线
1wire(单总线)是Dallas公司的一项专有技术,采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的。它具有节省I/O口线、资源结构简单、成本低廉、便于总线扩展和维护等诸多优点。
单总线适用于单个主机系统,能够控制一个或多个从机设备。当只有一个从机位于总线上时,系统可按照单节点系统操作,而当多个从机位于总线上时,则系统按照多节点系统操作。
6.3.1单总线的电路接法
单总线只有一根数据线,主机或从机通过一个漏极开路或三态端口连接至该数据线,这样允许设备在不发送数据时释放数据总线,以便总线被其他设备所用。
单总线要求外接一个5kΩ左右的上拉电阻,这样单总线的闲置状态为高电平。不管什么原因,如果传输过程需要暂时挂起,且要求传输过程还能够继续的话,则总线必须处于空闲状态。
位传输之间的恢复时间没有限制,只要总线在恢复期间处于空闲状态(高电平)。如果总线保持低电平超过480μs,总线上的所有器件将复位。
6.3.2单总线命令序列
典型的单总线命令序列如下:
初始化。
ROM命令,跟随需要交换的数据。
功能命令,跟随需要交换的数据。
每次访问单总线器件,必须严格遵守这个命令序列,如果出现序列混乱,则单总线器件不会响应主机。但是这个准则对于搜索ROM命令和报警搜索命令例外,在执行两者中任何一条命令之后,主机不能执行其后的功能命令,必须返回至第一步。
1.初始化
单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机设备且准备就绪。复位和应答脉冲详细介绍见6.3.3节单总线信号部分。
2.ROM命令
在主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机设备的惟一64位ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。
这些命令还允许主机能够检测到总线上有多少个从机设备及其设备类型,或者有没有设备处于报警状态。从机设备可支持5种ROM命令(实际情况与具体型号有关),每种命令长度为8位。主机在发出功能命令之前,必须送出合适的ROM命令。下面将简要地介绍各个ROM命令的功能。
(1)搜索ROM命令[F0h]
当系统初始上电时,主机必须找出总线上所有从机设备的ROM代码,这样主机就能够判断出从机的数目和类型。主机通过重复执行搜索ROM循环(搜索ROM命令跟随着位数据交换),以找出总线上所有的从机设备。如果总线上只有一个从机设备,则可以采用读ROM命令来替代搜索ROM命令。在每次执行完搜索ROM循环后,主机必须返回至命令序列的第一步(初始化)。
(2)读ROM命令[33h]
该命令仅适用于总线上只有一个从机设备的情况。它允许主机直接读出从机的64位ROM代码,而无需执行搜索ROM过程。如果该命令用于多节点系统,则必然发生数据冲突,因为每个从机设备都会响应该命令。
(3)匹配ROM命令[55h]
匹配ROM命令跟随64位ROM代码,从而允许主机访问多节点系统中某个指定的从机设备。仅当从机完全匹配64位ROM代码时,才会响应主机随后发出的功能命令;其他设备将处于等待复位脉冲状态。
(4)跳越ROM命今[CCh](仅适合于单节点)
主机能够采用该命令同时访问总线上的所有从机设备,而无需发出任何ROM代码信息。例如,主机在发出跳越ROM命令后跟随转换温度命令[44h],就可以同时命令总线上所有的DS18B20开始转换温度,这样大大节省了主机的时间。值得注意的是,如果跳越ROM命令跟随的是读暂存器[BEh]的命令(包括其他读操作命令),则该命令只能应用于单节点系统,否则将由于多个节点都响应该命令而引起数据冲突。
(5)报警搜索命令[ECh](仅少数1wire器件支持)
除了那些设置报警标志的从机响应外,该命令的工作方式完全等同于搜索ROM命令。该命令允许主机设备判断哪些从机设备发生了报警,如最近的测量温度过高或过低等。同搜索ROM命令一样,在完成报警搜索循环后,主机必须返回至命令序列的第一步。
3.功能命令(以DS18B20为例)
主机发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18B20支持的某个功能命令。这些命令允许主机写入或读出DS18B20暂存器、启动温度转换以及判断从机的供电方式。
6.3.3单总线信号方式
所有的单总线器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号,并且发送的所有命令和数据都是字节的低位在前,这一点与多数串行通信格式不同,一般的串行通信多数为字节的高位在前。
1.初始化序列:复位和应答脉冲
单总线上的所有通信都是以初始化序列开始的,包括主机发出的复位脉冲及从机的应答脉冲。当从机发出响应主机的应答脉冲时,即向主机表明它处于总线上,且工作准备就绪。在主机初始化过程中,主机通过拉低单总线至少480μs,以产生Tx复位脉冲。接着,主机释放总线,并进入接收模式Rx。当总线被释放后,5kΩ上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时15μs~60μs,接着通过拉低总线60μs~240μs以产生应答脉冲。
2.读/写时序
在写时序期间,主机向单总线器件写入数据;而在读时序期间,主机读入来自从机的数据。在每一个时序,总线只能传输一位数据。
(1)写时序
有两种写时序:写1和写0。主机采用写1时序向从机写入1,而采用写0时序向从机写入0。所有写时序至少需要60μs,且在两次独立的写时序之间至少需要1μs的恢复时间。两种写时序均起始于主机拉低总线。产生写1时序的方式:主机在拉低总线后,接着必须在15μs之内释放总线,由5kΩ上拉电阻将总线拉至高电平;而产生写0时序的方式:在主机拉低总线后,只需在整个时序期间保持低电平即可,至少要保持低电平60μs。
在写时序起始后15μs~60μs期间,单总线器件采样总线电平状态。如果在此期间采样为高电平,则逻辑1被写入该器件;如果为低电平,则写入逻辑0。
(2)读时序
单总线器件仅在主机发出读时序时,才向主机传输数据。所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要60μs,且在两次独立的读时序之间至少需要1μs的恢复时间。每个读时序都由主机发起至少拉低总线1μs。在主机发起读时序之后,单总线器件才开始在总线上发送0或1。若从机发送1,则保持总线为高电平;若发送0,则拉低总线。当发送0时,从机在该时序结束后释放总线,由上拉电阻将总线拉回至空闲高电平状态。从机发出的数据在起始时序之后,保持有效时间15μs。因而,主机在读时序期间必须释放总线,并且在时序起始后的15μs之内采样总线状态。
6.3.4单总线ROM搜索实例
ROM搜索过程只是一个简单的3步循环程序:
读一位;
读该位的补码;
写入一个期望的数据位。
总线主机在ROM的每一位上都重复这样的3步循环程序。当完成某个器件后,主机就能够知道该器件的ROM信息,剩下的设备数量及其ROM代码通过相同的过程即可获得。
4个不同的器件被连接至同一条总线上,它们的ROM代码如下所示:
ROM100110101……
ROM210101010……
ROM311110101……
ROM400010001……
具体搜索过程为:
(1)主机发出复位脉冲,启动初始化序列。从机设备发出响应的应答脉冲。
(2)接着主机在总线上发出ROM搜索命令。
(3)主机从总线上准备读入一个数据位,这时,每个响应设备分别将ROM代码的第一位输出到单总线上。ROM1和ROM4输出0至总线,而ROM2和ROM3输出1至总线。
线上的输出结果将是所有器件的逻辑与,所以,主机从总线上读到的将是0。接着,主机开始读另一位,即每个器件分别输出ROM代码中第一位的补码,此时,ROM1和ROM4输出1至总线,而ROM2和ROM3输出0至总线。这样,主机读到的该位补码还是0。主机由此判定,总线上有些器件的ROM代码第一位为0,有些则为1。
两次读到的数据位具有以下含义:
00在该位处存在设备冲突。
01在该位处所有器件为0。
10在该位处所有器件为1。
11单总线上不存在任何设备。
(4)主机写入0,从而禁止了ROM2和ROM3响应余下的搜索命令,仅在总线上留下了ROM1和ROM4。
(5)主机再执行两次读操作,依次收到0和1,这表明ROM1和ROM4在ROM代码的第二位都是0。
(6)接着主机写入0,在总线上继续保持ROM1和ROM4。
(7)主机又执行两次读操作,收到两个0,表明所连接的设备的ROM代码在第三位上既有0,也有1。
(8)主机再次写入0,从而禁止了ROM1响应余下的搜索命令,仅在总线上留下了ROM2。
(9)主机读完ROM4余下的ROM数据位。这样就完成了第1次搜索,并找到了位于总线上的第1个设备。
(10)重复执行第(1)步~第(7)步,开始新一轮的ROM搜索命令。
(11)主机写入1,使ROM4离线,仅在总线上留下ROM1。
(12)主机读完ROM1余下的ROM数据,这样就完成了第2次的ROM搜索,找到了第2个ROM代码。
(13)重复执行第(1)步~第(3)步,开始新一轮的ROM搜索命令。
(14)主机写入1,这次禁止了ROM1和ROM4响应余下的搜索命令,仅在总线上留下了ROM2和ROM3。
(15)主机又执行两次读操作时序,读到两个0。
(16)主机写入0,这样禁止了ROM3而留下了ROM2。
(17)主机读完ROM2余下的ROM数据,这样就完成了第3次的ROM搜索,找到了第3个ROM代码。
(18)重复执行第(13)步~第(15)步,开始新一轮的ROM搜索命令。
(19)主机写入1,这次禁止了ROM2,而留下了ROM3。
(20)主机读完ROM3余下的ROM数据,这样就完成了第4次的ROM搜索,找到了第4个ROM代码。
6.4USB总线
USB的全称是通用串行总线(UniversalSerialBus)。USB总线在PC内部通过PCI总线与PC系统相连,外围设备通过USB电缆连到主机上。同时USB又是一种通信协议,支持主系统与其外设之间的数据传递。该总线具有安装方便、高带宽、易于扩展等优点,已逐渐成为现代微机数据传输的重要方式。
6.4.1USB的特点与基本特性
6.4.1.1USB的特点
(1)用户易用性:电缆连接和连接头采用单一模型,电气特性与用户无关,并提供了动态连接、动态识别等特性。
(2)应用的广泛性:传输率从几kbps到几Mbps,乃至上百Mbps,并在同一根电缆上支持同步、异步两种传输模式。可以对多个USB总线设备(最多127个)同时进行操作,利用底层协议提高了总线利用率,使主机和设备之间可传输多个数据流。
(3)使用的灵活性:允许对设备缓冲区大小进行选择,并通过设定缓冲区的大小和执行时间,支持各种数据传输率、支持不同大小的数据包。
(4)容错性强:在协议中规定了出错处理和差错校正的机制,可以对有缺陷的设备进行认定,对错误的数据进行校正或报告。
(5)“即插即用”的体系结构:具有简单而完善的协议,并与现有的操作系统相适应,不会产生任何冲突。
(6)性价比较高:USB虽然拥有诸多优秀的特性,但其价格较低。USB总线技术将外设和主机硬件进行最优化集成,并提供了低价的电缆和连接头等。