打印

小议一下串口通信相关概念(新家)

[复制链接]
7277|40
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前一段时间维护旧代码(别人写的),用到了串行通信技术,有I2C、SPI、UART、还有MODBUS,那时候对这些概念总是朦朦胧胧的,似懂非懂,一直记在心上,平时就注意搜索相关的资料,发现网上资料非常多,但是有系统介绍的却不多。

先提几个当时的疑问
1.RS232协议RS485协议,和I2C协议、SPI协议、UART协议还有MODBUS协议有什么不同?
2.经常说单片机资源有I2C、SPI、UART,此时这些名词是指什么,和1中的协议又有什么区别?
3.PC上的COM是怎么定义的?

以上只是个人当时的一部分困惑,现在也逐渐有个整体大概的认识,在这里说说自己的认识,希望大家都来谈一谈,就当作抛砖引玉。

相关帖子

沙发
lxl_0598|  楼主 | 2010-2-5 10:16 | 只看该作者
从基本的开始说
1.首先就是通信了,通信魅力无穷,就好比人于人之间的交流一样妙趣横生,通信分串行通信和并行通信。
用的多的就是串行通信了。
2.串行通信的基本方式分 异步 和同步 就是看时钟源是否相同
3.从串行通信的数据传送方向上看有单工,半双工,全双工之分。
  单工就相当于单方向单车道,车只能从A端开到B端
  半双工相当于双方向单车道,车可以从A开到B,也可以从B开到A,只是一次只能有一个方向
  全双工相当于双方向双车道,这个和我们生活中的就很像了,不过生活中的基本是4车道或更多,当然也有 不按方向开的车,这个另当别论 :D

使用特权

评论回复
板凳
lxl_0598|  楼主 | 2010-2-5 10:17 | 只看该作者
;P4.串行通信的组网方式
  a点对点  这个就好比家教一对一,至于你们直接的交流方式,是老师问你答(没问不答/说),还是老师没问你就答/说  这就是半双工 和全双工的区别   我想家教里就不会有单工通信吧
  b.一主多从  大教室上课,一个老师许多学生,这里就通信方式就多了 有单工 半双工 全双工, 我大学上课时基本是单工通信 :lol
c.多主多从  自由讨论 每个人都可以自主发言  更像宿舍的卧谈会

使用特权

评论回复
地板
lxl_0598|  楼主 | 2010-2-5 10:18 | 只看该作者
那么.RS232协议RS485协议,和I2C协议、SPI协议、UART协议还有MODBUS协议有什么不同? 说这个问题前先说一说OSI模型

使用特权

评论回复
5
lxl_0598|  楼主 | 2010-2-5 10:21 | 只看该作者
OSI模型
主机A                                            主机B
应用层 <-------应用层协议---------> 应用层
表示层 <-------表示层协议--------->  表示层
会话层 <-------会话层协议---------> 会话层
传输层 <-------传输层协议--------->  传输层
网络层 <-------网络层协议---------> 网络层
数据链路层 <----数据链路层协议---> 数据链路层
物理层 <-------物理层协议--------->  物理层

使用特权

评论回复
6
lxl_0598|  楼主 | 2010-2-5 10:21 | 只看该作者
这里就只说物理层和数据链路层
物理层: 定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层
     协议提供了一个传输数据的物理媒体。
   在这一层,数据的单位称为比特(bit)。
   属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。
数据链路层:在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、
     流量控制、数据的检错、重发等。
   在这一层,数据的单位称为帧(frame)。
   数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。

在这里我们就可以解答第一个问题了,RS232协议RS485协议RS422协议是属于物理层它定义了通信的电气特性(逻辑0和逻辑1的定义)还有使用的接口等。而I2C、SPI、UART协议是属于数据链路层上的协议,至于他们的下一层使用的是什么协议数据链路层是不管的,通常I2C SPI的传输电平是TTL(通常用于芯片间的通信,通信距离叫近)所以暂且说他们的物理层的协议是TTL协议(呵呵,个人的说法);而UART协议的下一层协议也就是他物理层上的协议我们通常采用RS232或RS485,这样传输距离远,我们通常拿来做集中控制。

使用特权

评论回复
7
lxl_0598|  楼主 | 2010-2-5 10:21 | 只看该作者
那么MODBUS呢,先申明一下这里只讨论MODBUS(RTU)和MODBUS(ASCII)模式,他属于哪一层呢,
在MODBUS协议书里有提到,标准MODBUS使用RS-232-C兼容串口,还规定了数据成帧格式,以及控制机制(详细的见协议书),这里就可以看出MODBUS包含了物理层和数据链路层。

使用特权

评论回复
8
lxl_0598|  楼主 | 2010-2-5 10:22 | 只看该作者
由于是想到什么就写什么 所以写的会比较散一些

希望大家都来说一说自己的认识或疑惑

使用特权

评论回复
9
lxl_0598|  楼主 | 2010-2-5 10:22 | 只看该作者
第二个问题 我们经常说的单片机上的I2C SPI UART 这些是指硬件资源那么和I2C协议 SPI协议 UART协议的区别是什么 做个比喻不同的协议就好比不同的语言规定如果说I2C协议是汉语的规定,规定了汉字怎么写什么意思怎么读,而SPI协议可能是英文规定,规定了单词怎么读怎么写什么意思;那么I2C硬件资源SPI硬件资源就是通晓汉语、英文的能力了。   呵呵 这个比喻可能不是很恰当

使用特权

评论回复
10
lxl_0598|  楼主 | 2010-2-5 10:22 | 只看该作者
3.PC上的COM是怎么定义的?

早期IBM把串行通信接口引入到PC上,使用了RS-232-C接口,后来沿用至今。

