首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
ROM搜索算法对多个DS18B20进行地址读取
📅 2026/10/27 18:53:26
✍️ 爱科研究院
👁 阅读 3,247
ROM搜索算法对多个DS18B20进行地址读取ROM搜索算法是一个用于解决1-wire总线上多个器件地址寻址的算法实际应用假设在一条总线上挂载了多个 1-Wire器件、但主机不知道它们地址无法进行通信此时可以通过ROM搜索算法枚举出每一个器件的64位ROM地址后在通过器件地址进行通信。DS18B20一款单总线数字温度传感器传感器、转换电路都集成在内部像三极管一样直接使用。每个芯片有唯一的 64 位序列号一根总线上可挂多个DS18B20实现多点测温。核心思路就是通过枚举的方法逐位确定器件n位ROM码的每一位主机在这过程会读取两次数据写一次方向第一次读取所有设备相同位的实际码线与值第二次读取所有设备该位的补码线与值对两次读取的值进行判断和方向选择如下结果为01时所有设备该位都是0无冲突方向选择跟随为0结果为10时所有设备该位都是1无冲突方向选择跟随为1结果为00时有设备是0也有设备是1有冲突方向选择0或1结果为11时总线无设备响应搜索终止无冲突时方向由器件决定冲突时主机才真正有选择权选择方向。但无论哪种情况主机都必须写入一位方向写入方向位后器件在同一个写时隙内采样并比较判断自己是否继续参与。冲突冲突是获取每一个器件地址的关键当两次读取到的值为00时产生冲突有设备是0也有设备是1而这个0和1就可以做为接下来进行搜索的方向当主机确定把0/1做为接下来搜索的方向向总线写0/1每搜索一次确定一个地址同时也只记录一个冲突点。示例使用ROM算法读取3路DS18B20的ROM地址分别为28DADB09000324BF、2881650E00032402、28FD950D000324C9对应的64个位如下对于3路或者是n路64位ROM地址使用ROM算法时第一次搜索前9个位都一样所以可以确定不会产生冲突而到第10位时A器件实际码为1补码为0B器件实际码为0补码为1C器件实际码为1补码为0ABC器件实际码线与值为01 0 1 0ABC器件补码线与值为00 1 0 0实际码和补码的线与值都为0所以产生了冲突需要选择方向并记录冲突位置为第10位。假设在冲突位置选择0为搜索方向此时只有器件B符合条件直到循环到第64位得到器件B的地址为2881650E00032402。第二次搜索前9个位都一样所以可以确定不会产生冲突而到第10位时产生冲突与第一次搜索产生冲突的位置进行比较发现两次搜索发生的冲突位置相同此时就需要在第二次搜索的第10位产生冲突时改变方向选择1为搜索方向因为第一次搜索在第10位产生冲突时选择0为搜索方向所以第二次在相同位置产生冲突时选择第一次搜索的相反方向。接下来在第11位的时候器件A实际码为0补码为1器件C实际码为1补码为0因为在第10位时已经选择1做为方向所以不再考虑器件B了器件AC实际码线与值为0补码线与值也为0所以器件AC在第11位时产生了00冲突所以产生了又需要选择方向并更新第二次产生冲突的位置为第11位。假设在冲突位置又选择0为搜索方向此时只有器件A符合条件直到循环到第64位得到器件A的地址为28DADB09000324BF。第三次搜索前9个位都一样所以可以确定不会产生冲突而到第10位时产生冲突与第二次产生冲突的位置进行比较发现第三次产生冲突的位置第10位小于第二次产生的位置第11位此时保持第二次冲突时选择的方向进行搜索到第11位时又产生了冲突与第二次产生冲突的位置进行比较发现第三次产生冲突的位置第11位与第二次产生的位置第11位相同此时就需要在第三次搜索的第11位产生冲突时改变方向选择1为搜索方向因为第二次搜索在第11位产生冲突时选择0为搜索方向所以第三次在相同位置产生冲突时选择第二次搜索的相反方向。此时只有器件C符合条件直到循环到第64位得到器件C的地址为28FD950D000324C9。第四次搜索防止还有其他器件没有被搜索到用于终止搜索所以搜索次数比器件数多一次判断依据是没有产生新的冲突位。通过前三次搜索获得每个DS18B20的64位ROM地址第四次搜索终止搜索。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/27 18:48:25
中国地形12.5米数据免费下载,无需切图免部署Cesium直接加载
2026/10/27 18:48:25
不会 Rust 的他,28 天用 AI 写出 4 万行代码:新一代“设计优先“的 AI 编程工具正在重写软件开发
2026/10/27 18:48:25
Stable Diffusion微调实战:7天打造专属AI画师
2026/10/27 19:33:46
二维数组与函数:编程基础与性能优化实战
2026/10/27 19:33:46
Flink流原生架构与生产级容错实践指南
2026/10/27 19:33:46
基于YOLOv8的手势识别系统开发与优化实践
2026/10/27 19:33:46
人大金仓V9 Windows初始化失败:sys_ctl报‘不是数据库集群目录’的根因与修复
2026/10/27 19:33:46
Oracle 11gR2 Linux部署全链路避坑指南:内核参数、RPM依赖与权限配置
2026/10/27 19:28:45
OpenClaw开源项目:AI技术在水产养殖中的实践
2026/10/27 0:04:20
WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价
2026/10/27 0:04:20
WorkBuddy_新建任务与工作模式20_新手推荐路径
2026/10/27 0:04:20
ZerolanLiveRobot开发者指南:如何扩展一个新服务并注册自定义事件(附完整实战示例)
2026/10/27 11:41:45
全国计算机二级C语言真题PDF高效刷题指南
2026/10/27 9:24:40
requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南
2026/10/27 12:03:45
递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现
2026/10/25 22:15:16
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/26 11:29:48
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/25 12:42:56
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)