00:02
然后的话,嗯,这个1.1兆,嗯,赫兹1.1兆赫兹,嗯,就限制了我们的这款芯片的一个工作频率啊,限制了我们的工作频率。那么我们了解了这段话之后,那么我们继续往下看啊,继续往下看。这段呢,有一个我们的一个芯片的一个描述啊,芯片的描述,这个描述的话,嗯,会有一个问题啊,会有一个问题就是它里面,嗯,大部分的内容都是上面重复的啊,都是上面重复的内容啊,那么在这儿的话,我们只减其中这个。嗯,不一样的信息啊,来看一下主要的信息来看一下啊,上面的话给大家去讲了,还是我们的三个控制端口啊,三个控制端口,嗯,然后呢。
01:02
嗯,下面的话有一个我们的一个。这个速度啊,这个转换的速度啊,在这都写的有啊,其实在这个转换速度的话,我们在上面看特征的时候里面呢,就有这个,就有这个描述啊,就有这个描述。嗯。然后继续往下。继续往下。嗯,我们在这儿的话,有一个。时间啊,一个时间,这个时间的话,也是我们所提到的那个时间啊,就是这个这个转换时间啊,我们在刚才呢,也给大家去讲述了啊。然后呢,下面呢,是它的一个。框架啊,这个芯片的一个工作的一个示意图啊,然后首先的话,一和三管角是我们的一个参考电压啊,这个参考电压,然后二管角呢,是模拟量的输入,这个模拟量的输入呢,是我们外部的一个呃,电瓶啊,外部的电瓶,这个电瓶的话,大家可以自由去选择啊,可以自由选择,嗯,你可以是这个。
02:13
嗯,你可以是任意的电压,但是这个电压的话,要满足我们这个测测试的一个范围啊,不能超出这个范围,超出这个范围的话,嗯,肯定就会有问题啊,可能就会有问题。然后再往下的话啊,再往下的话是我们的五和七管角,这两个管角的话是我们的控制端口啊,是我们控制端口啊,然后的话共同组成了我们的控制逻辑和输出计数啊,因为我们的输出的话,总共是巴比特数据,所以这个地方呢,有一个输出技数啊,它会把这个数据呢,一比特一比特的给你发送出来啊,发送出来然后通过这个data out的这个端口呢,给到我们的ipg。啊,给到我们的IP,这是这样的一个内容。
03:05
好,然后呢,再往下啊,就是我们的重点内容了,这个呢,是我们这款芯片的一个示意图啊,一个示意图。首先的话,我们从这个实际图里面可以看到一些内容啊,看到一些内容什么呢?就是。嗯,从。这个位置开始啊,从我这个圈中的这个位置开始,到这个位置结束,这是一个周期,这是一个完整周期,那么后续的部分呢,都是一个重复的内容啊,都是重复的内容,大家可以看到前面的话是采集这个A数据。啊,数据A,然后后边的话是采集数据B啊data a啊data a,后边的话是data b,那么这个采集的过程都是重复的,只不过是不同的数据而已,那么我们在做的时候啊,可以用什么方法呢?就是用我们的线性序列机这种方法呢,去重复的去完成我们的一个重复工作啊这样的话可以给我们写代码呢,省去很大的一个工作量。
04:13
然后嗯,然后我们从起点开始分析。嗯,从起点开始分析,起点呢是从CS拉低开始啊,CS拉低开始,那在这里的话,大家可以看到CS上面呢,有一条横线,那就意味着这条这个CS这个信号呢,是低电平有效的啊,是低电平有效的。那么低电瓶有效,那当我们去拉低这个信号的时候。啊,拉低这个信号的时候,那么我们这个芯片呢,就开始正式的进入工作啊进入工作。然后。嗯,然后呢,嗯,拉低了之后,经过一段时间之后,这个数据线上就会出现我们的第一比特数据啊,第一比的数据,但是呢,这个时间是多长呢?这个时间叫做ten啊,这个时间多长呢?下面有描述啊,我们来看一下。
05:18
啊,T输出的有效时间啊,这个时间是多长呢?是1.4微秒,而且呢,这个值是最大值。啊,这个值是最大值啊,那我们在这呢,需要记录一个点啊。第四啊,CS拉低。之后。数据最多。需要1.45秒,然后进行输出。啊是最多需要1.4微秒输出,这个地方什么意思呢?也就是说它的输出不一定一定是4.1.4微秒,它可能呢,要比1.4微秒要小啊要小,但是最大的话不会超过1.4微秒啊,这是它的一个参数啊,这是它的一个参数。
06:21
好,那么接下来。啊,我们继续来看啊,继续来看,那么这段时间有了之后啊,这个TN这段时间有了之后,那么后续啊是什么呢?就是我们的。这个。A7这一比特就是已经出来了,出来了之后,接下来是A6A5A4A2啊,A1A0等等等等啊这些数据,那么在此的话,我们就会有一个问题啊,就会有个问题,什么问题呢?就是呃,我们采集数据的时候,要在什么时候采集。啊,在什么时候采集。
07:06
大家都知道这个数据在采集的时候,我们呢,要尽量的去避免亚稳态,避免样本态。这个圆呢,给大家去画个图示啊。假如说现在呢,我们有一个信号啊,由低变高这样的一个过程,然后呢,再由高变低啊,这是我们假如说这是我们在传输数据零啊,传输数据一传输数据零啊这样的一个过程。那么假如说现在我们要去采集中间的这一比特一啊,那么我们在采集的时候应该应该选择什么时刻呢?啊,我们在采数的时候,尽量选择在这一比特的中心位置去采样。啊,因为在中心位置的时候啊,在中心位置的时候,它的数据呢,是最稳定的啊,最稳定的时候,那如果说大家呢,在这个位置去采样,那么就会存在一个问题,那这个电瓶到底是低电瓶还是高电瓶,那么就会出现我们这个样本态的一个问题啊,亚稳态的一个问题。
08:14
那么假如说大家是真的就在这个位置去采样了,那么采到数是一还是零都是随机的啊,不一定啊,不一定是,所以这样的话,对于我们采集数据的话就有很大的难度啊,所以呢,大家在采集数据的时候,尽量选择数据的这一比特的中心位置啊,这一比特的中心位置,因为在这一比特时间内,数据是没有发生变化的啊,数据是没有发生变化的。好,这就是我们的一个。这就是我们的一个采集数据啊,那么说完这个之后,那么我们就需要去找一下这一这个巴比特数据,每一比特的中心位置到底在什么位置啊,到在哪个地方啊,这样的话,我们知知道了这个地方之后,我们再去采集数据就比较简单了。
09:06
啊,那接下来的话,我们来去看一下下面的描述。嗯。嗯,看一下这个地方呢,有一个。嗯,注释啊,注释B啊,这个注释B是这么说的啊,说最高比特A7啊,它会自动的放到这个data out这个总线上,在CS拉低之后啊,在CS拉低之后,它会嗯,自动的去放到这条数据线上,然后呢,剩下的七个比特就是A6到A0,这七个比特会在第一个。第一个七个lo clock周期的时钟的一个下降沿的时候啊,被锁存到这个数据线上。
10:00
啊,被锁存到数据线上什么意思呢。呃,也就是说CS拉低的时候,A7就直接出现在数据线上,然后后续的七个比特会在咱们IO clock的下降沿的时候出现在数据线上啊,那其实那说到这儿的话,大家应该明白了啊,其实他就说明了一点信息就是。嗯,时钟下降,沿数据改变。啊,数据下时钟下沿数据改变。那同时啊,也告诉我们另外的一个信息啊,什么呢,就是在时钟的上升沿进行参数。啊,在时钟的上升沿进行参数。啊,这是我们需要做的做的一项工作,好,那有了这个,嗯,那有了这个时间点啊,我们再去写代码的时候,我们只需要去找,找到这个时钟上人言进行阐述就可以了,啊那可能有同学会会有疑问啊,老师,为什么为什么是在时钟的上升延呢?那其实像我刚才说的,这一个比特是一个生命周期,那么他在时钟的向向岩进行数据改变,呃,在下一比特出现的时候,也是一个向向岩,那么也就意味着。
11:31
这一比特数据正好是我们伊比特的一个时钟周期啊,一个时钟周期在时钟周期的中心位置就是正好是我们的时钟上研,所以我们再去踩数的时候,只要找到这个上升沿的位置啊,就直接去踩数就可以了,它的位置就一定是这一比特的中心位置。啊,是这样的一个原理。嗯。然后后续。啊,然后后续。
12:00
嗯,咱们知道怎么去采样了,然后往后啊,往后啊,就是这个地方呢,有一个转换时间啊,有一个转换时间,这个转换时间的话,其实一开始的话就给大家提到了啊,这地方有个TWCS,咱们来看一下。TWH。CS。啊是这个,那大家可以看到它最小值是17微秒,为什么是最小值呢?啊,因为之前也给大家去介绍了,它转换时间最大是17微秒,那么我们需要等待它,需要等多长时间呢?就是最少等17微秒,所以在这个地方就会有这样的一个时间,就是。T。啊,WH啊,最小值为17微秒。啊,最小值为十,求一秒。是这样的一个关系啊。
13:04
然后这个T,这个TWH结束了之后,就进入到下一个使用周期了。啊,就进入到了下一次循环了,那么现在我们需要做的工作就是把这个一整个周期啊,用代码给它写出来就可以了啊,那在这儿的话,我们推荐的方法呢,是用现有序列机啊接下来的话,呃,给大家看一下我们的一个驱动。嗯,我把这个代码呢,给大家呢,用这个编译器啊,给大家展示一下。
14:20
啊,大家可以看一下啊,这是我们的一个驱动啊驱动那在这儿的话,这个端口的话就不用多说了啊,时钟复是必须的,然后呢,这个是ad的三个的交互端口啊,然后呢,接下来我们需要把踩到的八比的数据转成并行的数据,然后进行输出,同时呢,输出一个标志信号啊,同时输出一个标志信号,这个标志信号代表我们巴比特数据采集完成。啊,是这样的一个标准信号。嗯,然后呢,再往下啊,这个地方有定义一个时间是1300,这个一千三是怎么来的呢?啊给大家去介绍一下。
15:04
嗯,啊,介绍一下,那么大家可以看到从CS拉蒂开始到我们第一个时钟上升岩啊,是需要多长时间呢?这个地方有个TSUCS啊,咱们来看一下多长时间。嗯,就是这个这个时间呢,最小值是1.4微秒啊,最小是1.4微秒,那么刚才呢,我们又看到另外一个数,一个数据就是这个T,这个T呢,最大是1.4微秒啊,什么含义呢?什么含义呢?就是说这个A7这比特最晚出现。呃,最晚出现在什么位置,就是刚好跟上线对齐。啊,刚好跟上升岩对齐,这是一种非常非常极限的一种情况啊,非常非常极限的一种情况,就是说这个A7出现的非常非常晚,然后咱们的这个商岩出现的非常非常早,那这个时候呢,刚好它两者是重叠的,那像这种情况的话,对于我们彩数的话是非常不友好的啊,非常不友好的,那所以我们为了保证A7这比特一定能有,那我们怎么做呢?会将这个TSU这段时间呢,给它拉长啊,拉长这样的话,我们只要让这个上升延延后,那就可以保证A7这一比特肯定已经存在了啊,肯定已经存在了,所以在这儿我们呢,这个时间呢,要给多少呢?我们先这个大概计算一下。
16:33
首先呢,我们先按最小值来算啊,1.4微秒。啊,1.4微秒。啊,再加上加上什么呢?我们来看一下后续,后续的话从这个下降沿开始啊,从这个下沿开始,然后一直到这个位置结束,中间呢是总共是。呃,这个七个半周期啊,七个半周期啊,我们可以看一下,从这个上升沿到这个上升延是一个周期。
17:02
啊,两个三个四个五个六个七个,然后加上这后边这半个总共是七个半周期,这个七个半周期是多长时间呢?那这个呢,还需要我们去确定一下我们的时钟频率啊,确定一下频率,这个频率的话,刚才我们也看到了,总结信息的时候,这个地方有提到一条信息,就是频率最大一点一兆赫兹。啊,平均最大一点一兆赫兹,那么假如说我们按一兆来算啊,一兆来算,那么它的周期呢,就是1000纳秒。啊,1000纳秒。那七个半就是7.5微秒啊,7.5微秒是这样的一个时长,然后再往后。再往后的话,有一个问题就是CS什么时候拉高啊,CS什么时候拉高这个地方呢?大家有可能会有误区啊,会有误区就是说这个拉高的位置到底是跟这个向沿对齐呢,还是跟什么位置对齐呢?在这个图纸当中,它根本就没有标明啊,根本就没有标明那这个地方的话,大家可以根据自己的。
18:10
呃,根据自己啊定义去都行啊,都可以啊,定随定义在什么时刻都可以啊,但是呃,但是呢,在这儿的话,我就特殊化一点啊,这样的话方便我们去写代码啊,假如说我现在就假设这个向阳炎跟这个CS拉高的位置是重叠的。啊是重叠的,那这样的话,在第七个半周期结束之后,我还需要去等待17秒,然后这个整个的一个循环就结束了,所以我整个的周期时长是1.4加上7.5,再加上17。啊,是这么长时间。啊,是这么长时间。嗯,那么。这么长时间之后呢。呃,这么长时间之后呢,呃,我们去算一下这个总和啊,算一下这个总和,总和算出来之后是8.9 25.9啊,25.9微秒啊,那么我们给他凑个整啊,凑个整凑成26微秒。
19:16
啊,可以凑到26微秒,那你凑26微秒多了0.1微秒,这0.1微秒加在哪呢?我们就可以加在这个1.4上。加于这个1.4上,因为这个1.4的话是我们最小等待时长,那么我们稍微给它拉长,就可以确保A7这比特一定能够出现在数据线上。啊,就是这样的一个做法,所以呢,我们我在写代码的时候呢,给大家定义了一个一千三啊,一千三这个次数,那时长的话就是26微秒。嗯。然后往下啊,然后往下,这是一个计数器,就是来数这个26微秒的。嗯,然后再往下的话,就是一个纯彩数了啊,踩数的过程呢,也非常的简单啊,我们把CS拉低,然后呢,这个时候时钟还是零的,然后经过1.51.5微秒之后把时钟拉高,同时呢踩第一比特数啊,同时踩第一比特数,然后呢,我们需要呢把时钟给做出来,所以有一个拉低拉高,拉低拉高的这样的一个循环的过程啊,循环的过程在我们的上升沿的时候,把每一个比特都给它。
20:31
都给它这个踩出来就可以了,最终的话就可以得到一个巴比特的一个数据,巴比特数据,当然我们的计数器数完数之后拉高一个档引号啊,这是一个整体的一个ad的一个驱动啊,是这样的一个过程。啊,是这样一个过程,那么这个时候呢,我们就得到了一个我们的。这个ad发送过来的数据,一个巴比特数据啊。这是我们的一个驱动吧,啊这个ad呢,嗯,使用起来比较简单啊,使用起来比较简单。
21:08
嗯。大家可以看一下有什么问题啊,如果有问题的话。直接通过弹幕啊进行发送就可以了。嗯,这个后面会和串口一起实现吧。这个我们我们整个的一个设计啊,整个一个设计就是要让这个ad加上一个串口啊,整体的项目进行一个实现,所以到后边的话,这个驱动肯定是要加上串口的啊。
22:04
转换时间最大是多少?意思是什么意思?就是说这个芯片呢,要将这个模拟信号转换成数字信号,它是要时间的啊,也就是说就类似于你这个你让机器去做一件事。啊,做一件事,他把这件事儿呢,做完是需要时间的。啊,是需要时间的,那这个时间是多长呢?就是说它最多需要17微秒啊,最多需要17微秒啊,那也就是说我们在等的,等待它转换的时候,最多等17微秒,它肯定就转换完了。啊,就是这样一个意思。嗯,这个后边的话。嗯,这个后边的话,我们是这样去做的啊,嗯,就是我们要通过串口去发送命令,然后呢控制ad。
23:01
呃,控制ad去采数,比如说我们上位机发送命令,让这个让要采集100个数,那么我们就从ad里面去截取100个数据,然后回传到上位机,啊是这样的一个过程。嗯。当然这个数据的个数啊,大家可以自己去定义啊,多少个都可以。嗯,好,老师声音好听啊,好。那那待会儿直播结束,你可以跟郝老师啊语音一下好吧。啊,大家可以看一下有没有其他问题啊。如果后续大家需要这个文档,或者是需要代码的话啊,到时候可以给大家发一份啊。
24:16
一次只能采集巴比特了,这个嗯,这个芯片的话,它本身就是一个巴比特的一个采集巴比特的一个转换器,所以它一次只能是巴比特,不能多也不能少啊,这是这个芯片特性决定的啊,不是由我们来决定的。就是它出场就是这样的啊,当然了,不是说所有的a dad采集芯片都是智能巴比特啊,比如说我们这个地方提到了一另外的一个型号,它是可以踩十比特的啊,它是可以踩十比特的。啊,都是不一样的啊,当然了,有更高速的一个彩信片呢,会有更多的位啊,这都是不一定的。嗯,频率决定什么,频率的话就决定了咱们数据传输的一个速度啊工作速度,这个l clock呢,就是咱们所谓的这个频率,这个频率的话就决定了我们这个芯片往ipg输出数据的时候,它的一个速度。
25:17
嗯,输出的一个速度。嗯。你比如说你想,嗯,你想获取这个ad的数据,你想一秒钟获取十个数据啊,或者是你想一秒钟获取100个数据,那它俩这两个速度让ad工作的时候,这个频率肯定是不一样的,对吧,你的速度越快,你能得到的数据就越多。就是这样的一个。这样的一个关系啊。嗯。
26:01
嗯。好,那如果嗯,大家没什么问题的话,咱们先休息两分钟啊,然后回来咱们继续啊。
30:25
好,那么接下来的话,咱们继续啊。嗯,那么这个这个驱动了数据采集这一部分,嗯,没问题之后啊,那接下来的话,咱们就进行接下来的下一个部分啊。那么下一部分是什么呢?就是嗯,我们按照我们写的这个文档的一个顺序啊,首先的话,这个是我们。
31:00
嗯,数据采集一个串转并的一个过程。这个串染病呢,其实就是我刚才给大家去展示的这个这一部分啊,展示的这一部分,这个呢,就是将串行数据转成并行数据的一个过程。那么然后接下来的话是一个解析的一个过程啊,解析的一过程。那么在这儿的话啊,我们去做的时候啊,就是严格按照这个命令来做啊,就是说我们就默认为,我们就默认为在上位机在发送数据的时候,它一定会按照这个格式,或者是说这个按照这个顺序来进行发送数据的啊,所以呢,我们在接下来。进行这个数据解析的时候,就按照这个过程啊来进行一个解析。啊,我们来看一下。这个端口的话,始终复位一个数据的窝里的,这个窝里的话就是数据有效啊,数据有效,然后的话,它会进来一个巴比特的一个数据啊,会进来一个巴比特数据。
32:14
嗯,然后呢,下边呢,有一个采样的一个次数啊,采样的这个次数,这个次数是哪来的呢?啊,就是我们刚才这个文档里面写的啊,文档里面写的,假如说我们再去发送的时候,去发送的是这个数据,这个数据这个里面的巴比特就代表了我们的采样的一个次数啊,采样的一个次数。那假如说呢,我们就采样了,呃,100次,那么这个巴比特发送这个八撇D100啊就可以了啊就可以了,是这样的一个过程。然后呢,下边还有一个赛道啊,这个是设置完成啊,设置完成啊,这是我们的一个整个的一个信号啊,整个的一个信号。
33:06
然后我们接着往下啊,接着往下看。嗯。嗯,我们呢,是这样去定义的啊,因为我们再去传输数据的时候,这个。嗯,这个我们再去里面定义了一些代表符号啊,比如说M代表主机,S代表同级啊,C代表命令,D代表数据,像这些内容在数据传输的时候,这个是没法传输的啊,没没法传输的,所以呢,我们要将这些字母进行一个转换啊。转成转成什么呢?给它转成,呃,我们常用的比如说阿斯玛。啊,转成我们的常用的阿斯柯玛,用阿斯柯玛去代替这个字母,啊,去代替这个字母。那么在这儿的话啊,还有一点就是我们的。开始和结束这两个字节,啊,这两个字节我们都用特定的特定的一个巴比特数来进行代替。
34:07
那这个时候有同学会说,老师有没有这种可能,就是说我传输的数据跟你的开始和结束的这个数据呢,是一模一样的啊,那这个的话肯定是有可能的啊,肯定有可能,这个排排除不了啊排除不了,那但是呢,我们只要严格的按照这个数据顺序进行发送数据,我们呢,依次进行判断是不会出什么问题的啊,不会出现什么问题,嗯,那比如说我们的开始就是10101010,结束就是01010101啊按照这样的一个比较特殊的两个字,呃,两个字段啊来进行作为我们的开始和结束。然后M对应的阿斯卡玛777啊,C呢对应的是67啊,D还有这个T啊等等等等。啊,我们都是这样去进行一个判断的啊判断的。
35:07
好,然后接着往下看,我们是怎么去判断的,那在这儿的话,我们是简单的用了一个状态机啊状态机,这个状态机呢,嗯,我们可以看一下,首先第一个状态我们要去判断这个date玻璃的,这个为什么要等待这个data玻璃的呢?因为在上位期发送数据的时候,不一定是六个字节一起就一下就给你发过来了,它可能会中间呢,会等待一段时间之后再发送下一个字节,那所以呢,我们就需要有一个data玻的,就是每接收完一次上这个上位机发送过来的巴比特数据之后啊,进行一次判断,这样的话我们不会出错啊,不会出错,也不会去重复的去判断啊,这样的一个作用。同时判断接收到的数据是否等于是star这个命令字节。
36:05
如果是的话,进入到下一个状态,如果不是,就在当前状态一直等待啊,当前状态一直等待。然后下一个状态啊,判断数据是否是主机发出,如果是状态往下跳,如果不是状态,在此等待啊,在此等待,那其实这个地方的话,嗯,大家呢,可以根据自己的想法来做啊,有些同学认为说你第二个字节如果出错的话,我后续的内容就不需要去判断了。啊,就不需要去判断了,那么这样的话,我直接回到零状态行不行呢。其实这种想法是没什么问题的,但是有一点啊,有一个问题就是。你说第二个字节错了,如果说第三个字节的数据跟你第一个字节数据是一样的话,那你这个状态机是不是又重新执行了,那这样的话,我们这个六个字节在执行到后边的时候就不够了啊,就不够了,它会陷入一个死状态啊,就在一个状态一直等一直等啊会出现这种情况。
37:15
那所以呢,我们在这儿的处理方法是什么呢?你可以其实这个地方呢,你可以直接往下跳,不管对还是错,你就直接往下跳。啊,直接往下跳,它如果是错了的话,你可以生成一个比如说A的一个信号,就是告诉你前面有字节已经出错了啊,这样的话就可以了。啊,这个的话根据大家需要去做啊都可以啊。然后再往下,嗯,如第三个字节啊,如果它是否是命令,如果是的话,怎么样跳到三状态,如果是数据的话,跳到四状态,因为在这个地方数据和命令要执行不同的操作,所以呢,我们要分为两个状态来进,分别进行执行啊,所以在这儿的话啊,我们做的方法啊,命令去到三。
38:04
数据去到四啊,是这样的一个。操作啊。然后嗯,三状态。啊,三状态。那么这个T的话,就是我们的一个嗯,规定好的一个嗯命令吧,规定好的一个命令啊,那在这的话,大家可以定义其他的命令啊,比如说什么呢啊,比如说开始采集数据,停,呃,结束采集数据啊等等等等,像这项命令大家都可以自己去定义啊,在这儿的话,我只定义了一个发送啊,就是传输,传输数据的一个命令啊。然后呢,再来到四啊,再来到四。那么四状态的话是直接是接收数据,这个接收数据啊,直接给到谁呢?给到了一个。
39:03
呃,这个接收的次数啊,就是说我们在接收这个ad数据,接收多少次呢?我们要把这个数据给它暂存起来啊,因为如果你这数据不收的话,后边这个数据就没了,所以呢,我们要把这个采集数据的次数啊,这个数据的存一下啊,给它存一下,存到这个寄存器里面。然后往后五五状态呢,就是我们要去进行一个判断,这个判断的话就是来检验的啊,来检验的。嗯,这个检验的过程是我们呢,像刚才我们去介绍的就是用一个核校验啊,用核校验,所以这个地方呢,有一个date是否等于sum的一个判断,那这样的话就有了一个新的东西,就是这个sum,这个sum怎么来的啊,这个sum怎么来的,而且还有另外的一个问题,就是这个萨为什么要在这个地方去判断啊,这两个问题啊,这两个问题,那在这的话给大家去解释一下。
40:09
首先第一个问题,这个sum怎么来的呢?啊,就是我们给大家去写了这个六个字节,对吧,因为我们是要做核校验,核校验怎么做呢?前四个字节加上最后一个字节加起来的和放在这个校验的位置。啊,放在这个校验的位置是这样的一个过程,那对于接收方来说,他要检验是否正确,他的做法什么呢?就是将前四个字节相加,再加上最后一个字节,结果啊和跟这个校验的这个巴比特对比是否一样。如果一样就代表正确,不一样就代表错误。啊,就代表错误。那在这儿的话,嗯,就会有一个问题啊,对于我们接收方来说有一个问题啊,什么问题呢,就是当我们。
41:01
走到检验的这个状态的时候,Stop还没有发过来。啊,Stop还没有发过来,那这样的话,那我们怎么去算这个和呢。啊,就会存在这样的一个问题。其实这个地方的话有两种解决方法啊,有两种解决方法,第一种就是大家在这个。呃,在这个检验的这个状态的话,不做检测,他只接收数据,然后呢,呃,接收完之后来到最后一个状态,Stop,当stop这个数据接收完了之后,再算一和,再做再做,再去做比较就可以了,这是其中一种方法,第二种方法。啊,就是我们直接去比较,那怎么比较呢?就是我们的,因为我们的stop,它是一个定值啊,因为我们事先都是规定好的,对吧,在这是一个定值,那它既然是一个定值,我就可以提前了,就把这个数值给它加起来。啊,这样的话有什么好处呢,第一。
42:02
第一就是我不需要呢,再去等它所有的数据结束,我再去进行判断,第二就是说如果你加上这个数据之后,算出来结果不对,那就证明这个stop这个字节是发送,发送错误了啊,就会出问题了。啊,那如果你加上去之后,你算出来结果跟人家传输的这个这个结果是一样的,那就说明你这个stop传输的也是正确的啊,也是正确的,所以大家可以看到我在零状态的时候就直呃在复位的时候直接做了一个操作。啊,在复位的时候直接做了一个操作,就是让sum的初值直接就等于star和stop的一个和,啊,就提前给它加好啊加上去。然后到最后去判断,判断完成之后。没有问题啊,没有问题。那么我们的。
43:01
呃,这个。嗯。呃,我们的这个档信号呢,就可以拉高了啊,档信号就可以拉高了。啊,是这样的一个过程。啊,这个的话就是整个的一个判断啊,整个的一个判断。啊,这是我们的解析啊。好,那么这条命令给大家解释完了,然后接下来呢,是我们的数据的一个回传,呃,数据回传的话,嗯,这个的话是用的咱们的串口的一个协议,串口的一些协议,这个串口协议的话,嗯,现在大家呢,应该也比较了解了啊,比较了解了,那在这儿的话,我再给大家呢去。阐述一下啊。对于这个数据传输的双方A和B。那么如果他俩在进行数据传输的时候,它是有两种方法的,第一种方法就是单比特线,这1:1根线呢,也可以进行传输数据,但是这样的话就会存在一个问题,如果A和B之间要传输一个巴比特数据。
44:11
那么就会存在一个问题,就是我在一个时刻只能传一比特啊,一个时刻只能传一比特。那么这样的话,呃,我们要传巴比特的话,就要去传输八次,那这样的话,我们就需要传输八个时钟周期啊,这种传输方法的话,就叫做我们的串行通信。啊,串行通信。那还有一种方法呢,就是巴比特数据,我们可以在两者之间呢,连八根线啊,连八根线,连八根线的话,嗯,这样的话,我在传数据的时候,巴比特数据分别对应八根线,我在我用同我用一个使用周期,就可以同时将这八比特数据传输完这种。传输方法我们称之为并行通信啊,称之为并行通信。
45:02
这是这种方法啊,这是这种方法,那么这两种方法呢,都是可行的,各有优缺点啊,各有优缺点,那么先说一下串行通信,串行通信的优点啊,就是资源少,因为它只需要用一根线就可以了啊,这是它的优点,那么它的缺点是什么呢?就是速度慢,因为它需要八个周期。啊,需要八个周期,那么并行通信的话,跟它正好是相反的优缺点。这个正好相反。啊,正好相反。然后另外并行通信的时候,呃,并行通信的时候还需要去解决一个问题啊,解决一个问题什么呢?就是。这个8P的数据是否能够同时到达B,同时到达B端啊,那像那像这种情况的话,在我们的硬件上有什么要求呢?就是要求像这种高速并行的一些数据,在进行传输的时候,要求这些数据线呢,要进行等长布线。
46:07
啊,等长布线,就是在板子里面这些数据线呢,一定要等长度,这样的话可以在一定程度上减小这个时间,呃,减小这个信号在数据线上的一个时间。啊,他们的一个时间差啊,减少这个时间差,这样的话能够很好的保证我这个巴比特数据能够一起到达B接收方啊是这样的一个过程。啊。那么还有一点就是并行,如果你速度比较快的话。嗯,那肯定越快这个问题就越多叭,如说我们要持续约束啊,等等等等啊,都是比较麻烦的啊,都是比较麻烦。啊,差分等长等线等宽啊。对对对,这个都是有要求的啊,就是说我们对这个高速的数据线来说,这些数据线他们的布线的时候都是要一样的线啊,粗细呀,长短呀都是要一样的啊,甚至有些呢要求差分啊,甚至有些要求差分啊。
47:15
都是有的啊。好,那么嗯。那么这个传输的问题,嗯,现在咱们在串口里面是怎么去选择呢?咱们的串口里面是用的串行的一个通信啊,串行的一个通信。其实这个串行通信是用的比较广泛的一种传输方法,比如说比如说什么呢?比如说咱们的USB。啊,比如说咱们的以太网对吧,用的都是一个串行的通信啊,并不意味着串行通信速度就一定慢啊,你比如说以太网对吧,它是串行通信,但是它的速度也也可以很快对吧,也可以很快,那么呃,这个串行通信的话,就会存在一个问题啊,存在一个问题啊,我在这儿呢,重新给大家画一张图。
48:19
假如说A传输到B。呃,咱们创新中心的话,他们之间呢,只有一条数据线,那么这一条数据线在进行数据传输的时候,就会存在一个问题,就是说。就是说B这个接收方什么时候知道A传输数据呢?啊,这就是一个问题。嗯。那么。那么这个这个问题怎么去解决呢?嗯,那在这个呃组织在世界上有很多这个组织,对吧,他们会规定一下这样的一个传输方法,比如说咱们的所所用的常用的一些低速接口或者高速接口,都是那些组织去规定的啊,都是去这样的话就可以去呃统一啊,全球统一啊,统一下咱们这个连接线,那么串口呢,是我们的其中的一种。
49:24
啊,串口呢,是我们其中的一种。嗯,那他是怎么去规定的啊,在这的话给大家写一下这个纪要。嗯。嗯,首先第一点。串口。串口的一个,嗯,要求吧,或者是特性啊都可以。第一点啊,就是说因为它两者之间在传数据的时候呢,只有一条线,那么只有一条线的话,就会存在一个问题。
50:01
啊,存在一个问题。就是说我不在,呃,就是我不传输数据的时候应该怎么样。啊,这条线上应该是什么样的电瓶啊,有同学说老师你不传输的时候,这条线上你直接直接给他拉低不就可以了吗?就是说我直接给个零可以吗。啊,直接给个零可以吗?其实直接给个零说行吗?理论上可以的,但是有个问题,那假如说现在我要去传输数据零,那应该怎么办?那对于接收端来说,我能够识别出来吗?那这就是我们目前所遇到的一个问题啊,所遇到的问题。啊,就是无法识别。发送者什么时候开始传数据?你说老师这个我能不能让接收方一直去接收数据,那这样的话又有一个问题,就是说你一直采集数据,不一定是我要发的数据,那这样的话你采的数据就没有任何意义。
51:01
啊,所以呢,这个时候我们就需要去做一项规定了啊,就做一些规定,规定什么呢?规定一下我们这个传输的一个规则。那么在这的话,第一点就是空闲态啊什什么叫空闲态呢?就是不进行数据传输的时候的一种状态啊,空弦态,空间态为什么呢?为高电平。啊,空闲态为高电平啊,那这样的话就是规定就是。呃,两者必须去商量好啊,就是说在不传输数据的时候,这条线上必须为高电平,必须为高电平。啊啊,这个有同学说是这个,嗯,这个初始态对吧?啊也是没问题的啊,就是这个意思,就是等待的一个状态。啊。啊,然后第二点啊,对于接收方来说啊,我什么时候你说我空间太时候把电瓶拉高了,那我什么时候开始接入数据呢?那么这个时候就需要去,就需要让发送方去给出来一个起始信号。
52:17
给出来一个起始信号,什么样的起始信号呢?就是70位啊,就是七士位,这个70位怎么给呢。啊,很简单,就是给一个零就可以了。啊,给一个零就可以了,这个起始位是伊比特的。啊,70位是伊比特的。那么这个起始位啊,对于接收方来说啊,本来不这个不传数据的是高电瓶,他突然收到了一个低电平,那么他这个时候就知道了啊,发送方要开始给我去发送数据了,那么接下来呢。
53:01
接下来的数据就是我要接收的数据了啊,那么对于接,对于这个接收方来说。啊,就需要做的一个工作啊,什么工作呢,就是要检测这个低电瓶。啊,要检测这个低电瓶,那这个低电瓶怎么去检测呢?在这儿我去推荐大家用什么方法呢?用下降沿的方法。肾炎检测的这种方法。嗯,去进行检测啊。嗯。然后那么起始位之后啊,有了起始位之后啊,接下来呢,我们要去接收数据了,那这个数据是怎么去进行发送呢?因为我们是单比特。啊,因为我们是单比特,呃,因为又因为呢,我们发送数据呢,是总共是巴比特,那在这个时候去发送数据的时候,就会牵扯到一个问题,就是我们先发低位还是先发高位,或者是以怎样的方法去传输啊,其实在这个传输的时候,只要发送者和和接收者规定好这个发送方法,他们只要按照同一种顺序去发送或者接收,就不会出现问题,你就是你就先从中间发它都可以,都是可以的啊,都是可以的,但是呢,在国际组织就规定了这样的一种方法,就是先从。
54:27
低位开始发送啊,低位开始发送。啊,低位开始开始这个发送。也就是咱们所谓的嗯,小段优先啊,低位优先发送啊。这样的一个概念。那发送完之后呢,嗯,那数据结束了,数据结束之后,那像我们刚才说的数据发过来之后,那你发的对还是不对呢?那在我发送的过程当中有没有出现错误呢?啊,那这个时候就需要我们去检测了,怎么去检测呢?
55:07
这个地方我们需要有一个救援位啊,需要一个教援位,这个教位也是伊比特的啊,也是伊比特的啊,然后呢,这个卷位我们怎么去校验呢?啊,我们通常用什么呢?用奇偶校验。啊,既有教研法。嗯。用这种方法去检测啊,嗯,那基友校验是怎么一回事呢?啊,其实在这儿的话给大家去说明一下,这个也非常的简单啊,假如说我现在去传输1:1个巴比特数据。嗯,我随便写一个啊,1011。0010啊,假如说我就写了这样,我就发送这样的一个数据,那这个数据在发送过去之后,我对于发送方来说,我还需要有一个位。
56:01
啊,发送伊比特的救援位,这个救援位。啊,这个胶位。发神呢,发什么呢?到底是零呢还是一呢?怎么去发呢?那这个呢是有一点,就是发送方和接收方要事先规定好,我到底校验的时候要用机校验还是要用偶校验。啊,那假如说我现在呢,用奇校验进行校验,那基校验是怎么去校验呢?就是要保证我这个总共九比特数里面一的个数为奇数个。啊一的个数为奇数个。嗯。啊,那一的个数为奇数个啊,那比如说我们现在当前这个数啊,我们可以数一数啊,前四比特有三个,后边有一个,这是总共是四比特,那四比特数。嗯,四比特的一对于我们计教练来说是不行的,因为我们要保证一的个数为奇数个,所以我们这个卷位就直接发一,这样的话,九比特数里面一的个数就为奇数个了,啊,就是这种方法来进行一个检验的。
57:12
啊,就是用这种方法进行检验的。然后如果你用偶校验的话,就只需要保证一的个数为偶数个就可以了啊,这是咱们的这个校验方法啊,咱们这个校验方法。这个方法呢,也比较简单啊,然后的话,嗯,就会有一个问题啊,有一个问题啊,有同学可能会问啊,因为老师我在发送数据的时候。啊,我总不能每个数据我都数一数,然后再去写这比特吧。对吧,这样的话对于我们来这个发送数据也不切实际啊,不切实际,那这样的话应该怎么办呢。啊,那这个时候呢,就有一个方法。
58:00
就一个方法,我们可以通过计算的方法让它自动去填充这一比特。啊,自动去填充,那怎么去填充呢?啊怎么去填充呢?怎么去计算呢?啊其实嗯,很简单啊很简单,因为我们的数字呢,是二进制形式,二进制形式如果说我们把每一位都相加。啊,每一位相加,计算出来一个和,那大家来想一想,这个和的奇偶是不是就代表一的个数的奇偶?啊,假如说我们这个里面有四个一,那加完之后就等四,那就说明这个巴比特数里面有四个一。啊,那这样的话,我们这个这一位就直接这个发一个一就行了。嗯,既有校验的意义是什么?为什么要加一个,呃,这个既有校验,先先说一下这个校验啊,先说一下校验,为什么要去校验啊。
59:05
因为我们,嗯,在数据传输的时候,因为是用数据线连接的啊,那么在传输的过程当中,如果受到干扰,这个数据呢,就会可能会发生错误,那这样的话,对于我们传输数据的话是。影响很大的,所以呢,我们要去检测这个数据在传输过程中有没有出错,那么我们用的方法是什么呢?就是用的奇偶胶原法。嗯,用的基偶教卷法。那么旧交法啊,怎么去校验呢?啊,怎么去校验呢,就是我们在这个原来的巴比特基础上,后面让他跟一位的校验位,啊,这一位呢,就是我们的卷元位,它这个是零还是一就。呃,就用这一比特的数和前面八比特数总加起来去计算啊,咱们的这个传输的数到底对还是不对?
60:03
啊,你说老师你直接传巴比特不就行了吗?啊,直接传巴比特不就行了吗?那如果说你直接去传这个巴比特。啊,直接去传这个巴比特,对于发送方来说,你说我想用犄角验,但是我这个巴比特输入里面个数是偶数个,那你怎么办呢。怎么去满足咱们基校验的一个条件呢?对吧,就是这样的一个问题,所以我们要加以比特,让它一的个数总和能够满足基数个,这比特是由我们自己去控制的。啊,自己去控制,你不能说为了去呃传输数据,我让这个数据去发生改变,硬凑这个基数个,那肯定是不对的,你数据一变,你这个传输就没有意义了啊,所以呢,我们需要额外的去加一比特。啊,需要额外的去加一比特。嗯,既有校验可以用异或或者计数器啊,这个是没问题的啊,我们这个方法呢,就是用这个,呃,异户或者计数器啊,计数器的话就是属一的个数啊,当这个每伊比特为一,那就计数器加一啊,这种方法也是可以的,那你说异或,那为什么要用异货呢?抑或的由来是什么呢?
61:19
啊,接下来我会给大家去讲一下为什么是易货啊,为什么是易货。什么状态下用季校验,什么时候用偶校验,这个季校验和偶校验,嗯,大家是只要发送方和接收方规定好就可以了,你什么时候都可以啊,都是一样的啊,没什么区别。理论上是没有什么区别的啊,你们就可以啥时候用哪种都可以啊,用哪种都可以。然后啊,接下来的话,我给大家去讲一下啊,有些同学直接就说啊,这个我们直接用易货就行,那么为什么用易货啊,这个这样的一个问题啊。
62:01
如果传输过程中少接受一位。就还能检查吗?那少接接收一位,那数据的位数就不够了啊,数据的位数就不够了,那我们整个的一个过程,嗯,整个的一个接收过程就没法往下进行了。啊,因为我们的接收每一位是个是什么含义,嗯,都是固定的啊,固定的如果你少了一比特,我们这个时序就不满足了,他肯定是不行的啊。少接收一位肯定是不能检查的啊,然后还有一个问题,基校验呢,还有一个缺点就是说如果有偶数位发生错误,你比如说我这两位同时发生错误了。那他的既有经验的结果是不影响的。啊,是不影响的。啊,这是它的一个缺点啊,你说老师既然你这都检查不出来,你为什么要用这种方法呢?啊,其实嗯,在这的话要给大家说一个问题,就是说咱们的串口传输,呃,是用的USB的一个插分线啊进行连接的,然后插分线到板子上之后再转换成这个串口数据,这个过程当中,其实我们的数据发生错误的概率会非常的小啊,非常的小。
63:24
嗯,那可能你传输了好多个巴比特之后,才会有移位发生错误。啊,就是这种情况,所以呢,我们就不再考虑多比特的一个发生错误的这种情况啊,如果说你在传输的时候,每个巴比特都有五位,六位七位都发生错误了,那你说你这个传输还有有这个必要吗?对吧,你总共就传巴比特传过去就错了七位,我感觉这个数也没必要传了,对吧?啊也没必要传了。所以呢,在这儿的话,我们就不再考虑多比特的这种多比特发生错误的情况了啊,所以在这儿的话,我们用基偶校验啊,这种这这这种方法就可以实现,就可以满足我们的要求啊。
64:12
啊,用记数器啊,肯定是没问题的啊,用记数器数一数零都可以啊,都是可以的。那么在这儿的话,我们就给大家呢去介绍一下。啊,就给大家去介绍一下。呃,我们的这个易货啊,到底怎么来。啊,抑或到底怎么来?抑或嗯是怎么来的呢?首先我们,嗯,对于我们来说,看一个数,呃这个。是奇数个还是偶数啊,是奇数还是偶数,我们最简单的方法是什么呢?就是除以二,看能不能除的进对吧?啊看能不能除的进,那其实对于我们这个巴比特数来说,如果说我想知道它里面呃,这个一的个数到底是奇数个还是偶数个,我就可以直接将这个巴比特的每一位进相加,算出来一个和这个和,我看它是奇数还是偶数,就可以知道这个呃,这个。
65:21
八比特数里面一的个数到底是多少个了啊?到底是奇数个还是偶数个了,那么。这样的一个过程呢,算和呃,我们会用到加法器啊,还会用到一个取余啊,取余的话也就是除法对吧,会用到这些运算,这些运算的话,对于我们来说比较浪费资源,比较浪费资源。那么像这种情况的话,我们嗯,可以呢,尽量的去避免一下啊,尽量去避免一下。那怎么去避免呢?啊,怎么去避免呢?啊,我们就用到了一种方法啊,一种方法什么呢?我给大家举个例子啊,嗯,举个例子就是说,嗯。
66:10
23啊,加上49啊,问大家这个和到底是奇数还是偶数啊,这个时候大家会怎么做?假如说我让你计算一个和,这个和的结果呢,是奇数呢,还是偶数呢?啊,这个过程怎么去做呢?怎么去算呢?啊,其实这个问题大家应该呃都都会对吧?啊,小学的小学的数学题,其实这个很简单啊,我们只需要看最后一位就可以了。啊,最后一位加完之后是二,然后进一对吧,我们只要看到末尾是二,那就代表这个和一定是偶数。啊,一定是偶数,它前面是几已经不重要了啊,一定是不重要了,所以呢,我们就可以通过这种方法呢去计算啊去计算,那么问题来了,对于我们二进制来说。
67:11
运算的和的过程是怎么去运算的?啊,我给大家呢,去画一下真值表。零和零,零和一啊,一和零,一和一,总之就是两个伊比特的二进制数相加,总有这四种情况,那么它加完之后的和是0110啊,当然了,这个地方有进位对吧?有进位的话我们不用管啊,有定位的话不用管啊,可以忽略。也就是说咱们前面这个啊,它十位数,它20几是几啊,已经不重要了啊,那么大家会看到这个真知表。跟什么运算的真值表是一样的呢?啊,大家会发现零零得零,一一得零,啊零一得一,110得一,那就会大家会发现就是两个数一样的时候结果为零,不一样的时候为一,那这个是什么运算呢?就是抑或。
68:10
啊,就是易货。啊,就是我们的易货运算。那这个异或运算。啊,有了之后,好了,那我们就知道了,我们让每一位相加,我们只用看它最后一位就行了,最后一位怎么得来,我们就让每一位进行异或运算,就可以得到最后的那一位到底是多少了。啊,这就是这种方法的一个由来啊,这种方法的由来好,那现在的话,我们抑或的结果,如果这个巴比特数里面一的个数为偶数个,那么异或的结果应该是一还是零呢?那这个我们就以实际的应用为例给大家去解释一下,比如说现在的话,咱们就还以这个巴比特为例,还以这个巴比特为例。举个例子,一和零亦或。
69:08
的技能。啊,一和零亦或得一。啊,一和零亦或得一,然后一和一,再抑或呢得零,零和一异或得一。啊,然后这个一呢。再跟零。再跟零一货啊,又得一了,一和零,还得一,一和一,得零,零和零。啊。啊,得零,那大家会发现,如果你这个里面数为偶数个的话,最终的结果等于零,那么为偶数个结果为零,那么你这个价位。算出来的卷位应该发送什么呢?就是发送的就是他们抑或的结果取反。啊,抑或的结果取反就可以了,那如果你抑或的结果为一呢,就说明它里面的个数为。
70:01
奇数格,那么这一位取反之后,这一比特就发送零就可以了啊,就发送零就可以了。这就是我们这个。这个既有卷原位的一个由来吧,啊,大家在做运算的时候,直接每一比特相异货就可以了,假如说我们这个数据是D。啊,那么我们抑或的结果可以怎么写呢?在代码里面我们可以直接写抑或D啊,就这样的话,就是每每一位按位抑或的一个运算啊,运算之后结果取反。啊,运算结果取反得出来的就是我们卷位上的值。啊,得出来的就是我们胶原位上的痣。好,这就是我们发送方的一个操作。啊,发送方的一个操作。然后。啊,然后那么。
71:02
我们接着回到我们的这个。时序上啊,聚完位有了之后,接下来什么呢?接下来就是停止位了啊,接下来就是停止位了,停止位呢,呃,为高电平啊,停止位为高电平。这个高电瓶呢?呃,是多少比特呢?可以是一比特。啊,或者是1.5比特。或者是两比特啊,或者是两比特啊,都是可以的啊,都是可以的,嗯,在咱们的这个。呃,这个呢,也是咱们的上位机啊,这是咱们上位机,在这个设置面板里面,大家可以看到停止位我们是可以自由选择的,一比特一点五两比特都是可以自由选择的啊,这个根据自己的需要,当然了你设置成多少,你的代码里面要有所体现啊,要也要设置成多长时间啊这个。
72:06
是咱们的这个。停止位啊,那到此结束啊,咱们的串口的一个协议就结束了啊,有些地方呢,大家会看到这样的一个,嗯,一个说法啊,就是在停止位之后呢,还有一个空弦位啊,会有一个空弦位。会有一个空前位,这个空前位的话。就是嗯,就是我们在发送之间的话,大家可以理解为就是嗯,我们就会休息一比特时间啊,也可以这样去理解啊,也可以这样去理解啊,这个都是没有什么问题的啊,都是没有什么问题的。这就是我们串口的一个协议啊,串口的一个协议。然后。然后接下来的话,我们来看一下我们的代码到底是怎么来实现的。
73:09
那在这的话,我默认的波特率是9600啊,然后呢,系统时钟是50兆,那么。那么在这儿的话会提到一个会要计算一个次数啊,这个次数什么呢?就是伊比特所需要计数的次数啊,为什么要去计算这个伊比特呢?因为这个速度一旦固定,那么我们每一比特的时长就是固定的,我们要根据这个时长去计算每一比特的中心位置,然后呢,我们要去采样的啊,所以呢,我们要去算这个时间,那在这儿的话有一个波特率,波特率的一个概念需要给大家去解释一下。啊波特率,波特率呢就是嗯,咱们默认的是979600啊它的单位呢是嗯BPS啊BPS是什么意思呢。
74:09
就是比特。嗯。啊,就是嗯,一秒啊多少比特啊,每秒多少比特啊,就是这样的一个含义啊,那9600的话,就意味着是一秒钟发送9600比特啊这样的一个速度。啊,这样的一个速度,那这样的话,我们去计算一下伊比特是多长时间呢?啊,就是一秒9600,那伊比特是多长呢?就拿着一秒钟除以9600就可以了,啊计算出来的时间大概是。这么长啊,计算出来的时间大概是这么长。
75:00
嗯嗯。好,那么。没有什么问题的话。有了这个时间,那么我们就可以知道了,就可以知道我们的这个。嗯,这个计数的次数了啊,你就可以去计算了。嗯。然后这个地方呢,又又去这个,嗯,规定了一个教育方法啊,规定了一个教育方法。嗯。啊,基础校验啊,这个地方基础校验呢,我们规定它是基校验啊,用基校验,用基校验的话,我们假如说规定N等于一的时候,我们就呃就理解为是用的基角验啊,如果N等于零的话,我们就理解为用的是偶焦验啊,是这样的一种含义啊,在这的话给大家注明一下啊,一代表鸡教练啊,零代表偶教练。
76:22
嗯。啊零代表偶教验啊是这样的一种含义啊,那在这的话,那也就是说发送方和接收方。呃,再去。呃,再去这个。嗯,传说再去规定的时候啊,我就用鸡校验了啊,就直接用鸡校验了,当然这个地方大家也用偶教验的话,也没有什么问题啊,这个根据大家自己需要。啊,这个打字是吧,嗯,这个打字确实没有什么好的词啊。
77:00
啊呃,首先的话,接下来我们首先的话需要去计数,这个计数的话,呃,计数的话,嗯,我们呢,是要去从开始的时候到结束一直去计数,那么这样的话,我们就需要有一个标志型号,就是我们的发送什么时候开始,所以这个地方呢,就有了一个flag啊,就有了一个flag。嗯,然后这个flag是怎么来的呢?大家可以看到啊。嗯,只要我的空信号为零,那么我的flag就拉低啊,为什么会有一个空信号呢?这个是怎么来的呢?给大家画一个框图啊。就是说假如说这是咱们的ad。啊,这是咱们的a dad呢,把数据发送给ipga。啊,假如说呃,这个上面命令呢,上位机呢,有一条命令。啊,这个是上位机。
78:00
发一条命令让他,让他这个传输100个数,那么有一个问题就是这100个数我怎么去放,我放哪呢。啊,我就放哪呢,还有另外一个问题,就是说,因为我在这个地方呢,没有做这个开始采样或者是结束采样的这条命令,那么这样的话,那也就是说我的ad是一直工作的,那一直工作的话,那这个数据。我怎么去截取啊,数据怎么去截取啊,那我在这个地方的做法是什么呢?就是ad就一直去采样,采样过来的数据我给到IP ipg呢,把这个数据给他暂存到我的里面。啊,暂存到我的里面。存进去之后啊,当你命令来了之后。啊,我就。把这个里面的数啊开始往外发,那当然了,还有一种方法什么呢?就是它ad采数你就一直采,但是呢,我不收啊,我不要啊,我不往file里面写,当我收到命令了之后,我才把这个对应的100个数往F里面去写。
79:10
啊,给它写进去,写进去之后,那对于我的发送端。啊,对于我的发送端啊,这个是RX啊。我们接收,然后这边呢,有一个发送端。TXTX呢就会做一个工作,就是说他看这个F里面到底有没有数,那有数意味着什么呢?有数就意味着上一期发送命令,而且fpg呢,把数据已经放进去了,那么我的发动端只需要做一个操作,就是把F里面的数据读出来,然后回传到上位机就可以了。啊,回传到上衣就可以了,这是咱们整个的数据采集卡的一个框架啊,这样一个框架,那么咱们ipg的部分,就是这个中间整体的一个部分,这是咱们ipg的一个代码啊。嗯。就是就是咱们需要去写代码的这一部分啊,就是这一块。
80:04
当然了,这个ad是咱们的芯片啊,这边呢,还有ad的驱动需要输出出去啊,这些端口呢,我就不再画了啊,不再画了,就是这样的一个大概的一个框架,那所以呢,呃,这个地方呢,FF就需要给这个发送模块一个空信号啊,这个空信号只要为D就说明里面不空了,不空的话就说明里面有数据了,那么此时咱们的发送模块就开始启动。啊,就是这样的一个过程,所以呢,我在代码里面就有这样的一个体现,空信号如果为零,Flag拉高啊,什么时候结束呢。啊,什么时候结束呢?我的flag你不能一直发呀,对吧,他发到什么时候结束呢?就是我的计数啊,结束为止啊结束为止。那这个发送的时候啊,这个有一个计数,这个计数规,什么是11呢?因为我的数据是11比特的起止位伊比特,停止位伊比特,卷位伊比特,这总共三比特,然后再加上巴比特的数据,总共是11比特,所以在这的话,我数数数十一个数,然后再往下啊,这个就是咱们计数的一个由来啊,你什么时候这个计数器数十一个数,什么时候数呢?就是你在采数的时候去数。
81:19
啊,采数的时候去数啊,什么时候去采数呢?就是在咱们每一比特的中心位置去采数啊,Count是从这个起始位的下阳炎开始计数。再重新给大家画一张图。这是空闲态啊,然后这发送咱们的70位,然后巴比特数据,然后卷位和停止位啊,这一比特的卷位和伊比特的停止位。啊,中间是咱们巴比特的一个数据。啊是这样的一个时序,然后呢,咱们从这个象样炎,因为咱们要用到边缘检测啊,从这个腺炎炎开始去计数啊,每一个每数一个比特记录器清零,每数一个比特记录器清零。
82:04
那当我数记录器记到一半的位置,正好是这一比特的中心位置,所以我就在这个位置去采样就可以了。所以呢,大家会看到我在代码里面看到在T除以二的位置,T除以二的位置就是在一半的位置,我的计数器加一啊计数器加一,你说老师你光让记录器加一不采数嘛,那肯定是要踩的,在什么时候采呢?在下面采的啊,我的采数是在这写的。啊,是在这儿写的啊,大家会看到啊,每一比特啊,每一个比特,每一个计数器啊,都会有对应的操作,都会有对应的操作,因为我们的数据呢,是从低的低位开始发送的,所以这个地方大家一定要注意,咱们在发送数据的时候,要一定要从这个巴比特的最低位开始发送。啊,零的时候优先发送这个,呃,这个。
83:00
骑士位啊。啊,这个应该是零。啊,这个应该是零。先发送这个骑士威啊,先发送骑士威。呃,70位了之后,然后接着往下啊是什么呢?是咱们的巴皮特数据啊,巴比特数据,然后最后的时候,呃,是一个卷位,然后最后的话是停止位啊,最后的话是停止位。啊,然后。呃,然后最后呢,补一个default啊,是这样的一个代码,这个计算方法我刚才也给大家去。计算了啊,运算了啊,这个地方巴比特抑或之后的结果,我这个地方没有取反,是与了一个N啊,与了一个N,那这个余了一个N的话,跟这个取反的效果呢是一样的。啊,是一样的。
84:02
好,那么这个是咱们的发送的一个代码啊,发送的一个代码,嗯,咱们整体的一个主要结构呢,主要的代码就已经给大家说完了啊,主要代码已经说完了,那最后的时候大家需需要做的工作啊,就是什么呢?就是把所有的代码。啊,把所有代码给它利化到一块儿就可以了。这里面呢,还有一个F的一个血控制。这个什么时候往里写呢,我这个地方呢,有一个ad采样结束的一个标志信号。把这个标志信号有效的时候,我就把这个数据这个势能拉高,数据往里往里放就可以了,啊是这样的一个过程。然后最后的时候啊,写一个顶层,把所有的模块例化进来就可以了,啊把所有模块例化进来就可以了,这是咱们的一个整体的一个框架啊,整体的一个框架。
85:04
对,这块是用到了F的IP盒啊,这个是IP盒。嗯,大家可以看一下有没有什么问题啊,稍后的话,我后边的话,我会把这个代码的下版,下版之后的视频啊,单独做一个视频,然后给发出来啊,到时候给大家去演示啊。今天的话时间,呃,马上酒店了啊,咱们今天就不再演示了,后续的话我会单独给大家拿出来啊。嗯,不缺个仿真验证一下,呃,这个仿真呃,大家再去做设计的时候啊,仿真能做就做啊,仿真能做就做,那在这的话,呃,时间关系啊,我这儿就没有这个仿真了啊,其实我我自己是做过仿真的啊,自己是做了仿真的。
86:10
这个是没有问题的啊。嗯。大家以后在做开发的时候啊,养成个好习惯啊。养成个好习惯,就是你不管去做什么样的设计啊,写完代码,编译仿真这些尽量都呃,尽量都不要少啊,不要偷懒。嗯。呃,这个降频的问题,嗯,这个是。没有涉及到这个PL和啊,没有涉及到啊这边。嗯,这边的话咱们就是单纯的用这个系统时钟,然后做分频就可以了。
87:03
啊,用系统始终做分频就可以了,其他的不需要啊。这个只用到F的写拈嘛,呃,这个肯定不止游戏啊,因为咱们去发送的时候要从F里面往外读数去的啊,所以大家会看到有这样的一个控制啊,给大家看一下。这个地方是有一个F的data out的啊,然后这个地方呢,还有一个F的读势能,这个读势能是怎么来的呢?就是我每这个。写完一个数,然后读一个数。写完一个数,读一个数。是这样的一个过程啊。
88:10
啊,大家可以看一下有没有什么其他问题啊。后续如果大家有问题可以在群里这个。互动啊。有问题在群里问就行了。或者说大家有这个。老师的联系方式啊,不管是好老师或者是其他老师,呃,有谁的微信联系方式都可以啊,有问题都可以直接问啊。好,如果大家没有其他问题的话,那么咱们今天的直播就结束了啊。
89:01
稍后的话这个。呃,如果呃,这个有回放啊,但是这个回放的话应该是少了一点啊,就是。刚开始的时候少了一一一一一丁点啊。因为我开这个录制的时候开慢了。后续如果有直播的话,会提前给大家说的啊,会提前给大家说。好,稍后的话我们会把这个嗯录播啊,这个录播的视频给大家发一下啊。有同学在这玩梗了哈。大家可以在群里啊,在各个群里啊,嗯,如果有问题,你们可以加下管理员啊。
90:06
好,那么咱们今天直播就到此结束啊。
我来说两句