本节将演示由于发送方和接收方不能同步时钟所引起的问题:

 

Parity 奇偶校验位

Checksum 校验和

CRC error detection 循环冗余校验(Cyclic Redundancy Check)

 

发送数据的稳定性是依靠error detect 和 error correct 来保证的

 

Non-return-tozero 不归零编码:

错误检测(1)可靠的数据传输_d3

low就发0 high就发1

 

RZ编码(有一个base的电平,然后根据控制能到负电平和正电平)

 

 

transmiter

receiver

 

Arduino

错误检测(1)可靠的数据传输_逻辑运算符_02

 

5v 电压 led接入d3

错误检测(1)可靠的数据传输_d3_03

 

 

 &和 | 既是逻辑运算符也是位运算符,而&&和||只是逻辑运算符。

>> 右移运算符

 

错误检测(1)可靠的数据传输_逻辑运算符_04

 

 

接上示波器

错误检测(1)可靠的数据传输_数据_05

 

再重新传送数据:

错误检测(1)可靠的数据传输_液晶屏_06

 

 

看一下1s内发的数据:

 错误检测(1)可靠的数据传输_逻辑运算符_07

 

错误检测(1)可靠的数据传输_液晶屏_08

 

100 1000 (大写字母H的ASCII编码

可以看出这里少了一个bit 这里只有七位

所以再相左一点点就可以找到这个字节

这个字节是 0100 1000

 

下一个字节是0110 0101 是e(我们要发hello world。。。

错误检测(1)可靠的数据传输_液晶屏_09

 

下一个字节是 0110 1100

 

错误检测(1)可靠的数据传输_逻辑运算符_10

 

接了一个LCD面板: (d4 d5 d6 d7 just four of the data pins

错误检测(1)可靠的数据传输_液晶屏_11

 

错误检测(1)可靠的数据传输_逻辑运算符_12

 

然后骚操作 安了一个液晶的库

 

错误检测(1)可靠的数据传输_液晶屏_13

 

 

然后开始编码(define the pins we using

错误检测(1)可靠的数据传输_d3_14

 

错误检测(1)可靠的数据传输_数据_15

 

错误检测(1)可靠的数据传输_网络_16

 

错误检测(1)可靠的数据传输_数据_17

 

 错误检测(1)可靠的数据传输_网络_18

 

这个操作

 

错误检测(1)可靠的数据传输_d3_19

 

接液晶屏的话,目的是让我们可以看到实际发出的信息,

 

错误检测(1)可靠的数据传输_逻辑运算符_20

错误检测(1)可靠的数据传输_d3_21

 

错误检测(1)可靠的数据传输_网络_22

 

we build sth with NRZ encoding

现在还是在用NRZ编码,我们已经做好发送者了,接下来来我们做一个receiver,来接收信息,

 

 错误检测(1)可靠的数据传输_液晶屏_23

 

Receiver也做好了

错误检测(1)可靠的数据传输_数据_24

 

开始编码:

 

 错误检测(1)可靠的数据传输_网络_25

(pin3 设置为input)

 

错误检测(1)可靠的数据传输_液晶屏_26

 

继续

 

 错误检测(1)可靠的数据传输_网络_27

 

。。。

接上:

 

 错误检测(1)可靠的数据传输_数据_28

 

看一下结果:

 

错误检测(1)可靠的数据传输_网络_29

 

(开始还行 但是传着传着就出现乱码了

 

检查一下,transmitter 和 receiver的都是200ms读/写一次

 

我们把这个delay改小一点,改成198吧

错误检测(1)可靠的数据传输_d3_30

(结果又乱码了

 

Receiver换成196

错误检测(1)可靠的数据传输_网络_31

 

 

错误检测(1)可靠的数据传输_d3_32

 

 

(基本都没事了,但是最后一个字符还是挂掉了)

 

结论: these delay things is really a bad way to try to synchronize these things .(because you know we really don’t know how much time this processing is going to take

 

通过手动同时按开关的话基本不能可靠的维持同步

 

这就是一个不reliable的communication  因为这些东西最终一开始还是同步的 但是最终会不同步

 

so delay isn’t the right way to ensure…

 

 

如何保持同步呢, 除了传输data,我们可以添加一个时钟的信号,clock signal

 

错误检测(1)可靠的数据传输_数据_33

 

 

 

 

错误检测(1)可靠的数据传输_数据_34

 

clock信号和data信号

 

错误检测(1)可靠的数据传输_逻辑运算符_35

 

 

 

 

通过clock同步,现在传输就不会有问题了,

但是实际情况中,可能会出现线路或者哪里有故障导致miss了某个bit

 

下一节中会讲错误检测