嵌入式Linux系统串口通信协议设计

从无人机到机器人:SBUS协议在嵌入式控制中的跨界应用与实战解析 本文深入解析SBUS协议在嵌入式控制中的跨界应用,从无人机飞控拓展到机器人控制和工业自动化。重点探讨SBUS协议的核心特性、Linux系统下非标准100Kbps波特率的配置方法,以及数据解析与多通道处理策略,为开发者提供高效的嵌入式通信解决方案。 阅读详情

1 设计基础

这里指的协议是应用层协议,针对应用协议的设计,需要注意的有几个基本点:可识别,兼容性,访问控制,可追溯,数据完整性校验。

首先是可识别,一般我们采用一个帧头来表示整个报文的起始位置,这个帧头可以用一个32位(uint32_t)的数值来标识,比如 0xFE01A0BC,大端序是 0xFE,0x01,0xA0,0xBC;

通常我们把这个数值称为魔数,magic number。

然后是兼容性,一般我们用一个字节来标识报文的版本号,这个版本号的作用是以后协议格式发生改变时,可以上下兼容;我们称这个字节标识为:revision;兼容的方式在应用逻辑上可以是这样的:上位机检查下位机的revision,协商一个两边都能解析处理的版本进行数据处理。

访问控制可以使用1个字节(uint8_t)或者2个字节(uint16_t),称为access control;数据的组织格式可以采用独热码的方式,也就是每个位表示一种标识,1个字节(8个位)最多8种标识,2个字节(16位)最多16种标识。比如0x0100表示同步帧,0x1000表示需要响应,那么0x0100 | 0x1000就标识这个帧是同步帧,而且需要响应。我们可以利用访问控制来做分包传输的逻辑。

可追溯一般指下发的报文和响应的报文要能够对得上,于是需要在每个报文中带上一个序列码,称为sequence number;可以是1到2个字节,每次传输都采用自加的方式,当报文需要响应时,响应报文的序列码保持一致。

接着就是用户数据了,一般采用2个字节(最多65535)来表示数据长度,紧接着是用户数据,也称为payload。

数据完整性校验可以采用CRC16的计算方式,需要2个字节;计算从包头到payload的结尾进行CRC16的运算,用来保证数据的完整性(没有发生篡改或者误码情况)。

2  协议格式

基于上述的出发点,我们可以把协议定义如下:

起始码

revision

访问控制

序列码

数据长度

用户数据

CRC16

4 bytes

1 byte

2 bytes

1 byte

2 bytes

——

2 bytes

这样的协议基本能够满足大部分的应用场景了;访问控制也可以在细化为控制段和数据段,比如第一个字节表示控制信息,第二个字节存储数据。

同时需要说明的还有字节序的问题,也就是大端序还是小端序的问题,这里我们推荐使用大端序,所谓的大小端序,其实

基于Linux的C语言串口通信协议实验实战 最后,让我们动手实现一个轻量级应用层协议。 阅读详情

相关推荐

Linux下的串口与网口数据转发工具实战

数据封装是指将要传输的信息打包成数据包的过程,而协议定义是指规定数据包格式、传输规则等的一套完整规范。一个良好的协议设计,能够确保数据在不同系统间准确无误地传输。数据封装应当遵循一致性、完整性和可扩展性的原则。一致性保证通信双方按照相同的标准操作;完整性确保传输过程中数据不会丢失或损坏;可扩展性则允许未来协议的升级或扩展。协议的定义通常包括数据头、数据体和校验部分。数据头包含数据包的控制信息,如版本号、长度、序列号等;数据体承载实际的业务数据;校验部分用于验证数据的正确性。

weixin_42514750的博客 549

linux串口通讯实例

// filename:stty.h // 从头文件中的函数定义不难看出,函数的功能,使用过程如下: //(1) 打开串口设备,调用函数setTTYSpeed(); //(2) 设置串口读写的波特率,调用函数setTTYSpeed(); //(3) 设置串口的属性,包括停止位、校验位、数据位等,调用函数setTTYParity(); //(4) 向串口写入数据,调用函数sendnTTY(); //(5) 从串口读出数据,调用函数recvnTTY(); //(6) 操作完成后,需要调用函数cleanTTY()来释放申请的串口信息接口; //其中,lockTTY()和unlockTTY()是为了能够在多线程中使用。在读写操作的前后,需要锁定和释放串口资源。

