0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

消息协议如何提高数据传输的可靠性

454398 来源:工程师吴畏 2019-08-01 16:48 次阅读

串行端口PIC与其他设备通信的最简单方法之一。但是,事件串行端口存在缺陷,因此在本教程中,我们将了解消息协议如何提高数据传输的可靠性。

示意图

原始数据传输

现代微控制器通常内置许多设备接口外设,包括I2C,SPI,UART和能够。虽然I2C和SPI专用于器件,并且严重依赖于选择信号或启动/停止信号,但UART更加自由。 UART的最大缺点之一是缺少时钟信号,这可能导致发送器或接收器的时钟漂移(导致波特差异),帧错误,甚至当其中一个缓冲器出现溢出错误方满了。当然,这些问题是使用定时器,监视器和事件容易克服的相对性。但是,与I2C和SPI不同,串行连接在一种特定情况下更常见:可移动硬件。 I2C和SPI器件通常是直接焊接到主电路板或永久连接到它们的IC。同时,这些设备是主控制器的子设备,因此无法自行启动数据传输。

想象一下PIC和计算机通过串行连接进行通信,其中每个设备都可以发送命令或数据到另一个设备。这样的系统可以用普通的消息协议轻松实现,其中发送的第一个字节代表命令,后面的字节代表该命令的数据。只要没有中断,该系统就可以正常运行。但是,如果计算机在发送命令后传输数据字节的一半时崩溃并重新启动会发生什么?好吧,我们的程序将重新启动并尝试发送命令字节以启动数据传输,但命令字节将被PIC解释为数据字节,因为它仍然期望一个数据字节。这会导致PIC产生错误,因为它读取的字节可能会产生意外结果。但这不仅仅是UART的一个问题;任何可能被终止的连接,无法知道连接已被终止,也可能崩溃。解决方案是使用消息协议!

我们的消息协议:DHP - DIY黑客协议

确保命令始终正确处理,命令字节值将是唯一的。对于我们的系统,我们将有以下命令:

0x00 - 无操作

0x01 - 请求数据

0x02 - 写数据

0x03 - 数据结束

0x04 - 重启(发生错误或失败)

作为一个简单的例子,如果我们想通过计算机向PIC发送一些数据,我们必须首先发送0x02,然后发送所有数据,然后发送数据结束字节。如果传输中断并且计算机尝试重新发送数据,它将再次发送整个数据包。 PIC将正确解释命令字节并意识到正在发送新数据包。但是,如果我们的数据包含0,1,2,3或4,会发生什么? PIC会将这些解释为命令字节,因此会发生致命错误。那么,我们如何解决这个问题?

虽然不是最有效的方法,但我们可以用其他形式表示我们的数据而不是原始字节值。一种方法是将我们的数据表示为十六进制形式的ASCII字符,以便两个ASCII字节代表一个字节的数据。例如,FF表示255,其中00表示0.因此,我们的数据字节永远不能与命令字节相同,并且通过使用ASCII编码的十六进制字节,理论上我们可以有多达240个命令字节(留下16个十六进制字符用于数据)。使用ASCII编码数据的缺点是我们有效地将数据速率减半,命令字节进一步降低了速度。但与此同时,系统的可靠性也得到了显着提高。

数据完整性怎么样?我们可以通过在数据包中添加校验和来实现这一点,这样接收方就可以确保数据完好无损。一种简单的方法是对收到的所有字节进行异或,并将其用作校验和。如果任何一个位被误读,这将显示在XOR校验和中。如果同一列中的两个位被误读,则校验和保持不变,因此XOR仅对单位错误有效(但这些是最常见的)。

示例包

编写数字92(十六进制0x5C)

从设备读取(TX设备)请求数据,RX设备发送请求的数据)

的构建的的

该项目可以使用许多不同的电路构造技术构建,包括条形板,矩阵板,面包板和PCB。在这个例子中,我使用了在CNC机床上制造的PCB(通过隔离布线),但我正在考虑回到化学过程,原因将在后面的文章中讨论。

这也是我第一个包含使用XYZ da Vinci Jr. 3D打印机制作的自定义项目框的项目。设计本身(痛苦地)在Google SketchUp中制作,然后由于STL导出器插件导出为STL文件。然后,STL文件在XYZmaker中导入并打印。虽然这个项目盒不使用螺丝,但未来的设计将会如此。虽然3D打印的型号可能价格昂贵(这个盒子使用价值约1.00美元的塑料),但它是一种定制设计,可以制作近乎完美的功能,如切口和孔。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据传输
    +关注

    关注

    9

    文章

    1516

    浏览量

    63556