而我们通常说串口通信,并为指明物理层上的协议是什么,可能是RS-232-C RS485等。

所以PC串口是指数据链路层使用UART协议 物理层使用RS232C的串行通信接口。

使用特权

评论回复
11
lxl_0598|  楼主 | 2010-2-5 10:22 | 只看该作者
个人觉得这里面的一个思想很重要,就是分层思想。在写程序模块用到分层思想,这样程序的结构更清晰,移植行更强。 还有就是生活中也有很多分层思想,就说公司吧,这里的分层思想最明显,BOSS-->主管--->......-->员工,不同的部门就相当于程序里不同的模块,各个部门里又有部门经理、小兵等等,这里就是分层思想了,不同的部门负责不同的事务,各部门各司其职,不可越权;部门里由经理下达任务给主管,主管在下达任务给员工,这里经理是“看不到”员工的,他只看到主管,任务的反馈信息则由员工反馈给主管,主管反馈给经理,
经理------>主管------>员工
经理<----- 主管<-----员工
这里是不允许越级行为发生的,当通常我们默认由上至下的越级是可以的,而由下至上的越级是要坏事的,由其但你的主管知道后 呵呵

同样在模块的分层里,假设我们分为应用层-------驱动层-------硬件接口层,在这里则是严格的遵循由上至下或由下至上一步一步走,这样当我们移植到不同单片机或使用单片机不同的IO口此时我们只要修改硬件接口层;当我们需要不同的功能时此时我们修改应用层。

以上纯属个人愚见,大家参考参考

使用特权

评论回复
12
lxl_0598|  楼主 | 2010-2-5 10:24 | 只看该作者
再来说一说,在UART配置里有个数据位的选择5/6/7/8/9位,这个不同的配置是什么意思呢,为什么会有这些区别,又是怎么实现的呢?
/*********************************************************************
*    声明一下:一下内容都是基于PIC单片机的,不过我想51也差不了多少                         *
**********************************************************************/
数据位就是包含用户有用信息的数据位数,在UART发送过程中,用户把要发送的数据写入TXREG内,然后硬件自动控制把数据从TXREG装载到TSR,并且与来自寄存器TXSTA的TS9D位共同构成9位数据(如果选定9位格式),再在前面添加一位0在后面添加一位停止位1,构成一个完整的结构;最后在波特率时钟的控制下,有移位寄存器TSR吧数据一位一位地依次发送出去(LSB先发送)。

使用特权

评论回复
13
lxl_0598|  楼主 | 2010-2-5 10:24 | 只看该作者
好了 下面我们来选择不同的配置
1. 8位数据位,1位奇偶校验位那么一帧数据是怎么组成的呢,
  起始位 0   +   8位数据位(LSB--->MSB)  +   奇偶校验位(1位)  +    停止位 1
   硬件添加       用户写入                        用户写入              硬件添加

2.9位数据位,无奇偶校验

  起始位 0   +   8位数据位(LSB--->MSB)  +   第9位数据(1位)  +    停止位 1
   硬件添加       用户写入                        用户写入              硬件添加

好了,从1和2中我们可以看出第9位数据和奇偶校验位使用的是同一位置,所以这二者只能取一,就没有9位数据位+1位奇偶校验位 这种配置了。

3.   5位数据位+奇偶校验位
是方式一
  起始位 0   +   8位数据位(LSB--->MSB)  +   奇偶校验位(1位)  +    停止位 1
   硬件添加       用户写入                        用户写入              硬件添加
还是方式二
  起始位 0   +   5位数据位(LSB--->MSB)  +   奇偶校验位(1位)  +    停止位 1
   硬件添加       用户写入                        用户写入              硬件添加

这个这是我的困惑之处,个人认为是方式一,在硬件接收到数据以后在进行自动处理,将8位数据转为5位数据..........

欢迎大家来讨论一下

使用特权

评论回复
14
lxl_0598|  楼主 | 2010-2-5 10:25 | 只看该作者
搬家 完成

使用特权

评论回复
15
lxyppc| | 2010-2-5 10:26 | 只看该作者
插个队来听楼主讲课

使用特权

评论回复
16
lxl_0598|  楼主 | 2010-2-5 10:27 | 只看该作者
为了验证5位数据的发送方式,在PC串口上模拟了一把,不知道这个和单片机会不会有差别我想应该是不会

先上图

使用特权

评论回复
17
yewuyi| | 2010-2-5 10:34 | 只看该作者
MODBUS的主要含义还是数据层面的协议,物理层可以是232,也可以是485,并没有太多的限制。

使用特权

评论回复
18
lxl_0598|  楼主 | 2010-2-5 10:42 | 只看该作者
工具 虚拟串口 + 串口调试 助手

9600波特率 + HEX输入 + HEX显示

图一  发送端 8位数据位 + 1位奇校验
        接收端  同上

8位数据+奇校验 9600bound.jpg (948.88 KB )

8位数据+奇校验 9600bound.jpg

使用特权

评论回复
19
lxl_0598|  楼主 | 2010-2-5 10:45 | 只看该作者
图二
发送端 5位数据 +1位 奇校验
接收端 同上

5位数据+奇校验 9600bound.jpg (941.96 KB )

5位数据+奇校验 9600bound.jpg

使用特权

评论回复
20
lxl_0598|  楼主 | 2010-2-5 10:49 | 只看该作者
图三
发送端 5位数据 + 1位奇校验
接收端 8位数据 + 1位奇校验

5(8)位数据+奇校验 9600bound.jpg (943.37 KB )

5(8)位数据+奇校验 9600bound.jpg

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:门里的一只小虫......

16

主题

225

帖子

1

粉丝