通信网络-应用笔记159绝对可靠的1-Wire通信
1-WIRE总线详解

1-WIRE总线详解。
讯号线会连接一个4.7K 欧姆的Pull-High 电阻,电阻再接到电源(3V 到5.5V)。
1-WIRE 总线传输使用的速度有标准速度与高速两种。
每个1-WIRE 总线有独立的64 位辨识码以供装置辨识用,因此最多可以连接1.8*1019 个装置,几乎是无限制。
1-WIRE 常见的应用是在EEPROM 上与一些传感器界面上。
1- WIRE 的速度有标准:1MHz(1us),高速:5MHz(0.2us).1-WIRE 有四种数据包:1.Reset:每个通讯周期都是由Reset 讯号开始。
Master 会先发送Reset Pulse 让所有在1-WIRE 上的Slave 装置进入辨别状态,当一个Slave 或很多个Slave 接收到Reset Pulse 讯号之后,Slave 会回传一个Presence Pulse 讯号,用来表示接收到。
2.Write 0:发送一个0bit 给Slave(Write 0 time slot)。
3.Write 1:发送一个1bit 给Slave(Write 1 time slot)。
4.Read Data:Read Data Sequences 很像Write 1 Time Slot,但是在Master 释放总线线并且从Slave 装置读回数据后,Master会取样Bus 的状态,透过这种方法Master 可以从Slave 读回任何0 或1 的bit。
Reset:一开始Master 要跟Slave 做任何通讯时,Master 会先传送一个低准位的Reset Pulse(TX)of(标准速度:480us;高速:48us)的一段时间。
接着Master 会释放出总线线并进入接收模式(RX),1-WIRE Bus 会透过上拉电阻将准位拉回High 状态。
然后Master 在Data Line 上会侦测到Rising Edge,此时任何一个Slave 会等待一段时间()(标准速度:15-60us;高速:2-6us)并且传回一个Presence Pulse()(标准速度:60-240us;高速:8-24us)给Master。
上逐步阐述了如何充分利用1-Wire

应用笔记从理论上逐步阐述了如何充分利用1-Wire®功能,并列举了一些示例。
1-Wire主机已被设计到客户的A SIC芯片中,主控CPU用于读取1-Wire温度传感器的数值。
所提供的源代码用于1WM对4个温度传感器发送温度转换指令,并提供转换温度。
假设读者已经了解DS18B20温度传感器、DS1WM 1-Wire主机以及Dallas Semiconductor的1-Wire协议。
引言DS1WM 1-Wire主机为单总线控制器,专为简化主控CPU与周边1-Wire器件之间的单总线通讯而设计,利用D S1WM不必考虑位时序。
本应用笔记从理论上逐步阐述了如何充分利用1-Wire功能,并列举了一些示例。
假设读者已经了解DS18B20温度传感器、DS1WM 1-Wire主机以及Dallas Semiconductor 1-Wire通讯协议,详细资料请参考:Book of iButton Standards (PDF), DS1WM数据资料, DS18B20数据资料, 应用笔记119:嵌入1-Wire主机。
图1. 示例电路图1是以下示例所参考的电路配置,1-Wire主机已被设计到客户的ASIC芯片中,主控CPU通过它对4个DS1 8B20温度传感器发送温度转换命令,并读取转换的温度值。
1-Wire总线和INTR均上拉一个5k电阻,50MHz 的系统时钟通过CLK引脚为1-Wire主机提供时钟信号。
1-Wire主机已被映射到CPU的端口地址存储器中。
概述本示例的程序采用C语言编写,主程序为:GetTemperatures,它完成1-Wire主机的初始化,搜索1-Wire总线上的所有器件,并指定它们测量温度,然后将测量值送回CPU并存储。
如果总线上没有1-Wire器件,则退出主程序并返回值“1”,否则,则返回值0。
其它函数将在下面详细描述。
程序中的常数BASE是1-Wire主机被映射到CPU地址空间中的地址。
1-Wire总线技术的通信特点及其应用

