单总线协议
单总线协议书

单总线协议书甲方(提供方):_____________________乙方(接收方):_____________________鉴于甲方拥有单总线技术及相关知识产权,乙方需要使用该技术进行产品开发或服务提供,经双方平等协商,就单总线技术的使用达成如下协议:第一条定义1.1 单总线技术:指甲方拥有的,用于数据传输和控制的单线通信技术。
1.2 知识产权:指与单总线技术相关的所有专利权、著作权、商标权等无形资产。
1.3 产品:指乙方使用单总线技术开发的任何硬件或软件产品。
第二条授权范围2.1 甲方授权乙方非独占性使用单总线技术,用于乙方的产品开发和销售。
2.2 授权期限自本协议生效之日起至本协议终止之日止。
第三条授权费用3.1 乙方应向甲方支付一次性授权费用人民币_______元(大写:_______元整)。
3.2 授权费用应在本协议签订之日起_______个工作日内一次性支付给甲方。
第四条知识产权4.1 甲方保证拥有单总线技术的完整知识产权,并有权授予乙方使用。
4.2 乙方不得侵犯甲方的知识产权,包括但不限于专利权、著作权、商标权等。
4.3 乙方应尊重甲方的知识产权,未经甲方书面同意,不得将单总线技术用于任何其他目的。
第五条技术支持与服务5.1 甲方应向乙方提供必要的技术支持,帮助乙方顺利实施单总线技术。
5.2 甲方应保证所提供的技术支持的质量,确保乙方能够正常使用单总线技术。
第六条保密条款6.1 双方应对本协议内容及在履行协议过程中知悉的对方商业秘密予以保密。
6.2 未经对方书面同意,任何一方不得向第三方披露、泄露或允许第三方使用上述保密信息。
第七条违约责任7.1 如一方违反本协议的任何条款,违约方应赔偿对方因此遭受的所有损失。
7.2 因不可抗力导致任何一方不能履行或完全履行本协议的,该方不承担违约责任。
第八条协议的变更与解除8.1 本协议的任何变更和补充,必须经双方协商一致,并以书面形式确认。
8.2 双方均可在提前_______天书面通知对方的情况下解除本协议。
单总线协议详解

单总线协议详解单总线协议详解单总线即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(场效应晶体管)提供强上拉供电。
单总线通信协议

单总线通信协议Single Bus Communication Protocol。
Introduction。
Single bus communication protocol is a communication standard used in computer systems to connect different devices and peripherals. It is a simple and efficient way of transmitting data between devices on a single communication line. In this article, we will discuss the features, advantages, and applications of the single bus communication protocol.Features。
The single bus communication protocol has several features that make it a popular choice for connecting devices in computer systems. Some of these features are:1. Simple and efficient: The single bus communicationprotocol is a simple and efficient way of transmitting data between devices. It uses a single communication line to transmit data, which reduces the complexity of the system and makes it more efficient.2. Low cost: Since the single bus communication protocol uses a single communication line, it is a low-cost solution for connecting devices in computer systems.3. Scalable: The single bus communication protocol is scalable, which means that it can be used to connect a large number of devices in a computer system.4. Easy to implement: The single bus communication protocol is easy to implement, which means that it can be used by both hardware and software developers to connect devices in computer systems.Advantages。
单线总线通讯协议

单线总线通讯协议
单线总线通讯协议
采用两根线进行通讯的通讯线路叫单线总线通讯(地线和数据线,数据线同时为从机提
供电源,主机和从机在一定的条件下可以转换)。
电路结构如下:
如果是从机,可以通过D3从总线取电,以获取工作电源。
发送端通过Q1、R2、D4将总线拉低,用以传送数据。
总线有数据传送,总线变低电平,接受端也变成低电平总线是高电平(12V),接受端
也是搞电平(3V),从而实现了数据的接受。
发送端发送数据的时候,可以通过接受端进行数据侦听。
数据传递如下:
空闲时为高电平,开始为1t的低电平,紧接着是比特率自适应校准位为1t高电平和1t
低电平,接着传递数据,1为3t高电平+1t低电平;0为1t高电平+3t低电平,数据传递完成后是一位结束位,4t的高电平,之后是空闲状态,
此数据传递格式可以用于无线传递数据,
发送可以使用任意10 口,接受使用外部中断接口,关联定时器进行接受处理。
单总线协议

