linux can总线接收数据串口打包上传_关于串口,你需要知道这些!!

3fdd72e57965c790827d73fb620bd107.png

嵌入式设备在电路中交换信息的时候必须通过共享一个通用的协议。现在嵌入式系统中已经定义了数百种通信协议来实现数据交换,一般来说可以将其分为两类:并行或串行。

并行传输数据是指同时传输多个数据位,它们通常需要数据线和时钟线配合工作,数据线的条数可能为8、16或更多。

e7ac9395f2162991a29d94b808197c22.png

而串行传输时一次只能传输一位数据,只使用一根导线工作,通常总共不需要超过四根。

1e32d67ed42d715aa208b0c69c7441f0.png

可以将这两种通信方式看作车辆在路上行驶,并行传输是一条八车道的豪华高速公路,而串行传输更像是两车道的乡间小路。并行传输可以在同一时刻通过8辆汽车,而串行传输只能在同一时刻通过一辆汽车,但两车道的建设费用可能更低。

并行传输的好处是快速、简单且易于实施。但是它需要更多的输入/输出(I/O)口。如果你曾经使用过Arduino编程,那你就知道处理器上的I/O口有多宝贵了。因此我们经常选择串行通信,以节约端口。

多年来,研究人员设计了数十种串行协议以满足嵌入式系统的特殊需求,USB和以太网算是其中比较知名的串行协议。其他常见的串行协议包括:IIC、SP等等。

这些串行传输协议都可以分为两类:同步和异步。

同步串行传输协议始终将数据线与时钟信号配对,因此同步串行总线上所有设备都共享一个公共时钟。这样可以进行更直接、更快的串行传输,但也额外需要一根时钟线。同步串行传输协议的包括SPI和IIC。

异步串口是指在没有外部时钟信号的情况下传输数据。这种传输方法非常适合于I/O口紧张的情况,但这意味着需要付出额外的资源来可靠地传输和接收数据。我们将在本文中讨论的串行协议是异步传输的最常见形式。实际上,大多时候人们说的串口均是指的该类型。

异步串行协议的许多内置规则可以确保可靠且无误的数据传输,分别为:

  • 数据位

  • 同步位

  • 奇偶校验位

  • 波特率

通过各种这些信令机制,可以保障数据传输的完整性,但最最最重要的是在收发双方一定要配置位相同的规则才能正确的发送和接收。

波特率指定通过串行线发送数据的速度。通常以每秒位数(bps)为单位。如果反转波特率,则可以计算出传输单个比特需要的时长。该值确定发送器将串行线保持为高/低状态的时间,或接收设备在多长时间内对其进行采样。

在合理范围内,波特率几乎可以是任何值。唯一的要求是两个设备均以相同的速率运行。对速度要求不高的情况而言,9600 bps是较常见的波特率之一。其他“标准”波特为1200、2400、4800、19200、38400、57600和115200。

波特率越高,发送/接收数据的速度就越快。通常不会有超过115200的波特率-因为这对于大多数单片机而言速度太快,将在接收端看到错误,因为时钟和采样周期无法跟上发送端。

实际传输的每个数据块(一般为一个字节)都以数据包或帧的形式发送。通过将同步位和奇偶校验位附加到我们的数据中来创建帧。

9600 8N1(示例)

9600 8N1代表着波特为9600,8个数据位,无奇偶校验和1个停止位,这一种是较为常用的串行协议配置方法。那么,9600 8N1的数据包是什么样的呢?举个例子吧!传输ASCII字符"O"和"K"的设备必须创建两个数据包。O的ASCII值(大写)为79,则二进制值01001111,而K的二进制值为01001011。剩下的就是追加同步位。假设传输数据时首先传输最低位:

fa6b94671ee9e9566e70e668fc2471aa.png

由于我们以9600 bps的速度进行传输,因此将电平保持高位或低位所花费的时间为每位1/(9600 bps)或104 µs。

对于每个传输的数据字节,实际上有10个位被发送:一个起始位,8个数据位和一个停止位。因此,在9600 bps时,我们实际上每秒发送9600位或每秒960(9600/10)字节。

接线和硬件

串行总线仅由两根电线组成-一根用于发送数据,另一根用于接收。因此,串行设备应具有两个串行引脚:接收器RX和发送器TX。

73c1bbdbde5b49bd1f1060b4caea18b6.png

请注意,RX和TX口是相对于设备本身的。因此,来自一台设备的RX应该接到另一台设备的TX,反之亦然。发射机应与接收机通信,而不是与其他发射机通信。

两个设备都可以发送和接收数据的串行接口是全双工或半双工。全双工意味着两个设备可以同时发送和接收。半双工通信意味着串行设备必须轮流发送和接收。

常见问题

任何水平的工程师都容易犯以下错误:

1. 接收到发送,接收到发送

