摘要:本文介绍了一种基于寻址协议的低成本串行总线系统,用来识别丢失元件的物理位置。在测量或控制串行总线中可能存在这样的问题,例如:多点温度测量系统。本文详细介绍了在低成本串行总线中,如1-Wire,如何利用具有链路功能的DS28EA00获得位置信息。
本文还发表在Maxim工程期刊,第60期(PDF, 848kB)。
数字总线系统的共同特性即为共享。随着微处理器的推广,并行总线系统应用日益广泛,总线上挂接的所有元件共享数据线和地址线。片选信号可由地址线和控制信号解码得到。根据硬件设计和布线,连接在总线上的各个器件的物理地址总是已知的。随着技术向低成本串行总线系统的发展1,首先省去了地址线。但SPI™和MICROWIRE™串行总线仍具有片选功能。许多先进的串行总线系统引入了基于协议的寻址方式,将地址信息作为一个前导码传输给数据。该类总线的典型代表为I²C/SMBus™,此类通信接口缩减到只有数据线和时钟线。为了进一步降低成本,可以将时钟信息嵌入到数据流中。该类总线的典型代表为1-Wire、LIN和SensorPath®总线。
由于采用了基于协议的寻址方式,因此元件物理位置方面的信息将缺失。对于采用串行总线的仪表和控制应用(例如测量多点温度),这将是一个问题。对于I²C总线而言,地址引脚与逻辑1、逻辑0、SCL或SDA相连,在某种程度上解决了这个问题。采用这一办法,单个引脚可被设定到4种不同的数字状态,相当于两个位。尽管这种方法简单、有效,但由于最初的I²C协议仅提供7个地址位,因此具有一定的局限性。1-Wire总线具有64位地址,在这一方面可提供更高的灵活性。无论如何,每个增加一个地址引脚将增加成本,因此增加地址引脚不是一个好的选择。
图1给出了一种简单的低成本方案,可重新获取串行总线上挂接的多个器件的物理位置,将网络的起始位置的器件标识为位置#1,并依次为网络上挂接的器件编号。该方案的电路连接如图中蓝色粗线所示。在位置1处,线路接地即可。
图1. 可进行位置检测的串行网络
除了图1中标有IN和OUT的两个引脚外,还需要通过片上逻辑读取IN引脚和写OUT引脚。如果协议支持多点网络功能,那么借助于上述这些方法,主机可首先识别出第一个器件,然后再识别下一个器件,以此类推,直到完成对所有器件的定位。1-Wire总线即可满足这一要求的串行总线系统。
1-Wire总线是一种简单的信令协议,可通过一条公共数据线实现主机/主控制器和一个或多个从机之间的半双工、双向通信(图2)。可以通过单根1-Wire总线实现供电以及与从机之间的数据通信。供电通过以下方式实现:在数据传输过程中,总线状态为高时从机的内部电容从总线上获取电荷,总线状态为低时利用该电荷为器件供电。典型的1-Wire主机包括一个开漏I/O引脚,并通过电阻上拉至3V至5V电源。采用这种智能通信技术,可以随时方便、高效地增加存储器、认证和混合信号功能。
图2. 不带链路功能的典型1-Wire网络
所有的1-Wire系统都有一个重要的基本特征:每个从机都具有一个唯一的、不能更改(ROM)的64位、工厂激光刻制序列号(ID),这个序列号永远不会与其它器件重复。除了为终端产品提供唯一的电子ID外,64位ROM ID还允许主机从挂接在同一条总线上的许多从机设备中选择一个器件。64位ROM ID中包含有8位家族码,用于识别器件的类型和支持的功能。
通常,当系统启动初始化时,1-Wire主机可能并不知道总线上挂接的器件数量以及他们的ROM ID。利用总线的线与特性,主机可采用排除法确定总线上挂接的所有器件的ID。通过SearchROM*功能2,主机可确定总线上所挂接器件的ROM ID。然而,Search ROM结果无法提供单个器件的位置。例如,如图2所示的器件ROM ID,器件的ID按照表1所示的顺序获取。
表1. 器件搜索顺序
图3. 具有链路功能的DS28EA00在1-Wire网络中的典型连接
/EN和/DONE引脚除了用于顺序搜索之外,还可作为数字PIO。为了实现这一功能,链路功能定义了三种链路状态,OFF、ON和DONE。通过Chain命令控制链路状态的转换。表2给出了链路状态及相应工作状态。
表2. 链路状态
上电默认链路状态为OFF,此时/DONE (PIOA)和/EN (PIOB)由PIO Access Read和PIO Access Write命令单独控制,如DS28EA00数据资料所述3。链路状态为ON时,/DONE通过一个40kΩ的片上电阻(RCO)上拉至器件内部电源VDD,进而向下一个器件的/EN引脚发送逻辑‘1’信号。如果/EN引脚为逻辑‘0’,则仅处于ON链路状态的器件才能响应Conditional Read ROM命令。在顺序搜索过程中,网络中器件的最大值应满足这一条件。
要将器件从Chain OFF转换为Chain ON或Chain DONE状态,主机需采用Chain命令实现。图4给出了各种可能的转换。Chain命令代码后,主机必须紧接着发送一个适当的Chain Control字节。为了降低接收错误Chain命令的几率,首先以原码形式发送控制字节,然后再以反码形式发送。当主机接收到AAh确认字节时,表明链路状态成功转换。
图4.链路状态转换图
开始顺序搜索时,主机必须将所有器件都置为Chain ON状态。当主机通过Conditional Read ROM读取完一个的器件ROM ID后,应该将该器件置为Chain DONE状态,从而允许链路中的下一个器件以响应Conditional Read ROM命令。在顺序搜索的过程中,器件将依次进入Chain DONE状态,直到搜索完所有器件。最后,所有器件都被设置到Chain OFF状态,从而释放/EN和/DONE引脚,使之变为PIO,并恢复到上电默认状态。
初始化 主机发送Skip ROM命令,紧接着发送Chain ON命令,将所有器件置于Chain ON状态。除了链路中的第一个器件之外,对于其它所有器件,通过/DONE引脚的RCO上拉电阻将/DONE//EN变为逻辑1。
假定采用标准的1-Wire速率(复位/在线检测周期为960µs,每个时隙为65µs),初始化和结束共约用去7ms (一次总共占用的时间)。各个器件的搜索和位置检测约占用7.7ms。相同条件下,执行Search ROM命令时,每个器件约占用14ms。例如,在100ms之内,如果具有链路功能的话,主机能识别和定位12个器件,但是如果仅依靠Search ROM功能的话,主机只能识别7个器件。
Conditional Read ROM DS2401及其兼容的、1993年停产的DS2400硅序列号,均将这一命令读为Read ROM。因此,不要将DS2401连接到采用链路功能的网络中。所以,使用1-Wire端口适配器时,应选择不带DS2401的器件。DS2405版本A也能像DS2401一样响应Conditional Read ROM命令代码。1998年开始投产的DS2405版本B则会忽略Conditional Read ROM命令代码。
1-Wire主控制器电路 在嵌入式应用环境下,可采用各种低成本、分立式、基于IC的1-Wire主控制器。分立解决方案包括上拉电阻、空闲的µC端口引脚以及高级驱动器5。专门用于驱动1-Wire总线的集成驱动器包括DS2480B6 (串行端口,UART),DS24907 (USB端口)以及DS24828,9 (I²C端口,图5)。8通道版本的DS2482具有3个地址引脚,允许单个主控制器控制多达64个独立的1-Wire网络。应用笔记192,"DS2480B串行接口1-Wire线驱动器的使用"10,从软件开发的角度对DS2480B进行了说明。与之类似的一篇针对DS2482驱动器的文章也可供参考11。
图5. 单通道I²C至1- Wire桥接器件DS2482作为1-Wire主控制器。其/DONE输出也可用于驱动一个LED,并不会影响链路功能。
电源 如果提供VCC电源,所有DS28EA00可同时进行温度转换。随后发送Conditional Search命令,可以筛选出那些发出报警温度的器件。通过顺序搜索,可得出器件的ROM ID及其位置信息,能迅速知道需要在哪些地方采取纠正措施。如果没有VCC电源,温度转换必须依次进行。此外,开始进行顺序搜索时(所有器件从Chain OFF状态转换至Chain ON状态),必须确保1-Wire数据线路上的电压不会跌落的太多。
速率 高速模式下的快速时序不适用于包含多个器件,或超过3m的1-Wire网络;此时应采用标准速率替代。根据网络中的器件数量,即使采用标准速率,也需要延长恢复时间,特别是当采用寄生电源供电时12。
故障诊断 如果无法实现顺序搜索,则在发送Chain ON命令后,察看1-Wire线路上的压降。如果电压跌落至3.0V以下,则命令有可能不能正常执行。为了避免电压跌落,Chain ON以后,可采用带有源上拉的驱动电路,或者采用主电源供电。如果链路中第一个器件的/EN输入开路、或者连接至1-Wire线路,或者连接至VCC,都将导致顺序检测失败。确保网络中无DS2401。不允许将并联的两个或多个网络连接至同一个1-Wire端口,因此此时所有的“首个器件”将同时响应,这样会得到带无效CRC字节的ROM ID。
本文还发表在Maxim工程期刊,第60期(PDF, 848kB)。
数字总线系统的共同特性即为共享。随着微处理器的推广,并行总线系统应用日益广泛,总线上挂接的所有元件共享数据线和地址线。片选信号可由地址线和控制信号解码得到。根据硬件设计和布线,连接在总线上的各个器件的物理地址总是已知的。随着技术向低成本串行总线系统的发展1,首先省去了地址线。但SPI™和MICROWIRE™串行总线仍具有片选功能。许多先进的串行总线系统引入了基于协议的寻址方式,将地址信息作为一个前导码传输给数据。该类总线的典型代表为I²C/SMBus™,此类通信接口缩减到只有数据线和时钟线。为了进一步降低成本,可以将时钟信息嵌入到数据流中。该类总线的典型代表为1-Wire、LIN和SensorPath®总线。
由于采用了基于协议的寻址方式,因此元件物理位置方面的信息将缺失。对于采用串行总线的仪表和控制应用(例如测量多点温度),这将是一个问题。对于I²C总线而言,地址引脚与逻辑1、逻辑0、SCL或SDA相连,在某种程度上解决了这个问题。采用这一办法,单个引脚可被设定到4种不同的数字状态,相当于两个位。尽管这种方法简单、有效,但由于最初的I²C协议仅提供7个地址位,因此具有一定的局限性。1-Wire总线具有64位地址,在这一方面可提供更高的灵活性。无论如何,每个增加一个地址引脚将增加成本,因此增加地址引脚不是一个好的选择。
图1给出了一种简单的低成本方案,可重新获取串行总线上挂接的多个器件的物理位置,将网络的起始位置的器件标识为位置#1,并依次为网络上挂接的器件编号。该方案的电路连接如图中蓝色粗线所示。在位置1处,线路接地即可。
图1. 可进行位置检测的串行网络
除了图1中标有IN和OUT的两个引脚外,还需要通过片上逻辑读取IN引脚和写OUT引脚。如果协议支持多点网络功能,那么借助于上述这些方法,主机可首先识别出第一个器件,然后再识别下一个器件,以此类推,直到完成对所有器件的定位。1-Wire总线即可满足这一要求的串行总线系统。
1-Wire总线是一种简单的信令协议,可通过一条公共数据线实现主机/主控制器和一个或多个从机之间的半双工、双向通信(图2)。可以通过单根1-Wire总线实现供电以及与从机之间的数据通信。供电通过以下方式实现:在数据传输过程中,总线状态为高时从机的内部电容从总线上获取电荷,总线状态为低时利用该电荷为器件供电。典型的1-Wire主机包括一个开漏I/O引脚,并通过电阻上拉至3V至5V电源。采用这种智能通信技术,可以随时方便、高效地增加存储器、认证和混合信号功能。
图2. 不带链路功能的典型1-Wire网络
所有的1-Wire系统都有一个重要的基本特征:每个从机都具有一个唯一的、不能更改(ROM)的64位、工厂激光刻制序列号(ID),这个序列号永远不会与其它器件重复。除了为终端产品提供唯一的电子ID外,64位ROM ID还允许主机从挂接在同一条总线上的许多从机设备中选择一个器件。64位ROM ID中包含有8位家族码,用于识别器件的类型和支持的功能。
通常,当系统启动初始化时,1-Wire主机可能并不知道总线上挂接的器件数量以及他们的ROM ID。利用总线的线与特性,主机可采用排除法确定总线上挂接的所有器件的ID。通过SearchROM*功能2,主机可确定总线上所挂接器件的ROM ID。然而,Search ROM结果无法提供单个器件的位置。例如,如图2所示的器件ROM ID,器件的ID按照表1所示的顺序获取。
表1. 器件搜索顺序
|
|
|
|
|
|
|
|
|
|
|
|
链路功能的概念
采用链路功能确定1-Wire网络环境中器件的物理位置时,遵循以下几点:- 已知系统级1-Wire网络的物理分布,例如第一个、谁是第二个,等等,以及器件/节点的物理位置。
- 获取器件(ROM ID)的物理连接顺序,哪个是第一个,哪个是最后一个。
图3. 具有链路功能的DS28EA00在1-Wire网络中的典型连接
/EN和/DONE引脚除了用于顺序搜索之外,还可作为数字PIO。为了实现这一功能,链路功能定义了三种链路状态,OFF、ON和DONE。通过Chain命令控制链路状态的转换。表2给出了链路状态及相应工作状态。
表2. 链路状态
|
| ||
|
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
上电默认链路状态为OFF,此时/DONE (PIOA)和/EN (PIOB)由PIO Access Read和PIO Access Write命令单独控制,如DS28EA00数据资料所述3。链路状态为ON时,/DONE通过一个40kΩ的片上电阻(RCO)上拉至器件内部电源VDD,进而向下一个器件的/EN引脚发送逻辑‘1’信号。如果/EN引脚为逻辑‘0’,则仅处于ON链路状态的器件才能响应Conditional Read ROM命令。在顺序搜索过程中,网络中器件的最大值应满足这一条件。
要将器件从Chain OFF转换为Chain ON或Chain DONE状态,主机需采用Chain命令实现。图4给出了各种可能的转换。Chain命令代码后,主机必须紧接着发送一个适当的Chain Control字节。为了降低接收错误Chain命令的几率,首先以原码形式发送控制字节,然后再以反码形式发送。当主机接收到AAh确认字节时,表明链路状态成功转换。
图4.链路状态转换图
开始顺序搜索时,主机必须将所有器件都置为Chain ON状态。当主机通过Conditional Read ROM读取完一个的器件ROM ID后,应该将该器件置为Chain DONE状态,从而允许链路中的下一个器件以响应Conditional Read ROM命令。在顺序搜索的过程中,器件将依次进入Chain DONE状态,直到搜索完所有器件。最后,所有器件都被设置到Chain OFF状态,从而释放/EN和/DONE引脚,使之变为PIO,并恢复到上电默认状态。
顺序搜索例程
前提 主机控制网络如图3所示。所有器件都支持链路功能。若要搜索链路中器件的顺序,例如位置编号以及该处器件的ROM ID (即注册码),主机需执行以下步骤:初始化 主机发送Skip ROM命令,紧接着发送Chain ON命令,将所有器件置于Chain ON状态。除了链路中的第一个器件之外,对于其它所有器件,通过/DONE引脚的RCO上拉电阻将/DONE//EN变为逻辑1。
第一个周期 主机发送Conditional Read ROM命令,链路中的第一个器件对命令进行响应,可得到第一个器件的64位ROM ID。主机存储该ROM ID,并将其确定为链路的第一个器件。随后,主机发送Chain DONE命令。该命令通过器件#1的/DONE引脚,将链路中第二个器件的/EN引脚设置为逻辑0,同时防止器件#1再次响应。终止 搜索过程结束后,链路中的所有器件都处于Chain DONE状态。主机应发送Skip ROM命令后,紧接着发送Chain OFF命令,用于终止顺序搜索。这样可将所有器件都进入Chain OFF状态,变成由PIO Access功能命令控制PIO引脚。关于Conditional Read ROM和Chain命令的详细说明,以及完整的流程图,请参考DS28EA00数据资料4。
第二个周期 主机发送Conditional Read ROM命令。由于此时器件#2是链路中唯一一个/EN为逻辑0的器件,因此该器件发送其ROM ID作为响应。主机将该ROM ID保存为序列码'2'。(器件#1处于Chain DONE状态,所以不会响应该命令。) 随后,主机发送Chain DONE命令。
重复周期 要识别剩余器件的ROM ID及其物理位置,主机需要重复发送Conditional Read ROM和Chain DONE命令。如果没有器件响应Conditional Read ROM命令,说明链路中的所有器件均已被识别。
假定采用标准的1-Wire速率(复位/在线检测周期为960µs,每个时隙为65µs),初始化和结束共约用去7ms (一次总共占用的时间)。各个器件的搜索和位置检测约占用7.7ms。相同条件下,执行Search ROM命令时,每个器件约占用14ms。例如,在100ms之内,如果具有链路功能的话,主机能识别和定位12个器件,但是如果仅依靠Search ROM功能的话,主机只能识别7个器件。
补充说明
电缆电容 常用于构建1-Wire网络的5类电话线的每对双绞线对之间具有大约50pF/m的电容。根据网络的规模,当所有器件都处于Chain ON状态时,会给线路增加非常大的电容负载。在寄生供电模式下,有时候需要采用有源1-Wire线路上拉,这样可避免电压跌落至最小允许值以下。采用主电源或本地VCC电源供电时无需采用这一措施。Conditional Read ROM DS2401及其兼容的、1993年停产的DS2400硅序列号,均将这一命令读为Read ROM。因此,不要将DS2401连接到采用链路功能的网络中。所以,使用1-Wire端口适配器时,应选择不带DS2401的器件。DS2405版本A也能像DS2401一样响应Conditional Read ROM命令代码。1998年开始投产的DS2405版本B则会忽略Conditional Read ROM命令代码。
1-Wire主控制器电路 在嵌入式应用环境下,可采用各种低成本、分立式、基于IC的1-Wire主控制器。分立解决方案包括上拉电阻、空闲的µC端口引脚以及高级驱动器5。专门用于驱动1-Wire总线的集成驱动器包括DS2480B6 (串行端口,UART),DS24907 (USB端口)以及DS24828,9 (I²C端口,图5)。8通道版本的DS2482具有3个地址引脚,允许单个主控制器控制多达64个独立的1-Wire网络。应用笔记192,"DS2480B串行接口1-Wire线驱动器的使用"10,从软件开发的角度对DS2480B进行了说明。与之类似的一篇针对DS2482驱动器的文章也可供参考11。
图5. 单通道I²C至1- Wire桥接器件DS2482作为1-Wire主控制器。其/DONE输出也可用于驱动一个LED,并不会影响链路功能。
电源 如果提供VCC电源,所有DS28EA00可同时进行温度转换。随后发送Conditional Search命令,可以筛选出那些发出报警温度的器件。通过顺序搜索,可得出器件的ROM ID及其位置信息,能迅速知道需要在哪些地方采取纠正措施。如果没有VCC电源,温度转换必须依次进行。此外,开始进行顺序搜索时(所有器件从Chain OFF状态转换至Chain ON状态),必须确保1-Wire数据线路上的电压不会跌落的太多。
速率 高速模式下的快速时序不适用于包含多个器件,或超过3m的1-Wire网络;此时应采用标准速率替代。根据网络中的器件数量,即使采用标准速率,也需要延长恢复时间,特别是当采用寄生电源供电时12。
故障诊断 如果无法实现顺序搜索,则在发送Chain ON命令后,察看1-Wire线路上的压降。如果电压跌落至3.0V以下,则命令有可能不能正常执行。为了避免电压跌落,Chain ON以后,可采用带有源上拉的驱动电路,或者采用主电源供电。如果链路中第一个器件的/EN输入开路、或者连接至1-Wire线路,或者连接至VCC,都将导致顺序检测失败。确保网络中无DS2401。不允许将并联的两个或多个网络连接至同一个1-Wire端口,因此此时所有的“首个器件”将同时响应,这样会得到带无效CRC字节的ROM ID。
评论
查看更多