Th mm u ia in a a t r t f - i sT c n lg e Co nc t sCh r ce i i o W r Bu e h oo y o sc 1 e
GU O i LIBi Le , n
( c o l f tmainW u a i . f e h, h n4 0 7 , ia) S h o Auo t h nUnv o T c . o o Wu a 3 0 0Chn
Ab t a t s r c :DALLAS Co p r to ’ 1 W ie b st c n l g a n o r o a i n S - r u e h o o y h s i c mp r b e a p i a i n p o pe tb c u e isc r u ti i l .n a a l p lc to r s c e a s t ic i ss mp e a d wih f we ,h r wa e e p n e .1 W ie b s t c ol g a e u e n t e c r e s s e a d f ri e t i a i n o e t e r a d r x e s s 一 r u e h o y c n b s d i h ha g y t m n o d n i c to f t f h i e t y 1 W ie Sc d n i . 一 r ’ ommu i a i n i e i b e a d smpl , t p l a i n e a t n c to sr la l n i e isa p i to x mpl sa s r s n e n t e p p r c e i lo p e e t d i h a e . Ke wo d :1 W ie b s c mm u i a i n p o o o ; u c s i n; S1 b 0 y r s 一 r u ; o n c to r t c l s c e so D 8 2
用软件实现1-Wire-通信

摘要:在没有专用总线主机(如DS2480B、DS2482)的情况下,微处理器可以轻松地产生1-Wire 时序信号。
本应用笔记给出了一个采用…C‟语言编写、支持标准速率的1-Wire主机通信基本子程序实例。
1-Wire总线的四个基本操作是:复位、写“1”、写“0”和读数据位。
字节操作可以通过反复调用位操作实现,本文提供了通过各种传输线与1-Wire器件进行可靠通信的时间参数。
引言在没有专用总线主机的情况下,微处理器可以轻松地产生1-Wire时序信号。
本应用笔记给出了一个采用C语言编写、支持标准速率的1-Wire主机通信基本子程序实例。
此外,本文也讨论了高速通信模式。
要使该实例中的代码正常运行,系统必须满足以下几点要求:1. 微处理器的通信端口必须是双向的,其输出为漏极开路,且线上具有弱上拉。
这也是所有1-Wire总线的基本要求。
关于简单的1-Wire主机微处理器电路实例,请参见应用笔记4206:"为嵌入式应用选择合适的1-Wire主机"中的1类部分。
2. 微处理器必须能产生标准速度1-Wire通信所需的精确1µs延时和高速通信所需要的0.25µs延时。
3. 通信过程不能被中断。
1-Wire总线有四种基本操作:复位、写1位、写0位和读位操作。
在数据资料中,将完成一位传输的时间称为一个时隙。
于是字节传输可以通过多次调用位操作来实现,下面的表1是各个操作的简要说明以及实现这些操作所必须的步骤列表。
图1为其时序波形图。
表2给出了通常线路条件下1-Wire主机与1-Wire器件通信的推荐时间。
如果与1-Wire主机相连的器件比较特殊或者线路条件比较特殊,则可以采用最值。
请参考可下载的工作表中的系统和器件参数,确定最小值和最大值。
表1. 1-Wire操作图1. 1-Wire时序图表2. 1-Wire主机时序计算这些值的工作表可供下载。
代码实例下面代码实例都依赖于两个通用的'C'函数outp和inp,从IO端口读写字节数据。
1-Wire(单线)概述

会话 分时使用总线。这对于操作系统或几个进程或线程要求同时使用总线的情况下是非 常重要的。当多项操作在同一器件上运行而又不能被打断的时候,需要独占总线的使用 权。
链路 基本的 1-Wire 总线通信功能。所有的 1-Wire 总线的通信功能可以归结为:复位 所有的器件和读写位。这也包括设置总线电特性的功能,如提供专用的 EPROM 编程脉 冲或进行供电。
选定 1-Wire 器件
执行一个特定器件操作
每个受控器件的序列号的整数部分是一个 8 位的家族代码。这个代码对器件模型来说是 特定的。因为每种器件模型执行不同的功能,所以可以用代码来选择用于控制或者查询器件 的协议。表 1 是达拉斯半导体公司的器件型号的家族代码。
家族代码对照 表 1
家族代码
器件型号()iButton 封装
(DS1921Z)22 NhomakorabeaDS1822
23
(DS1973), DS2433
24
(DS1904), DS2415
26
DS2438
27
DS2417
28
DS18B20
1-Wire总线技术的通信特点及其应用

