文章目录
- 一、DS18B20--DQ单总线
- 1.1 单总线时序结构分析
- 1.1.1 初始化:
- 1.1.2 发送一位
- 1.1.3 接收一位
- 1.1.5 发送字节
- 1.1.6 操作流程
- 1.1.7 数据帧的理解
- 1.1.8 数据帧的理解
- 二、UART
- 2.1 同步通信和异步通信
- 2.2 双工通信
- 2.3 串行通信常用数据校验方式
- 2.3.1 奇偶检验
- 2.3.2 和校验/异或校验
- 2.3.3 循环冗余校验CRC
一、DS18B20–DQ单总线
在设计的时候一定要满足单总线时序,
总线有一个基本要求:
每次初始化以后,总线的控制权都是主机掌握。默认是写的状态,
有一个让从机发送的性质(从机此时具有控制权),因此此时主机就变成一个读的状态了。
1.1 单总线时序结构分析
1.1.1 初始化:
1.主机将总线拉低最少480us。
2.释放总线,等待15us~60us,时间不能超过,一定按照严格的时序来表达。
3.如果存在从机会拉低总线60us~240us以响应主机,之后从机将释放总线,总线回到高电平。
在从机拉低电平的时间,通过IO口读取电平,判断从机是否存在。
复位 和 响应两个部分。
每个操作之前都要都一个初始化
1.1.2 发送一位
发送一位:主机将总线拉低60~120us,然后释放总线,表示发送0主机将总线拉低1~15us
,然后释放总线,表示发送1。从机将在总线拉低30us后(典型值)读取电平,整个时间片应大于60us。
时间片就是时序结构的意思,
一定是30us的时候进行读取电平。
60us一个周期进行理解,不管是发送还是接收。
1.1.3 接收一位
接收一位:主机将总线拉低1~15us,然后释放总线,并在拉低后15us内读取总线电平(尽量贴近15us的末尾),读取为低电平则为接收0,读取为高电平则为接收1,整个时间片应大于60us
60us一个周期进行理解,不管是发送还是接收。
1.1.5 发送字节
连续调用,低位在前。
1.1.6 操作流程
初始化:从机复位,主机判断从机是否响应
ROM操作:ROM指令+本指令需要的读写操作
功能操作:功能指令+本指令需要的读写操作
1.1.7 数据帧的理解
温度变化数据帧:当主机将这些数据发送给DS18N20以后,从机就会将温度传感器值刷新到RAM暂存器里面。
温度读取:读取暂存器指令,连续读操作(对于主机来说就是接收数据)。将这个指令发送给从机,目的就是告诉你,主机需要温度数据了,接着就是从机发送数据,也就是主机接收数据的操作。
两个温度字节读取以后,还可以继续读取,但是本次没有必要就不用读取。
1.1.8 数据帧的理解
二、UART
2.1 同步通信和异步通信
简单说,同步通信需要时钟信号,而异步通信不需要时钟信号
如何通信,怎么知道这是高电平或者是低电平或者说是我怎么知道这是两个高电平,
我可以假设这是在1ms内,我采集10次,那么其中有6次是高电平,那么我就认为这个1ms传输的就是高电平,那么这就是第一个第一个电平,同理,继续下一个1ms,因此就引出了波特率的概念。
波特率:数据传输的速率。
波特率:串行通信中,数据传送速率有两种名称,即比特率或波特率(对于二进制传输,两者等价)它表示可以支持每秒钟传送多少位数据,常用包括,600、1200、2400、4800、9600、19200、38400、115200波特等;串行通信的收发双方必须采用相同的波特率。
假设一帧是10位,那么1S可以传输960帧,也约等于1ms传输一帧。
-
起始位:位于数据帧开头,占1位,始终为低电平,用于向接收设备表示发送端开始发送1帧数据,
-
数据位:要传输的数据信息,一般为7/8位,可配置,通常由低位到高位依次传送:
-
校验位:位于数据位之后,占1位,可配置,用于发送数据的校验,或传送多机串行通信的联络信息;
-
停止位:位于数据位未尾,占0.5~2位,可配置,始终为高电平,用于向接收端表示1帧数据已发送完毕。
一般都是起始位是低电平 停止位是高电平。空闲位一般也是高电平。
2.2 双工通信
- 单工
指数据传输仅能沿一个方向,不能实现反向传输, - 半双工(RS485 CAN IIC)
指数据传输可以沿两个方向,但需要分时进行 - 全双工(SPI)
指数据可以同时进行双向传输。
2.3 串行通信常用数据校验方式
2.3.1 奇偶检验
奇偶校验
针对一帧数据进行校验,在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中"1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。
2.3.2 和校验/异或校验
和校验/异或校验
针对一包数据进行校验,和校验是发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块未尾。接收方接收数据同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,相符则无差错,否则即认为传送过程中出现了差错。
2.3.3 循环冗余校验CRC
循环冗余校验(Cyclic Redundancy Check,CRC)
针对一包数据进行校验,这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法纠错能力强,广泛应用于同步通信中。
文章源码获取方式:
如果您对本文的源码感兴趣,欢迎在评论区留下您的邮箱地址。我会在空闲时间整理相关代码,并通过邮件发送给您。由于个人时间有限,发送可能会有一定延迟,请您耐心等待。同时,建议您在评论时注明具体的需求或问题,以便我更好地为您提供针对性的帮助。
【版权声明】
本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议。这意味着您可以自由地共享(复制、分发)和改编(修改、转换)本文内容,但必须遵守以下条件:
署名:您必须注明原作者(即本文博主)的姓名,并提供指向原文的链接。
相同方式共享:如果您基于本文创作了新的内容,必须使用相同的 CC 4.0 BY-SA 协议进行发布。
感谢您的理解与支持!如果您有任何疑问或需要进一步协助,请随时在评论区留言。