这种情况看起来特别简单,但是非常容易遇到,我已经犯了无数次,请始终确保在串行设备之间交叉RX和TX线。

03e2813617d3254b0a231280ccd9ec9b.png

波特率不匹配

波特率类似于串行通信的语言。如果两个设备的通话速度不同,则数据可能会被误解或完全丢失。如果接收设备在其接收线路上看到的都是垃圾,请检查以确保波特率匹配。

f2b090a58254f76fb6c3b7d0d9971fc8.png

数据以9600 bps传输,但以19200 bps接收。波特率不匹配==垃圾。

总线争用

串行通信旨在仅允许两个设备通过一条串行总线进行通信。如果有多个设备尝试在同一串行线上进行传输,则可能会发生总线争用。等等等...

例如,如果您要将GPS模块连接到Arduino,则可以仅将模块的TX线连接到Arduino的RX线。但是,该Arduino RX引脚已经连接至USB到串行转换器的TX引脚,该端口在您对Arduino进行编程或使用Serial Monitor时就可以使用。这设置了GPS模块和FTDI芯片都试图同时在同一条线上传输的潜在情况。

4b4a48a273635f1f554ac0ef7e904f99.png

试图在同一条线上同时传输数据的两个设备很糟糕!在"最佳"状态下,两个设备都无法发送其数据。最坏的情况是,两个设备的传输线都会go声(尽管这种情况很少见,而且通常会受到保护)。

将多个接收设备连接到单个发送设备可以很安全。并非真正符合规格,并且可能不适合经过严格训练的工程师,但是它会起作用。例如,如果要将串行LCD连接到Arduino,最简单的方法可能是将LCD模块的RX线连接到Arduino的TX线。Arduino的TX已经连接到USB编程器的RX线,但是仍然只剩下一个设备来控制传输线。

1736cba4d7d87b38e3ffd05232184cd4.png

从固件的角度来看,这样分配TX线仍然很危险,因为您无法选择哪个设备可以听到什么传输信号。LCD最终会接收到不适合它的数据,这可能会命令LCD进入未知状态。

一般来说:一条串行总线,两个串行设备!

本文转载引用:

https://learn.sparkfun.com/tutorials/serial-communication

1effa0d397d01afa1c1571a853ab6f06.png

55ede68c50521fb9914f86427d23d315.png

0733b4da86639da7647ba566ba1b5fc6.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470747.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

div里嵌套了img底部会有白块问题和图片一像素问题解决

div里嵌套了img底部会有白块 因为img默认是按基线(baseline)对齐的。对比一下图片和右边的p, q, y等字母,你会发现这三个字母的“小尾巴”和图片下方的空白一样高。下面这张图中的黑线就是那条基线。 解决方案:一:vertical-align: bottom&…

Nodejs 中的Get、Post

