单总线one-Wire

news2024/12/27 7:39:30

单总线one-Wire

概述

One-Wire总线是DALLAS公司研制开发的一种协议

特点:

它是由一个总线主节点,一个或多个从节点组成系统,通过一根信号线对从芯片进行数据的读取

每一个符合One-Wire协议的从芯片都有一个唯一的地址,包括48位的序列号8位的家族代码和8位的CRC代码。主芯片对各个从芯片的寻址依据这64位的不同来进行。

One-Wire总线利用一根线实现双向通信(异步半双工)。因此其协议对时序的要求较严格,如应答等时序都有明确的时间要求。

工作原理

由一根数据线,系统中的数据交换,控制都由这跟线完成。
单总线通常要求外接一个约为4.7k的上拉电阻,这样,当总线闲置时,其状态为高电平1
由于它们是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问One-Wire器件都必须严格遵循单总线命令序列,即初始化、ROM命令、功能命令。
如果出现序列混乱,One-Wire器件将不响应主机(搜索ROM命令、报警搜索命令除外)。

信号方式

复位和应答

在这里插入图片描述

  • 将DQ主线拉低持续500us DQ=0
  • 释放DQ主线的控制权 DQ=1
  • 持续20us判断DQ状态
    – 1.250us没有处于高电平 复位异常
    – 2.250us没有处于低电平 复位异常

one-Wire读写原理图

在这里插入图片描述

代码实现

#include "one_wire.h"  
#include "intrins.h"//内核用来进行低延时的头文件_nop_();

static u8 _ReadBit(void);//定义一个个读取字节的函数

void OneWire_Init(void)//初始化 因为有一个上拉电阻所以默认是高电平初步初始化无所谓
{
	DQ = 1;
}
u8 OneWire_Reset(void)//返回0:成功,返回1:失败
{
	u8 u8timeout = 0;
	//主机低位复位
	DQ = 0;
	delay_10us(50);//主机发送复位信号500us
	DQ = 1;	//主机释放DQ线,等待从机回应
	delay_10us(2);//主机等待20us后读取DQ状态
	//两个250us处于高低电平来判断是否复位成功
	//主机判断DQ是否被从机拉低250us
	while(DQ)
	{
		u8timeout++;
		if(u8timeout>25)return 1;//复位异常
		delay_10us(1);
	}

	//主机判断从机有没有释放DQ线
	u8timeout = 0;
	while(!DQ)
	{
		u8timeout++;
		if(u8timeout>25)return 1;//复位异常
		delay_10us(1);
	}
	return 0;//复位成功
}
//低位先读
void OneWire_WriteByte(u8 u8data)//LSB
{
	u8 i = 0;
	u8 u8temp = 0;//当前读取的字节
	
	for(i=0;i<8;i++)
	{
		u8temp = u8data & 0x01;//取低位
		u8data>>=1;//读取低位
		
		if(u8temp)//写1当前位写1的话  拉低电平持续2us,在拉高电平持续60us
		{
			DQ = 0;
			_nop_();_nop_();
			DQ = 1;
			delay_10us(6);
		}
		else//写0当前位写0的话  拉低电平持续60us,在拉高电平持续2us
		{
			DQ = 0;
			delay_10us(6);
			DQ = 1;
			_nop_();_nop_();
		}
	}
}
//读取字节
u8	OneWire_ReadByte(void)//LSB
{
		u8 i;
		u8 u8val = 0,u8temp = 0;
		for(i=0;i<8;i++)
		{
				//因为是一个个字节读取
				u8temp = _ReadBit();	//每次读取一个bit
				u8val += (u8temp<<i);//总数据
			
		}
	return u8val;
}

//单个比特读取
static u8 _ReadBit(void)
{
	u8 u8val = 0;

	DQ = 0;
	_nop_();_nop_();
	DQ = 1;
	_nop_();_nop_();

	if(DQ)
	{
		u8val = 1;
  }
	else
	{
		u8val = 0;
	}

	delay_10us(6);
	return u8val;
}

ROM命令

在主机检测到应答脉冲后,就可以发出 ROM 命令。这些命令与各个从机设备的唯一64位ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。
在这里插入图片描述
常走是一对1也就是一号线

搜索ROM[F0h]

当系统初始上电时,主机必须找出总线上所有从机设备的ROM代码,这样主机就能够判断出从机的数目和类型。主机通过重复执行搜索ROM 循环(搜索ROM命令跟随着位数据交换),以找出总线上所有的从机设备。如果总线只有一个从机设备则可以采用读ROM命令来替代搜索ROM命令。在每次执行完搜索ROM循环后,主机必须返回至命令序列的第一步(初始化)

读ROM[33h](仅适合于单节点)

该命令仅适用于总线上只有一个从机设备。它允许主机直接读出从机的64位ROM 代码,而无须执行搜索ROM过程。
如果该命令用于多节点系统,则必然发生数据冲突,因为每个从机设备都会响应该命令。

