通信协议考虑的几点问题

2023-05-16

关注+星标公众,不错过精彩内容

a77d2cc7a7c2fe1000749fb932ab692e.jpeg

素材来源 | 网络

来源 | 嵌入式大杂烩

嵌入式开发在很多场景下都需要进行通讯,那么通讯协议就必不可少,有代表性的通讯协议是如下三种:

dce4c14bbec41d8cb87ee8d9f6aff5bd.jpeg

从上表可以看到,一般嵌入式设备内存和运算性能都有限,因此固定二进制是首选通信协议。

一. 简单性

保证协议是一个简单的方案,晦涩难懂往往意味着实现困难和容易出错。协议的结构宜采用平面方式,每个域作用明确,数据域尽可能设计得长度和位置固定,注释详尽,文档清晰,实例丰富,让人尽快上手和理解。

协议一般都需要以下域:帧头,长度,帧类型,目标地址,源地址,数据,校验,帧尾。

二. 可扩展

必须保证将来增加功能和更改硬件后协议仍能胜任工作,这往往是通过预留空间来实现,协议的变更应该只是量的增加,不至于引起协议结构的变化。

三. 低耦合

理想情况下每个协议包是原子信息,即本协议包不与其他协议包牵连,以防止通讯丢帧和设置牵连带来的错误。

四. 稳定性

协议包长度适宜:太小包含的信息过少,协议包的种类繁多,容易引起通讯混乱和牵连错误;太大包含的信息过多,可读性较差,组帧和解帧的工作困难,还会带来通讯易受干扰的缺陷,一般协议长度以最小原子性信息为标尺。

协议必须包括校验机制,以便于接收方判别协议包正确完整接收,如果出错需要较好的机制来确保通讯成功(如重传)。

五. 高效率

按信息类型区分协议包类别,如:设置网络信息参数,设置当前运行参数,可以区分开来,方便程序处理。

将同种操作编码为一个子集是一种高效手段,如Read操作,编码为0x0010,Write操作,编码为0x0020。

数据尽可能设计成同构模式,如果实在有差异,至少将同类型数据放置在一起,这样程序可以充分利用指针和线性寻址加速处理。

六. 易实现

尽量减少复杂算法的使用,如,通讯链路稳定,数据帧的校验码可以由CheckSum代替CRC。除非资源非常紧张,否则不要将过多的信息挤压在一个数据里,因为它会带来可读性差和实现困难。

七.软件开发

尽可能地让硬件ISR完成驱动工作,不要让“进程”参与复杂的时序逻辑,否则处理器将步履蹒跚且逻辑复杂!如:

接收固定长度的数据帧,可以使用DMA,每接收完一帧DMA_ISR向进程发消息。小心处理DMA断层异常(接收的数据帧长度正常但数据错误,数据为上帧的后半部分+本帧的前半部分)。

接收不定长的数据帧,可以使用状态机,当接收到“帧尾数据”时向进程发消息。小心数据紊乱和超时异常(数据紊乱时需要将状态机及时复位,超时一般使用定时器监控)。

八. 考虑硬件

如果通信链路是高速总线(如SPORT可达100Mbps),一般设计成一帧产生一次中断,它通过长度触发的DMA来实现,需要将协议设计成固定长度,如附录A。它具备高效率,但灵活性较差。

如果通信链路是低速总线(如UART一般100kbps),一般接收一字节产生一次中断,可以将协议设计成变长帧,如附录B。它具备高灵活性,但效率较低。

19e01bc1ce45966153beb4c23d661c56.png

上图显示了PC发送数据帧的格式,总长为64字节,是4字节的整倍数,符合绝大部分32位处理器结构体对齐的特性。

  • 0x3C:INT8U,帧头,可见字符’<’

  • Len:INT8U,本帧的总数据长度,在图4即为64

  • Dst:INT8U,标识目标设备的ID号

  • Src:INT8U,标识源设备的ID号

  • Data:56字节的存储区,内容依赖于具体的通信帧(实例见表2)

  • Cmd:INT16U,数据帧的类别

  • CS:INT8U, 对它前面所有数据(62字节)进行8位累加和校验

  • 0x7D:INT8U, 帧尾,可见字符’}’