单总线协议与其他所有的数据通信传输方式一样,单总线芯片在数据传输过程要求采用严格的通信协议,以保证数据的完整性。
单总线芯片在数据传输过程中,每个单总线芯片都拥有唯一的地址,系统主机一旦选中某个芯片,就会保证通信连接直到复位,其他器件则全部脱离总线,在下次复位之前不参与任何通信。
为了说明单总线数据传输的过程,以下将分4个部分对单总线数据通信传输过程进行介绍,它们分别是单总线通信信号类型,单总线通信初始化,单总线通信的ROM命令以及单总线通信的功能命令。
1.1单总线通信信号类型单总线通信协议定义了如下几种类型,即复位脉冲、应答脉冲、写0、写1、读0和读1,除了应答脉冲外,所有的信号都由主机发出同步信号,并且发送的所有的命令和数据都是字节的低位在前。
单总线通信协议中不同类型的信号都采用一种类似脉宽调制的波形表示,逻辑0用较长的低电平持续周期表示,逻辑1用较长的高电平持续周期表示。
在单总线通信协议中,读写时隙的概念十分重要,当系统主机向从设备输出数据时产生写时隙,当主机从从机设备读取数据时产生读时隙,每一个时隙总线只能传输一位数据。
无论是在读时隙还是写时隙,它们都以主机驱动数据线位低电平开始,数据线的下降沿是从设备触发其内部的延时电路,使之与主机同步。
在写时隙内,该延迟电路决定从设备采样数据线的时间窗口。
单总线通信协议中存在两种写时隙:写1和写0。
主机采用写1时隙向从机写入1,而采用写0时隙向从机写入0,。
所有写时隙至少要60us,且在两次独立的写时隙之间至少需要1us的恢复时间。
两种写时隙均起始于主机拉低数据总线。
产生1时隙的方式:主机拉低总线后,接着必须在15us之内释放总线,由上拉电阻将总线拉至高电平;产生写0时隙的方式为在主机拉低后,只需要在整个时隙间保持低电平即可(至少60us)。
在写时隙开始后15us~60us期间,单总线器件采样总电平状态。
如果在此期间采样值为高电平,则逻辑1被写入器件;如果为0,写入逻辑0。
单总线协议-以DS18B20举例

单总线协议-以DS18B20举例一、概述1-wire 单总线是Maxim 全资子公司Dallas 的一项专有技术。
与目前多数标准串行数据通信方式,如SPI/I2C/MICROWIRE 不同,它采用单根信号线,既传输时钟,又传输数据,而且数据传输是双向的。
它具有节省I/O 口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。
1-wire 单总线适用于单个主机系统,能够控制一个或多个从机设备。
当只有一个从机位于总线上时,系统可按照单节点系统操作;而当多个从机位于总线上时,则系统按照多节点系统操作。
为了较为全面地介绍单总线系统,将系统分为三个部分讨论:硬件结构、命令序列和信号方式信号类型和时序。
二、硬件结构顾名思义,单总线只有一根数据线。
设备(主机或从机)通过一个漏极开路或三态端口,连接至该数据线,这样允许设备在不发送数据时释放数据总线,以便总线被其它设备所使用。
单总线端口为漏极开路其内部等效电路如图1 所示。
单总线要求外接一个约5k 的上拉电阻;这样,单总线的闲置状态为高电平。
不管什么原因,如果传输过程需要暂时挂起,且要求传输过程还能够继续的话,则总线必须处于空闲状态。
位传输之间的恢复时间没有限制,只要总线在恢复期间处于空闲状态(高电平)。
如果总线保持低电平超过480us,总线上的所有器件将复位。
另外在寄生方式供电时,为了保证单总线器件在某些工作状态下(如温度转换期间EEPROM写入等)具有足够的电源电流,必须在总线上提供强上拉(如图1所示的MOSFET )。
三、命令序列典型的单总线命令序列如下:第一步:初始化第二步:ROM命令(跟随需要交换的数据)第三步:功能命令(跟随需要交换的数据)每次访问单总线器件,必须严格遵守这个命令序列,如果出现序列混乱,则单总线器件不会响应主机。
但是,这个准则对于搜索ROM命令和报警搜索命令例外,在执行两者中任何一条命令之后,主机不能执行其后的功能命令,必须返回至第一步。
单总线传输协议b2s (附全部verilog源码)

