1-wire总线的基本通信协议(protues)
wire总线的基本通信协议protues

wire总线的基本通信协议protues Wire总线的基本通信协议——ProteusProteus是一款功能强大的电子设计自动化(EDA)软件,广泛应用于电子电路设计、仿真和调试等领域。
在Proteus中,Wire总线是常用的通信协议之一。
本文将介绍Wire总线的基本通信协议以及在Proteus中的应用。
一、Wire总线的基本通信协议Wire总线是一种串行通信协议,常用于短距离通信和连接多个设备。
它采用两根传输线,分别为SCL(串行时钟线)和SDA(串行数据线),通过数据的时序传输来完成通信任务。
在Wire总线中,通信的发送和接收是由主设备(Master)和从设备(Slave)之间的交互完成的。
主设备负责发起通信并控制通信的时序,从设备则被动响应主设备的指令并提供相应的数据。
具体的通信流程如下:1. 主设备发送起始信号(Start):主设备将SDA线从高电平拉低,然后将SCL线拉低,表示开始一次通信。
2. 主设备发送从设备地址和读/写信号:主设备将从设备的地址通过SDA线发送,并指定是读操作还是写操作。
3. 从设备响应主设备信号:从设备接收到地址后,将ACK信号(应答信号)通过SDA线发送给主设备,表示接收到地址。
4. 主设备发送数据:主设备将要发送的数据通过SDA线发送给从设备。
5. 从设备响应主设备信号:从设备接收到数据后,通过SDA线发送ACK信号给主设备,表示接收到数据。
6. 主设备发送停止信号(Stop):主设备将SDA线由低电平拉回高电平,然后将SCL线拉高,表示通信结束。
通过以上的通信流程,主设备和从设备可以实现数据的交互和控制的传输。
Wire总线的通信协议简单易懂,适用于各种场景。
二、Wire总线在Proteus中的应用在Proteus软件中,我们可以通过添加Wire总线来模拟电子电路中的通信过程。
下面将以一个简单的实例来介绍Wire总线在Proteus中的应用。
假设我们需要设计一个由主控芯片和多个从设备组成的系统。
用软件实现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端口读写字节数据。
51单片机中的onewire_sendbyte的意思

在51单片机中,onewire_sendbyte是一个函数,用于向单总线(One-Wire)发送一个字节。
One-Wire是一种通信协议,它允许单个数据线在微控制器和外设之间进行通信。
该函数的作用是将一个字节数据发送(写入)到单总线上,以便与其他设备进行通信。
具体而言,onewire_sendbyte函数将接收一个字节数据作为参数,并将其写入到单总线上。
在函数内部,它会执行必要的逻辑来确保数据被正确地发送到单总线上。
这个函数通常用于在单片机与One-Wire 设备之间进行通信时,向设备发送指令或数据。
需要注意的是,具体的实现细节可能因不同的单片机型号而有所不同。
因此,如果您想了解更多关于onewire_sendbyte函数的详细信息,建议参考您所使用的单片机的开发文档或相关资料。
单总线协议详解

单总线协议详解单总线协议详解单总线即one-wire总线,是美国DALLAS公司推出的外围串行扩展总线技术。
与SPI、IC串行数据通信方式不同.它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的,具有节省I/O口线、资源结构简单、成本低廉、便于总线扩展和维护等诸多优点。
单总线是DALLAS公司研制开发的种协议由一个总线主节点、或多个从节点组成系统,通过根信号线对从芯片进行数据的读取。
每一个符合OneWire协议的从芯片都有一个唯一的地址,包括48位的序列号、8位的家族代码和8位的CRC代码。
主芯片对各个从芯片的寻址依据这64位的不同来进行。
单总线利用一根线实现双向通信。
因此其协议对时序的要求较严格,如应答等时序都有明确的时间要求。
,基本的时序包括复位及应答时序、写一位时序、读一位时序。
在复位及应答时序中,主器件发出复位信号后,要求从器件在规定的时间内送回应答信号;在位读和位写时序中,主器件要在规定的时间内读固或写出数据。
单总线适用于单主机系统,能够控制一个或多个从机设备。
主机可以是微控制器,从机可以是单总线器件,它们之间的数据交换只通过一条信号线。
当只有一个从机设备时,系统可按单节点系统操作;当有多个从设备时,系统则按多节点系统操作。
单总线工作原理单总线器件内部设置有寄生供电电路(Parasite Power Circuit)。
当单总线处于高电平时,一方面通过二极管VD向芯片供电,另方面对内部电容C(约800pF)充电;当单总线处于低电平时,二极管截止,内部电容c向芯片供电。
由于电容c的容量有限,因此要求单总线能间隔地提供高电平以能不断地向内部电容C充电、维持器件的正常工作。
这就是通过网络线路窃取电能的寄生电源的工作原理。
要注意的是,为了确保总线上的某些器件在工作时(如温度传感器进行温度转换、E2PROM写人数据时)有足够的电流供给,除了上拉电阻之外,还需要在总线上使用MOSFET(场效应晶体管)提供强上拉供电。
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
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总线的通信协议以及标准电压的选择对设备的稳定性、传输距离和抗干扰能力有着重要的影响。
在设计和调试时,需要充分考虑这些因素,以保证设备的性能和可靠性。
随着物联网技术的不断发展,我们也期待能够有更多的优秀的硬件和软件方案能够应用到更多的实际场景中,为人们的生活带来更多的便利和乐趣。
单总线(onewire)技术及应用