智能车实战——从ADC采集到PWM控制,让电磁车精准循迹

本文详细介绍了电磁循迹智能车的实现原理与实战技巧,涵盖从ADC信号采集、PWM控制到PID算法整定的全流程。通过STM32代码示例解析电感信号处理、差比和偏差计算及电机驱动等关键技术,帮助开发者快速掌握智能车精准循迹的核心方法,提升电磁车竞赛项目的开发效率。

weixin_29192211的博客 301

2026深度破解:OpenClaw开源AI框架架构与实战全景解析

2026年初,一款名为OpenClaw的开源AI Agent框架以惊人的速度席卷全球开发者社区,短短数周GitHub星标突破20万,成为史上增长最快的开源项目。本文从架构设计、核心原理、代码实现和工程实战四个维度,深度剖析OpenClaw的技术内核,帮助开发者从理解到实践,快速掌握这一革命性的AI开发框架。

fox0329的博客 2372

深信服PT1-AF实验考试

深信服PT1-AF实验考试实验练习可以去深信服的在线实验平台(链接如下):深信服在线实验平台 (sangfor.com.cn)实验考试其实就是把所有的每一部分实验综合了起来以下内容仅做参考,不确保一样。

m0_72019240的博客 7106

Zephyr,设备树概述

Zephyr使用设备树(DTS)描述硬件配置,通过设备树源码和绑定文件生成C头文件供开发使用。设备树采用树状结构,节点对应硬件设备,属性描述硬件特性。示例展示了I2C总线及其外设的节点层级关系,包括单元地址、兼容性标识等关键属性。构建系统将设备树转换为devicetree.h中的宏,使开发者能通过DT_前缀宏访问硬件信息,同时保留Kconfig覆盖默认值的能力。

汽车电子软件领域知识分享 722

Cadence OrCAD: 层次化设计 Hierarchical Design

详细介绍OrCAD的原理图层次化设计方法。

Fantasy237的博客 1万+

关于 ABAP OPEN SQL 的动态 WHERE 条件和 Dynamic Selections

ABAP动态查询技术解析 本文介绍了ABAP中实现灵活数据库查询的动态选择技术,通过FREE_SELECTIONS函数组实现用户自定义查询条件。核心内容包括: 传统固定WHERE条件的局限性,无法满足业务多变需求 Dynamic Selections机制的工作原理,使用FREE_SELECTIONS_INIT初始化、FREE_SELECTIONS_DIALOG交互 完整Demo程序演示如何构建通用表数据浏览器: 用户输入表名后校验权限 调用动态选择函数生成条件 动态拼接WHERE子句执行查询 使用CL_SA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 674

基于树莓派4B设计的厨房环境监测系统_368

本项目设计并实现了一种基于树莓派4B的厨房环境监测系统,提升厨房使用过程中的安全性与智能化水平。系统采用树莓派4B作为主控核心,集成DHT11温湿度传感器、MQ2烟雾传感器、火焰传感器、光敏传感器、水滴检测传感器等多种传感器,实现对厨房环境温湿度、烟雾、火焰、光照与溢水等参数的实时监测,并通过蜂鸣器进行本地报警。系统通过WIFI连接互联网,利用MQTT协议将环境数据上传至华为云物联网平台,实现远程可视化监控。

415

分布式优化 (Distributed Optimization) 算法详解及案例分析

分布式优化是一种将优化问题分解为多个子问题并在多个计算节点上并行求解的方法。其目标是通过分布式计算资源高效地求解大规模优化问题。

闲人编程的博客 2707

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 嵌入式Linux系统 TCP数据转发服务器
下一篇: 开源库常见许可证
HomeByte
博客等级 码龄6年 22粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值