匹配ROM[55h]

匹配ROM命令跟随64位ROM 码,从而允许主机访问多节点系统中某个指定的从机设备。仅当从机完全匹配64位ROM代码时,才会响应主机随后发出的功能命令;其它设备将处于等待复位脉冲状态。

跳越ROM[CCh] (仅适合于单节点)

主机能够采用该命令同时访问总线上的所有从机设备,而无须发出任何ROM代码信息。例如,主机通过在发出跳越ROM命令后跟随转换温度命令[44h],就可以同时命令总线上所有的DS18B20 开始转换温度,这样大大节省了主机的时间。值得注意,如果跳越ROM命令跟随的是读暂存器[BEh]的命令(包括其它读操作命令),则该命令只能应用于单节点系统,否则将由于多个节点都响应该命令而引起数据冲突。

报警搜索[ECh](仅少数1-wire 器件支持)

除那些设置了报警标志的从机响应外,该命令的工作方式完全等同于搜索ROM命令。该命令允许主机设备判断那些从机设备发生了报警(如最近的测量温度过高或过低等)。同搜索ROM命令

DS18B20功能命令

命令描述命令代码响应消息注释
转换温度启动温度转换0x441
读暂存器读全部的暂存器内容,包括CRC字节0xBEDS18B20传输至多9个字节2
写暂存器写暂存器第2、3和4个字节的数据(即TH、TL和配置寄存器)0x4E主机传输3个字节数据3
复制暂存器将暂存器中的TH、TL和配置字节复制到EEPROM中0x481
回读EEPROM将TH、TL和配置字节从EEPROM回读至暂存器中0xB8DS18B20传送回读状态至主机
读取供电方式0xB41bit:0 = 寄生电源,1 = 提供外部电源

注释:

  1. 在温度转换和复制暂存器数据至EEPROM期间,主机必须在单总线上允许强上拉。并且在此期间,总线上不能进行其它数据传输;
  2. 通过发出复位脉冲,主机能够在任何时候中断数据传输;
  3. 在复位脉冲发出前,必须写入全部的三个字节。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2254534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【llm】——香橙派AIPRO跑qwen2.5-0.5B

qwen2在Ascend310B4上的评测 代码/模型&#xff1a;https://github.com/chenjun2hao/qwen-ascend-llm 依赖 香橙派AIPRO&#xff1a;http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-AIpro.htmlCANN8.0&#xff08;自己手动安装的&#…

Android 单元测试断言校验方法 org.junit.Assert

判断布尔值 assertTrue assertFalse 判断对象非空 assertNull(object); 案例&#xff1a; PersistableBundle result Util.getCarrierConfig(mockContext, subId);assertNull(result); 判断是否相等 assertEquals("mocked_string", result.toString()); package or…

Flink 中双流 Join 的深度解析与实战

目录 一、Join 算子 一&#xff09;语义与特性 二&#xff09;通用用法 三&#xff09;不同窗口类型表现 滚动窗口 Join 滑动窗口 Join 二、CoGroup 算子 一&#xff09;功能特点 二&#xff09;通用用法与连接类型实现 内连接&#xff08;InnerJoin&#xff09; 左…

OpenStack-Glance组件

Glance Glance使用磁盘格式和容器格式基础配置镜像转换 Glance 是 OpenStack 的镜像服务&#xff0c;负责存储、发现和管理虚拟机镜像。它允许用户创建和共享镜像&#xff0c;用于启动虚拟机实例。 Glance 的主要功能 &#xff08;1&#xff09;虚拟机镜像的管理 支持镜像的上…

基于神经网络的弹弹堂类游戏弹道快速预测

目录 一、 目的... 1 1.1 输入与输出.... 1 1.2 隐网络架构设计.... 1 1.3 激活函数与损失函数.... 1 二、 训练... 2 2.1 数据加载与预处理.... 2 2.2 训练过程.... 2 2.3 训练参数与设置.... 2 三、 测试与分析... 2 3.1 性能对比.... 2 3.2 训练过程差异.... 3 四、…

Linux入门攻坚——40、Linux集群系统入门-lvs(1)

Cluster&#xff0c;集群&#xff0c;为了解决某个特定问题将多台计算机组合起来形成的单个系统。 这个单个集群系统可以扩展&#xff0c;系统扩展的方式&#xff1a;scale up&#xff0c;向上扩展&#xff0c;更换更好的主机&#xff1b;scale out&#xff0c;向外扩展&…

威联通-001 手机相册备份

文章目录 前言1.Qfile Pro2.Qsync Pro总结 前言 威联通有两种数据备份手段&#xff1a;1.Qfile Pro和2.Qsync Pro&#xff0c;实践使用中存在一些区别&#xff0c;针对不同备份环境选择是不同。 1.Qfile Pro 用来备份制定目录内容的。 2.Qsync Pro 主要用来查看和操作文…

