Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 述职汇报 > 第6章+单总线数据传输,单总线数据传输方式

第6章+单总线数据传输,单总线数据传输方式

收藏

本作品内容为第6章+单总线数据传输,格式为 doc ,大小 1139200 KB ,页数为 19页

第6章+单总线数据传输


('第6章单总线数据传输第6章单总线数据传输本章主要内容包括:\uf0d0单总线技术概述\uf0d0单总线数据传输协议\uf0d0单总线驱动程序本章首先对单总线的基本知识和芯片进行了简单介绍,接着详细论述了单总线数据传输协议,包括通信信号的类型、单总线通信的初始化、ROM命令、功能命令、单总线器件的ROM搜索。最后给出了单总线的驱动程序,以便读者参阅。6.1单总线技术概述1-wire单总线是Maxim全资子公司Dallas的一项专有技术。与目前多数标准串行数据通信方式,如SPI/IIC/MICROWIRE不同,它采用单根信号线,既传输时钟,又传输数据,而且数据传输是双向的。它具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。采用单总线接口芯片可以方便地组成数据交换网络,由单总线芯片组成的网络被称为微型局域网(MicroLAN)。微型局域网是一种主从式网络,它以个人计算机或单片机作为网络中的主设备,而网络中其他所有设备都被称为从设备,从设备由主设备集中管理来实现主设备和各从设备之间的数据通信。微型局域网的规模灵活可变,一个网络中的从设备数可以从几个到数千个不等,理论上几乎不存在限制。微型局域网的组网十分简单,只需要一对普通的双绞线就能组网,而且所有的从设备无需自带电源,因而具有组网快、成本低的特点,非常适于现场应用,是现场总线技术的一种新选择。1为了更深刻的了解单总线技术,我们先从单总线芯片的硬件结构入手,引出单总线技术的特点,从而全面了解单总线技术。下面我们就从硬件方面来了解一下单总线芯片。6.1.1单总线芯片简介为了较为全面地掌握单总线系统,先简单的了解一下单总线的芯片。本节将分三个部分对单总线的芯片进行介绍:硬件结构、芯片序列号和芯片的供电。1.单总线硬件结构顾名思义,单总线只有一根数据线。单总线标准为外设器件沿着一条数据线进行双向数据传输提供了一种简单的方案,任何单总线系统都包含一台主机和一个或多个从机,它们共用一条数据线。这条数据线被地址、控制和数据信息复用,大多数器件完全依靠从数据线上获得的电源供电,个别器件在许可的情况下由本地电源供电。当数据线为高电平时,电荷存储在器件内部;当数据线为低电平时,器件利用这些电荷提供能量。单总线采用线或配置,1杨金岩郑应强张振仁.8051单片机数据传输接口扩展技术与应用实例[M]北京:人民邮电出版社出版.2005.211~212单片机开发典型模块设计主机为漏极输出,只能将总线下拉至低电平。图6.1为单总线器件I/O端口的内部结构。对于单总线器件,为了使每个器件在合适的时候都能被驱动.它们与总线匹配的端口也必须具有开漏输出或3态输出的功能。正如上文所述,系统主设备的I/O端口也有类似的结构。出于主机和从机都是开漏输出,在主设备的总线侧必须有上拉电阻,系统才能正常操作。单总线器件根据其应用场合,常用的封装形式有10种(参见6.1.2节中的表6.1),通常采用3引脚PR-35封装,外形类似于小功率三极管(图6.2所示为DS18B20外观图),在三个引脚中有一个公共地端、一个数据输入/输出端和一个电源端。这个电源端可以为单总线器提供外部电源,从而免除总线集中馈电。对于大多数采用总线集中供电的单总线器件,等效于在各器件内部有一个约5µA的恒流充电源(参见图6.1),从而使得单总线器件功耗较低。单总线要求外接一个约5kΩ的上拉电阻,这样,单总线的闲置状态为高电平。不管什么原因,如果传输过程需要暂时挂起,且要求传输过程还能够继续的话,则总线必须处于空闲状态。位传输之间的恢复时间没有限制,只要总线在恢复期间处于空闲状态(高电平)。如果总线保持低电平超过480µs,总线上的所有器件将复位。另外,在寄生方式供电时,为了保证单总线器件在某些工作状态下(如温度转换期间、EEPROM写入等)具有足够的电源电流,必须在总线上提供强上拉(如图6.1所示的MOSFET)。2.单总线芯片序列号单总线器件的最基本特点是每个器件都有一个采用激光刻制的序列号,任何单总线器图6.1单总线器件I/O端口内部结构图6.2单总线芯片DS18B20外观图第6章单总线数据传输件的序列号都不会重复。当有许多单总线器件连接在同一总线上时。系统主机可以通过器件的序列号来将需要进行访问的器件挑选出来。在这个挑选的过程中,必须有一种二进制查询算法来对总线上众多的器件进行挑选,一旦知道每个器件的地址,就可以利用地址选择任何一个器件进行通信。单总线芯片序列号的第—个8位字节表示单总线芯片的分类码,例如可寻址开关DS2045的分类码为05H,数字温度计DSl822的分类码为10H,4通道A/D转换器DS2450的分类码为20H等,一共可以有256种不同类型的单总线芯片;序列号中接下来的48位是标识器件本身的序列号,可见每种类型的器件要生产248=281474976710656片后才会出现重复的序列码,经过计算不难发现这个数字相当于全球人均近5万片,所以在实际的使用中是不可能出现重复的;序列号的最后8位则是前面56位的CRC校验码。系统主机与单总线产品进行通信时,为了定位和寻址该器件,必须首先准确地读取产品序列号。通过这64位的芯片序列号,系统主机就可以在任意多个节点的单总线网络中方便地识别出每个设备,实现数据通信。在数据通信过程中,当系统主机接收到64位的序列号后,可以计算出其中前56位序列码的循环冗余校验值,并与接收到的8位CRC字节进行比较,如果相等则说明本次数据传输正确无误,如果不等则表示传输出错。每个单总线芯片(从设备)都具有生成CRC校验码的硬件电路,而作为系统主机的微处理器,既可以采用硬件电路来实现CRC校验码的生成,也可以来用软件的方法生成。采用软件的方法可以减少硬件开支,节约板上面积,是—种值得优先考虑的方法。在采用软件生成CRC校验码时,通常有两种途径:一种(目的是为了跟后面的另一种相对应)是通过计算,另一种是通过查表。计算方法是依据CRC校验码生成原理来设计程序,其优点是模块代码少,修改灵活,可移植性好,们计算的工作量大;而查表法则只需要极小的工作量即可实现。在实际的应用中,具体选择哪一种方法应该根据处理器的处理能力来决定。下面以单总线温度传感芯片DS18B20为例讲述其CRC校验的计算方法。在集总控制系统中,某一片DS18B20的序列码为:(28H,0BDH,44H,3FH,00H,00H,00H,77H)。其中28H产品系列代码,77H为CRC校验和。DS18B20采用的CRC生成多项式为g(x)=x8+x5+x4+1。具体的CRC计算过程如下:\uf0b7设置CRC寄存器,并给其赋值00(hex);\uf0b7将要处理的数据位存入输入数据寄存器;\uf0b7将数据的8-bit字符与8位CRC进行异或,并把结果存入数据位;\uf0b7输入数据寄存器右移一位;\uf0b7如果移出位为1,将数据位与8位18(hex)进行异或,结果存入数据位;\uf0b7数据位与输入数据寄存器循环右移一位;\uf0b7将数据位存入CRC寄存器;\uf0b7数据位循环右移一位。重复第2步至第8步直到8次移位全部完成。此时一个8-bit数据处理完毕。从第2步开始装入下一个数据直到所有数据全部处理完毕。最终CRC寄存器的内容即为CRC值。单片机开发典型模块设计3.单总线芯片的供电单总线接口技术的另外—个显著的特点就是不需要使用独立的电源,所有的单总线芯片都可以通过单线寄生电源供电。图6.3所示对单线寄生供电的原理进行了描述。在图6.3所示中,DQ引脚连接在单线总线上,整个器件的电源来自这条总线上并接的主机,这种“偷电”式的供电又称为寄生电源(ParasitePower)。当总线处于高电平时不仅经过二极管给芯片提供了电源,同时又给内部电容器充电而存储了能量;当总线变为低电平时二极管截止,芯片改由电容器供电,仍可正常操作,当然维持时间不可能太长。可见为了确保器件正常工作,总线上应该间隔地输出高电平,且保障能提供足够的电源电流,一般应有1mA。因此当主设备位用5V电源时,总线的上拉电阻不可能大于5kΩ。需要说明的是,当同一单总线上有多个器件同时操作时会出现供电不足的问题。为了解决单总线供电不足的问题,可以采用图6.4所示的方法。在图6.4中,使用MOSFET将I/O线的高电平强拉到5.0V,从而可以增加驱动电流。除了图6.4介绍的解决供电问题的方法外,还可以通过单总线芯片的VDD引脚使用外接电源的方法来解决这一问题。在这种解决方法下。应将I/O引脚通过4.7kΩ的电阻连接到正电源端。采用这种外接电源供电的方法有如下的优点:\uf0b7免除了电源驱动能力的后顾之忧,一条总线上挂接的节点数量可以真正不受限制;\uf0b7无需很强的上拉;\uf0b7在器件高负荷工作期间,I/O总线不必持久保持高电平给器件充电,这样可以提高数据传输速率;\uf0b7使多个器件可以同时工作。6.1.2单总线技术的特点及其应用单总线技术以其简单的接线方式、低廉的成本、简单的程序设计有着无可比拟的优势,下面就来详细的介绍单总线的特点及其应用。图6.3寄生供电原理图6.4使用MOSFET将单总线拉至5.0V第6章单总线数据传输1.单总线技术的特点单总线技术有以下三个显著的特点:\uf0b7单总线芯片通过一根信号线进行地址信息、控制信息及数据信息的传送,并通过该信号线为单总线芯片提供电源;\uf0b7每个单总线芯片都具有全球唯一的访问序列号.当多个单总线器件挂在同—单总线上时,对所有单总线芯片的访问都通过该唯一序列号进行区分;\uf0b7单总线芯片在工作过程中,不需要提供外接电源,而通过它本身具有的“总线窃电”技术从总线上获取电源。除了以上的三个特点,单总线技术采用了特殊的总线通信协议来实现数据通信。在通信过程中,单总线数据波形类似于脉冲宽度调制信号,总线发出复位信号(保持低电平的周期最长)同步整个总线,然后由系统主机初始化每一位数据时隙,利用宽脉冲或窄脉冲来实现写“0”或写“1”。在读数据时,主机利用窄脉冲初始化时隙,从机将数据线保持在低电平,通过展宽低电平脉冲返回逻辑“0”,或保持脉冲宽度不变来返回逻辑“1”。大多数的单总线器件支持两种数据速率,较低的数据速率(标准)约为14kbit/s,较高的数据速率约为140kbit/s。关于单总线的数据传输协议将在6.2节中进行详细的介绍。2.应用单总线技术的典型芯片单总线芯片不仅可以方便地组建基于单总线的微型局域网,而且由于其引脚极少,容易与微处理器等其他器件接口,在PCB板的布线过程中也较为简单,干扰小、而且省电,因此也广泛应用于各类电子设备中,如设备的安全密码、设备属性登记与标识、设备的温度监控、电源电压监视、外部事件记录、实时时钟等。DallasSemiconductor公司生产的单总线芯片系列已有30多个产品,而且每年都有不少的新产品推出。为了方便读者开发应用单总线器件,现将目前已有的单总线品种列在表6.1中,表中的封装结构代号含义为:1为PR-35、2为SSOP、3为TO-92、4为SOT-223、5为TSOC-6、6为DIPl6、7为SOIC16、8为SOIC8(150mil)、9为SOIC8(208mil)、10为CSP。表6.1中的各类存储器容量均以二进制的位为单位。表6.1单总线芯片总览名称功能和用途ROMID存储器封装DS18209位数字温度计64位16位EEPROM1,2DS18B209~12位数字温度计64位16位EEPROM3,8DS18S209位数字温度计64位16位EEPROM3,8DS1822经济型9~12位数字温度计64位无3,8DS2223经济性RAM无256位RAM3,4DS2224经济性RAM+ROM32位ROM224位RAM3,4DS2401硅序列号64位无3,4,5,10DS2404实时时钟+经济型RAM64位4096位NVRAM2,6,7DS2404-C01实时时钟+双端口存储器64位4096位双端口NVRAM7DS2405单通道可寻址开关64位无3,4,5单片机开发典型模块设计DS2406双通道可寻址开关+存储器64位1024位EPROM3,5DS2407双通道可寻址开关+存储器64位1024位EPROM3,5DS20488通道可寻址开关+存储器64位1024位EPROM7DS2049微型局域网耦合器64位无5DS2415实时时钟64位无5DS2417实时时钟+中断输出64位无5,10DS2422双通道事件计数器+RAM64位1024位NVRAM5DS2423双通道事件计数器+RAM64位4096位NVRAM5DS2430AEEPROM64位256位EEPROM3,5,10DS2432EEPROM64位1024位EEPROM5DS2433EEPROM64位4096位EEPROM1,9,10DS24504路16位A/D转换器64位无9DS2480RS232到单总线转换/驱动器无无8DS2480BRS232到单总线转换/驱动器无无8DS2502只加存储器64位1024位EPROM3,5,8,10DS2502-E64只加存储器64位1024位EPROM3,5DS2502-UNW只加存储器64位1024位EPROM3,5,8,10DS2505只加存储器64位16384位EPROM3,5,10DS2505-UNW只加存储器64位16384位EPROM3,5,10DS2506只加存储器64位65536位EPROM1,9,10DS2506-UNW只加存储器64位65536位EPROM1,9,10DS2890100K数字电位器64位无3,5DS950225KV以上ESD保护二极管无无5DS950325KV以上ESD保护二极管无无5DS9097U-09通用单总线COM口适配器64位无套件除了表6.1中所列出的器件外,DallasSemiconductor公司还提供一种独具特色的iButton系列产品。iButton产品从原理与功能上而言,仍然是单总线芯片产品,仅它们的封装形式饺为特别。iButton产品有F3和F5两种封装形式,均为不锈刚外壳密封,其形状如纽扣电池,F5封装的外表大小相当于4枚1分的人民币硬币叠在一起,F3则较薄—些。它们的引脚与纽扣电池相似,只有2个引线端面,背面是地线,中心面是数据线。有些iButton内部带微型锂电池,为内部实时时钟或有关记录数据供电,可保存10年。有些则无需内部电池,例如EEPROM的产品,有些产品还将序列号刻在外壳上供用户辨识。由于iButton封装的特殊性,使用时不是采用传统的焊接方法,而是采用嵌入式的接触连接。除了在单总线系统中用作节点从设备外,通常也将这类芯片嵌入其他电子产品中作为安全认证或某种辅助功能。在表6.2列出了iButton系列的今部产品,其中大部分都在表6.1中找到功能相同的芯片,但iButton只有2个引脚,所以在表6.1中有些引脚较多的芯片在表6.2中无法找到替代品。表6.2iButton系列单总线芯片总览第6章单总线数据传输名称功能和用途ROMID存储器封装DS1920温度计iButton64位16位EEPRROMF5DS1921实时时钟+温度计iButton64位4096位NVRAMF5DS1954密码iButton64位F5DS1955密码iButton64位F5DS1957密码iButton64位F5DS1963金融安全认证iButton64位4096位NVRAMF5DS1963L带写循环计数器的金融iButton64位4096位NVRAMF5DS1971EEPRROMiButton64位256+64位EEPRAMF3,F5DS1973EEPRROMiButton64位4096位EEPRROMF3,F5DS1982只加存储器iButton64位1024位EPROMF3,F5DS1982U只加存储器iButton64位1024位EPROMF3,F5DS1985只加存储器iButton64位16384位EPROMF3,F5DS1985U只加存储器iButton64位16384位EPROMF3,F5DS1986只加存储器iButton64位65536位EPROMF3,F5DS1986U只加存储器iButton64位65536位EPROMF3,F5DS1990A序列号iButton64位无F3,F5DS1991存储器iButton64位1344位NVRAMF5DS1992存储器iButton64位1024位NVRAMF5DS1993存储器iButton64位4096位NVRAMF5DS1994实时时钟+存储器iButton64位4096位NVRAMF56.2单总线数据传输协议单总线因采用单根信号线,既传输时钟,又传输数据,而且数据传输是双向的,具有独特的接线方式,因而其通讯协议也与目前多数标准串行数据通信方式所不同。典型的单总线命令序列如下:\uf0b7初始化;\uf0b7ROM命令,跟随需要交换的数据;\uf0b7功能命令,跟随需要交换的数据;每次访问单总线器件,必须严格遵守这个命令序列。如果出现序列混乱,则单总线器件不会响应主机。但是,这个准则对于搜索ROM命令和报警搜索命令例外。在执行两者中任何一条命令之后,主机不能执行其后的功能命令,必须返回至第一步。为了说明单总线数据传输的过程,以下将分4个部分对单总线数据通信传输过程进行介绍,它们分别是单总线通信信号类型、单总线通信初始化、单总线通信的ROM命令及单总线通信的功能命令。单片机开发典型模块设计6.2.1单总线通信信号类型所有的单总线器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前。注意:这一点与多数串行通信格式不同(多数为字节的高位在前)。单总线通信协议中不同类型的信号都采用一种类似于脉宽调制的波形表示,逻辑“0”用较长的低电平持续周期表示,逻辑“1”用较长的高电平持续周期表示。在单总线通信协议中,读/写实习的概念十分重要,当系统主机向从设备输出数据时产生写时隙,当主机从从机设备中读取数据时产生渎时隙,每一个时隙内总线只能传输一位数据。无论是读时隙还是写时隙,它们都以主机驱动数据线为低电平开始,数据线的下降沿使从设备触发其内部的延迟电路,使之与主机同步。在写时隙内,该延迟电路决定从设备采样数据线的时间窗口。2单总线通信协议中存在两种写时隙:写1和写0。主机采用写1时隙向从机写入1,而采用写0时隙向从机写入0。所有写时隙至少需要60ms,且在两次独立的写时隙之间至少需要1ms的恢复时间。两种写时隙均起始于主机拉低数据总线。产生写1时隙的方式:主机在拉低总线后,接着必须在15ms之内释放总线,由上拉电阻将总线拉至高电平;产生写0时隙的方式为在主机拉低总线后,只需在整个时隙期间保持低电平即可(至少60ms)。在写时隙开始后15ms~60ms期间,单总线器件采样总线电平状态。如果在此期间采样值为高电平,则逻辑1被写入该器件;如果为0,则写入逻辑0。图6.5给出了写时隙(包括写1和写0)时序的图形解释。在图6.5中,黑色实线代表系统主机拉低总线,黑色虚线代表上拉电阻将总线拉高。对于读时隙,单总线器件仅在主机发出读时隙时,才向主机传输数据。所以在主机发出读数据命令后,必须马上产生读时隙,以便从机能够传输数据。所有渎时隙至少需要60ms,且在两次独立的读时隙之间至少需要1ms的恢复时间。每个读时隙都由主机发起.至少拉低总线1ms。在主机发起读时隙之后,单总线器件才开始在总线上发送0或1。若从机发送1,则保持总线为高电平;若发送0,则拉低总线。当发送0时,从机在该时隙结束后释放总线,由上拉电阻将总线拉回至空闲高电平状2杨金岩郑应强张振仁.8051单片机数据传输接口扩展技术与应用实例[M]北京:人民邮电出版社出版.2005.216~225图6.5单总线通信协议中写时隙时序图第6章单总线数据传输态。从机发出的数据在起始时隙之后,保持有效时间15ms,因此主机在读时隙期间必须释放总线并且在时隙起始后的15ms之内采样总线状态。图6.6所示给出了读时隙(包括读1和读0)时序的图形解释。在图6.6所示中,黑色实线代表系统主机拉低总线,灰色实线代表从机拉低总线,而黑色的虚线则代表上拉电阻将总线拉高。以上对单总线通信过程中的几种信号进行了介绍,但出于复位脉冲及应答脉冲与单总线通信过程初始化的密切关系.对这两种信号的介绍将在下一节中进行详细的阐述。6.2.2单总线通信的初始化单总线上的所有通信都是以初始化序列开始,初始化序列包括主机发出的复位脉冲及从机的应答脉冲,这一过程如图6.7所示。在图6.7中,黑色实线代表系统主机拉低总线,灰色实线代表从机拉低总线,而黑色的虚线则代表上拉电阻将总线拉高。系统主设备发送端发送的复位脉冲是一个480μs~960μs的低电平,然后释放总线进入接收状态。此时系统总线通过47kΩ的上拉电阻接至VCC高电平端,时间约为15μs~60μs,接着在接收端的设备就开始检测I/O引脚上的下降沿以监视在线脉冲的到来。主设备处于这种状态下的时间至少为480μs。作为从设备的器件在接收到系统主设备发出的复位脉冲之后,向总线发出一个应答脉冲,表示从没备已准备好,可根据各类命令发送或接收数据。通常情况下,器件等待15μs~60μs即可发送应答脉冲(该脉冲是一个60μs~240μs的低电平信号,它由从机强迫将总线拉低)。复位脉冲是主设备以广播方式发出的,因而总线上所有的从设备都同时发出应答脉冲。图6.6单总线通信协议中读时隙时序图图6.7初始化过程中的复位与应答脉冲单片机开发典型模块设计一旦检测到应答脉冲后,主设备就认为总线上已连接了从设备,接着主设备将发送有关的ROM功能命令。如果主设备未能检测到应答脉冲,则认为总线上没有挂接单总线从设备。6.2.3单总线通信的ROM命令在系统主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机唯一的64位ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。这些命令还允许主机能够检测到总线上有多少个从机设备以及设备类型,或者有没有设备处于报警状态。从机设备可以支持5种ROM命令(实际情况与具体型号有关),每种命令长度为8位。主机在发出功能命令之前,必须送出合适的ROM命令,下面简要地介绍各个ROM命令的功能,以及使用在何种情况下。ROM命令的操作流程如图6.8所示。图6.8ROM命令流程图第6章单总线数据传输1.读ROM(代码为33H)该命令仅适用于总线上只有一个从机设备(单节点)的情况。它允许主机直接读出从机的64位ROM代码,而无需执行搜索ROM过程。如果该命令用于多节点系统,则必然发生数据冲突,因为每个从机设备都会响应该命令。2.匹配ROM(代码55H)匹配ROM命令跟随64位ROM代码,从而允许主机访问多节点系统中某个指定的从机设备。仅当从机完全匹配64位的ROM代码时,才会响应主机随后发出的功能命令,而其他设备将处于等待复位脉冲的状态。3.搜索ROM(代码为F0H)当系统初始上电时,主机必须找出总线上所有从机设备的ROM代码,这样主机就能够判断出从机的数目和类型。主机通过重复执行搜索ROM循环(搜索ROM命令跟随着位数据交换),以找出总线上所有的从机设备。如果总线上只有一个从机设备,则可以采用读ROM命令来替代搜索ROM命令。在每次执行完搜索ROM循环后,主机必须返回至命令序列的第一步(初始化)。4.直访ROM(代码CCH)主机能够采用该命令同时访问总线上的所有从机设备,而无须发出任何ROM代码信息。例如,如果单总线器件采用DSl8B20温度传感器,主机通过在发出直访ROM命令后跟随转换温度命令[44h],就可以同时命令总线上所有的DSl8B20开始转换温度,这样大大节省了主机的时间。值得注意的是,如果直访ROM命令跟随的是读暂存器[BEh]的命令(包括其他读操作命令),则该命令只能应用于单节点系统,否则将由于多个节点都响应该命令而引起数据冲突。5.条件搜索(代码ECH)需要说明的是,仅有少数单总线器件支持该ROM命令,而且在这些支持该命令的器件中.具有那些报警置位的从机响应此命令。该命令允许主机设备判断哪些从机设备发生了报警(如最近的测量温度过高或过低等)。该命令的工作方式完全等同于搜索ROM命令,此外与搜索ROM命令一样,在完成条件搜索循环后,主机必须返回至命令序列的第一步。6.2.4单总线器件的ROM搜索Dallas公司的每片单总线器件都具有惟一的64位注册码,它存储在只读存储器(ROM)中,在单总线网络中注册码用于单总线系统主机对从机器件进行逐一寻址。如果单总线网络中从机器件的ROMID是未知的,可以通过ROMID搜索算法来找到该注册码,下面将详细解释ROMID的搜索算法。单总线器件的ROM注册码的数据格式如图6.9所示。单片机开发典型模块设计ROM注册码的搜索算法采用的是二叉树型结构,搜索过程沿各分节点进行,直到找到器件的ROM码即叶子为止;后续的搜索操作沿着节点上的其他路径进行,按照同样的方式直到找到总线上的所有器件代码。搜索算法首先通过复位(Reset)和在线应答脉冲(PresencePulse)时隙将单总线上的所有器件复位,成功地执行该操作后,发送1个字节的搜索命令,搜索命令使单总线器件准备就绪并开始进行搜索操作。搜索命令分为两类,标推搜索命令(OFH)只用来搜索连接到网络中所有器件,报警或条件搜索命令(ECH)只用来搜索那些处于报警状态下的器件,这种方式缩小了搜索范围,可以快速查找到所需要注意的器件。搜索命令发出之后开始实际的搜索过程。首先总线上的所有从机器件同时发送ROM注册码中的第一位(最低有效位),与所有的单总线通信一样,无论是读取数据还是向从机器件写数据,都由单总线系统主机启动每一位的操作。按照单总线的特性,当所有从机器件同时应答主机时,单总线上的结果相当于全部发送数据位的逻辑与。从机发送其ROM注册码的第一位后,主机启动下一位操作,接着从机发送第一位数据的补码,从两次读到的数据位可以对ROM注册码的第一位做出几种判断,判断的结果如表6.3所示。表6.3两次读结果判据第一次读第二次读结论00从机ROM注册码中的当前位置既有0、也有1,即存在差异01从机ROM注册码的当前两位均为010从机ROM注册码的当前两位均为111总线上没有从机器件响应按照搜索算法的要求,单总线主机必须向总线上的从机发回一个指定位,如果从机器件中ROM注册码的当前位的值与该数据位匹配,则继续参与搜索过程;若从机器件的当前位与之不匹配,则该器件转换到等待状态,并保持等待状态直到下一个单总线复位信号到来。其余63位ROM注册码的搜索依然按照这种“读两位”、“写一位”的模式进行重复操作。单总线系统中主机和从机所执行的搜索过程如表6.4所示表6.4单总线主机和从机的搜索过程主机从机单总线发出复位信号产生在线应答脉冲写搜索命令(标准或报警)从机准备搜索读第1位的逻辑与从机发送ROM注册码的第1位读第1位补码的逻辑与从机发送ROM注册码的第1位的补码写第1位指定位从机接受主机的指定位,若所读的位与ROM码的第1位不匹配,进入等待状态::图6.9单总线器件ROM注册码的数据格式第6章单总线数据传输::::读取第64位的逻辑与从机发送ROM注册码的第64位读取第64位补码的逻辑与从机发送ROM注册码的第64位的补码写第64位指定位从机接受主机的指定位,若所读的位与ROM码的第64位不匹配,进入等待状态按照这种搜索算法进行下去,最终除了一个从机器件外所有从机都进入等待状态,经过最后一轮检测即可得到最后未进入等待状态器件的ROM注册码,并在后续搜索过程中,选用不同的路径或分支来查找其他器件的ROM注册码。在本节的介绍过程中,ROM注册码的数据位用第l位最低有效位到第64位最高有效位来进行表示,而没有采用编程语言中第0位到第63位的索引值模式,这样设置允许将差异位置记数器初始值设置为0,为后续比较提供了方便。从表6.3可以看出,如果所有单总线上的器件在当前位具有相同值,那么只有一条分支路径可选;总线上没有器件响应的情况是—种异常状态,可能是要查找的器件在搜寻过程中与单总线脱离;如果当前位既有0也有1,这种情况称为位值差异,它对后续搜索过程中查找器件起关键作用。搜索算法指定在第一轮查询中若出现差异(数据位/补码=0/0),则选用“0”路径(注:不同的算法可能有不同的选择,也就是说其他可行的算法也许会在此处选择“1”路径),记录最后一次值差异的位置以供下一次搜索使用。表6.5列出了出现值差异时路径的选取情况。表6.5搜索路径方向搜索位所在位置和最后一次差异所在位置的比较路径选择=采用路径“1”<采用与上次相同的路径(来自上次搜索到的ROM码)>采用路径“0”搜索算法计算还对最初8位过程中出现的最后一次位差异保持跟踪,64位ROM注册码的前8位是家族码,在器件的搜索过程中可以按照其家族码进行分类。记录家族码的最后一次差异可以用于有选择性地跳过单总线器件的整个分组,如需进行选择性地搜索,可参考各具体器件的详细解释。64位的ROM注册码中包含8位循环冗余校验码(参见图6.9),循环冗余校验码用于验证是否搜索到正确的ROM注册码。下面采用如图6.10示的流程图对单总线上所有从机器件ROM注册码的搜索过程进行说明。在此之前,先对流程图中将要用到的一些全局或局部变量进行介绍,这些变量分别是:\uf0b7Cmp_id_bit:id_bit位的补码,该位是搜索过程中所有应答器件的id_bit_number位的补码的逻辑与。\uf0b7id_bit:在位搜索过程中第1次读取的值,该位是搜索过程中所有应答器件的id_bit_number位的逻辑与。\uf0b7id_bit_number:记录当前搜索是1到64位ROM码中的哪一个数据位。\uf0b7LastDeviceFlag:指明前一次搜索到的已是最后一个器件的标志位。\uf0b7LastDiscrepancy:位指针,指明下次搜索从哪个值差异位开始。\uf0b7LastFamilyDiscrepancy:位指针,用来指明LastDiscrepancy是否在ROM注册码中前8位家族码内和它的位置。单片机开发典型模块设计\uf0b7last_zero:上次被写入0的值差异位的位置。\uf0b7ROM_NO:记录当前正在查找的ROM注册码的8字节缓冲器。\uf0b7Search_direction:位变量,其值用来指明搜索方向,具有此数据位规定值的所有器件继续响应搜索操作,其他器件转入等待状态直到下一次单总线复位。第6章单总线数据传输图6.10单总线系统中所有单总线器件ROM注册码搜索流程图单片机开发典型模块设计(本页流程图接上页)ROMID搜索算法通过对LastDiscrepancy、LastFamilyDiscrepancy、LastDeviceFlag和ROM_NO值的处理,利用上述流程实现了两个不同类型的搜索操作,这两种操作分别是FIRST操作和NEXT操作,这两个操作是搜索单总线器件ROMID码的基础,下面分别对它们进行介绍。FIRST操作:FIRST操作是搜索单总线上的第一个人机器件。该操作是通过将LastDiscrepancy、LastFamilyDiscrepancy和LastDeviceFlag置零,然后进行搜索完成的。最后ROM码从ROM_NO寄存器中读出,若单总线上没有器件,复位序列就检测不到应答脉冲,搜索过程中止。NEXT操作:NEXT操作是搜索单总线上的下一个从机器件。一般情况下,此搜索操作在FIRST操作之后或上一次NEXT操作之后进行,保持上次搜索后这些值的状态不变,执行又一次搜索即可实现NEXT操作。之后从ROM_NO寄存器中读出一个新的ROM码,若前一次搜索到的是单总线上的最后—个器件,则返回一个无效标记FALSE,并且把状态设置成下一次调用搜索算法时将是FIRST操作的状态。6.2.5单总线通信的功能命令每一个单总线器件都有它自己的专用指令,例如对于温度传感器DSl8B20,有读温度信号的指令;对于开关量输入输出器件DS2405,有读器件输入的指令,有控制器件输出的指令。各个单总线器件的专用指令相对而言比较简单,使用时查看相关器件的数据手册即可,此处不进行详细的说明。6.3单总线驱动程序作为一种单主机多从机的总线系统,在一条单总线上可挂接的从器件数量几乎不受限图6.10单总线系统中所有单总线器件ROM注册码搜索流程图(续1)第6章单总线数据传输制。为了不引起逻辑上的冲突,所有从器件的单总线接口都是漏极开路的,因此在使用时必须对总线外加上拉电阻(一般取5kΩ左右)。主机对单总线的基本操作分为复位、读和写三种,其中所有的读写操作均为低位在前高位在后。复位、读和写是单总线通信的基础,下面通过具体程序详细介绍这3种操作的时序要求。(程序中DQ代表单总线,定义为P1.0,uchar定义为unsignedchar)6.3.1单总线的复位复位是单总线通信中最为重要的一种操作,在每次总线通信之前主机必须首先发送复位信号。如下程序所示,产生复位信号时主机首先将总线拉低480~960μs然后释放,由于上拉电阻的存在,此时总线变为高电平。单总线器件在接收到有效跳变的15~60μs内会将总线拉低60~240μs,在此期间主机可以通过对DQ采样来判断是否有从器件挂接在当前总线上。函数Reset()的返回值为0表示有器件挂接在总线上,返回值为1表示没有器件挂接在总线上。总线复位程序如下:ucharReset(void){uchartdq;DQ=0;//主机拉低总线delay480μs();//等待480μsDQ=1;//主机释放总线delay60μs();//等待60μstdq=DQ;//主机对总线采样delay480μs();//等待复位结束returntdq;//返回采样值}6.3.2单总线的写操作由于只有一条I/O线,主机单总线的写操作只能逐位进行,连续写8次即可写入总线一个字节。如下程序所示,当MCS-51单片机的时钟频率为12MHz时,程序中的语句_nop_();可以产生1μs的延时,调用此函数时需包含头文件“intrins.h”。向单总线写1bit至少需要60μs,同时还要保证两次连续的写操作有1μs以上的间隔。若待写位wbit为0则主机拉低总线60μs然后释放,写0操作完成。若待写位wbit为1,则主机拉低总线并在1~15μs内释放,然后等待60μs,写1操作完成。总线写操作程序如下:voidWritebit(ucharwbit){_nop_();//保证两次写操作间隔1μs以上单片机开发典型模块设计DQ=0;_nop_();//保证主机拉低总线1μs以上if(wbit){//向总线写1DQ=1;delay60μs();}else{//向总线写0delay60μs();DQ=1;}}6.3.3单总线的读操作与写操作类似,主机对单总线的读操作也只能逐位进行,连续读8次,即可读入主机一个字节。从单总线读取1bit同样至少需要60μs,同时也要保证两次连续的读操作间隔1μs以上。如下程序所示,从总线读数据时,主机首先拉低总线1μs以上然后释放,在释放总线后的1~15μs内主机对总线的采样值即为读取到的数据。从总线读1bit程序如下:ucharReadbit(){uchartdq;_nop_();//保证两次连续写操作间隔1μs以上DQ=0;_nop_();//保证拉低总线的时间不少于1μsDQ=1;_nop_();tdq=DQ;//主机对总线采样delay60μs();//等待读操作结束returntdq;//返回读取到的数据}6.4小结本章先介绍了单总线数据传输协议,然后介绍了根据该传输协议所绘制的流程与以及所编写的部分驱动程序。在单总线数据传输协议中,通讯信号类型主要有:复位脉冲、应答脉冲、写0、写1、读0第6章单总线数据传输和读1;单总线初始化是由一系列初始化序列构成,主要包括主机发出的复位脉冲和从机的应答脉冲;单总线的命令包括ROM命令和具体元器件的功能命令。主机对单总线的基本操作主要有三种:复位操作、读操作、写操作。',)


  • 编号:1700807045
  • 分类:述职汇报
  • 软件: wps,office word
  • 大小:19页
  • 格式:docx
  • 风格:商务
  • PPT页数:1139200 KB
  • 标签:

广告位推荐

相关述职汇报更多>