Linux驱动之一线式总线(以ds18b20为例)

一线式总线:1硬件特性:“一线式”:CPU和一线式器件之间的数据通信就一根数据线,无时钟线。

“串行”:数据一次传输一bits。 “总线”:这个数据线上可以挂载很多个一线式器件外设。

硬件接法:两线式和三线式。 前者无独立的电源,通过数据线给内部的电容供电,电容对于芯片进行供电。

后者有独立的电源:数据线接一个上拉电阻,表明数据线在CPU和外设都不控制的时候,数据线为高电平。

 

2.问:CPU如何通过一根数据线找到具体访问的某个外设? 如果找到某个外设,那么CPU和外设是如何通过这根数据线完成数据的交互的? CPU和外设如何操作数据线?无时钟线

答:答案咋一线式总线协议中(由存在于芯片手册) 本质研究目的:无时钟线CPU和外设通信。

 

3.以DS18B20分辨率可编程的一线式数字温度传感器为例:

3.1 DS18B20的硬件特性:3.1.1 测量温度是模拟信息,但是输出的值温度是数字信号。内部集成了ADC,并且ADC的分辨率可以进行编程;内部集成一个64bit的ROM,存储每个芯片的序列码(具有唯一性)。

分辨率:9 10 1112位 内部集成9字节的RAM,并且RSM作为寄存器进行空间的划分:CPU访问DS18B20,起始本质就是访问内部的RAM空间。

3.1.2Byte0:存放转换之后的温度数字量的低位。 Bytes1:存放转换后温度数字量的高位。

每一个bit位对应的最小分辨率:1/16 = 0.0625 温度模拟值:(bytes<<8|bytes0)*0,0625

Bytes2:存放高温报警阈值。 Bytes3: 存放低温报警阈值。 Bytes4:用于配置内部的分辨率。

配置分辨率9位:0X1F 10位:0X3F 11位:0X5F12位:0x7f

3.1.3内部集成3字节的eeprom:每当DS18B20上电,硬件首先从内部EEPROM中读取之前配置的高低报警阈值和分辨率到RAM中;每当DS18B20掉电,硬件将RAM中的高低报警阀值和分辨率写入EEPROM中。

3.2DS18B20的数据传输从低位开始!

CPU访问DS18B20遵循3步骤,本质还是操作数据线。

1.CPU发送初始化复位信号;2.CPU发送ROM命令;SKIP ROM:命令字为0XCCC,如果总线只有一个设备,CPU通过数据线发送0XCC(11001100)3.CPU发送功能性命令;AD转换命令0X44写内存命令:0X4E

读内存命令0XBE。

由于没有时间线,,CPU与外设双方的数据交互通过时序图来进行发送数据的0,1.

3.3了解CPU访问DS18B20的3步骤,此时再结合芯片手册给出操作流程图,即可完成最终的访问工作。

案例:配置分辨率和读取温度为例 配置分辨率为12位

1.    CPU发送初始化信号 2.CPU发送SKIP命令0XCC 3.CPU发送写内存命令0X4E 4.CPU发送TH报警阀值。 5.CPU发送TL报警阀值 6.CPU发送分辨率为12位寄存器值0X7F。

3.4读取温度:

1.CPU发送初始化信号 2.CPU发送SKIP命令0XCC3.CPU发送转换温度命令0X44,启动内部AD转换,转换温度值自动保存在bytes0,bytes1中,千万注意一旦转换完毕后,DS18B20将会自动进入低功耗模式。

4.CPU发送初始化信号 5.CPU发送SKIP信号 6. .CPU发送读内存命令0XBE 7.CPU从bytes0开始读内存,读两个字节 8.CPU发送复位信号。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值