Docker单机网络:解锁本地开发环境的无限潜能

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

【Linux操作系统】多线程控制(创建,等待,终止、分离)

目录 一、线程与轻量级进程的关系二、进程创建1.线程创建线程创建函数&#xff08;pthread&#xff09;查看和理解线程id主线程与其他线程之间的关系 三、线程等待&#xff08;回收&#xff09;四、线程退出线程退出情况线程退出方法 五、线程分离线程的优点线程的缺点 一、线程…

解决IDEA的easycode插件生成的mapper.xml文件字段之间逗号丢失

问题 easycode插件生成的mapper.xml文件字段之间逗号丢失&#xff0c;如图 解决办法 将easycode(在settings里面的othersettings)设置里面的Template的mapper.xml.vm和Global Config的mybatisSupport.vm的所有$velocityHasNext换成$foreach.hasNext Template的mapper.xml.vm(…

Android 实现中英文切换

在开发海外项目的时候&#xff0c;需要实现app内部的中英文切换功能&#xff0c;所有的英文都是内置的&#xff0c;整体思路为&#xff1a; 创建一个sp对象&#xff0c;存储当前系统的语言类型&#xff0c;然后在BaseActivity中对语言进行判断&#xff1b; //公共Activitypubl…

11月 | Apache DolphinScheduler月度进展总结

各位热爱 Apache DolphinScheduler 的小伙伴们&#xff0c;社区10月份月报更新啦&#xff01;这里将记录 DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度Merge之星 感谢以下小伙伴11月份为 Apache DolphinScheduler 所做的精彩贡献&#xff08;排…

[软件开发幼稚指数评比]《软件方法》自测题解析010

第1章自测题 Part2 **9 [**单选题] 以下说法和其他三个最不类似的是: A)如果允许一次走两步&#xff0c;新手也能击败象棋大师 B)百米短跑比赛才10秒钟&#xff0c;不可能为每一秒做周密计划&#xff0c;凭感觉跑就是 C)即使是最好的足球队&#xff0c;也不能保证每…

【JavaWeb后端学习笔记】使用IDEA连接MySQL数据库

IDEA连接MySQL IDEA中集成了DataGrip&#xff0c;因此可以直接使用IDEA操作MySQL数据库。 1.创建一个新的空工程。点击右侧的数据库标志。 2.选择要连接的数据库。第一步&#xff1a;点击“”&#xff1b;第二步&#xff1a;点击 Data Source&#xff1b;第三步&#xff1a;选…

大模型分类2—按训练方式

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl根据训练方式,大模型可分为监督学习、无监督学习、自监督学习和强化学习大模型。 1. 监督学习大模型 1.1 定义与原理 监督学习大模型是一种机器学习范式,它依赖于标记数据集进行训练。这些数据…

鸿蒙特色实战2

服务卡片开发 创建服务卡片 创建一个新的工程后&#xff0c;可以通过如下方法进行创建服务卡片&#xff1a; 创建服务卡片包括如下两种方式&#xff1a; 选择模块&#xff08;如entry模块&#xff09;下的任意文件&#xff0c;单击菜单栏File > New > Service Widget创…

LCD1602液晶显示屏指令详解

文章目录 LCD1602液晶显示屏1.简介2. 液晶引脚说明3. 指令介绍3.1 清屏指令3.2 光标归位指令3.3 进入模式设置指令3.4 显示开关设置指令3.5 设定显示或光标移动方向指令3.6 功能设定指令3.7 设定CGRAM地址指令3.8 设定DDRAM地址指令3.9 读取忙或AC地址指令3.10 总图3.11 DDRAM …

Python毕业设计选题:基于大数据的旅游景区推荐系统_django

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页界面 用户注册界面 用户登录界面 景点信息界面 景点资讯界面 个人中心界面 …

引领素养教育行业,猿辅导素养课斩获“2024影响力教育品牌”奖项

近日&#xff0c;由教育界网、校长邦联合主办&#xff0c;鲸媒体、职教共创会协办的“第9届榜样教育年度盛典”评奖结果揭晓。据了解&#xff0c;此次评选共有近500家企业提交参评资料进行奖项角逐&#xff0c;历经教育界权威专家、资深教育从业者以及专业评审团队的多轮严格筛…

十七、监控与度量-Prometheus/Grafana/Actuator

文章目录 前言一、Spring Boot Actuator1. 简介2. 添加依赖2. 开启端点3. 暴露端点4. 总结 二、Prometheus1. 简介2. Prometheus客户端3. Prometheus服务端4. 总结 三、Grafana1. 简介2. Grafana安装3. Grafana配置 前言 系统监控‌ 在企业级的应用中&#xff0c;系统监控至关…