1-Wire总线技术的通信特点及其应用
郭雷;李彬
【期刊名称】《自动化技术与应用》
【年(卷),期】2008(27)9
【摘要】DALLAS公司的1-Wire总线技术以其线路简单、硬件开销少、成本低廉,软件设计简单而有着无可比拟的应用前景.基于1-Wire总线技术能较好地解决传统识别器存在的携带不便、易损坏,易受腐蚀、易受电池干扰等不足,可应用于收费系统,身份识别等领域.其通信可靠简单,很容易实现.因此1-Wire总线技术有着广阔的应用前景,是值得关注的一个发展领域.
【总页数】3页(P95-97)
【作者】郭雷;李彬
【作者单位】武汉理工大学自动化学院,湖北,武汉,430070;武汉理工大学自动化学院,湖北,武汉,430070
【正文语种】中文
【中图分类】TP336
【相关文献】
1.现场总线通信协议分析及现场总线技术应用 [J], 安淑玉;郑路;李晓荃
2.基于1-Wire接口的总线技术及其应用 [J], 伍家满;虞礼贞;刘小燕;李凌
3.1-Wire总线技术及其在火灾监测中的应用 [J], 胡皓;雷金莉;周妮娜
4.单总线(1-Wire Bus)技术及其应用 [J], 陈志英;李光辉
5.基于现场总线技术实现S7 PLC与伺服系统通信--现场总线技术在打号机中的应用 [J], 刘伟
因版权原因,仅展示原文概要,查看原文内容请购买。
one-wire 的标准电压
一、简介在电子工程领域中,one-wire总线是很常见的一种通信协议,它只需要一根数据线和一根地线,因此成本较低,应用广泛。
二、one-wire通信原理1. one-wire总线采用单独的一根线来传输数据和提供电源。
在通信过程中,控制器可以通过改变电压来控制数据传输。
2. one-wire通信采用时间分割多路复用的方式,节省了硬件成本,提高了系统的可靠性。
3. one-wire总线采用了独特的通信协议,可以在一个单一的总线上连接多个设备进行通信,因此在一些特定场景下具有一些独特的优势。
三、标准电压1. 标准电压是one-wire通信中一个非常重要的参数。
根据one-wire 协议规范,标准电压一般为3.3V或5V。
2. 标准电压的选择取决于具体的硬件设计和应用场景。
一般来说,3.3V的电压可在功耗上有更好的表现,而5V则能提供更远的通信距离及更强的抗干扰能力。
3. 在实际应用中,需根据物联网设备的功耗和通信距离来选择合适的标准电压。
四、标准电压的影响1. 电压的选择对one-wire总线的通信速率和稳定性有着直接的影响。
一个合适的电压可以保证通信的可靠性。
2. 标准电压也与one-wire设备的供电、传输距离、抗干扰能力等方面息息相关。
在进行物联网设备设计时,需要充分考虑标准电压。
五、调试和验证1. 在设计one-wire设备时,选择合适的标准电压后,需要进行调试和验证。
使用示波器或逻辑分析仪可以观测电压变化及数据传输情况,以确保通信的稳定性和可靠性。
2. 一些相关的测试设备也可以帮助验证设备对电压的适应性,以进一步保证设备的可靠性和稳定性。
六、结语在物联网设备设计中,one-wire总线的通信协议以及标准电压的选择对设备的稳定性、传输距离和抗干扰能力有着重要的影响。
在设计和调试时,需要充分考虑这些因素,以保证设备的性能和可靠性。
随着物联网技术的不断发展,我们也期待能够有更多的优秀的硬件和软件方案能够应用到更多的实际场景中,为人们的生活带来更多的便利和乐趣。
1-Wire软件资源指南和驱动程序说明
Java OWAPI OWAPI OWAPI OWAPI OWAPI
图 2. API 功能集
会话
分时使用 1-Wire 总线。这对于操作系统或几个进程或线程尝试同时使用同一总线的情况下是非常重要 的。当多项操作在同一器件上运行而又不能被打断的时候,需要独占总线的使用权。
链路
基本的 1-Wire 总线通信功能。 所有的 1-Wire 总线通信功能可以归结为:复位所有的器件和读写位。这 也包括设置总线电特性的功能,如提供专用的 EPROM 编程脉冲或进行供电。
是 执行其它 操作吗?
否 会话 释放 1-Wire 的独占式使用权
其它 处理申请表中的其它任务
AN155
iButton通信实质上是通过与其触头相接触来实现的。这意味着与器件的联系有时是不可靠的。iButton也可 能被安装到阅读器里,在阅读的时候弹出,从而必须有一个相容的纠错方法紧跟其后。当检测到虚假错误 时必须重发数据并在数据通信中进行CRC校验。API中的文件输入输出功能所利用的标准文件结构在 应用 笔记 114 (English only) 1-Wire File Structure中进行了详细说明。这种结构在每页数据上都使用CRC16, 以快速地校验所读数据的正确性。大多数 1-Wire API功能很少或者不能自动重发。重发受应用软件控制。 应用笔记 159 (English only)绝对可靠的 1-Wire通信 讲述了纠错方法和 1-Wire通信的风险评估。
图 3 概括了使用这些功能的典型顺序。‘会话’功能围绕着调用器件进行通信,具有代表性的是先使用一 个‘网络’功能,然后运行存储器或‘器件’的特定操作。
3
10/11/05
图 3. API 用法流程
会话 获取 1-Wire 的独占式使用权
1-wire单总线数据通信
1-wire单总线数据通信
功能命令
主器件借助功能命令访问从器件。 在成功执行初始化和ROM命令后,即可由主器件发出功能
命令,实现主器件与从器件的通信。 Dallas公司现已开发出多种信息纽扣,各器件的功能命令并
不完全相同,使用时须查阅该芯片的技术文档。
1-wire单总线数据通信
基本ROM命令
Read ROM [33H] 即将信息纽扣的注
册码读出。 用于主器件略过其
他ROM命令,直 接读取从器件的 64bit ROM注册码。
1-wire单总线数据通信
基本ROM命令
Match ROM [55H] 用于从多个从器
件中选中一个 命令字节[55H]后
必须紧随64bit ROM注册码
复位时序
1-wire单总线数据通信
写0时序
当单总线上的电平降至VTL以下时,从器件启动内部定时, 于采样窗口内(tSLSMIN至tSLSMAX)写数据0。
单总线在采样点处的电平决定了从器件在窗口内写1或0。 为了保证可靠的通信,整个采样窗口内电平值应该保持恒
定
写0时序
1-wire单总线数据通信
硬件结构
主器件或从器件通过OC门或OD门(即集电极开路或漏极 开路)连接至单总线
单总线要求外接一个5千欧姆左右的上拉电阻 如果单总线保持低电平超过480,单总线上的所有器件将复
位
1-wire单总线数据通信
单总线操作流程
初始化 执行ROM命令 执行功能命令
1-wire单总线数据通信
初始化
1-wire单总线数据通信
复位时序
主器件(单片机或PC机)发送复位脉冲(使单总线为低电 平的持续时间大于tRSTL的)
主器件释放单总线,同时转换为接收模式。 通过上拉电阻将单总线拉至高电平;从器件在检测到数据
1wire总线协议
1wire总线协议
1wire总线协议是一种串行通信协议,它能够通过一根数据线进行数据传输和供电。
它最初由达拉斯半导体公司(Dallas Semiconductor)开发,后来被收购并成为Maxim Integrated公司的一部分。
1wire总线协议被广泛应用于温度传感器、湿度传感器、电压传感器等各种传感器设备中。
1wire总线协议的特点之一是只需要一根数据线就能完成数据传输和供电,这使得它在一些对线缆数量有限的场合中具有很大的优势。
此外,1wire总线协议还具有较高的抗干扰能力,能够在恶劣的环境中稳定工作。
在1wire总线协议中,每个设备都有一个唯一的64位ROM码,这个码是由厂商分配的,保证了每个设备的唯一性。
通过这个唯一的ROM码,系统可以识别和区分不同的传感器设备,从而实现对它们的管理和控制。
1wire总线协议的通信速率比较低,一般在16.3kbps左右,但对于一些低速传感器设备来说已经足够。
此外,1wire总线协议还支持多主机系统,多个1wire设备可以连接到同一条总线上,由主机控制各个设备的访问。
在1wire总线协议中,数据的传输是通过脉冲宽度调制(Pulse Width Modulation)来实现的,这种方式能够很好地抵抗传输过程中的干扰。
此外,1wire 总线协议还支持数据的校验和错误检测,保证了数据传输的可靠性。
总的来说,1wire总线协议是一种简单、灵活、可靠的串行通信协议,适用于各种传感器设备的应用场合。
它的低成本、低线缆数量、高抗干扰能力等特点,使得它在一些特定的领域中具有很大的优势。
随着物联网技术的发展,1wire总线协议有望在更多的领域得到应用和推广。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
应用笔记 159绝对可靠的1-Wire通信 绪论Dallas Semiconductor的1-Wire®器件利用一根数据线和定义完善的、经过时间检验的协议进行通信。
该协议包括了处理断续连接(“接触”)的特别规定,这种情况在应用iButton®形式的1-Wire器件时比较常见。
由于1-Wire器件的应用已经渗透到了货币交易和高度安全的认证系统,所以对通信可靠性的要求越来越高。
本应用笔记将讨论有关开发人员如何保证1-Wire通信“绝对可靠”的技术,以及需要考虑这些技术的场合。
本文将主要讨论iButton形式的1-Wire器件,因为这些器件通常用于通信困难的接触式连接应用中。
尽管本文的指导方针直接涉及的是iButton器件,但它们适用于所有的1-Wire器件。
嵌入式(微控制器)应用是本文讨论的焦点。
这些技术的绝大多数也能用于任何1-Wire总线的主机。
本文假设读者已经熟悉了Dallas Semiconductor的1-Wire总线协议和基本的1-Wire器件通信方法和算法。
可靠的iButton通信通用的1-Wire器件通信通常包括诸如搜索(识别总线上的器件)、读器件网络地址(序列号)、读器件数据或状态和写存储器或控制数据等功能。
执行这些操作的软件必须能够在操作中的任何一点处理断续连接、用户操作错误、总线短路、外部干扰或连接失败的情况。
有些情况下,软件很容易检测到通信失败并加以矫正。
比如,读取iButton时发生错误,软件会尝试再读一次iButton,或者由用户移走并重新加载iButton,启动一次新的交易。
从iButton读取数据时发生错误通常只会引起小的延时或者给用户带来些麻烦。
但是当向器件写入数据时发生错误后果则严重得多。
例如,如果iButton含有货币数据,那么借方(买方)在每次购买的时候都要向iButton中写入改变后的货币数量。
如果这些更新中的任何一次发生错误,都会破坏iButton中的数据,用户将丢失他们全部的货币余额——这通常是让人无法接受的,即使是这种情况极少发生。
很难给出“绝对可靠”的精确定义。
通常,大多数标准1-Wire总线的数据交换相当可靠。
利用Read ROM过程可以读取器件的网络地址(序列号),如果随后跟有家族代码和CRC的检验,那就相当可靠了(参见下文中的家族代码和CRC-8)。
即使读取探头遭遇到最恶劣干扰环境的冲击(随机流),虚假的iButton地址未被识别出来的概率也只有1/256。
因为典型的iButton读取环境比最差的情况要好的多,发生的概率也小得多。
虽然如此,即使是偶尔的误读,有一些应用也是不能容忍的,因为所造成的后果太严重。
1-Wire和iButton是Dallas Semiconductor的注册商标。
本文中,可靠性达到相当于只允许将64位iButton网络地址顺序读两次、并进行逐位比较后仍被误读的水平被认为是绝对可靠。
在最恶劣的干扰类型干扰下(连续的随机位),误读概率大概只有1/4,230,000,000 (大约是1/(264)的平方根)。
如果一个操作在处于最恶劣的干扰时仍能达到和超过上述可靠性的水平,就认为操作是绝对可靠的。
绝对可靠技术的应用场合绝对可靠技术并不总是必需的,牢记这一点非常关键。
出错概率相当低的标准软件法足以满足大多数应用的要求。
但是,如果通信错误的后果很严重、或者通信错误造成的心理影响会损害用户的信任度时,就要采用绝对可靠方法。
下面是一些范例:在货币交易(eCash)方案中,误读iButton地址(序列号)会造成随后的器件存取操作彻底失效,同时也会导致(本应)利用密码绑定到器件标识的密钥核查失败。
偶尔误读器件标识结果只是对产品或服务的临时否定。
当用户重新加载iButton时,交易将正常完成,所以对用户的影响非常小。
这种情况下,由于误读iButton引起错误交易的概率将非常小,所以,不必采用绝对可靠的方法读iButton地址。
然而,在随后的交易过程中,当软件试图从iButton中读取用户的账目余额时,有关的记录表被打开。
这时出现错误可能会更改或破坏货币值,更改或破坏货币值是绝对不能接受的,即使偶尔发生也不允许。
更糟的是,如果在更新iButton中的账目余额(写数据的时候)时发生故障还可能会导致永久性的破坏,使用户iButton数据崩溃,无法用于以后的交易。
当出现的错误造成了严重的后果时就必需采用绝对可靠的方法,而当出错造成的后果无关紧要时则可以放弃绝对可靠的方法。
使用绝对可靠技术的另一个原因(通常被忽略)则涉及到用户的信任度。
在基于iButton地址(序列号)的门禁控制系统中,如果锁中插入无效的iButton钥匙、同时又被误读的概率是非常小的(即使在最糟糕的情况下,也不到1/256)。
而误读iButton地址又恰巧与门的有效钥匙相匹配的概率更是微乎其微(不到数十亿分之一)。
存在如此小的概率,已不必多虑其安全性,可以假设绝对可靠的方法并不必要。
当然,还需要考虑发生更为频繁的情况,即有效的iButton密钥被误读、拒绝用户进入。
这时用户只需重试一次即可,因此,这也只是一个小小的麻烦而已,而且发生的概率也很小。
安全管理器巡视入门记录,查看到无效的iButton钥匙试图进入时将发出报警信号。
有时,绝对可靠技术对安全系统操作来说并不必要,但对用户的信任度来说则是必需的。
这些范例说明了应该考虑采用绝对可靠技术的场合。
下面将讨论各种iButton保证绝对可靠性的操作和方法。
出现通信错误时恢复正常通信的方法有许多种,下面将要讨论的是一些在实际应用中得到成功验证的方法。
设计人员可以利用这些思路,并可把它们扩展到本文没有明确说明的iButton操作中。
1-Wire总线的特性1-Wire总线是一种取反逻辑的线或配置。
这意味着许多事件都把总线拉到低电平。
其中包括不锈钢外壳被不恰当地放置到iButton的读取探头上导致电短路、主机产生复位脉冲和时隙、新增iButton器件产生在线脉冲以及出现在总线上的其它器件产生在线脉冲或零位。
(没有提及雨水、蓄意篡改等因素。
)1-Wire总线被主机或从机器件的低阻驱动器拉低,然后通过主机所提供的弱上拉电流返回高电平。
外部干扰源将总线从1变为0时只需将总线短接;要想从0变为1,干扰源必须要有足够的能量来克服产生0位的低阻驱动。
正因为此,大多数错误是将数据为1的位变为0。
然而,产生错误的模式并非总是如此。
噪声脉冲(任意极性的)会导致从机器件计时错误(对从机而言相当于产生了一个额外的时隙),使返回的后续位与主机失去同步。
从机返回0 的时候,如果触点断开主机读到的将是1。
程序员应该预料到所有可能发生的误码类型(位反相、位丢失、添加位)、并加以处理。
好的编程习惯是假定总线总是不可靠的,要采取一切预防措施确保有效的数据通信。
不考虑1-Wire总线的特性,程序员可能用来确保可靠数据交换的工具包括:硬件产生的CRC-8和CRC-16校验包含在数据中的嵌入式和校验或CRC校验写总线返回位校验多次(冗余)读取和读回已经写入的数据数据和器件ID的密钥认证错误恢复和重试执行1-Wire总线通信的程序,在发生误码的时候必须要有一个经过慎重考虑的方案来处理重试操作。
1-Wire功能一旦发生失效,通常都重试一次,但是程序员必须考虑到所做的尝试失败时可能发生各种各样的事件。
当触点断开或1-Wire总线短路的时候,iButton器件可能不再被寻址(被选择)。
如果器件被置于高速(Overdrive)模式,它可能由中断复位到标准速度。
此后,在高速模式下的重试操作将失败,因为器件处于不正确的速度模式中。
有些情况下,重试的次数可能是受限制的,如果重试过程从头开始交易,要注意避免浪费时间。
前期错误检测因为iButton是断续接触的,真正起作用的电接触可能只发生在很短的一段时间里,所以,在交易过程中,尽可能早地检测到错误对系统性能会产生本质的不同。
在通信过程的最初几个字节中检测到错误可以使软件中断数据交换,尽快启动重试过程。
如果经过很长时间的数据传输后才检测到错误,意味着大量宝贵时间被浪费在那些注定无效的操作中。
大多数嵌入式1-Wire子程序人为地在总线上产生时隙(位),同时执行读、写操作。
对于多数器件,一个读时隙恰好也是一个写1时隙,从机把1变为0按要求返回所期望的数据。
典型的位操作(读和写)主机子程序构造如下(见下面的参考波形图):1)将总线拉低,启动一次时隙。
2)等待6µs。
3)输出要写入总线的位。
(如果是1,则释放总线,允许它返回高电平。
如果是0,则继续使总线保持低电平。
)4)等待9µs。
5)时隙开始后的15µs采样总线电平(低电平= 0,高电平= 1)。
6)等待45µs。
7)时隙开始后的60µs允许总线浮空(在进程中终止任何写0操作)。
8)等待10µs的总线恢复时间。
9)返回采样位。
合成波形类似于下面的波形(数字指的是上面的步骤):1 3 5 7 8子程序总是执行同样的基本1或0时隙。
如果待发送的数据是0,将产生一个写0时隙,总线将持续保持低电平60µs。
如果待写的数据是1,那么时隙可能是写1时隙,也可能是读时隙,这时主机使总线保持低电平6µs,然后释放总线。
每次向总线写入一位,总线状态也被读回并返回给所调用的程序,所以,同样的子程序既被用于执行总线写,又用于执行总线读。
协议决定了何时写入从机或读取从机。
为了从iButton从机读取数据位,要调用子程序发送1。
如果返回的是0,说明从机在采样期间将总线保持为低电平,返回一个0位,将一个1时隙变成了0时隙。
通过写所有的1、并在必要时允许从机将1改为0可以实现读从机的操作。
字节操作子程序只是简单地循环调用八次位操作,将其累积为一个字节。
写时隙过程中的返回值看起来并无意义——它通常与写入的值相同。
如果1-Wire总线的工作正常,那么上述假设成立,写时隙后的返回值可以(通常是)忽略。
然而,总线上的短路状态、新增器件意外产生的在线脉冲、噪声脉冲或来自那些游离的从机器件的0位可以通过逐位比较写入数据与返回值来检测。
当软件产生写时隙的时候,如果位操作子程序返回的数据与发送的数据不匹配,说明发生了总线错误。
为了快速检测错误,节省宝贵的、完成一次交易的接触时间,绝对可靠性软件应该对照写入总线的数据和返回的数据。
在PC机上运行(非嵌入式)或用串口与1-Wire的接口(即DS2480)不能直接构成1-Wire时隙,但结果相同。
当每位或字节写入总线时,写过程中返回相应的位或字节,可用于检测误码。
(PC机上的应用受串口或端口驱动的限制可能对此无能为力,直到全部交易完成后才能对产生的误码做出响应。