单总线技术及其应用单总线(1~Wire Bus)技术采用单根信号线,即传输时钟,又传输数据,而且数据传输是双向的,在其线路简单、硬件开销少、成本低廉、软件设计简单方面有着无可比拟的优势。
目前常用的微机与外设串行总线主要有我们熟悉的12C总线,SPI总线,SCI总线。
其中12C总线是以同步串行2线方式进行通信(一条时钟线,一条数据线),SPI总线是以同步串行3线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线),SCI总线是以异步方式进行通讯(一条数据输入线,一条数据输出线)。
这些总线至少需要有两条或两条以上的信号线。
近年来,美国的达拉斯半导体公司(DALLAS SEMICONDUCTOR)推出了一套单总线(1-Wire Bus)技术,与上述总线不同,它采用单根信号线,即传输时钟,又传输数据,而且数据传输是双向的,在其线路简单、硬件开销少、成本低廉、便于总线的扩展和维护等优点。
单总线适用于单个主机系统,能够控制一个或多个从机设备。
主机可以是微控制器,从机可以是单总线器件,如图1所示,他们之间的数据交换只通过一条数据线。
当只有一个从机设备时系统可按单节点系统操作;当有多个从机设备时,则系统按多节点系统操作。
单总线工作原理顾名思义,单总线只有一根数据线系统中的数据交换、控制都在这根线上完成。
设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,这样允许设备不发送数据时释放总线,以便其他设备使用总线,其内部等效电路如图2所示。
单总线要求外接一个约4.7Ω的上拉电阻,这样当总线闲置时,状态为高电平。
主机和从机之间的通信通过以下三个步骤完成:初始化1-wire器件,识别1-wire器件,交换数据。
由于二者是主从结构,只有主机呼叫从机时,从机才能答应,因此主机访问1-wire器件都必须严格遵循单总线命令序列:初始化、ROM命令、功能命令。
如果出现序列混乱,1 -wire器件不会响应主机(搜索ROM命令,报警搜索命令除外)。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1-Wire总线的基本通信协议作为一种单主机多从机的总线系统,在一条1-Wire总线上可挂接的从器件数量几乎不受限制。
为了不引起逻辑上的冲突,所有从器件的1-Wire总线接口都是漏极开路的,因此在使用时必须对总线外加上拉电阻(一般取5k>左右)。
主机对1-Wire总线的基本操作分为复位、读和写三种,其中所有的读写操作均为低位在前高位在后。
复位、读和写是1-Wire总线通信的基础,下面通过具体-程序详细介绍这3种操作的时序要求。
(程序中DQ代表1-Wire 总线,定义为P1.0,uchar定义为unsigned char)11-Wire总线的复位复位是1-Wire,总线通信中最为重要的一种操作,在每次总线通信之前主机必须首先发送复位信号。
如程序1.1所示,产生复位信号时主机首先将总线拉低480-960μs然后释放,由于上拉电阻的存在,此时总线变为高电平。
1-Wire总线器件在接收到有效跳变的15-60μs内会将总线拉低60>240μs,在此期间主机可以通过对DQ采样来判断是否有从器件挂接在当前总线上。
函数Reset()的返回值为0表示有器件挂接在总线上,返回值为1表示没有器件挂接在总线上。
程序1.1总线复位在DS18820中共有三种存储器,分别是ROM、RAM、EEPROM,每种存储器都有其特定的功能,可查阅相关资料。
31-Wire总线ROM功能命令在DS18820内部光刻了一个长度为64bit的ROM编码,这个编码是器件的身份识别标志。
当总线上挂接着多个DS18820时可以通过ROM编码对特定器件进行操作。
ROM功能命令是针对器件的ROM编码进行操作的命令,共有5个,长度均为8bit(1Byte)。
①读ROM(33H)当挂接在总线上的1-Wire总线器件接收到此命令时,会在主机读操作的配合下将自身的ROM编码按由低位到高位的顺序依次发送给主机。
总线上挂接有多个DS18820时,此命令会使所有器件同时向主机传送自身的ROM编码,这将导致数据的冲突。
②匹配ROM(55H)主机在发送完此命令后,必须紧接着发送一个64bit的ROM编码,与此ROM编码匹配的从器件会响应主机的后续命令,而其他从器件则处于等待状态。
该命令主要用于选择总线上的特定器件进行访问。
③跳过ROM(CCH)发送此命令后,主机不必提供ROM编码即可对从器件进行访问。
与读ROM命令类似,该命令同样只适用于单节点的1-Wire,总线系统,当总线上有多个器件挂接时会引起数据的冲突。
④查找ROM(FOH)当主机不知道总线上器件的ROM编码时,可以使用此命令并配合特定的算法查找出总线上从器件的数量和各个从器件的ROM编码。
⑤报警查找(ECH)此命令用于查找总线上满足报警条件的DS18820,通过报警查找命令并配合特定的查找算法,可以查找出总线上满足报警条件的器件数目和各个器件的ROM编码。
4DS18820器件功能命令与1-Wire总线相关的命令分为ROM功能命令和器件功能命令两种,ROM功能命令具有通用性,不仅适用于DS18820也适用于其他具有1-Wire总线接口的器件,主要用于器件的识别与寻址;器件功能命令具有专用性,它们与器件的具体功能紧密相关。
下面是DSl8820的器件功能命令。
①启动温度转换(44H)该命令发送完成后,主机可以通过调用Readbit()函数判断温度转换是否完成,若Readbit()的返回值为0则表示转换正在进行,若Readbit()的返回值为1则表示转换完成。
②读RAM(BEH)该命令发送完成后,主机可以通过调用Readbit()函数将DSl8820中RAM的内容从低位到高位依次读出。
③写RAM(4EH)该命令发出后,主机随后写入1-Wire总线的3字节将依次被存储到DS18820的报警上限、报警下限和配置寄存器中。
④复制RAM(48H)该命令会将DSl8820的报警上限、报警下限和配置寄存器中的内容复制到EEPROM中。
该命令发出后,主机可以通过调用Readbit()函数判断复制操作是否完成,若Readbit()的返回值为1,则表示复制操作完成。
⑤回读EEPROM(B8H)该命令会将存储在EEPROM中的报警上限、报警下限和配置寄器的内容回读到RAM 中,主机可以通过调用Readbit()函数判断回读操作是否完成,若Readbit()的返回值为1则表示回读操作完成。
DS18820在上电时会自动进行一次回读操作。
5主机与DS18820的通信流程如图1所示,主机通过1-Wire总线接口对DS18820的每次访问都以复位信号和ROM 功能命令开始,访问的结束位置是不确定的,这与具体的功能命令相关。
图中圆角矩形中的操作与主机发送的功能命令相对应,随着功能命令的不同圆角矩形中的操作有时可以被省略。
对总线上的DS18820来说,复位信号意味着又一次通信的开始,器件对此的响应是拉低总线以告知主机自身的存在,然后准备接收ROM功能命令。
多点测温系统仿真实例DS18820是一种比较廉价的温度传感器,其封封装形式如图2所示。
在Proteus中包含有DS18820的仿真模型,这使得相关程序的调试变得简单方便。
下面以一个实例介绍用Proteus仿真多点测温系统的步骤。
①绘制仿真原理图如图3所示,在本实例中以单片机A T89C52和8个DS18820构成了一个多点测温系统。
为了有足够的空间存储各个DS18820的ROM编码和温度值,在实例中用一片8KB的sRAM 芯片6116对单片机的RAM进行了扩展。
②设置DS18820仿真模型的属性首先右击选中protues编辑区中的DS18820仿真模型然后再左击,此时弹出如图4所示的属性设置对话框。
其中,Family Code是器件的家族码,对于DS18820来说是28H。
ROM Serial Number对应于器件的48bit序列号,格式为十六进制,在填写过程中要保证同一条l —wire总线上所有仿真模型的ROM Serial Number都不相同。
Automatic Serialization设置为No时仿真模型将使用ROM Serial Number中的序列号,设置为Yes时模型的序列号将由仿真环境自动生成,在此设置为Yes,这样可以免去手动修改ROMSerial Number的麻烦。
Current Value中是仿真模型当前的温度值。
Cranularity中是单击仿真模型的温度值增减按钮时温度值的改变量,在此设置为1.1。
其他选项保持默认即可。
单击OK按钮,设置完成。
③编制源程序主机是通过Reset()、Readbit()、Writebit()三种基本操作与1-Wire总线进行通信的,只要这三个函数的时序准确,那么对于有一定C语言编程基础的用户来说程序其他部分的编写将不是难事,按照前面介绍的流程向总线发送功能命令并进行相应读写操作即可。
多点测温系统编程的难点在于器件的查找,系统上电时主机首先要查找总线上挂接着多少个1-Wire 器件并将各个器件的ROM编码读入单片机的RAM中,这需要一套复杂的算法,限于篇幅关于此算法在此不再详述。
本仿真实例大体工作过程如图3右下角注释部分所示,“查找总线上所有器件的ROM编码并存储”这一步可以由uchar B20ReadROM(uchar B20ROM[]函数完成,该函数的返回值是查找到的器件数目,各个器件的ROM编码将存储在二维数组B20ROM[]中。
“统一开始温度转换”的通信流程为:发送复位信号;发送跳过ROM(CCH)命令;发送启动温度转换(44H)命令。
“逐器件读取温度值”的通信流程为:发送复位信号,发送匹配ROM(55H)命令;发送第i(i=0>7)个器件的ROM编码;发送读RAM(BEH)命令;读取2字节,其中低字节在前,高字节在后,读取到的值符合温度值数据格式。
④在Proteus中添加监视变量为了检验程序运行的正确与否,通常的做法是将运行结果通过单片机的UART接口输出到虚拟终端上,这种方法的缺点是会占用一定的单片机资源,在此介绍另外一种程序调试技巧一一监视变量。
在Proteus的运行状态下点击Debug→Watch Window会弹出监视窗口(watch window),然后按下Alt+A键会弹出如图5所示的添加存储器条目对话框(Add Memory Item)。
所谓监视变量也就是监视相应存储单元中的内容,图5中Memory用于选择待监视变量所在的存储器;Name用于填写变量名称,为了含义清晰该名称最好与源程序中定义的变量名称一致;Address用于填写待监视变量的地址;Data Type和Display Fomat用于设置数据格式和显示格式。
设置完成后单击Add按钮即可添加一个监视变量。
在本实例中将测量到的温度值转化成A CSLL码字符串的格式存储在二维数组TempBuffer中,因此Data Type 选择为ASCLLZ String,Watch Window的最终结果如图6所示。
Value一栏中显示的即为8个DS18820测量到的温度值,单击仿真模型的温度增减按钮温度值的改变会自动映射在watchWindow中。
图6中TempBuffer[i](i=0>7)的地址在Keil中可以按以下步骤得到:>单击Keil工具栏中的@按钮,进入调试状态。
>通过View→Output Window菜单调出Keil的Output Window,并选中Command标签。
>在Output Window的命令输入区输入TempBuffer[i]然后回车即可得到TempB uffer[i]的地址,在本实例中i=0>7。
对于非数组类型的变量在输入时需要在变量名前加取地址符号&,如图7所示。
“统一开始温度转换”的通信流程为:发送复位信号;发送跳过ROM(CCH)命令;发送启动温度转换(44H)命令。
“逐器件读取温度值”的通信流程为:发送复位信号,发送匹配ROM(55H)命令;发送第i(i=0>7)个器件的ROM编码;发送读RAM(BEH)命令;读取2字节,其中低字节在前,高字节在后,读取到的值符合温度值数据格式。
④在Proteus中添加监视变量为了检验程序运行的正确与否,通常的做法是将运行结果通过单片机的UART接口输出到虚拟终端上,这种方法的缺点是会占用一定的单片机资源,在此介绍另外一种程序调试技巧一一监视变量。
在Proteus的运行状态下点击Debug→Watch Window会弹出监视窗口(watch window),然后按下Alt+A键会弹出如图5所示的添加存储器条目对话框(Add Memory Item)。
所谓监视变量也就是监视相应存储单元中的内容,图5中Memory用于选择待监视变量所在的存储器;Name用于填写变量名称,为了含义清晰该名称最好与源程序中定义的变量名称一致;Address用于填写待监视变量的地址;Data Type和Display Fomat用于设置数据格式和显示格式。