收藏 人收藏

    评论

    相关推荐

    请问NFC数据传输如何保证数据安全?

    NFC数据传输如何保证数据安全
    发表于 04-07 06:18

    DTU的多种协议,解锁数据传输的无限可能

    DTU,即数据传输单元,是一种在物联网(IoT)网络中常用的设备,主要用于在传感器和智能设备之间进行数据传输。DTU使用多种协议来实现这一目标,这些协议不仅
    的头像 发表于 03-01 11:00 155次阅读
    DTU的多种<b class='flag-5'>协议</b>,解锁<b class='flag-5'>数据传输</b>的无限可能

    万兆电口模块:满足大规模数据传输需求的解决方案

    万兆电口模块具有高速传输、兼容性好、可靠性高等优势,可以满足大规模数据传输需求,推动网络技术发展。
    的头像 发表于 02-26 16:27 165次阅读

    如何计算MIPI数据传输带宽

    当器件工程师选定一颗Camera模组或一款OLED屏的时候,硬件工程师就需要根据这颗器件的参数,来计算数据传输所需的带宽,以此确认用哪种协议、需要多少lane、以及平台是否支持。
    的头像 发表于 02-23 09:27 966次阅读

    深入探讨为什么需要1.6T数据传输

    随着以太网速度的提高,其应用越发多样化,从音、视频流到多房间音频、工控网络,甚至车载网络。这一进展对数据传输提出了更高的安全可靠性要求。尤其是对丢失和延迟特别敏感的数据流来说,定义服务
    发表于 01-18 11:39 161次阅读
    深入探讨为什么需要1.6T<b class='flag-5'>数据传输</b>

    让“可靠”变得“更快更安全”的数据传输协议:SCTP

    SCTP(Stream Control Transmission Protocol,流控传输协议)的出现,并不是万丈高楼平地起,而是站在TCP这个巨人肩膀上,让数据传输从“可靠”变得“
    的头像 发表于 12-28 17:25 479次阅读
    让“<b class='flag-5'>可靠</b>”变得“更快更安全”的<b class='flag-5'>数据传输</b><b class='flag-5'>协议</b>:SCTP

    提高PCB设备可靠性的技术措施

    提高PCB设备可靠性的技术措施:方案选择、电路设计、电路板设计、结构设计、元器件选用、制作工艺等多方面着手,具体措施如下: (1)简化方案设计。 方案设计时,在确保设备满足技术、性能指标的前提下
    发表于 11-22 06:29

    如何实现MQTT协议数据传输

    如何实现MQTT协议数据传输? 随着物联网技术的不断发展,越来越多的设备和应用需要实现互联互通。而MQTT作为一种轻量级的发布/订阅消息传输协议,在物联网领域应用广泛,成为了许多设备之
    的头像 发表于 11-15 17:23 596次阅读

    AXI数据传输读写数据结构

    在 AXI 数据传输过程中,主要涉及到 •窄位宽数据传输(Narrow Transfer) •非对齐传输(Unaligned Transfer) •混合大小端传输(mix-endian
    的头像 发表于 10-31 16:17 623次阅读
    AXI<b class='flag-5'>数据传输</b>读写<b class='flag-5'>数据</b>结构

    M5连接器如何提高数据传输速度

    M5连接器的数据传输速度提高需要综合考虑多个因素。M5连接器是一种小型连接器,常用于工业自动化和传感器等领域,它通常用于传输数字信号和低速数据
    的头像 发表于 08-05 11:13 442次阅读
    M5连接器如何<b class='flag-5'>提高</b><b class='flag-5'>数据传输</b>速度

    SPI数据传输有哪些方式

    SPI 数据传输可以有两种方式:同步方式和异步方式。 同步方式:数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到
    的头像 发表于 07-25 10:54 3281次阅读
    SPI<b class='flag-5'>数据传输</b>有哪些方式

    udp是什么协议 TCP与UDP的区别

    TCP协议提供可靠数据传输,UDP协议提供尽量高效的数据传输。TCP协议通过使用序列号、确认应
    的头像 发表于 06-26 17:47 7034次阅读

    DMA进行数据传输和CPU进行数据传输的疑问

    求大佬解答,本人正在学习STM32单片机中DMA直接数据存储部分的内容 看了DMA简介后,也上手过实例代码,但是没有实际的项目经验,所以有以下疑问: DMA外设在进行数据传输的操作,是否也是需要经过
    发表于 05-25 17:18

    如何测量ESP8266的数据传输速度?

    AP 的问候”。 现在我想测量数据从 AP 传输到客户端的数据传输速率/速度(不是波特率)。请注意,我使用的是 AT 命令来配置模块,我不是在谈论波特率。 有什么方法可以测量从一个模块到另一个模块的
    发表于 05-22 06:38

    芯片接口IP如何支持机器学习和深度学习的计算和数据传输

    其次,机器学习和深度学习的数据传输需求也非常高。大规模的数据集需要被传输到计算机中进行处理,这对数据传输的速度和可靠性提出了极高的要求。传统
    的头像 发表于 04-21 14:07 932次阅读