Get、Post 超文本传输协议(HTTP)的设计目的是保证客户端机器与服务器之间的通信。 在客户端和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。 GET - 从指定的资源请求数据。(一般用于获取数据&#…

电脑故障扫描修复软件_电脑故障分析:电脑安装软件提示没有权限的解决方法...

我们安装软件时如果没有权限就会导致安装故障,最近就有用户安装软件的时候出现了无法将数值写入键software的错误提示,请验证您对该键拥有足够的访问权限,或者与您的技术支持人员联系。那么遇到这种问题该怎么办呢?接下来就让我们…

Nodejs 路由封装 封装一个类似 express 的路由

1、模块化的方式封装 routes.js: const http require(http); const fs require(fs); const path require(path) const url require(url) const ejs require(ejs) let getFileMime function (extname) {// 把异步读取文件方法改为同步读取文件方法let data fs.readFileSy…

天翼网关 ddns设置_19,微服务网关之Zuul

这一次给大家分享微服务网关的相关知识,这个也是微服务架构中,相当重要的组件之一,来,下面听我徐徐道来1,API网关概览1.1,现有的交互模式存在什么问题?目前,是客户端会直接跟多个微服…

MongoDB 数据库创建、删除、表(集合) 创建删除、数据的增、删、改、查

一、 连接数据库 1、连接数据库 清屏命令:cls 查看所有数据库列表:show dbs 二、 创建数据库、查看、删除数据库 1、使用数据库、创建数据库 use itying 如果真的想把这个数据库创建成功,那么必须插入一个数据。 数据库中不能直接插入数据&#xff0…

从LeetCode 210. Course Schedule II 了解拓扑排序

问题简述 给定n节课,每节课按0~n-1编号。 在修某些课的时候需要有其它课的基础,必须先上先修课。现在用pair的形式来表示要先修的课,比如 [ [0,1], [1,2] ] 就表示在修课程1之前必须先修课程0,修课程2之前必须修课程1。现在需要给…

MongoDb 大数据查询优化、 MongoDB 索引、复合索引、唯一索引、 explain 分 析查询速度

一、索引基础 索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得 更快。 MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧。 下面是创建索引的命令: db.user.ensureIndex…

ipconfig不是内部或外部_晶振有什么作用,如何选择合适的晶振,为什么有时候用内部晶振?...

一、 什么是晶振晶振,全名叫"晶体振荡器",它在电路当中起到产生振荡频率的作用,我们都知道,单片机可以看成是在时钟驱动下的时序逻辑电路,那么这个所需要的时钟就是晶振来产生,可以说它的单片机的…

Mongodb 账户权限配置

Mongodb 账户权限配置 1、第一步创建超级管理用户 use admindb.createUser({ user:admin, pwd:admin, roles:[{role:root,db:admin}] })2、第二步修改 Mongodb 数据库配置文件 默认路径:路径:C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg 打开…

笔记本电脑关机快捷键_2020年双十一值得入手的高性价比笔记本电脑外设推荐...

本文更新日期:2020.10.21 篇幅较长,请提前收藏关注电脑外设就是除主机外的大部分硬件设备都可称作外部设备,或叫外围设备,简称外设。计算机系统没有输入输出设备,就如计算机系统没有软件一样,是毫无意义的。…

MongoDB 的高级查询 aggregate 聚合管道

一、MongoDB 聚合管道&#xff08;Aggregation Pipeline&#xff09; 使用聚合管道可以对集合中的文档进行变换和组合。 实际项目&#xff1a;表关联查询、数据的统计。 MongoDB 中使用 db.COLLECTION_NAME.aggregate([{<stage>},...]) 方法 来构建和使用聚合管道。 先…

python函数在传参的时候,到底在传些什么?

C这样的语言用多了之后&#xff0c;在Python函数传递参数的时候&#xff0c;经常会遇到一个问题&#xff0c;我要传递一个引用怎么办&#xff1f; 比如我们想要传一个x到函数中做个运算改变x的值&#xff1a; def change(y):y 1x 1 print ("before change:", x) …

android学习笔记五。2、其他组件

一、ContentProvider内容提供者.是是android中一个应用向第三方共享数据的方式,android中的联系人,sms(短信记录)等都是通过这一方式来向外提供的 1、使用&#xff1a; 在应用中使用ContentProvider提供的数据并不是直接使用的,而是需要通过ContentResolver来实现的,ContentRes…

一维条形码识别c语言_条形码的优点

条形码是迄今为止最经济、实用的一种自动识别技术。条形码技术具有以下几个方面的优点A&#xff0e;输入速度快&#xff1a;与键盘输入相比&#xff0c;条形码输入的速度是键盘输入的5倍&#xff0c;并且能实现“即时数据输入”。B&#xff0e;可靠性高&#xff1a;键盘 输入数…

气象数据领航无人飞行器线路优化大赛解决方案(3rd place)

1 队伍介绍 队伍名称&#xff1a;酒后写诗 队伍成员&#xff1a;陈权、林望黎、黄章炜 队伍名次&#xff1a;3 / 1646 2 问题简介 这个问题说起来其实挺简单&#xff08;但实现起来困难重重&#xff09;&#xff0c;就是提供了气象局得到的10个模型的预测数据&#xff08;…

mac最好用的markdown_「建议收藏」PCMaclinux,最好用Markdown编辑器清单

文章很长&#xff0c;不想看&#xff0c;请直接拉到底看简略版清单&#xff01;&#xff01;如果您曾经用Word写过文章&#xff0c;并尝试将文本移动到CMS中(头条、百家号等)&#xff0c;那么您可能已经花费了大量时间&#xff0c;来调整这种跨平台转换导致的格式杂乱。因此&am…

Nodejs 操作 MongoDb 数据库

一、在 Nodejs 中使用 Mongodb 在前面的博文我们给大家讲了如何使用命令操作 Mongodb&#xff0c;这篇博文开始我们给大家讲解一 下如何使用 Nodejs 来操作 Mongodb 数据库 Nodejs 操作 mongodb 数据库官方文档&#xff1a;https://www.mongodb.org.cn/drivers/5.html npm i…

机智的ensemble

1 引言 本文主要结合了李宏毅的机器学习课程之Ensemble和周志华的《机器学习》西瓜书两者的说法&#xff0c;对ensemble这一竞赛利器做了总结。 Ensemble主要可以分为bagging和boosting两种方法。其中&#xff0c;bagging适用于基模型复杂度比较高的情况&#xff08;如树模型…

Linux的sort命令

Linux的sort命令 Linux的sort命令就是一种对文件排序的工具&#xff0c;sort命令的功能十分强大&#xff0c;是Shell脚本编程时常使用的文件排序工具。 sort命令将输入文件看做由多条记录组成的数据流&#xff0c;而记录由可变宽度的字符串组成&#xff0c;以换行符作为定界符。…