Data域数据结构实例:

9bb91505ac42458ce3238fdf488da871.jpeg

一个基于变长格式的UART通信协议实例:

fbbc1046f8a697a2e0da208f6614ed15.jpeg

PC与iWL880A(一种无线通信产品,详见www.rimelink.com)通信帧采用变长格式,如下图所示。大部分设备(常见为PC机)对于接收以“回车符”的机制很好处理,协议中的Tail就等于0x0D(换行符)。

声明:本文部分素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

------------ END ------------

7820fa833a6b1693c2db33ec437f2a5b.gif

●专栏《嵌入式工具

●专栏《嵌入式开发》

●专栏《Keil教程》

●嵌入式专栏精选教程

关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

c880d97e44a90d76889def3a031a0d37.jpeg

a61101ab46c23609ebf3babc5c4d39b5.png

点击“阅读原文”查看更多分享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通信协议考虑的几点问题 的相关文章

  • 23.易混淆命令(apt-get、wget、git clone、pip与pip3区别、apt-get和pip区别)

    摘要 xff1a 本文详细介绍了Ubuntu系统下apt get wget git clone pip与pip3 apt get和pip几组概念的区别 1 apt get 参考文献 xff1a apt get 是AdvancedPackag
  • ssh实现免密登录(文中附上脚本)

    1 为什么要互信 很多时候 xff0c 我们经常需要登录同一个服务器或者客户端 xff0c 但是输入密码很繁琐 xff0c 此时我们就需要能免密登录某些服务器或客户端 下面我们就来看怎么简单实现免密登录 有时候我们在shell脚本中会不断去
  • MapReduce概述及工作流程

    内容 mapreduce原语 xff08 独创 xff09 mapreduce工作流程 xff08 重点 xff09 MR作业提交流程 xff08 重点 xff09 YARN RM HA搭建 xff08 熟练 xff09 运行自带的word
  • IIC总线

    1 概念 IIC总线是PHLIPS公司在八十年代初推出的一种串行的半双工同步总线 xff0c 主要用于连接整体电路 同一块板子两个芯片之间的通信是通过IIC总线进行的 xff08 stm32mp157a lt IIC gt SI7006 I
  • 函数拟合3

    所谓函数拟合 xff0c 就是给定一些输入点 xff0c 输出一个函数曲线 选择的基函数会直接影响线性组合函数的表达能力 当采样点较多 xff0c 而系数较少时 xff0c 会出现欠拟合 xff0c 表达能力不够 当采样点较少 xff0c
  • LDM命令

    http blog 163 com oy mcu blog static 16864297220120193458892 LDM STM指令主要用于现场保护 xff0c 数据复制 xff0c 参数传送等 STMFD指令 STMFD Rn r
  • LE Audio进入商用阶段

    LE Audio进入商用阶段 xff0c TWS耳机要变天了 36氪 蓝牙协议十年来的最大更新 xff0c LE Audio进入商用测试阶段 全球最畅销的IoT设备是什么 xff1f 我很轻松就能告诉你答案 xff1a AirPods 作为
  • CAN XL :CAN协议家族新成员

    十年之前 xff0c 你不认识我 xff0c 我也不认识CAN FD 如今 xff0c CAN FD已经陆续进入乘用车领域 xff0c 几乎所有汽车制造商都将在未来几年内逐步推出搭载CAN FD的乘用车 那十年之后 xff0c 车载网络又会
  • 【整理】嵌入式系统的各种常见外设

    原文地址 xff1a http www crifan com summary embedded system various peripherals 最后更新 xff1a 2013 11 14 TODO xff1a 1 添加更多的常见的外设
  • DDR controller driver

    在SOC中 xff0c DDR是很重要的 xff0c 需要在uboot中进行初始化 xff01 但是DDR异常的复杂 DDR controller也异常的复杂 xff0c 以candence DDR controller为例 xff0c 这
  • 一文看懂IC芯片生产流程:从设计到制造与封装

    origin http forum esm cn com FORUM POST 1000163993 1201257744 0 HTM ga 61 1 101949507 338942905 1436813394 芯片制造的过程就如同用乐高
  • 2015中国国内元器件分销商10亿俱乐部20强榜单

    origin http www v4 cc News 916429 html 元器件分销市场 xff0c 从欧美安富利 xff0c 艾睿 xff0c 富昌等巨头跨度到台湾大联大 xff0c 文晔等新势力 xff0c 花了30年时间 随着电子
  • openvswitch 通过ofproto/trace trace跟踪数据包匹配的流表

    目录 1 解决的问题需求 当vm互访不通时 xff0c 不知道是哪天流表出问题 xff0c 可以通过 ovs提供的工具模拟虚拟机实例发出的数据包来跟踪数据包经过的流表路径 2 使用方法 xff08 一 xff09 解决的问题需求 我们在使用
  • 关于ethercat开发的一些感想

    origin http blog csdn net embededvc article details 50364977 从去年到现在 xff0c 整整一年经历了从ethercat主站到伺服从站的实现过程 xff0c 包括全程负责从站的et
  • modem manager与network manager

    modem manager ModemManager is a DBus system bus activated service meaning it 39 s started automatically when a request a
  • 调试px4串口升级固件

    最近在调试px4的bootloader 实现uart 串口升级 硬件版本为pixhawk bootloader地址为https github com PX4 Bootloader git px4代码地址为https github com P
  • 文章风格: 一级标题使用蓝色字体,二级和三级使用黑色,重点部分使用红色或黄色标记,正文采用浅灰色

    我今天给自己立个规矩 xff0c 以后我自己写的技术类文章 xff0c 一级标题使用蓝色字体 xff0c 二级和三级使用黑色 xff0c 重点部分使用红色或黄色标记 xff0c 正文采用浅灰色 2012 05 03
  • Xlib Programming Manual

    最近看了王垠 写的那篇清华退学的文章 xff0c 看到了他研究linux的过程 xff0c 文中提到了x Windows 我也总想搞一搞这个东西 xff0c 但是不知从何入手 它推荐这本书Xlib Programming Manual xf
  • 第二章 PX4-Pixhawk-RCS启动文件解析

    origin http blog csdn net qq 18112493 article category 6851622 第二章 PX4 RCS 启动文件解析 RCS 的启动类似于 Linux 的 shell 文件 xff0c 如果不知

