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

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

3天内不再提示

三种常见嵌入式设备通信协议

Q4MP_gh_c472c21 2018-03-06 10:06 次阅读

嵌入式设备与PC通讯的通信协议设计经验

嵌入式设备在运行中需要设置参数,这个工作经常由PC机来实现,需要为双方通信设计协议,有代表性协议是如下三种:

表1 三种常见通信协议

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

一. 简单性

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

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

二. 可扩展

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

三. 低耦合

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

四. 稳定性

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

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

五. 高效率

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

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

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

六. 易实现

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

七.软件开发

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

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

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

八. 考虑硬件

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

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

附录A 一个基于DMA传输固定长度的协议实例。

图1显示了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, 帧尾,可见字符’}’

图1 PC发送数据帧

表2 Data域数据结构实例

附录B 一个基于变长格式的UART通信协议实例。

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

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

    关注

    5063

    文章

    18992

    浏览量

    302544
  • 通信协议
    +关注

    关注

    28

    文章

    848

    浏览量

    40229

原文标题:嵌入式设备与PC通讯的通信协议设计经验

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PROFINET通信协议是什么

    PROFINET通信协议是一专为工业自动化领域设计的基于以太网的实时通信协议。以下是对PROFINET通信协议的详细解析,包括其定义、特点、体系结构、工作原理、
    的头像 发表于 09-25 18:13 934次阅读

    SPI通信协议的基本概念和工作模式

    接口设计,在嵌入式系统、微控制器与各种外围设备之间的通信中占据重要地位。以下是对SPI通信协议的详细解析,内容涵盖其基本概念、通信原理、信号
    的头像 发表于 09-09 17:04 819次阅读

    简单认识UART通信协议

    UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)通信协议是一常见的串行通信协议,广泛应用于计算机、
    的头像 发表于 07-25 18:07 1314次阅读

    嵌入式系统怎么学?

    操作系统的基本概念和原理,掌握常见的RTOS,如FreeRTOS、uC/OS等,以实现对嵌入式系统的任务调度和资源管理。 6、通信协议:学习常用的通信协议,如UART、SPI、I2C
    发表于 07-02 10:10

    plc常见三种通讯协议有哪些

    这一目标,PLC采用了多种通信协议。以下是三种常见的PLC通信协议的详细介绍: Modbus协议 Modbus
    的头像 发表于 07-01 10:12 2010次阅读

    简单认识UART串行通信协议

    在电子通信领域,UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一非常常见的串行通信协议。它被广泛应用于各种
    的头像 发表于 05-27 16:09 1934次阅读

    IOT(物联网)的七大通信协议之Http协议

    一、什么是http协议嵌入式HTTP协议是一轻量级的通信协议,专为嵌入式系统设计,用于实现
    的头像 发表于 05-24 08:11 2405次阅读
    IOT(物联网)的七大<b class='flag-5'>通信协议</b>之Http<b class='flag-5'>协议</b>

    嵌入式系统软硬件基础知识大全

    可以存储临时数据。了解这些存储器的特点和层次结构,有助于我们优化嵌入式系统的性能和存储需求。嵌入式系统的外设接口和通信协议是其与外部世界交互的关键。常见的接口类型包括UART、SPI、
    发表于 05-09 14:12

    UART串口通信协议是什么?

    ,广泛应用于嵌入式领域。 在UART串口通信协议中,数据以字节的形式进行传输。发送和接收端的通信流程如下: 1、通信波特率设置:发送端和接收端需要
    的头像 发表于 03-19 17:26 1224次阅读

    嵌入式工程师需要掌握哪些技术?

    嵌入式系统通常需要与其他设备或系统进行通信。了解常见通信协议,如UART、SPI、I2C、CAN和Ethernet等,以及它们的工作原理
    发表于 03-04 16:38

    嵌入式Linux开发的三种方式

    嵌入式Linux开发主要有三种方式:裸机开发、SDK开发和驱动开发。
    的头像 发表于 01-22 14:22 915次阅读

    三种TPL菊花链通信协议的差别

    在这个数字化时代,汽车行业正朝着智能化、电动化的方向飞速发展。而为了确保汽车电池管理系统的稳定运行,NXP推出了TPL菊花链通信协议,在电池管理系统与电池模块之间构建了一条高效、可靠的通信桥梁。
    的头像 发表于 12-22 13:38 1.2w次阅读
    <b class='flag-5'>三种</b>TPL菊花链<b class='flag-5'>通信协议</b>的差别

    从Profinet到CCLink:工业通信协议的转换实践

    准确的解决方案。 随着工业技术的发展,不同的通信协议在工业设备通信中发挥着重要作用。Profinet和CCLinkIE是两常见的工业
    发表于 12-15 14:26

    从Profinet到CCLink:工业通信协议的转换实践

    随着工业技术的发展,不同的通信协议在工业设备通信中发挥着重要作用。Profinet和CCLinkIE是两常见的工业
    的头像 发表于 12-15 14:24 597次阅读
    从Profinet到CCLink:工业<b class='flag-5'>通信协议</b>的转换实践

    介绍一下I2C和SPI两常见通信协议之间区别

    在与ECU或者嵌入式相关的工作中, 我们肯定会接触到各种通信协议, 很多协议有很多类似的地方, 也容易混淆. 本文来介绍一下两常见
    的头像 发表于 11-30 16:50 3237次阅读
    介绍一下I2C和SPI两<b class='flag-5'>种</b><b class='flag-5'>常见</b>的<b class='flag-5'>通信协议</b>之间区别