1-Wire搜索算法详解(1)
最近一直在proteus上仿真单总线搜索算法,虽然参考了美信公司的应用笔记以及其他的一些资源,仍然没有成功,估计应该是protues问题。这里先转载一篇不错的博文,以供参考。
原文连接 http://blog.sina.com.cn/s/blog_57ad1bd20102uxxu.html
1-Wire搜索算法详解(1)
0前言
美信公司(http://www.maximintegrated.com/cn)生产了许多1-Wire®器件产品,硬件电路极致简单,而相应软件就显得复杂。美信网站的《应用笔记187》介绍了单线ROM搜索算法,并提供了TMEXAPI测试程序的源代码,该算法较为复杂,而且是通用于多平台(windows\JAVA等)的API,无法直接在KeilC上调试并写入单片机。本人在学习理解其算法后,适当修改源代码,并作上了详细的注释和图解,代码在KeilC环境下调试通过,并在一个挂接4个DS18B20的小型1-Wire环境中测试成功,顺利获取4个ROM码。现把算法分析及测试过程成文如下,其中算法部分保留了大部分AN187的内容,但作了许多修改和补充,原文可参见http://www.maximintegrated.com/cn/app-notes/index.mvp/id/187。本文介绍的搜索算法及源代码,对任何现有的或将要推出的1-Wire器件都是有效的。
1测试环境及图示
硬件连接:4个DS18B20并接,MCU为笙泉MG82G516仿真芯片(其他普通51系列都可,仿真芯片可以方便调试),软件为Keil3。
1. 4个DS18B20在面包板上
2.笙泉THO65B+仿真器(可仿真51芯片)
3.Saleae Logic分析仪
4.全家福(开发板仅安装芯片及供电用)
图1中,4个DS18B20并接,红黄黑三线为电源、信号、地,绿色线通黄色线,接逻辑分析仪。原来逻辑分析仪从单片机端采集1-Wire信号,但实测中主机拉高电平(从机低电平)时,逻辑分析仪采集到一个尖刺脉冲,造成分析仪识别1-Wire协议失误;后将采集线接到从机端,信号正常。
图2是笙泉THO65B+仿真器,USB接口,可仿真51系列,方便程序调试。该仿真器芯片型号为MPC82G516,类似于STC15F2K60S2,为1T单片机,片上64KBFlash, 60KB程序存储器,3KB IAP存储器,1KB ISP 引導程序空间,以及1KRAM。
图3为逻辑分析仪,十分小巧,支持8路信号输入,最高采样速率24M,实际一般使用16M。USB接口,附送软件。图4为开发板,本例中主要功能仅为提供CPU插座及供电,1-Wire器件连接是相当简单的。
再给出一个用逻辑分析采集到的ROM搜索的全过程相关图片,有了这个分析仪,就可以十分方便地读出搜索到的ROM码,还能通过程序执行时产生“波形”分析调试代码,也可以方便的测定延时函数的时间。
2 1-Wire®器件的ROM码
MSB 64位ROM码 LSB |
||
8位CRC |
48位序列号 MSB LSB |
8位家庭码 MSB LSB |
搜索顺序是从低位到高位的,如下: 第64位←——————————————————————第1位 |
1. 上图是逻辑分析仪在ROM搜索到1个ROM时1-Wire总线上采集到的信号,可见搜索耗时15ms;
3. 信号自左到右分别为:复位R、存在脉冲、主机发搜索命令8位、从机回复64位ROM码(包括家族码0x28、48位ROM、8位CRC码)
4. 分析软件识别出了1-Wire协议,在信号顶部标示了内容和数位,阅读时相当直观。
1. 家族码一共为8位,图中有3通道信号,最上面第1通道从1-Wire总线采集,第2通道是“1写”程序时通过转换指定单片机引脚得到(进入该程序时置位,退出前复位);第3路为“2读”信号;均为高电平;
2. 识别8位“一写”代码可见从左到右为00010100,反过来就00101000即28H;
3. 如何识别1-Wire读写的时序,请参见1-Wire技术资料或DS18B20数据表资料,本文不描述。
主机读一位 从机提供当前位正码 |
主机再读一位 从机提供该位反码 |
二读后可以判断获得的信息 注意:主线读到的是各个响应从机的“线与”逻辑 |
0 |
0 |
连接器件的该位有0有1,这是一个差异位(混码位) |
0 |
1 |
连接器件的该位均为0 |
1 |
0 |
连接器件的该位均为1 |
1 |
1 |
没有器件与总线相连 |
Master |
Slave |
发送“复位”信号 |
产生“存在”脉冲 |
发送“搜索”命令 |
全体器件进入“应付搜索”状态,不断地根据主机信号作出反应 |
从总线读取1位“线与” |
|
从总线读取1位“线与” |
全体器件发送64位ROM码的第1位的反码 |
向总线写1位(按算法) |
器件们接收此位后,凡与ROM码的第1位不符的器件进入休眠状态 |
读64位ROM码后续位 |
器件发后续位ROM码 |
读64位ROM码后续位的反码 |
器件发后续位ROM码的反码 |
写后续各位 |
器件们接收此位后,凡与ROM码的当前位不符的器件进入休眠状态. |
1-Wire搜索算法详解(1)相关推荐
- A*启发式搜索算法详解 人工智能
A*启发式搜索算法详解 人工智能 我们尝试解决的问题是把一个游戏对象(game object)从出发点移动到目的地.路径搜索(Pathfinding)的目标是找到一条好的路径--避免障碍物.敌人,并把 ...
- 1-Wire搜索算法详解(2)
原文连接:http://blog.sina.com.cn/s/blog_57ad1bd20102uxxv.html 1-Wire搜索算法详解(2) 4 实例及算法分析 要理解算法,或制定算法,我们需要 ...
- DS18B20 1-WIRE ROM搜索算法详解
转自:http://blog.sina.com.cn/s/blog_57ad1bd20102uxxw.html 1-WIRE搜索算法详解(1) 0前言 美信公司(http://www.maximint ...
- (DFS)深度优先搜索算法详解
背景 DFS 英文全称为(Depth First Search),中文简称深度优先搜索算法,其过程为沿着每一个可能的路径向下进行搜索,直到不能再深入为止,并且每一个节点只能访问一次. 算法的搜索遍历图 ...
- BWT压缩算法及FM搜索算法详解
BWT压缩算法其经典地位无可撼动, 思想真是个奇妙的东西, 废话不多说, 让我们来看看她的奇妙之处吧. 假设有一串字符串S="acaacg", 长度为6, 如果直接对此串进行压缩, ...
- C语言 DFS(深度优先搜索算法) 详解
基本概念 深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法. 沿着树的深度遍历树的节点,尽可能深的搜索树的分支.当节点v的所在边都己被探寻过或者在搜 ...
- C++算法之深度优先搜索算法详解
1.深度优先搜索算法 深度优先搜索是一种在开发爬虫早期使用较多的方法.它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) .在一个HTML文件中,当一个超链被选择后,被链接的HT ...
- 二分搜索算法详解(Binary Search)
二分搜索(Binary Search) 如何确定一个元素在数组中的位置?(假设数组里面全都是整数) 如果是无序数组,从第0个位置开始遍历搜索,平均时间复杂度:O(n) 如果是有序数组,可以使用二分搜索 ...
- 转 | 禁忌搜索算法(Tabu Search)求解带时间窗的车辆路径规划问题详解(附Java代码)
以下文章来源于数据魔术师 ,作者周航 欲下载本文相关的代码及算例,请关注公众号[程序猿声],后台回复[TSVRPJAVA]不包括[]即可 前言 大家好呀! 眼看这9102年都快要过去了,小编也是越来越 ...
最新文章
- 华为:N个同学站成一排,发饼干至少每人一个,相邻分值高的可以多分一个以上饼干,求问至少需要发多少个饼干满足要求
- 计算机端口封闭,如何查询局域网内被封的电脑端口?
- DB2更改数据文件路径
- linux 查看强制位,linux强制位与冒险位
- kali安装pip3
- 计算机的数据库应用领域,【信息管理论文】信息管理中计算机数据库技术的应用(共4410字)...
- TensorFlow 2.0和PyTorch谁更好?大牛们争了好几天
- 爬虫养成记 - urllib2的调试和错误处理
- java sort 插入排序_插入排序(insertSort)
- layout中蛇形线和差分线的使用
- 启动不了 驱动程序签字功能,bios关闭驱动数字签名 如何在bios禁用驱动程序签名,装系统,启动行为那个无效?...
- 对话状态跟踪学习笔记
- 大学计算机应用基础教程读后感,计算机应用基础的课程学习体会
- azkaban build报错
- 用python画小猪佩奇代码_用Python画小猪佩奇
- 590. N-ary Tree Postorder Traversal(Tree)
- 易语言如何使用处理事件
- matlab里butter,matlab中butter函数
- 传奇登录器列表显示不连接
- Android 增量更新实战
热门文章
- Vue表格Table精美模板分享
- Oracle 12C RAC关闭MGMT
- Carla自动驾驶模拟器使用教程Python编程 #最全最源
- NOJ 1145.求图像的周长
- Mapxtreme中的胖客户端、瘦客户端及中型客户端介绍
- 如何一键文字转声音制作广告语音
- 创业板股票如何在python取数_如何用python获取实时的股票数据?
- 单点登录出现“票根‘ST-xxxxxx-cas’不符合目标服务”的错误的解决办法
- 分享电脑好用且免费的实用软件及官方下载地址(亲测好用无广告)
- js发送http post请求