精华内容
下载资源
问答
  • Xmodem

    千次阅读 2012-06-18 18:29:21
     Xmodem协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。...如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。然而,这种对每

    转自:http://blog.sina.com.cn/s/blog_6dbbd41a0100tce4.html

        Xmodem协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。然而,这种对每个块都进行认可的策略将导致低性能,特别是具有很长传播延迟的卫星连接的情况时,问题更加严重。
        使用循环冗余校验的与Xmodem相应的一种协议称为Xmodem-CRC。还有一种是Xmodem-1K,它以1024字节一块来传输数据。Zmodem是最有效的一个Xmodem版本,它不需要对每个块都进行认可。事实上,它只是简单地要求对损坏的块进行重发。Zmodem对按块收费的分组交换网络是非常有用的。不需要认可回送分组在很大程度上减少了通信量。
        Ymodem也是一种Xmodem的实现。它包括Xmodem-1K的所有特征,另外在一次单一会话期间为发送一组文件,增加了批处理文件传输模式。

     

        Xmodem协议相关控制字符:
        SOH             0x01
        STX             0x02
        EOT             0x04
        ACK             0x06
        NAK             0x15
        CAN             0x18
        CTRLZ           0x1A

        标准Xmodem协议帧格式(每个数据包含有128字节数据)

     ______________________________________________________________
    |     |            |                   |          |            |
    | SOH | 信息包序号 |  信息包序号的补码 | 数据区段 |  校验和    |
    |_____|____________|___________________|__________|____________|

        1k-Xmodem帧格式(每个数据包含有1024字节数据)

     ______________________________________________________________
    |     |            |                   |          |            |
    | STX | 信息包序号 |  信息包序号的补码 | 数据区段 |  校验和    |
    |_____|____________|___________________|__________|____________|


    说明:

      SOH: 帧的开头字节,代表信息包中的第一个字节;

      信息包序号: 对 256 取模所得到当前包号,第一个信息包的序号为 1 ,而信息包序号范围 0~255;

      信息包序号的补码: 当前信息包号的补码;

      数据区段: 数据区段的长度固定为 128 字节;

        校验和: 1字节的算术校验和,只对数据区段计算后对 256 取模而得。

     

    数据包说明

        对于标准Xmodem协议来说,如果传送的文件不是128的整数倍,那么最后一个数据包的有效内容肯定小于帧长,不足的部分需要用CTRL-Z(0x1A)来填充。如果传送的是bootloader工程生成的.bin文件,mcu收到后遇到0x1A字符会怎么处理?其实如果传送的是文本文件,那么接收方对于接收的内容是很容易识别的,因为CTRL-Z不是前128个ascii码,不是通用可见字符,如果是二进制文件,mcu其实也不会把它当作代码来执行。哪怕是excel文件等,由于其内部会有些结构表示各个字段长度等,所以不会读取多余的填充字符。对于1k-Xmodem,同上理。

    启动传输
        传输由接收方启动,方法是向发送方发送"C"或者NAK(这里提到的NAK是用来启动传输的,它也可用来对数据产生重传的机制)。接收方发送NAK信号表示接收方打算用累加和校验;发送字符"C"则表示接收方想打算使用CRC校验。

    传输过程

        当接收方发送的第一个"C"或者NAK到达发送方,发送方认为可以发送第一个数据包,传输已经启动。发送方接着应该将数据以每次128字节的数据加上包头,包号,包号补码,末尾加上校验和,打包成帧格式传送。

        发送方发了第一包后就等待接收方的确认字节ACK,收到接收方传来的ACK确认,就认为数据包被接收方正确接收,并且接收方要求发送方继续发送下一个包;如果发送方收到接收方传来的NAK(这里,NAK用来告诉发送方重传,不是用来启动传输)字节,则表示接收方请求重发刚才的数据包;如果发送方收到接收方传来的CAN字节,则表示接收方请求无条件停止传输。

    结束传输

        如果发送方正常传输完全部数据,需要结束传输,正常结束需要发送方发送EOT 字节通知接收方。接收方回以ACK进行确认。当然接收方也可强制停止传输,当接收方发送CAN 字节给发送方,表示接收方想无条件停止传输,发送方收到CAN后,不需要再发送 EOT确认。

    特殊处理
        虽然数据包是以 SOH 来标志一个信息包的起始的,但在 SOH 位置上如果出现EOT则表示数据传输结束,再也没有数据传过来。接收方首先应确认数据包序号的完整性,通过对数据包序号取补,然后和数据包序号的补码异或,结果为0表示正确,结果不为0则发送NAK请求重传。

        接收方确认数据包序号正确后,然后检查是否期望的序号。如果不是期望得到的数据包序号,说明发生严重错误,应该发送一个 CAN 来中止传输。如果接收到的数据包的包序号和前一包相同,那么m收方会忽略这个重复包,向发送方发出 ACK ,准备接收下一个包。
        接收方确认了信息包序号的完整性和是正确期望的后,只对 128 字节的数据区段进行算术和校验,结果与帧中最后一个字节(算术校验和)比较,相同发送 ACK,不同发送 NAK。

    展开全文
  • 在通信过程中,接收方根据自己接收缓存的大小,动态地调制发送方的发送串口大小,即接受窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接受窗口rwnd和拥塞串口cwnd的最小值。...

    TCP流量控制

    流量控制:让发送方慢点,要让接收方来得及接受。

    TCP利用滑动窗口机制实现流量控制。

    在通信过程中,接收方根据自己接收缓存的大小,动态地调制发送方的发送串口大小,即接受窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接受窗口rwnd和拥塞串口cwnd的最小值。
    在这里插入图片描述

    笔记总结于王道网课,图片截取自视频,希望对大家有所帮助!

    展开全文
  • 如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。然而,这种对每个块都进行认可的策略将导致低性能,特别是具有很长传播延迟的卫星连接的情况时,问题更加严重

    首先介绍xmodel协议:

    XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。

    如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。然而,这种对每个块都进行认可的策略将导致低性能,特别是具有很长传播延迟的卫星连接的情况时,问题更加严重。

      使用循环冗余校验的与XMODEM相应的一种协议称为XMODEM-CRC。还有一种是XMODEM-1K,它以1024字节一块来传输数据。ZMODEM是最有效的一个XMODEM版本,它不需要对每个块都进行认可。事实上,它只是简单地要求对损坏的块进行重发。ZMODEM对按块收费的分组交换网络是非常有用的。不需要认可回送分组在很大程度上减少了通信量。
      YMODEM也是一种XMODEM的实现。它包括XMODEM-1K的所有特征,另外在一次单一会话期间为发送一组文件,增加了批处理文件传输模式。

    帧格式

      | SOH | 信息包序号 | 信息包序号的反码 | 数据区段 | 算术校验和 |
      |_____|________ _|________________|________|__________|
      说明:
      SOH 帧的开头字节,代表信息包中的第一个字节
      信息包序号: 对 256 取模所得到当前包号,第一个信息包的序号为 1
      而信息包序号范围 0~255
      信息包序号的反码: 当前信息包号的反码
      数据区段: 数据区段的长度固定为 128 字节,其内容没有任何限制,可以是
      文本数据或二进制数据
      算术校验和: 1字节的算术校验和,只对数据区段计算后对 256 取模而得

    2。 传输逻辑

      1> 收发双方拨号连通后,发送方等待接收方传来 NAK 信号。当第一个 NAK 到达,
      发送方解释为 开始发送第一个包
      2> 发送方一旦收到第一个 NAK ,启动了传输,发送方就将数据以每次 128 字节
      打包成帧格式传送,再等待接收方的确认信号
      3> 发送方收到接收方传来的 ACK 信号,解释为信息包被正确接收,并有发送下一
      个包的含义
      4> 发送方收到接收方传来的 NAK 信号,解释为请求重发同一数据包
      5> 发送方收到接收方传来的 CAN 信号,解释为请求无条件停止传输过程
      6> 发送方正常传输完全部数据,需要正常结束,发送 EOT 信号通知接收方。接收
      方用 ACK 进行确认
      7> 接收方发送 CAN 无条件停止传输过程,发送方收到 CAN 后,不发送 EOT 确认
      8> 虽然信息包是以 SOH 来标志一个信息包的起始的,但在 SOH 位置上出现的 EOT
      则表示数据传输结束,再也没有数据传过来
      9> 接收方首先应确认信息包序号的完整性,通过对信息包序号取补,然后和信息包
      序号的补码异或,结果为 0 表示正确,结果不为 0 则发送 NAK 请求重传
      10> 接收方确认信息包序号正确后,然后检查是否期望的序号。如果不是期望得到的
      信息包序号,说明发生严重错误,应该发送一个 CAN 来中止传输
      11> 对于10>情况的唯一例外,是收到的包的信息包序号与前一个信息包序号相同,
      此中情况,接收方简单忽略这个重复的包,向发送方发出 ACK ,准备接收下一个包
      12> 接收方确认了信息包序号的完整性和是正确期望的后,只对 512 字节的数据区段
      进行算术和校验,结果与帧中最后一个字节(算术校验和)比较,相同 发送 ACK,
      不同发送 NAK


    3。 超时处理

      1> 接收方等待一个信息包的到来所具有的超时时限为 10 秒,每个超时后发送 NAK
      2> 当收到包时,接收过程中每个字符的超时间隔为 1 秒
      3> 为保持“接收方驱动”,发送方在等待一个启动字节时不应该采用超时处理
      4> 一旦传输开始,发送方采用单独的 1 分钟超时时限,给接收方充足的时间做发送
      ACK ,NAK ,CAN 之前的必须处理
      5> 所有的超时及错误事件至少重试 10 次
      4。 控制字符
      控制字符符合 ASICII 标准定义,长度均为 1 字节
      SOH 0x01
      EOT 0x04
      ACK 0x06
      NAK 0x15
      CAN 0x18
      这是 Xmodem 协议的最基本的一个版本,在其上还有 Xmode-1K 这样的扩展,加大了传输封包的大小(1K),用来提高传输速率;增加了 CRC 校验,用来提高传输的可靠性;区别在于:当启用 Xmodem 时,接收方发送 C 字符。发送方收到 C 字符判定为采用 Xmodem-1K 扩展;否则,当超时后,按照基本的版本传输。

    上面就是xmodel协议的内容。


    要实现这个协议当然要遵循协议的规范,所以函数的实现也不例外,下面分析在vivi中的实现。

    vivi中主要是接受xmodel协议的数据,所以接受方需要向发送方发送NAK
    这个函数就是实现刚刚说的想发送方发送NAK信号的函数,同时也是得到字符的函数。
    我们来分析下这个底层函数,当我们在适当的时间没得到字符时,我们就判断当我们是否第一次发送,也即是one_nak=0;如果是的话就发送NAK;直到接受到数据,当然接收不到数据还有其他的处理,主要就是在接受字符之间的处理。


    然后就是得到一条记录的函数了也即是get_record。

    该函数通过get_byte()函数得到字符,然后判断字符。保存字符,并返回这一帧的地址。


    最后就是集大成者了,即是xmodem_receive(char *dldaddr, size_t len)函数。

    该函数就是把接受到的数据存到相应的地址里面,就是参数dldaddr,len这个参数在函数中没有使用,我的个人理解时这个函数可能是要传递实际要传的数据长度。

    函数中还带有相应的出错处理。暂时可以不分析,因为我们考虑这个东西时一般按最好的来看的


    展开全文
  • simulinkframe和sample问题

    千次阅读 2020-05-31 20:39:53
    在使用simulink对信号的调制解调进行仿真学习的时候,由于过程中需要使信号通过各种滤波器,滤波器的群时延会导致滤波完的信号会有一定的延迟。所以在接收方接收到了信号,想拿来和发送的信号进行对比以计算误码率的...

    使用simulink的延时器的时候,通过不断地导出变量到工作区,我终于搞明白了延时器中基于帧和基于样点的设置的区别

    使用场景

    在使用simulink对信号的调制解调进行仿真学习的时候,由于过程中需要使信号通过各种滤波器,滤波器的群时延会导致滤波完的信号会有一定的延迟。所以在接收方接收到了信号,想拿来和发送的信号进行对比以计算误码率的时候,二者如果不同步就会导致误码率很高,基本都是50%(那不就是猜么),所以同步是一件非常有必要的事。

    结合实例分析

    既然滤波器导致的延迟无法避免,那我们可以将发送的信号进行延迟以进行同步。比如下图是一个简单的QPSK收发链路:
    在这里插入图片描述
    其中黄框中的subsystem中包含有一个低通滤波器,并且和黄框相连的前后两个是两个根升余弦滚降滤波器(square root),这三者的阶数都设置为160,进而群延时为80个sample(这里就出现sample的概念了),如下图
    在这里插入图片描述
    而在simulink中,会把数据分成帧(frame)来处理,比如伯努利信源的设置界面中:
    在这里插入图片描述
    可以看到其中是包含有sample time和sample per frame的设置的。sample time就是采样率,可以理解为每隔1/1000秒,就可以得到一个随机bit;samples per frame就是帧长。那是啥?

    可以理解为数据的一个打包。打包成帧之后,每一帧的数据就可以视为一个个独立的小矩阵,那对其进行一些矩阵操作,无论点乘(.*)还是普通矩阵乘,或者一些校验什么的,就会非常的方便。

    但是到了延迟设置的时候,这个方便的帧就令人抓狂了。如下图两处的设置(其他设置我没用过也不太清楚):
    在这里插入图片描述

    实验验证

    我始终搞不懂这个sample based和frame based之间有啥区别,于是我就做了这么个实验:

    使用伯努利信源,设置如下图,仿真时间设为10,将输出的信号导出到工作区,我得到一个维度为20x1x501的rdata1变量
    即得到了501帧数据,每帧长20,且使用rdata(:, :, k)就可以方便的访问任意第k帧的数据。
    在这里插入图片描述
    现在回到最开始的那个问题,如果我有三个filter,每个有80 samples的延迟,那我最后如何设置延迟器的延迟呢?(以下是针对该问题的具体计算,可跳过)

    首先假设系统为BPSK,那么Rb=RsR_b = R_s,在上图的设置,都为1000,但是在升余弦滚降滤波器中我使用了16x的上采样,于是采样率变为了16k。如果延迟了80x3个样点,就是延迟了80x3个样点的时间,即总延时:80x3x1/16k。现在要将这个总延时换算为样点数,因为是发送方直接将数据进行延迟之后和接收方进行计算误码率的,而不是上采样的数据。而在simulink的延迟器设置中,延时只能是一个样点时长的整数倍。所以使用之前得到的总延时除以发送方的采样率(也是符号率,但是这里是BPSK,所以同时也是比特率),即延迟的样点数为:(80x3x1/16k) / (1/1k) = 15个。

    结论,应该延迟15个样点。

    那在delay模块中怎么设置才行呢?

    我又做了如下的实验:
    在这里插入图片描述
    将Delay模块设置为基于sample,在工作区得到了rdata1和rdata2两个数据(如下图),通过对比可以发现,延迟过的数据是帧整体延迟了三个单位,数据的移动是按列为单位的。(注意下图的箭头反了)
    在这里插入图片描述
    再将Delay模块设置为基于frame,得到了rdata1和rdata2两个数据(如下图),通过对比可以发现,延迟过的数据是帧中的数据延迟了三个单位,数据的移动是按其中的数据为单位的。
    在这里插入图片描述

    结论

    但是发现一点,如果设置成基于的,那么延迟的长度是几个样点;如果设置成样点的,那么延迟的长度是几。那这不是反过来了么? simulink这么设计是咋想的?

    经过查阅资料,在《Simulink 与信号处理》书中,看到了这么一句话:
    在这里插入图片描述
    原来是这样,在simulink中,任何信号都可以看作是帧或者样点,如果视为,那么处理的最小单位就是帧里面的一个个的数据,将其中更小的单位视为不可分的“原子”(举例而已,原子可分);如果把信号视为样点,那么就把每个信号视为一个样点,样点总不能再分了吧,所以处理的对象就是它本身,把自己当作一个不可分“原子”,无论它本身是30x1还是20x1。

    展开全文
  •  串话现象是移动通信中较常见的故障现象之一, 由于在双方的通信过程中出现了第三方的可懂话音用户对该现象非常反感对运营商的投诉率很高。  2 GSM系统结构  引起串话现象的原因很多,为分析串话产生的具体原因...
  • 其中x(t)x(t)x(t)为基带信号,ej2πfct{e^{j2\pi {f_c}t}}ej2πfc​t为载波信号,h(t)h(t)h(t)为信道,接收方接收到信号后处理过程可以表示为 接收端解调首先进行操作是混频、去频偏,再定时、抽样,然后再对信道...
  • Xmodem协议

    2013-08-01 23:16:51
    如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。 然而,这种对每个块都进行认可的策略将导致低性能,特别是具有很长传播延迟的卫星连接的情况时,问题更加严重。
  • Xmodem协议介绍

    2015-07-31 16:38:46
    如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。然而,这种对每个块都进行认可的策略将导致低性能,特别是具有很长传播延迟的卫星连接的情况时,问题更加严重。  ...
  • 使用xmodem方式恢复IOS

    2013-10-12 16:54:17
    如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。然而,这种对每个块都进行认可的策略将导致低性能,特别是具有很长传播延迟的卫星连接的情况时,问题更加严重。使用...
  • 典型的通信系统:发送发送信息,采用一种能够在媒体中传播的信号,比如语音或者电话线的调制信号,这个过程是广义的编码; 然后通过媒体传播到接受,这个过程是信道传输。 在接受接收者根据事先约定好的...
  • 传真通信简介

    千次阅读 2013-04-24 20:01:05
    1.1.1 传真过程传真通信,最早由英国物理学家Alexander Bain于1843年提出,1925年美国贝尔实验室研制出...传真图像扫描信息从发送方经过编码、调制后送往传输线路,经过线路传送至接收方后,再进行解调、译码,最后将
  • XMODEM ZMODEM YMODEM

    千次阅读 2010-06-02 17:26:00
    如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。然而,这种对每个块都进行认可的策略将导致低性能,特别是具有很长传播延迟的卫星连接的情况时,问题更加严重。 ...
  • 8.2 指定接收方 49 8.3 局域网硬件怎样用地址过滤包 50 8.4 物理地址格式 50 8.5 广播 51 8.6 组播 52 8.7 组播地址 52 8.8 标识包内容 53 8.9 帧头部和帧格式 53 8.10 帧格式实例 54 8.11 无自标识帧网络使用...
  • SMS COM Server V1.2.0

    2007-02-14 14:52:41
    运行过程中记录详细短信收发日志,能够过滤接收方号码,以免错误的发送一些梦网服务订阅短信。   为了方便个人用户进行短信收发,本系统提供了一个客户端,可以用来向数据库中提交待发短信,并监视数据库中短信...
  • 计算机网络复习题

    2014-12-29 19:01:35
    (2)在面向连接TCP协议中,TCP包中有一个Window size 字段,接收方可以通过该字段告诉发送方,自己还有多少个接收缓冲区,极端情况下,当接收方不能再接收数据时,把该字段设置为0,从而发送方可以根据该字段值...
  • TR0 置1 ,启动定时/计数器T0 对单片机机器周期计数,同时检测第 三个下降沿;当判定检测到第三个下降沿时TR0 清0 ,停止计数,然后从计数 寄存器T0 读出测量数据,在完成数据处理后,由显示电路显示测量...
  • 在这种传送方式中,数据的发送接收方同信道之间没有固定占用关系,信道资源可以看作是由所有用户共享使用。由于数据业务在绝大多数情况下都表现出一种突发性业务特点,对信道带宽需求变化较大,因此采用...
  • BitWare V3.30.20 汉化版

    2010-07-10 02:07:15
    在与发送方通话过程中,对方要求给信号时,点接收管理器“作业”菜单中“手动接收”,即可发出传真信号开始接收。 3、自动接收:指接收设置中应答模式设定为"仅传真/传真语音/传真语音数据"时。对方打来电话时,...
  • 到达接收方所在的地区的交换局之后再使用分路器把不同的话路分开,经解码器还原成模拟声音信号后,由用户线 至接听方的电话机。没欠90%以上的中继线和长途线以经采用光纤。 近几年广播电视技术的发展趋势是“数字...
  • 超级单片机开发工具v

    2009-07-23 19:49:18
    可以通过串口接收/发送数据,作为普通串口调试器,可以手动发送所填内容,也可以发送整个文件; 内存映射功能,对于监控单片机内存非常方便,还可以定义内存变量,自动从接收数据中提取变量值,支持字节型...
  • MCUTool.exe 源代码

    2008-09-05 13:10:35
    可以通过串口接收/发送数据,作为普通串口调试器,可以手动发送所填内容,也可以发送整个文件; 内存映射功能,对于监控单片机内存非常方便,还可以定义内存变量,自动从接收数据中提取变量值,支持字节型...
  • 单片机超级工具MCUTool

    2008-02-04 14:15:09
    串口调试器 可以通过串口接收/发送数据,作为普通串口调试器,可以手动发送所填内容,也可以发送整个文件; <br> 内存映射功能,对于监控单片机内存非常方便,还可以定义内存变量,自动从接收数据中...
  • 28.数宁多類信号如何通过数字文换网实现发送接收的? 答 发送: 采用和辔遍话音信号一样处理沄或采用链珞半永久连方式(即按照颅先指定 内部时隙,将信号音定存储到次级T话音存储器SM中,当某用户需要听某种...
  •  1051 已将停止控制发送给与其他运行服务相关服务。  1052 所要求控制对此服务无效。  1053 服务没有及时地响应启动或控制请求。  1054 无法为该服务创建线程。  1055 服务数据库已锁定。  1056...
  • 单片机期末考试题目及答案详解

    热门讨论 2009-06-23 10:30:30
    在串行通讯中,若发送方的波特率为1200bps,则接收方的波特率为 。 29.D/A转换电路之前必须设置数据锁存器,这是因为 。 30.对于由8031构成的单片机应用系统,EA脚应接 ,中断响应并自动生成长调用指令LCALL后...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

发送方接收方的调制过程