精华内容
下载资源
问答
  • ***基本原理***: 通常情况下,程序只能访问自身数据,和其它进程没有沟通,每个进程都是一个单独存在个体,进程之间不需要协作就可以完成自身任务了。但随着需要解决问题复杂性增加,一个进程不可能完成...
    ***基本原理***:
    通常情况下,程序只能访问自身的数据,和其它进程没有沟通,每个进程都是一个单独存在的个体,进程之间不需要协作就可以完成自身的任务了。但随着需要解决问题复杂性的增加,一个进程不可能完成所有的工作,必须由多个进程之间互相配合才能更快、更好、更强的解决问题,如同人与人之间的协作可以做出更大的事情一样。

    但是,处于安全性的考虑,OS会限制进程只能访问自身的数据,不能把“手”伸到其它进程的内部,这怎么办呢?进程间的沟通问题怎么解决呢?

    有问题,就需要沟通;需要沟通,就需要有沟通的媒介;为了公平和公正,沟通的媒介的控制权不应该属于沟通的任何一方。以此推论下去,在计算机系统中,承担沟通媒介控制任务的就只有OS自身了。

    所以,进程间通信的基本原理就是:OS提供了沟通的媒介供进程之间“对话”用。既然要沟通,如同人类社会的沟通一样,沟通要付出时间和金钱,计算机中也一样,必然有沟通需要付出的成本。出于所解决问题的特性,OS提供了多种沟通的方式,每种方式的沟通成本也不尽相同,使用成本和沟通效率也有所不同。我们经常听到的 管道、消息队列、共享内存都是OS提供的供进程之间对话的方式。

    既然是沟通,必然是沟通双方有秩序的说话,否则就成吵架了,谁也听不到对方说什么。如同法庭中法官控制控辩双方的发言时机和发言时间一样,OS也必须提供此类的管制方式使得进程的沟通显的有序和谐。我们经常听到的 互斥锁、条件变量、记录锁、文件锁、信号灯均属此列。

    沟通的媒介是什么? 

    上面我们提到管道、消息队列、共享内存都是OS所提供的对话的方式,进程所说出去的“话”至少需要暂时保存在某个地方,然后才能被别的进程取走(听到)。不同的实现对话方式,保存中间信息的媒介从逻辑上分有文件系统,内核和内存三个部分。其实保存在内核中也是保存在内存中的,只是这部分内存只能OS自己访问,普通进程不能直接读写。

    ***通信方式***:

    经常使用到的进程间通信有:管道、消息队列和共享内存。

    >>>管道
    最开始出现的管道是用于具有血缘关系的进程之间共享数据的。父进程首先创建一个管道,然后再fork()出子进程,子进程自动共享对管道的访问权限。这种管道是没有名字的(只有进程中的一个标识符进行标识),因此也称为匿名管道。
    如我们在shell中运行 ls * | grep foo 时,shell就会创建一个匿名管道,并把ls的stdout重定向到该管道的输入端,把grep的stdin重定向到管道的输出端,ls 的输出就自动的称为grep的输入。这一切对 ls 和 grep 都是透明的,它们并不知道管道的存在。
    后来就出现了FIFO(first in first out),也称为有名管道。有名和无名是针对OS来说的,OS能直接管理到就是有名的,否则就是无名的。FIFO出现后,管道就不仅仅用于具有血缘关系进程的通信了,而是可以用于任意进程之间的通信。
    管道的生命周期是跟随进程的。当所有使用管道的进程退出或者所有进程都显示的调用close()后,管道就会被丢弃掉(其实进程退出等效于调用close(),因为进程退出时所有打开的资源标识符都会被OS关掉)。如果这时候管道中仍然有未读取的数据,这些数据同样被丢弃掉。而且在往管道中写入数据时,必须存在读取数据的进程,不然就没有任何意义了。

    >>>消息队列
    消息队列的作用与管道类似,有足够写权限的进程可往消息队列中放置消息,有足够读权限的的进程可以从消息队列中读取消息。与管道不同的是在某个进程写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。这是因为消息队列的声明周期是跟随内核的。只要内核不删除消息队列,即使进程退出了,消息队列依然是存在的。(不过在现有的OS的实现中,消息队列是通过引用计数的方式记录当前有多少个进程已经打开了自己,所有进程退出时,引用计数为0时,此时OS也会自动的删除消息队列)。

    >>>共享内存
    共享内存也有两种:匿名共享内存和有名共享内存。它们的区别和上面提到的管道和FIFO一样,匿名共享内存只能用于具有血缘关系的进程间通信,有名共享内存则没有此限制。
    共享内存的声明周期也是跟随内核的。与上述两种方式最大的不同在于,使用共享内存沟通的进程之间进行数据交换是不经过系统调用进行进程--内核的数据copy过程的,所有的数据交换都是在内存中完成的。相比于前两种方式,共享内存的方式是速度最快的。

    ***同步方式***:

    为了能够有效的控制多个进程之间的沟通过程,保证沟通过程的有序和和谐,OS必须提供一定的同步机制保证进程之间不会自说自话而是有效的协同工作。比如在共享内存的通信方式中,两个或者多个进程都要对共享的内存进行数据写入,那么怎么才能保证一个进程在写入的过程中不被其它的进程打断,保证数据的完整性呢?又怎么保证读取进程在读取数据的过程中数据不会变动,保证读取出的数据是完整有效的呢?


    常用的同步方式有: 互斥锁、条件变量、读写锁、记录锁(文件锁)和信号灯。


    >>>互斥锁
    顾名思义,锁是用来锁住某种东西的,锁住之后只有有钥匙的人才能对锁住的东西拥有控制权(把锁砸了,把东西偷走的小偷不在我们的讨论范围了)。所谓互斥,从字面上理解就是互相排斥。因此互斥锁从字面上理解就是一点进程拥有了这个锁,它将排斥其它所有的进程访问被锁住的东西,其它的进程如果需要锁就只能等待,等待拥有锁的进程把锁打开后才能继续运行。
    在实现中,锁并不是与某个具体的变量进行关联,它本身是一个独立的对象。进(线)程在有需要的时候获得此对象,用完不需要时就释放掉。
    互斥锁的主要特点是互斥锁的释放必须由上锁的进(线)程释放,如果拥有锁的进(线)程不释放,那么其它的进(线)程永远也没有机会获得所需要的互斥锁。互斥锁主要用于线程之间的同步。
    条件变量
    上文中提到,对于互斥锁而言,如果拥有锁的进(线)程不释放锁,其它进(线)程永远没机会获得锁,也就永远没有机会继续执行后续的逻辑。在实际环境下,一个线程A需要改变一个共享变量X的值,为了保证在修改的过程中X不会被其它的线程修改,线程A必须首先获得对X的锁。现在假如A已经获得锁了,由于业务逻辑的需要,只有当X的值小于0时,线程A才能执行后续的逻辑,于是线程A必须把互斥锁释放掉,然后继续“忙等”。如下面的伪代码所示:

    // get x lock
    while(x <= 0){
    // unlock x ;
    // wait some time
    // get x lock
    }

    // unlock x


      这种方式是比较消耗系统的资源的,因为进程必须不停的主动获得锁、检查X条件、释放锁、再获得锁、再检查、再释放,一直到满足运行的条件的时候才可以。因此我们需要另外一种不同的同步方式,当线程X发现被锁定的变量不满足条件时会自动的释放锁并把自身置于等待状态,让出CPU的控制权给其它线程。其它线程此时就有机会去修改X的值,当修改完成后再通知那些由于条件不满足而陷入等待状态的线程。这是一种通知模型的同步方式,大大的节省了CPU的计算资源,减少了线程之间的竞争,而且提高了线程之间的系统工作的效率。这种同步方式就是条件变量。

    坦率的说,从字面意思上来将,“条件变量”这四个字是不太容易理解的。我们可以把“条件变量”看做是一个对象,一个铃铛,一个会响的铃铛。当一个线程在获得互斥锁之后,由于被锁定的变量不满足继续运行的条件时,该线程就释放互斥锁并把自己挂到这个“铃铛”上。其它的线程在修改完变量后,它就摇摇“铃铛”,告诉那些挂着的线程:“你们等待的东西已经变化了,都醒醒看看现在的它是否满足你们的要求。”于是那些挂着的线程就知道自己醒来看自己是否能继续跑下去了。


    >>>读写锁
    互斥锁是排他性锁,条件变量出现后和互斥锁配合工作能够有效的节省系统资源并提高线程之间的协同工作效率。互斥锁的目的是为了独占,条件变量的目的是为了等待和通知。但是现实世界是很复杂di,我们要解决的问题也是多种多样di.从功能上来说,互斥锁和条件变量能够解决基本上所有的问题,但是性能上就不一定完全满足了。人的无休止的欲望促使人发明出针对性更强、性能更好的同步机制来。读写锁就是这么一个玩意儿。
    考虑一个文件有多个进程要读取其中的内容,但只有1个进程有写的需求。我们知道读文件的内容不会改变文件的内容,这样即使多个进程同时读相同的文件也没什么问题,大家都能和谐共存。当写进程需要写数据时,为了保证数据的一致性,所有读的进程就都不能读数据了,否则很可能出现读出去的数据一半是旧的,一半是新的状况,逻辑就乱掉了。
    为了防止读数据的时候被写入新的数据,读进程必须对文件加上锁。现在假如我们有2个进程都同时读,如果我们使用上面的互斥锁和条件变量,当其中一个进程在读取数据的时候,另一个进程只能等待,因为它得不到锁。从性能上考虑,等待进程所花费的时间是完全的浪费,因为这个进程完全可以读文件内容而不会影响第一个,但是这个进程没有锁,所以它什么也做不了,只能等,等到花儿都谢了。
    所以呢,我们需要一种其它类型的同步方式来满足上面的需求,这就是读写锁。
    读写锁的出现能够有效的解决多进程并行读的问题。每一个需要读取的进程都申请读锁,这样大家互不干扰。当有进程需要写如数据时,首先申请写锁。如果在申请时发现有读(或者写)锁存在,则该写进程必须等待,一直等到所有的读(写)锁完全释放为止。读进程在读取之前首先申请读锁,如果所读数据被写锁锁定,则该读进程也必须等待读锁被释放位置。

    很自然的,多个读锁是可以共存的,但写锁是完全互相排斥的。


    >>>记录锁(文件锁)
    为了增加并行性,我们可以在读写锁的基础上进一步细分被锁对象的粒度。比如一个文件中,读进程可能需要读取该文件的前1k个字节,写进程需要写该文件的最后1k个字节。我们可以对前1k个字节上读锁,对最后1k个自己上写锁,这样两个进程就可并发工作了。记录锁中的所谓“记录”其实是“内容”的概念。使用读写锁可以锁定一部分,而不是整个文件。

    文件锁可以认为是记录锁的一个特例,当使用记录锁锁定文件的所有内容时,此时的记录锁就可以称为文件锁了。


    >>>信号灯
    信号灯可以说是条件变量的升级版。条件变量相当于铃铛,铃铛响后每个挂起的进程还需要自己获得互斥锁并判断所需条件是否满足,信号灯把这两步操作糅合到一起。
    在Posix.1基本原理一文声称,有了互斥锁和条件变量还提供信号灯的原因是:“本标准提供信号灯的而主要目的是提供一种进程间同步的方式;这些进程可能共享也可能不共享内存区。互斥锁和条件变量是作为线程间的同步机制说明的;这些线程总是共享(某个)内存区。这两者都是已广泛使用了多年的同步方式。每组原语都特别适合于特定的问题”。尽管信号灯的意图在于进程间同步,互斥锁和条件变量的意图在于线程间同步,但是信号灯也可用于线程间,互斥锁和条件变量也可用于进程见。应当根据实际的情况进行决定。

    信号灯最有用的场景是用以指明可用资源的数量。比如含有10个元素的数组,我们可以创建一个信号灯,初始值为0.每当有进程需要读数组中元素时(假设每次仅能读取1个元素),就申请使用该信号灯(信号灯的值减1),当有进程需要写元素时,就申请挂出该信号等(信号灯值加1)。这样信号灯起到了可用资源数量的作用。如果我们限定信号灯的值只能取0和1,就和互斥锁的含义很相同了。


    展开全文
  • 串口通信的基本原理详解

    千次阅读 多人点赞 2020-07-01 11:00:01
    串口通信的两种基本方式 异步数据的数据发送过程 异步通信的数据接收过程 9针串口(DB9) TTL与RS232区别 TTL: RS232: 串口通信的数据格式 通讯方式 偶校验与奇校验 停止位 波特率(波特率就是每秒钟...

    目录

     

    串口通信

    串口通信的两种基本方式

    异步数据的数据发送过程

    异步通信的数据接收过程

    9针串口(DB9)

    TTL与RS232区别

    TTL:

    RS232:

    串口通信的数据格式

    通讯方式

    偶校验与奇校验

    停止位

    波特率(波特率就是每秒钟传输的数据位数)

    典型的串口通讯标准


    • 串口通信

    串行接口简称串口,也称串行通信接口(通常指COM接口):是采用串行通信方式的扩展接口。

    • 串口通信的两种基本方式

    1、同步通信(SYNC:synchronous data communication)(有时钟信号来做同步):

    是指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),这样就保证了通信双方在发送和接收数据时具有完全一致的定时关系。

    同步串行通信SPI(是Serial Peripheral Interface 串行外围设备接口简称),SPI总线系统是一种同步串行的外设接口,1它可以是MCU与各种外围设备以串行方式进行通信以交换信息。

    2、异步通信(ASYNC:asynchronous data communication):

    是以字符为单位进行传输的,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。 异步通信中,收发双方取得同步是通过在字符格式中设置起始位和停止位的方法来实现的。具体来说就是,在一个有效字符正式发送之前,发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位至停止位构成一帧。停止位至下一个起始位之间是不定长的空闲位,并且规定起始位为低电平(逻辑值为0),停止位和空闲位都是高电平(逻辑值为1),这样就保证了起始位开始处一定会有一个下跳沿,由此就可以标志一个字符传输的起始。而根据起始位和停止位也就很容易的实现了字符的界定和同步。

    异步串行通信UART(无时钟信号)(Universal Asynchronous Receiver/Transmitter),即通用异步接受/发送。

    UART包含TTL和RS232电平。TTL电平是3.3V的;而RS232是负逻辑电平,它定义+3V~+15V为低电平,而-15~-3为高电平,通常PC机串口与单片机串口通信需要电平转换芯片,例如:MAX232。

    显然,采用异步通信时,发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,可以互不同步。

    • 异步数据的数据发送过程

    发送数据的具体步骤如下:

    1. 初始化后或者没有数据需要发送时,发送端输出逻辑1,可以有任意数量的空闲位;

    2. 当需要发送数据时,发送端首先输出逻辑0,作为起始位;

    3. 接着开始输出数据位,发送端首先输出数据的最低位D0,然后是D1,最后是数据的最高位;

    4. 如果设有奇偶检验位,发送端输出检验位;

    5. 最后,发送端输出停止位(逻辑1);

    6. 如果没有信息需要发送,发送端输出逻辑1(空闲位),如果有信息需要发送,则转入步骤2;

    7. 如果是以232电平发送的,示波器上看到的发送端信号应是上述数据包取反后的结果(负逻辑)。

    • 异步通信的数据接收过程

    在异步通信中,接收端以接收时钟和波特率因子决定每一位的时间长度。下面以波特率因子等于16(接收时钟每16个时钟周期使接收移位寄存器移位一次)为例来说明:

    1. 开始通信,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对接收时钟计数;

    2. 接收端检测到起始位后,隔16个接收时钟对输入信号检测一次,把对应的值作为D0位数据;

    3. 再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据,直到全部数据位都输入;

    4. 检验奇偶检验位;

    5. 接收到规定的数据位个数和校验位之后,通信接口电路希望收到停止位(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志;若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中取出送至数据输入寄存器,若校验错,在状态寄存器中置“奇偶错”标志;

    6. 本帧信息全部接收完,把线路上出现的高电平作为空闲位;

    7. 当信号再次变为低时,开始进入下一帧的检测。
      (PS1:接收时钟和发送时钟与波特率有如下关系:
      f = n × B 这里f 是发送时钟或接收时钟的频率; B 是数据传输的波特(Baud)率; n 称为波特率因子。设发送或接收时钟的周期为Tc,发送一个波形所需要的传输时间为Td,则: Tc = 1/f , Td = 1/B ,得到: Tc = Td /n,从而n代表发送一个波形需要几个时钟周期。 在实际串行通信中,波特率因子可以设定。在异步传送时,n = 1,16,64,常采用n = 16,即发送或接收时钟的频率要比数据传送的波特率高n倍。在同步通信时,波特率因子n必须等于1。
      PS2:波特率与比特率的关系:
      波特率代表1秒钟发送波形的个数,而比特率代表1秒钟发送比特的个数。在采用二进制传输的情况下,发送的波形一共有两种波形,即高电平和低电平,那么一个波形代表一个比特,因此波特率和比特率相等;在采用四进制传输的情况下,发送的波形一共有4种波形,此处假设发送的最高电平为3V,发送00的波形为0V,发送01的波形为1V,发送10的波形为2V,发送11的波形为3V,那么一个波形代表两个比特,因此比特率是波特率的两倍;同理,在采用八进制传输的情况下,比特率是波特率的三倍,以此类推。)

    • 9针串口(DB9)

    1:DCD 载波检测

    2:RXD 接受数据(方向:始终从终端到计算机)

    3:TXD 发送数据(方向:始终从计算机到终端)

    4:DTR 数据终端准备好

    5:GND 地线信号

    6:DSR 数据准备好

    7:RTS 请求发送

    8: CTS 清除发送

    9:RI      振铃指示

    •  TTL与RS232区别

    •  TTL:

    TLL(Transistor-Transistor Logic,晶体管-晶体管逻辑),TTL电平即TTL电路输出的电平,TTL电路的工作电压是5V,它的输出可以是高电平(3.6V)或者低电平(0.3V)。由于电平是一个连续变化的电压范围,为了用这种模拟量的电压来表示数字量的逻辑1和逻辑0,TTL电平规定:

    对于输出电路:电压大于等于(≥)2.4V为逻辑1;电压小于等于(≤)0.4V为逻辑0;

    对于输入电路:电压大于等于(≥)2.0V为逻辑1;电压小于等于(≤)0.8V为逻辑0;

    逻辑高电平==’1‘==Vcc==3.3V或5V

    逻辑低电平==’0‘==0V==0V

    • RS232:

    S232是美国电子工业协会于1962年发布的串行通信接口标准,RS即Recomend Standard,推荐标准,232为标示号。该标准对串行通信的物理接口及逻辑电平都做了规定。最简单的RS232通信由三条数据线组成,即TXD、RXD和GND。RS232采用负逻辑电平,即-15V~-3V代表逻辑"1",+3V~+15V代表逻辑"0"。这里的电平,是TXD线(或者RXD线)相对于GND的电压。

    逻辑高电平==’0‘==负电压== -3V~-25V==常为:-13V

    逻辑低电平==’1‘==正电压== 3V~25V==常为:13V

    • 串口通信的数据格式

     一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以“起始位”开始,以“停止位”结束,字符之间没有固定的时间间隔要求。
        每一个字符的前面都有一位起始位(低电平),字符本身由7位数据位组成,接着字符后面是一位校验位(检验位可以是奇校验、偶校验或无校验位),最后是一位或一位半或二位停止位,停止位后面是不定长的空闲位,停止位和空闲位都规定为高电平。实际传输时每一位的信号宽度与波特率有关,波特率越高,宽度越小,在进行传输之前,双方一定要使用同一个波特率设置。

     

    1. 起始位,一般为低电平;

    2. 数据位(Data Bits):起始位之后就是传送数据位。数据位一般为8位一个字节的数据(也有6位、7位的情况),标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位),低位(LSB)在前,高位(MSB)在后;

    3. 奇偶校验位可有可无,如果没有则表示不采用校验,有则表示加入校验;

    4. 停止位,一般位高电平。

    • 通讯方式

    1.  单工模式(Simplex Communication)的数据传输是单向的。通信双方中,一方固定为发送端,一方则固定为接收端。信息只能沿一个方向传输,使用一根传输线。

    2. 半双工模式(Half Duplex)通信使用同一根传输线,既可以发送数据又可以接收数据,但不能同时进行发送和接收。数据传输允许数据在两个方向上传输,但是,在任何时刻只能由其中的一方发送数据,另一方接收数据。因此半双工模式既可以使用一条数据线,也可以使用两条数据线。半双工通信中每端需有一个收发切换电子开关,通过切换来决定数据向哪个方向传输。因为有切换,所以会产生时间延迟,信息传输效率低些。

    3. 全双工模式(Full Duplex)通信允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。在全双工模式中,每一端都有发送器和接收器,有两条传输线,信息传输效率高。

    4. 显然,在其它参数都一样的情况下,全双工比半双工传输速度要快,效率要高。

    • 偶校验与奇校验

    在标准ASCII码中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

    • 停止位

    停止位是按长度来算的。串行异步通信从计时开始,以单位时间为间隔(一个单位时间就是波特率的倒数),依次接受所规定的数据位和奇偶校验位,并拼装成一个字符的并行字节;此后应接收到规定长度的停止位“1”。所以说,停止位都是“1”,1.5是它的长度,即停止位的高电平保持1.5个单位时间长度。一般来讲,停止位有1,1.5,2个单位时间三种长度。

    • 波特率(波特率就是每秒钟传输的数据位数)

    波特率的单位是每秒比特数(bps),常用的单位还有:每秒千比特数Kbps,每秒兆比特数Mbps。串口典型的传输波特率600bps,1200bps,2400bps,4800bps,9600bps,19200bps,38400bps。

    PLC/PC与称重仪表通讯时,最常用的波特率是9600bps,19200bps。PLC/PC或仪表与大屏幕通讯时,最常用的波特率是600bps。

    • 典型的串口通讯标准

    1. EIA RS232(通常简称“RS232”): 1962年由美国电子工业协会(EIA)制定。

    2. EIA RS485(通常简称“RS485”): 1983年由美国电子工业协会(EIA)制定。


     

     

    展开全文
  • 通信的基本原理

    2008-01-17 15:43:00
    2006-04-23 21:43:04 扩频通信的基本原理所谓扩展频谱通信,可简单表述如下:“扩频通信技术是一种信息传输方式,其信号所占有的频带宽度远大于所传信息必需的最小带宽;频带的扩展是通过一个独立的码序列...
    2006-04-23 21:43:04

    字体变小字体变大
    扩频通信的基本原理
    所谓扩展频谱通信,可简单表述如下:“扩频通信技术是一种信息传输方式,其信号所占有的频带宽度远大于所传信息必需的最小带宽;频带的扩展是通过一个独立的码序列来完成,用编码及调制的方法来实现的,与所传信息数据无关;在接收端则用同样的码进行相关同步接收、解扩及恢复所传信息数据”。

      扩频通信的基本特点,是传输信号所占用的频带宽度(W)远大于原始信息本身实际所需的最小带宽(B),其比值称为处理增益(Gp):

      总之,我们用扩展频谱的宽带信号来传输信息,就是为了提高通信的抗干扰能力,即在强干扰条件下保证可靠安全地通信。这就是扩展频谱通信的基本思想和理论依据。

    一、扩频通信系统的主要优点

      ●易于重复使用频率,提高了无线频谱利用率

      ●抗干扰性强,误码率低。扩频通信在空间传输时所占有的带宽相对较宽,而接收端又采用相关检测的办法来解扩,使有用宽带信息信号恢复成窄带信号,而把非所需信号扩展成宽带信号,然后通过窄带滤波技术提取有用的信号。这祥,对于各种干扰信号,因其在收端的非相关性,解扩后窄带信号中只有很微弱的成份,信噪比很高,因此抗干扰性强。

      ●保密性好,对各种窄带通信系统的干扰很小。由于扩频信号在相对较宽的频带上被扩展了,单位频带内的功率很小,信号湮没在噪声里,一般不容易被发现,而想进一步检测信号的参数(如伪随机编码序列)就更加困难,因此说其保密性好。

      ●可以实现码分多址。扩频通信提高了抗干扰性能,代价是占用频带宽。但是如果许多用户共用这一宽频带,则可提高频带的利用率。由于在扩频通信中存在扩频码序列的扩频调制,充分利用各种不同码型的扩频码序列之间优良的自相关特性和互相关特性,在接收端利用相关检测技术进行解扩,则在分配给不同用户码型的情况下可以区分不同用户的信号,提取出有用信号。这样在这一频带上许多对用户可以同时通话而互不干扰。

      ●抗多径干扰。在无线通信中,长期以来,多径干扰始终是一个难以解决的问题之一。在扩频通信中利用扩频码的自相关特性,在接收端从多径信号中提取和分离出最强的有用信号,或把多个路径来的同一码序列的波形相加合成,都可以起到抗多径干扰的作用。

    按照扩展频谱的方式不同,现有的扩频通信系统可以分为以下几种:

      ●直接序列扩频。直接序列扩频(Direct Sequence Spread Spectrum)工作方式,简称直扩(DSSS)方式。所谓直接序列扩频,就是直接用具有高码率的扩频码序列在发端去扩展信号的频谱。而在接收端,用相同的扩频码序列去进行解扩,把展宽的扩频信号还原成原始的信息。

      ●跳频(Frequency Hopping)。另外一种扩展信号频谱的方式称为跳频(FH-Frequency Hopping)。所谓跳频,比较确切的意思是:用一定码序列进行选择的多频率频移键控。也就是说,用扩频码序列去进行频移键控调制,使载波频率不断地跳变,所以称为跳频。

      ●跳时(Time Hopping)。与跳频相似,跳时(TH-Time Hopping)是使发射信号在时间轴上跳变。首先把时间轴分成许多时片。在一帧内哪个时片发射信号由扩频码序列去进行控制。可以把跳时理解为:用一定码序列进行选择的多时片的时移键控。由于采用了窄得很多的时片去发送信号,相对说来,信号的频谱也就展宽了。

      ●宽带线性调频(Chirp Modulation)。宽带线性调频工作方式,简称Chirp方式。如果发射的射频脉冲信号在一个周期内,其载频的频率作线性变化,则称为线性调频。

    二、直接序列扩频系统

      与一般模拟或数字通信系统比较,直接序列扩频在信息识别与解调、射频的上变频和下变频情况基本相同。直扩通信系统的主要特点在于直扩信号的产生,即扩频调制和直扩信号的接收,即相关解扩。

      扩频调制是用高码率的PN码脉冲序列来进行调制从而扩展信号的频谱的。通常采用的调制方式为BPSK,输入信号与PN码在平衡调制器调制而输出展宽的扩频信号。

      直扩系统在发端用PN码进行调制以扩展信号频谱。在收端一般采用相关检测或匹配滤波的方法来解扩。所谓相关检测,一个简单的譬喻就是用像片去对照找人。如果想在一群人中去寻找某个不相识的人,最简单有效的方法就是手里有一张某人的照片,然后用照片一个一个的对比,这样下去,自然能够找到某人。同理,当你想检测出所需要的有用信号,有效的方法是在本地产生一个相同的信号,然后用它与接收到的信号对比,求其相似性。换句话说,就是用本地产生的相同的信号与接收到的信号进行相关运算,其中相关函数最大的就最可能是所要的有用信号。

      相关解扩在性能上固然很好,但是需要在接收端产生本地PN码。这一点有时带来许多不方便。例如,解决本地信号与接收信号的同步问题就很麻烦,还不能做到实时把有用信号检测出来。因为匹配滤波和相关检测的作用在本质上是一样的,我们可以用匹配滤波器来解扩直扩信号。

      所谓匹配滤波器,就是与信号相匹配的滤波器,它能在多种信号或干扰中把与之匹配的信号检测出来。这同样是一种“用相片找人”的方法。对于视频矩形脉冲序列来说,无源匹配滤波器就是抽头延迟线上加上加法累加器。

    三、跳频系统

      我们通常接触到的无线通信系统都是载波频率固定的通信系统,如移动电话等,所以也称作定频通信。这种定频通信系统,一旦受到干扰就将使通信质量下降,严重时甚至使通信中断。

      另外在敌我双方的通信对抗中,敌方企图发现我方的通信频率,以便于截获所传送的信息内容,或者发现我方通信机所在的方位。定频通信系统容易暴露目标且易于被截获,这时,采用跳频通信就比较隐蔽也难以被截获。

      因此,跳频通信具有抗干扰、抗截获的能力,并能作到频谱资源共享。所以在当前现代化的电子战中跳频通信已显示出巨大的优越性。另外,跳频通信也应用到民用通信中以抗衰落、抗多径、抗网间干扰和提高频谱利用率。

      为了不让敌方知道我们通信使用的频率,需要经常改变载波频率,即对载波频率进行跳变,跳频通信中载波频率改变的规律,叫跳频图案。

      定频信号的接收设备中,一般都采用超外差式的接收方法,即接收机本地振荡器的频率比所接收的外来信号的载波频率相差一个中频,经过混频后产生一个固定的中频信号和混频产生的组合波频率成分。经过中频带通滤波器的滤波作用,滤除组合波频率成分,而使中频信号进入解调器。解调器的输出就是所要传送给收端的信息。

      跳频信号的接收,其过程与定频相似。为了保证混频后获得中频信号,要求频率合成器的输出频率要比外来信号高出一个中频。因为外来的信号载波频率是跳变的,则要求本地频率合成器输出的频率也随着外来信号的跳变规律而跳变,这样才能通过混频获得一个固定的中颇信号。

      跳频器是跳频系统的关键部件,而跳频同步则是跳频系统的核心技术。跳频系统的同步包括以下几项内容:

      ●收端和发端产生的跳频图案相同,即有相同的跳频规律。

      ●收、发端的跳变频率应保证在接收端产生固定的中频信号,即跳变的载波频率与收端产生的本地跳变频率相差一个中频。

      ●频率跳变的起止时刻在时间上同步,即同步跳变,或相位一致。

      ●在传送数字信息时,还应做到帧同步和位同步。   

    四、PN码

      PN码也称伪随机序列。它具有近似随机序列(噪声)的性质,而又能按一定规律(周期)产生和复制的序列。因为随机序列是只能产生而不能复制的,所以称其是“伪”的随机序列。常用的伪随机序列有m序列、M序列和R-S序列。

      m序列发生器由带反馈的m级移位寄存器构成,其中由若干级经过模二加反馈到第一级。它产生的序列最大长度(周期)是2n-1位,共有2m种不同的状态,其中一种是全“0”状态。只有当反馈逻辑满足某种条件时,移位寄存器输出的序列长度才是2n-1位,达到最大的长度。否则产生的序列就达不到2n-1位那样长。所以也把m序列叫作最大长度线性移位寄存器序列。又称为最大移位寄存器序列。

      如果反馈逻辑中的运算含有乘法运算或其他逻辑运算,则称作非线性反馈逻辑。由非线性反馈逻辑和移位寄存器构成的序列发生器所能产生最大长度序列,就叫作最大长度非线性移位寄存器序列,或叫作M序列,M序列的最大长度是2n。
    展开全文
  • 【STM32】串口通信基本原理(超基础、详细版)

    万次阅读 多人点赞 2018-04-12 13:26:02
    设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。它们的区别是: 并、串行通信的区别 并行通信 串行通信 传输原理 数据各个位同时传输 数据按位顺序传输 ...

    STM32F1xx官方资料:

    《STM32中文参考手册V10》-第25章通用同步异步收发器(USART)

     

    通信接口背景知识

    设备之间通信的方式

    一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。它们的区别是:

    并、串行通信的区别
      并行通信 串行通信
    传输原理 数据各个位同时传输 数据按位顺序传输
    优点 速度快 占用引脚资源少
    缺点 占用引脚资源多 速度相对较慢

    串行通信的分类

    1、按照数据传送方向,分为:

    • 单工:数据传输只支持数据在一个方向上传输;
    • 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口
    • 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端

    2、按照通信方式,分为:

    • 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口。
    • 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线。

    在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。

    在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些用于同步的信号位,或者将主题数据进行打包,以数据帧的格式传输数据。通讯中还需要双方规约好数据的传输速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。

    在同步通讯中,数据信号所传输的内容绝大部分是有效数据,而异步通讯中会则会包含数据帧的各种标识符,所以同步通讯效率高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大。

    常见的串行通信接口

     

    常见的串行通信接口
    通信标准 引脚说明 通信方式 通信方向

    UART

    (通用异步收发器)

    TXD:发送端

    RXT:接收端

    GND:共地

    异步通信 全双工

    1-wire

    (单总线)

    DQ:发送/接收端 异步通信 半双工
    SPI

    SCK:同步时钟

    MISO:主机输入,从机输出

    MOSI:主机输出,从机输入

    同步通信 全双工
    I2C

    SCK:同步时钟

    SDA:数据输入/输出端

    同步通信 半双工

     

    STM32串口通信基础

    STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。而对于大容量STM32F10x系列芯片,分别有3个USART和2个UART。

    UART引脚连接方法

    • RXD:数据输入引脚,数据接受;
    • TXD:数据发送引脚,数据发送。

    对于两个芯片之间的连接,两个芯片GND共地,同时TXD和RXD交叉连接。这里的交叉连接的意思就是,芯片1的RxD连接芯片2的TXD,芯片2的RXD连接芯片1的TXD。这样,两个芯片之间就可以进行TTL电平通信了

    若是芯片与PC机(或上位机)相连,除了共地之外,就不能这样直接交叉连接了。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。故,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。

    经过电平转换后,芯片串口和rs232的电平标准是不一样的:

    • 单片机的电平标准(TTL电平):+5V表示1,0V表示0;
    • Rs232的电平标准:+15/+13 V表示0,-15/-13表示1。

    RS-232通讯协议标准串口的设备间通讯结构图如下: 

    所以单片机串口与PC串口通信就应该遵循下面的连接方式:在单片机串口与上位机给出的rs232口之间,通过电平转换电路(如下面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换。

    具体要了解RS232串口的,可以查看链接RS232串口简介

    STM32的UART特点

    • 全双工异步通信
    • 分数波特率发生器系统,提供精确的波特率。发送和接受共用的可编程波特率,最高可达4.5Mbits/s;
    • 可编程的数据字长度(8位或者9位);
    • 可配置的停止位(支持1或者2位停止位);
    • 可配置的使用DMA多缓冲器通信
    • 单独的发送器和接收器使能位
    • 检测标志:① 接受缓冲器  ②发送缓冲器空 ③传输结束标志;
    • 多个带标志的中断源,触发中断
    • 其他:校验控制,四个错误检测标志。

     

    串口通信过程

    STM32中UART参数

    串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口,通讯双方的数据包格式要规约一致才能正常收发数据。STM32中串口异步通信需要定义的参数:起始位、数据位(8位或者9位)、奇偶校验位(第9位)、停止位(1,15,2位)、波特率设置。

    UART串口通信的数据包以帧为单位,常用的帧结构为:1位起始位+8位数据位+1位奇偶校验位(可选)+1位停止位。如下图所示:

    奇偶校验位分为奇校验和偶校验两种,是一种简单的数据误码校验方法。奇校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为奇数;偶校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为偶数。

    校验方法除了奇校验(odd)、偶校验(even)之外,还可以有:0 校验(space)、1 校验(mark)以及无校验(noparity)。 0/1校验:不管有效数据中的内容是什么,校验位总为0或者1。

    UART(USART)框图

    这个框图分成上、中、下三个部分。本文大概地讲述一下各个部分的内容,具体的可以看《STM32中文参考手册》中的描述。

    框图的上部分,数据从RX进入到接收移位寄存器,后进入到接收数据寄存器,最终供CPU或者DMA来进行读取;数据从CPU或者DMA传递过来,进入发送数据寄存器,后进入发送移位寄存器,最终通过TX发送出去。

    然而,UART的发送和接收都需要波特率来进行控制的,波特率是怎样控制的呢?

    这就到了框图的下部分,在接收移位寄存器、发送移位寄存器都还有一个进入的箭头,分别连接到接收器控制、发送器控制。而这两者连接的又是接收器时钟、发送器时钟。也就是说,异步通信尽管没有时钟同步信号,但是在串口内部,是提供了时钟信号来进行控制的。而接收器时钟和发送器时钟有是由什么控制的呢?

    可以看到,接收器时钟和发送器时钟又被连接到同一个控制单元,也就是说它们共用一个波特率发生器。同时也可以看到接收器时钟(发生器时钟)的计算方法、USRRTDIV的计算方法。

    这里需要知道一个知识点:

    • UART1的时钟:PCLK2(高速);
    • UART2、UART3、UART4的时钟:PCLK1(低速)。

    框图的中部分,涉及到UART(USART)的中断控制部分,在后面的文章中会具体介绍到。

     

    展开全文
  • 通信涉及两个很重要方面, 1.对发送方而言是信息表示方法,对接收方而言就是解析方法, 2.信息发送方法,即如何在传输介质上进行有效传输, 同步和异步, 是否有统一时钟, 同步需要一个专门...
  • 通信涉及两个很重要方面, 1.对发送方而言是信息表示方法,对接收方而言就是解析方法, 2.信息发送方法,即如何在传输介质上进行有效传输, 同步和异步, 是否有统一时钟, 同步需要一个专门...
  • 串口通信基本原理

    千次阅读 2017-05-04 10:48:05
    1、参考资料  《STM32F1开发指南-库函数版本》- 5.3 usart串口文件夹介绍  -第9章 串口实验  《STM32中文参考手册V10》-第25章通用同步异步收发器(USART) ... ·处理器与外部设备通信的两种方式:  ·并行
  • 1.授时系统的基本原理  在授时中心,由原子钟产生精确的标准时间,然后对时间信息进行编码,编码后的时间信号通过调制器调制到低频载波上(JJY/4OkHz, ASk) ,以无线电长波发射出去,见图 1。 图1发射如...
  • 前面几节介绍了相干解调几个基本概念,下来结合一个实际的通信系统,从实际应用出发深入理解载波同步的概念。载波同步是基于锁相环技术使本地获取和载波同频同相参考信号,用来解调信号。 载波同步就是对本地...
  • 这几天学了socket通信,socket氛围同步通信和异步通信,今天先谈下同步通信,下一篇再来说异步通信,于异步通信而言,同步... 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网...
  • 以下将以Dubbo实现为例介绍其是如何在NIO非阻塞通信基础上实现同步通信的。 Dubbo为一种RPC通信框架,提供进程间的通信,在使用dubbo协议+Netty作为传输层时,提供三种API调用方式: 同步接口 异步带回调接口 ...
  • 让文化·去旅行点击上方蓝...是具备总线仲裁和高地速设备同步等功能高性能多主机总线。直接用导线连接设备,通信时无需片选信号。 IIC总线有如下操作模式:主发送模式、主接受模式、从发送模式、从接受模式。2.通...
  • 1.音视频同步简单介绍对于一个播放器,一般来说,其基本构成均可划分为以下几部分:数据接收(网络/本地)->解复用->音视频解码->音视频同步->音视频输出。基本框架如下图所示:为什么需要音视频同步?...
  • 通信原理

    2014-01-13 14:39:47
    通信系统作为一个实际系统,是为了满足社会与...本课程教学的重点是介绍数字通信系统中各种通信信号的产生、传输和解调的基本理论和方法,使学生掌握和熟悉通信系统的基本理论和分析方法,为后续课程打下良好的基础。
  • 本文要说明在一个网络范例内IEEE1588和运动的基本操作。  分散运动控制要求系统节点之间紧密地同步,通常这要求在系统内时钟间的波动是微秒数量级。更高性能的应用驱动将这个性能提高到几分一微秒范围。当前的解决...
  • 前言: RS-232标准接口是计算机常用的串行通信... RS232实现离散字符串通信的基本需求框架 三. RS232实现离散字符串通信的软硬件架构 四. RS232实现离散字符串通信的通信原理模型 五. 信源对信息的发送过程 六. 信
  • 摘要:介绍了脉冲混沌同步的基本原理,提出了基于脉冲同步的一般化混沌保密通信系统。针对该系统存在的传输时间帧拥堵问题,提出一种“信息感应”脉冲同步系统。该系统中有用信息被嵌入在发射端的同步脉冲里,在接收...
  •  I2C采用的是主从式通信方式,通信的过程完全由主设备决定。通讯的起始信号和终止信号都由主设备发送。 起始信号:在SCL时钟信号在高电平期间,SDA信号产生一个下降沿,起始之后SDA和SCL都为0。 1 void I2...
  • 串行通信方式STM32串口通信接口UART:通用异步收发器USART:通用同步异步收发器大容量STM32F10x系列芯片,包含3个USART和2个UARTUART异步通信方式引脚连接方法:UART异步通信方式特点:全双工异步通信。分数波特率...
  • 一、串口通信协议简介 串口通信指串口按位(bit)发送和接收字节。...二、串口通信协议原理 串口在嵌入式系统当中是一类重要数据通信接口,其本质功能是作为 CPU 和串行设备间编码转换器。当数据从 CPU 经过
  • 今天给大家概要讲述一下常见串行通信及相关基础原理 包含:UART、 I²C、 SPI、 CAN、 USB等。 2、基本概念 2.1 UART UART:Universal Asynchronous Receiver/Transmitter,通用异步收发器 USART:...
  • STM32串口通信 通信方式 一、同步通信、异步通信 同步通信 通信中双方使用频率一致时钟 异步通信 通信中接收方并不知道数据什么时候...并行通讯中,基本原理与串行通讯没有区别。只不过使用了成倍信号线路,从
  • 绍了脉冲混沌同步的基本原理,提出了基于脉冲同步的一般化混沌保密通信系统。针对该系统存在的传输时间帧拥堵问题,提出一种“信息感应”脉冲同步系统。该系统中有用信息被嵌入在发射端的同步脉冲里,在接收端再通过...
  • 话不多说,趁着寒假空闲时间复习专业课为夏令营做准备~~绪论通信原理一般要从通信系统的基本模型说起,又分为模拟通信系统模型和数字通信系统模型,这里以数字通信系统模型为例展示其流程图,有时还可能包含加密与...
  • 前提:一个进程至少有一个线程...合作,就需要交流信息和共享信息,这,就是线程之间进行通信的基本诉求。 Q2:线程之间利用什么来实现通信? A: (1)、管道  管道可以想向成有线电话,人
  • 基本概念 8、Peterson算法。 13、哲学家进餐问题: 14、读者-写者问题 15、简单生产者--消费者问题 16、复杂生产者--消费者问题: 练习题: 基本概念 1、两种形式制约关系:在多道程序环境下,当程序...
  • 面试题 —— Ajax的基本原理总结

    万次阅读 多人点赞 2018-08-13 11:11:47
    前两天面试的时候,面试官问我,你掌握的技能是Ajax,那你给我讲一下它的基本原理吧! 妈呀,瞬间脑子空白。当时在门口背了好久的网络知识点,一时竟然说不吃话,只记得什么异步通信同步数据,面试官的笑让我...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 508
精华内容 203
关键字:

同步通信的基本原理