1. 讲废话小弟最近做了一个项目(用Lattice的CPLD),话说前面还算顺利,就在即将完工的时候,发现(TMD)I/O不够用,有一功能需要CPLD传输8bit数据到另一个控制器做进一步处理,but现在仅剩下一个I/O,好吧,我被卡死在这里了。
终于,在一个月黑风高的夜晚(本人喜欢把气氛营造的悲壮一点,嘎嘎。
),突然想到DS18B20的单总线传输协议,以前也了解过其他的协议,心想,为嘛自己不整一个类似的东东出来yy 一下呢,所以有了此贴。
解释一下,本次原创单总线传输协议命名为b2s(不才,取了个类似I2C的名,由于本人有一个贱贱的英文名Bob,所以用了b,各位轻喷啊;s代表single,意为单线传输),本协议含传送端(transmitter)和接收端(receiver)两部分,基于verilog语言,仅使用单个I/O口进行多位数据的传输,传输方向为单向,用于I/O不够用的情况,亲测绝对可用,如果大家以后有用得到的时候,可以直接拿来使用。
本人拥抱开源,所有源码能贴出来尽量贴出来,为大家节省积分,攒RP。
废话完毕,下面为各位客官准备干货。
2. 晒干货ps. 带★号处可根据需要进行修改.发送端源码:/*********************************************************************** *******************Author: Bob LiuE-mail:*************************File Name: b2s_transmitter.vFunction: b2s发送端, 默认发送32bit数据,数据宽度可更改Version: 2013-5-13 v1.0************************************************************************ ********************/module b2s_transmitter(clk, //时钟基准,不限频率大小,但必须与接收端一致din, //待发送数据b2s_dout //b2s数据输出端口);parameter WIDTH=32; //★设定b2s发送数据的位宽,可根据需要进行更改input clk;input [WIDTH-1:0] din;output b2s_dout;//===================================================== =========//b2s数据发送时序//===================================================== =========reg b2s_dout_r;reg [3:0] state;reg [9:0] cnt;reg [4:0] count; //★与发送数据位宽保持一致(如发送32bit数据时,count宽度为5;发送8bit时,count宽度为4)always @ (posedge clk)begincase(state)//初始化0: begincount<=0;b2s_dout_r<=1;if(cnt==19) //b2s_dout_r高电平持续20个时钟beginstate<=1;cnt<=0;endelsebegincnt<=cnt+1;endend//开始信号时序1: beginb2s_dout_r<=0;if(cnt==19) //b2s_dout_r低电平持续20个时钟beginstate<=2;cnt<=0;endelsebegincnt<=cnt+1;endend2: beginb2s_dout_r<=1;if(cnt==19) //b2s_dout_r高电平持续20个时钟begincnt<=0;state<=3;endelsebegincnt<=cnt+1;endend//待发送数据的逻辑电平判断3: beginif(din[count]==1)state<=4;elsestate<=8;end//逻辑1的发送时序4: beginb2s_dout_r<=0;if(cnt==9) //b2s_dout_r低电平持续10个时钟begincnt<=0;state<=5;endelsebegincnt<=cnt+1;endend5: beginb2s_dout_r<=1;if(cnt==29) //b2s_dout_r高电平持续30个时钟begincnt<=0;state<=6;endelsebegincnt<=cnt+1;endend//逻辑0的发送时序8: beginb2s_dout_r<=0;if(cnt==29) //b2s_dout_r低电平持续30个时钟begincnt<=0;state<=9;endelsebegincnt<=cnt+1;endend9: beginb2s_dout_r<=1;if(cnt==9) //b2s_dout_r高电平持续10个时钟begincnt<=0;state<=6;endelsebegincnt<=cnt+1;endend//统计已发送数据位数6: begincount<=count+1'b1;state<=7;end7: beginif(count==WIDTH) //当一组数据所有位发送完毕,返回并继续下一次发送beginb2s_dout_r<=1;if(cnt==999) //b2s_dout_r高电平持续1000个时钟begincnt<=0;state<=0;endelsebegincnt<=cnt+1;endendelse //当一组数据未发送完毕,则继续此组下一位数据的发送state<=3;end//default值设定default: beginstate<=0;cnt<=0;count<=0;endendcaseendassign b2s_dout=b2s_dout_r;endmodule接收端源码:/*********************************************************************** *******************Author: Bob LiuE-mail:*************************File Name: b2s_receiver.vFunction: b2s接收端, 默认接收32bit数据,接收数据宽度请与发送端发送数据宽度保持一致Version: 2013-5-13 v1.0************************************************************************ ********************/module b2s_receiver(clk, //时钟基准,不限频率大小,但必须与发送端一致b2s_din, //b2s发送端发送过来的信号dout //b2s接收端解码出的数据);parameter WIDTH=32; //★设定b2s接收数据位数, 默认接收32bit数据,接收数据宽度请与发送端发送数据宽度保持一致input clk;input b2s_din;output [WIDTH-1:0] dout;//================================================== //b2s_din信号边沿检测//================================================== reg [1:0] b2s_din_edge=2'b01;always @ (posedge clk)beginb2s_din_edge[0] <= b2s_din;b2s_din_edge[1] <= b2s_din_edge[0];end//================================================== //time_cnt -- 存储b2c_din信号下降沿及其最近的下一个上升沿之间的时间//================================================== reg [1:0] state0;reg [5:0] time_cnt_r;always @ (posedge clk)begincase(state0)0: begintime_cnt_r<=0;state0<=1;end1: beginif(b2s_din_edge==2'b10)state0<=2;elsestate0<=state0;end2: beginif(b2s_din_edge==2'b01)beginstate0<=0;endelsetime_cnt_r<=time_cnt_r+1'b1;enddefault: begintime_cnt_r<=0;state0<=0;endendcaseendwire [5:0] time_cnt;assign time_cnt=(b2s_din_edge==2'b01)?time_cnt_r:'b0; //当b2s_din上升沿瞬间,读取time_cnt_r的值//==================================================//b2s解码时序//==================================================reg [2:0] state;reg [4:0] count; //★与接收数据位数保持一致(如接收32bit数据时,count宽度为5;接收8bit时,count宽度为4)reg [WIDTH-1:0] dout_r;always @ (posedge clk)begincase(state)0: begincount<=WIDTH;if((time_cnt>15)&&(time_cnt<25)) //判断起始信号state<=1;elsestate<=state;end1: beginif((time_cnt>5)&&(time_cnt<15)) //判断接收到的位是否为1begindout_r[WIDTH-1]<=1;state<=2;endelse if((time_cnt>25)&&(time_cnt<35)) //判断接收到的位是否为0begindout_r[WIDTH-1]<=0;state<=2;endelsebeginstate<=state;endend2: begincount<=count-1'b1; //每读取一个bit,count计数减1state<=3;end3: if(count==0) //数据读取完毕,返回并继续下一组数据的读取beginstate<=0;endelsestate<=4; //数据未读取完毕,则进行移位 4: begindout_r<=(dout_r>>1); //数据右移1位state<=1;enddefault: beginstate<=0;count<=WIDTH;endendcaseendassign dout=(count==0)?dout_r:dout; //每当一组数据读取完毕,则更新一次dout的值endmodule也许有些盆友第一次看到上面的代码,不知如何调用,所以下面给出调用示例作为参考。
单总线通信协议原理

单总线通信协议原理
单总线通信协议是一种用于在电子设备之间进行通信的协议。
它通常用于连接多个设备,例如传感器、执行器或其他外围设备,以便它们可以相互通信并与主控制器进行数据交换。
单总线通信协议的原理涉及到以下几个方面:
1. 物理连接,单总线通信协议通常使用一根物理线路来连接所有设备。
这意味着所有设备都共享同一根线路来发送和接收数据。
这种物理连接方式可以减少硬件成本和连接复杂度。
2. 数据传输,在单总线通信协议中,数据是通过时间分割的方式进行传输的。
每个设备在特定的时间段内可以发送或接收数据。
这种时间分割的机制可以确保不同设备之间的通信不会发生冲突。
3. 碰撞检测,由于多个设备共享同一根物理线路,可能会出现数据碰撞的情况,即两个设备同时发送数据导致数据混乱。
单总线通信协议通常会包含碰撞检测机制,以便在发生碰撞时能够及时发现并进行处理。
4. 协议规范,单总线通信协议还包括了数据帧的格式、地址分
配、错误检测和纠正等规范。
这些规范确保了设备之间可以按照统
一的标准进行通信,提高了通信的可靠性和稳定性。
总的来说,单总线通信协议的原理是通过共享一根物理线路、
时间分割的数据传输、碰撞检测和协议规范来实现设备之间的通信。
这种协议在一些特定的应用场景下具有一定的优势,但也需要注意
碰撞和数据混乱等问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单总线通信协议中存在两种写时隙:写0写1。
主机采用写1时隙向从机写入1,而写0时隙向从机写入0。
所有写时隙至少要60us,且在两次独立的写时隙之间至少要1us的恢复时间。
两种写时隙均起始于主机拉低数据总线。
产生1时隙的方式:主机拉低总线后,接着必须在15us之内释放总线,由上拉电阻将总线拉至高电平;产生写0时隙的方式为在主机拉低后,只需要在整个时隙间保持低电平即可(至少60us)。
在写时隙开始后15~60us期间,单总线器件采样总电平状态。
如果在此期间采样值为高电平,则逻辑1被写入器件;如果为0,写入逻辑0。
下图为写时隙(包括1和0)时序
上图中黑色实线代表系统主机拉低总线,黑色虚线代表上拉电阻将总线拉高。
对于读时隙,单总线器件仅在主机发出读时隙时,才向主机传输数据。
所有主机发出读数据命令后,必须马上产生读时隙,以便从机能够传输数据。
所有读时隙至少需要60us,且在两次独立的读时隙之间至少需要1us恢复时间。
每个读时隙都由主机发起,至少拉低总线1us。
在主机发出读时隙后,单总线器件才开始在总线上发送1或0。
若从机发送1,则保持总线为高电平;若发出0,则拉低总线。
当发送0时,从机在读时隙结束后释放总线,由上拉电阻将总线拉回至空闲高电平状态。
从机发出的数据在起始时隙之后,保持有效时间15us,因此主机在读时隙期间必须释放总线,并且在时隙起始后的15us之内采样总线状态。
下图给出读时隙(包括0或1)时序
图中黑色实线代表系统主机拉低总线,灰色实线代表总局拉低总线,而黑色的虚线则代表上
拉电阻总线拉高。
单总线通信的初始化
单总线上所有的通信都是以初始化序列开始的,初始化序列包括主机发出的复位脉冲及从机的应答脉冲,这一过程如图所示,黑色实线代表系统主机拉低总线,灰色实线代表从机拉低总线,而黑色的虚线则代表上拉电阻将总线拉高。
系统主设备发送端发出的复位脉冲是一个480~960us的低电平,然后释放总线进入接收状态。
此时系统总线通过4.7K的上拉电阻接至vcc高电平,时间约为15~60us,接在接受端的设备就开始检测io引脚上的下降沿以及监视在脉冲的到来。
主设备处于这种状态下的时间至少480us。
作为从设备在接收到系统主设备发出的复位脉冲之后,向总线发出一个应答脉冲,表示从设备已准备好,可根据各种命令发送或接收数据。
通常情况下,器件等待15~60us即可发送应答脉冲。