单片机需要串行扩展的原因:
- 远距离,大范围,多目标的单片机控制应用,只能以串行方式进行。
社区安全报警系统,要对社区内众多地点的多个项目(例如,煤气泄漏,门磁开关,红外人体移动,温度,烟雾,玻璃破碎振动等)进行检测和报警,一旦出现异常情况能及时传送到物业管理部门或公安机关. 在这样一个庞大的监视网络中,众多的检测节点只能以串行方式接入系统.
- 手持无线化单片机控制系统
推广使用的无线抄表技术,由于无线化的要求,不但要串行方式而且还必须采用串行无线数据传输的蓝牙接口
- 单片机Internet技术的发展,使得串行化变得不可缺少
单片机Internet技术是为了把单片机接入互联网,进行控制信息的互联网传送,以实现更远距离以至异地自动检测与控制。而要把单片机接入互联网只能以串行方式。
虽然串行系统有速度较慢的缺点,但是随着单片机工作频率和性能的不断提高,速度问题已被逐渐淡化。
另外,串行方式还有连线简单,结构简化和成本低等优点,所以串行拓展已逐渐被广泛应用。
单片机串行扩展的实现方法主要有三种,即专用串行标准总线方法,串行通信口UART方法和软件模拟方法。
通过专用串行标准总线实现
使用专用串行标准总线是串行扩展的主要方法。 目前常用的串行总线标准主要有: I2C总线,串行总线SPI和通用串行总线USB
串行外围设备接口总线SPI
通用串行总线USB
存取访问总线ACCESS
I2C总线
I2C总线是一种串行同步通信技术,是Philips公司针对单片机需要而研制的,用于实现单片机串行外围扩展. I2C总线通过两条线以及两组信号的相互配合,就可以实现串行数据传输. I2C总线具有完善的总线协议,其内容涉及多个方面,这里只介绍其中的相关内容.
I2C总线结构和信号
I2C总线具有严格的规范,具体表现在接口的电气性能,信号时序,信号传输的定义,总线状态设置和处理,以及总线管理规则等方面.
I2C总线结构
I2C总线是由串行时钟线SCL和串行数据线SDA构成的双向数据传输通路,其中SCL用于传送时钟信号,SDA用于传送数据信号. 通过I2C总线构成的单片机串行系统中,挂接在总线上的单片机以及各种外围芯片和设备等统称为器件.
一个I2C总线系统允许接入多个器件,传输速率不同也可以,甚至还可以是另一个远程I2C系统的驱动电路,从而形成两个I2C系统的相互交接. I2C总线系统中的器件都具有独立的电气性能,相互之间没有影响,可用独立电源供电(但需共地),并且可以在系统工作的情况下插拔
I2C总线器件接入
I2C总线的两条线SCL和SDA都是通过上拉电阻(一般为10kΩ)以漏极开路或集电极开路输出的形式接入I2C总线的.
I2C总线如此连接产生如下硬件关系:
- 总线系统中各器件对SCL线是逻辑“与”的关系,对SDA线也是逻辑“与”的关系。
- 对于低电平是逻辑“或”的关系,即系统中任一器件输出低电平都会使与之相连的总线变低。
这种关系使得I2C总线具有一大优点,即器件可以随时接入或移出,而不会对系统产生任何不良影响。
此外,SCL和SDA均为双向传输线,因为各器件中都有输入和输出控制。
I2C总线的状态和信号
I2C总线中的状态和信号都有严格的配合规则,并为相互配合关系赋予固定的含义。它们是I2C总线的基本元素,使用中应给予认真对待。
- 总线空闲
SCL和SDA均处于高电平状态,即为总线空闲状态,表明尚未有器件占有它。
总线空闲的高电平状态是线路连接造成的,因为它通过上拉电阻与电源相连 - 占有总线和释放总线
器件若想使用总线,应当先占有它,占有总线的主控器件向SCL线发出时钟信号。数据传输完成后应当及时释放总线,即解除对总线的控制(或占有),使其恢复为空闲状态。 - 时钟信号和数据信号
时钟信号出现在SCL线上,而数据信号在SDA线上传输。数据传输以位为单位,一个时钟周期只能传输一位数据。 SDA线上高电平为数据位1,低电平为数据位0. 时钟信号和数据信号的配合关系是:
在时钟信号高电平期间数据线上的电平状态必须保持稳定,只有在时钟信号为低电平的时候,才允许数据位状态发生变化。 - 启动信号和停止信号
串行数据传输的开始和结束由总线的启动信号和停止信号控制,启动信号和停止信号只能由主控器件发出,他们所对应的是SCL的高电平和SDA的跳变。
当SCL线为高电平时,主控器件在SDA线上产生一个电平负跳变,这便是启动信号
当SCL线为高电平时,主控器件在SDA线上产生一个电平正跳变,这便是停止信号
停止信号出现后,要间隔一定时间,才能认为总线被释放并返回空闲状态。
通常启动信号用S表示,停止信号用P表示。启动信号之后便开始I2C总线上的数据传输操作。此外在数据传输过程中也可能出现启动信号,但这个启动信号称为重复启动信号,用Sr表示,发出重复启动信号是为了开始一次与前面不同的新的数据传输,例如,改变数据传输方向或寻址一个新的从器件等。 - 应答信号和非应答信号
应答信号是对字节数据传输的确认,每当一个字节数据传输完成后,应当由接收器件返回一个应答信号。
例如在主发送方式下,应答信号的发出过程是:主发送器释放SDA线并在SCL线上发出一个时钟脉冲(相当于本字节传送的第9个时钟脉冲),被释放而转为高电平的SDA线转由接收器控制并将SDA线拉低。所以对应于第9个时钟脉冲高电平期间的SDA低电平就是应答信号。对应于第9个时钟脉冲,SDA线仍保持高电平,则为非应答信号。
在使用时,应答信号以ACK(或A)表示,非应答信号以
A
C
K
‾
\overline{ACK}
ACK(或NA)表示。
6. 等待状态
在I2C总线中,赋予接收数据的器件使系统进入等待状态的权力,但等待状态只能在一个数据字节完整接收之后进行。
例如,当进行主发送从接收的数据传输操作时,如果从器件在接收到一个数据字节之后,由于中断处理等各种原因而不能按时接收下一个字节。对此从接收器件可以通过把SCL线下拉为低电平,强行使系统进入等待状态。
在等待状态下,发送方不能发送数据,直到接收器认为自己能继续接收数据时,再释放SCL线,使系统退出等待状态,发送方才可以继续进行数据发送。
等待状态也称为延时状态,其实质是通过延长时钟脉冲周期而改变数据传输速率。
设置等待状态有两个作用:文章来源:https://www.toymoban.com/news/detail-818465.html
- 为接收器留出进行其他操作的机会
- 允许系统接入速度不同的器件
正因为此,I2C总线系统对接入器件的速度没有要求。文章来源地址https://www.toymoban.com/news/detail-818465.html
通过串行通信口UART实现
通过软件模拟实现
到了这里,关于单片机串行扩展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!