随机推荐

  • PX4源码开发人员文档(四)——创建后台程序(应用)

    origin http blog csdn net lkk05 article details 48659059 在 Unix 和其他多任务计算机操作系统中 xff0c 后台程序是指 xff0c 作为后台进程运行的计算机 xff0c 而不是
  • 为何选择nuttx

    裸机程序 xff0c 不能处理太复杂的逻辑 xff0c 系统越复杂 xff0c 越需要上os freertos 不支持posix api rtems是gpl版权 nuttx bsd版权 xff0c px4和apm开源飞控都使用nuttx 经
  • https://tieba.baidu.com/p/4311040961?red_tag=2683564864

    dddddd
  • 彻底理解Linux的各种终端类型以及概念

    origin http blog csdn net dog250 article details 78766716 这篇文章的动机有两个 xff0c 上周同事问我关于Linux终端的问题 xff0c 我简要解答后发现有些概念确实自己也说不清
  • 恢复ubuntu14.04默认的经典登录界面

    之前不小心安装了Xubuntu desktop xff0c 卸载后 xff0c 登录界面还是Xubuntu desktop的界面 xff0c 如图所示 xff1a 搞了很久都没能恢复到默认登录界面 xff0c 最后在国外网站找到了解决方法
  • 理工科专业精品书系列

    原文地址 xff1a https bbs et8 net bbs showthread php t 61 938724 本人本科专业飞机设计 不过后来越搞越杂 xff0c 飞机 xff0c 汽车 xff0c 船舶 xff0c 坦克 xff0
  • DHT11模块程序--51单片机

    不讲原理 xff0c 只表达自己的建议以及提供源程序程序 目录 前言 一 建议 二 代码 1 c文件 2 h文件 实验展示 前言 第一次拿到DHT11这个模块 xff0c 于是网上搜索了各种原理以及程序 xff0c 最终都没找到一个合适自己
  • Centos7 kvm环境安装指南

    宿主机要求 CPU支持虚拟化 xff08 大部分都支持 xff09 内存越大越好 xff08 8G以上 xff09 BIOS开启VT DCentos7及以上 xff0c yum update到最新 检查是否支持硬件虚拟化 查看CPU egr
  • 【嵌入式STM32环境搭建】Keil5安装和STM32工程模板搭建

    Keil5安装和STM32工程模板 Keil5安装 STM32入门教程 2022持续更新中 哔哩哔哩 bilibili 网盘提取码 xff1a 8kzh xff0c 链接里压缩包的解压密码 xff1a 32 STM32库函数版工程模板 搭建
  • Nvidia jetson nano硬件架构

    资料来源 官方文档中心 https developer nvidia com embedded downloads gt 选jetson gt Jetson Nano Product Design Guide 产品设计指导 入口 gt 1
  • protues仿真51单片机教程

    protues是一款常用的单片机仿真软件 在很多情况下 我们做一些简单的项目 手边没有单片机或者不想麻烦的情况下 可以借助protues来仿真测试程序 protues内集成了几款常用的51内核的单片机 我们可以很方便的拿来使用 不用再每次编
  • 紧急!公开招录50名工程师升名校研究生!基层人员均可报名提升!

    2023全国高等教育 硕士研究生报名须知 教育部 国家发改委 财政部联合印发 关于加快新时代研究生教育改革发展的意见 xff0c 表示要将 硕士研究生招生规模稳步扩大 并且 xff0c 教育部明确提出要扩大研究生招生规模 为积极落实国家研究
  • 嵌入式开发,数据手册为啥是重要的文档?

    关注 43 星标公众号 xff0c 不错过精彩内容 作者 strongerHuang 微信公众号 strongerHuang 做嵌入式开发 xff0c 特别是底层驱动相关的开发 xff0c 不管是软件还是硬件工程师 xff0c 能熟练阅读数
  • 分享一款基于C语言实现的FIFO模块

    关注 43 星标公众号 xff0c 不错过精彩内容 作者 strongerHuang 微信公众号 strongerHuang FIFO在嵌入式应用的非常广泛 xff0c 可以说有数据收发的地方 xff0c 基本就有FIFO的存在 xff0c
  • 免费开源EDA软件KiCad 7.0.2 发布、Qt 6.2.8 LTS版本正式发布

    免费开源EDA软件KiCad 7 0 2 发布 Nordic推出第四代低功耗无线SoC Qt 6 2 8 LTS版本正式发布 xff08 点击链接 xff0c 阅读原文 xff09 更多视频 xff0c 可以到我视频号查看 xff1a 点击
  • hadoop中输入文件用LongWritable和IntWritable的区别

    xfeff xfeff 这里的LongWritable的key是线的偏移量 xff0c 表示该行在文件中的位置 xff0c 而不是行号 这里的IntWritable的key是行号
  • 嵌入式开发常用的几款虚拟机

    关注 43 星标公众号 xff0c 不错过精彩内容 作者 入门小站 说起虚拟机 xff0c 相信作为技术人员的小伙伴们不会感到陌生 虚拟机的使用场景非常多 xff0c 如搭建测试环境 在 Windows 系统中安装 Linux 或在 Mac
  • "软件开发生命周期"有几个阶段?

    关注 43 星标公众号 xff0c 不错过精彩内容 作者 情报小哥 ID 嵌入式情报局 很多初学软件编程的小伙伴 xff0c 只顾着 编程 xff0c 其他开发相关的一些 技能 很少关注 如果你想以后进入大公司 xff0c 除了写代码之后
  • GUI付费与免费的选择,看了价格你就知道了

    更多视频 xff0c 可以到我视频号查看 xff1a 点击 阅读原文 查看更多分享
  • 通信协议考虑的几点问题

    关注 43 星标公众号 xff0c 不错过精彩内容 素材来源 网络 来源 嵌入式大杂烩 嵌入式开发在很多场景下都需要进行通讯 xff0c 那么通讯协议就必不可少 xff0c 有代表性的通讯协议是如下三种 xff1a 从上表可以看到 xff0