TikTok加入WePROTECT全球联盟,保护未成年人网络安全
06-17
你知道单片机的通讯方式有哪些吗?越来越多的不同功能的微控制器为我们的设计提供了许多新的方法和思路。
对于某些场合,如:复杂的后台计算和通信以及高实时性的前端控制系统、消耗大量软件资源的系统、功能强大的低消耗系统、加密系统等。
如果多种不同类型的组合设计合理使用微控制器,可以实现极高的灵活性和性价比。
因此,多个异型单片机的系统设计逐渐成为一种新的思路,但单片机之间的通信一直是个问题。
方法扩展的主要问题。
本文将分析比较几种单片机之间的方法和难点,并提出解决方案。
1。
几种常用单片机之间的通信方式 ① 使用硬件UART进行异步串行通信。
这是一种有效、可靠的通信方式,占用端口线较少;但不幸的是很多小型微控制器没有硬件UART,有的只有一个 UART。
如果系统还需要与上位机通信,则硬件资源不够。
这种方式一般用在单片机有对应的UART且不需要与外界串行通信,或者使用双UART 单片机时。
② 采用片内SPI接口或2C总线模块串行通信形式。
SPI/I2C接口具有硬件简单、软件编程方便的特点,但目前大多数微控制器都没有硬件SPI/I2C 模块。
③使用软件模拟SPI/I2C 模式通信。
这种方法很难模拟从机模式。
通信双方都必须对每一位做出响应。
通信速率和软件资源开销会形成很大的差距。
矛盾如果处理不当,会导致系统整体性能急剧下降。
这种方法只能在流量很少的情况下使用。
④端口对端口并行通信,使用单片机的端口线直接连接,加1~2条握手信号线。
该方法的特点是通信速度快。
它可以一次传输4位或8 位,甚至更多,但需要大量的接口线,并且数据传输是准同步的。
当一个微控制器向另一个微控制器传输 1 字节后,它必须等到另一个微控制器收到响应信号后才能传输下一个数据。
一般用在一些硬件端口线比较丰富的场合。
⑤使用双口RAM作为缓冲通讯。
这种方式的最大特点是通信速度快,双方可以直接使用读写存储器的指令进行操作;但这种方法需要大量的接口线,而且双口RAM 的价格非常高,一般只用于一些对速度有特殊要求的场合。
从上述方案来看,各种方法对硬件都有很大的要求和限制,尤其是在功能简单的微控制器上实现起来比较困难。
因此,我们正在寻找一种简单有效的方法,可以在各种微控制器之间进行通信。
方法具有重要意义。
在③和④方案中,双方的微控制器对要传输的每一位或字节进行响应。
当通信数据量较大时,会消耗大量的软件资源,这在一些实时性要求较高的地方是不允许的。
针对这个问题,假设微控制器之间添加 1个数据缓冲区,先将大量数据写入缓冲区,然后让对方取回。
每个微控制器对于数据缓冲区都处于主控模式,这必然会导致通信效率大大提高。
说到数据缓冲,我们立刻想到并行 RAM,但是并行RAM需要大量的端口线(数据线+地址线+读写线+片选线+握手线),通常超过16条这是一个令人望而生畏的数字,而且会大大增加PCB 面积,给布线带来一定的困难。
很少有人使用这种方法。
串行接口RAM 在市场上很少见,不仅很难买到,而且价格非常昂贵。
移位寄存器也可以用作数据缓冲区,但目前最大容量只有 位。
由于是“先进先出”结构,无论传输多少数据,接收方都必须对整个寄存器进行移位,灵活性差,容量大。
移位寄存器也很少见且难以购买。
一种名为“铁电存储器”的芯片的出现给我们带来了解决方案。
2。
使用铁电存储器作为数据缓冲区的通信方法。
铁电存储器是美国Ramtran公司刚刚推出的一种新型非易失性存储器件,简称FRAM。
与普通 EEPROM和Flash-ROM相比,具有无写入时间、读写次数不受限制、无分布式结构、可连续写入、播放等优点。
因此,它具有RAM和EEPROM的双重特性 ,而且价格相对较低。
如今,大多数单片机系统都配备了串行EEPROM(如24CXX、93CXX等)来存储参数。
如果用一块FRAM代替原来的 EEPROM,它不仅可以存储参数,还可以作为串行数据通信的缓冲区。
2个(或更多)微控制器和1个FRAM连接形成多主从I2C 总线模式,通过添加少量握手线,可以获得简单高效的通信硬件电路。
在软件方面,只要解决了I2C多主- 的控制冲突和通信协议问题,就可以实现简单、高效、可靠的通信。
3。
示例(双微控制器结构,多功能低功耗系统) (1) 硬件 W78LE52和EMC78P组成电池供电的工业流量计,可以进行远程通信。
78P采用32.kHz 晶振,工作电流低,不间断工作。
实时采集传感器脉冲和温度、压力等一些模拟量; W78LE52使用11.MHz 晶体振荡器。
由于工作电流较大,间歇工作,负责流量的非线性修正、参数输入、液晶显示、与上位机通讯等功能。
其UART用于远程通信。
部分通信接口电路如图1 所示。
两个微控制器共享一块具有I2C接口的FRAM(FM24CL16),形成两主一从的I2C总线控制模式。
W78LE52的P3.5和P3.2分别与78P的 P51和P50连接作为握手信号线A和B。
我们将握手线A(简称A 线)定义为总线控制和指令线,主要用于获取总线控制权并判断总线是否“忙”;握手线B(简称B线)定义为通知线,主要用于获取总线控制权,判断总线是否“忙”。
用于通知对方拿走数据。
(2)I2C总线仲裁 由于我们采用的是两主一从的I2C总线方式,所以防止两个主设备同时操作从设备(防冲突)是一个非常重要的问题。
带有硬件I2C 模块的设备一般都是这样。
器件内部有1 总线仲裁器和总线超时定时器:当总线超时定时器超时时,表明总线空闲。
此时,单片机可以下发采集总线命令,总线仲裁器通过一系列操作确认采集总线成功或失败;超时定时器被清零,随后每一次 SCL状态变化都会清零总线上所有主机的超时定时器,以防止其溢出。
表示总线处于“忙”状态,直到有主机结束对总线的控制,不再产生SCL 脉冲;超时定时器溢出,总线返回“空闲”状态。
然而,目前大多数微控制器都没有配备硬件I2C模块,当两个主机的工作频率相差很大时,超时定时器值只能设置为较大的值,这也会影响总线的效率。
下面介绍一种用软件模拟I2C总线仲裁的方法(软件模拟I2C 读写操作程序很常见,这里不再赘述): 使用1条握手线A,流程图如图2所示,当A 线为高电平时,表明总线空闲;当其中一台主机想要获得总线控制权时,它首先检查总线是否空闲。
如果它是“忙”,则退出。
如果空闲,则向A 线发送测试序列(如:),发送每一位“1”后读取A 线路状态。
如果读取状态为“0”,则立即退出,说明其他设备已先获得总线;如果顺序读取的A线状态正确,则说明已成功获得总线控制权,此时A应拉低。
线指示总线处于“忙”状态,直到对高 A 线进行读取或写入操作使总线返回“空闲”状态。
不同的主机使用不同的测试序列,或者生成随机的测试序列。
测试序列长度可以选择更长,这样可以增加仲裁的可靠性。
(3)通讯协议 对于一个可靠的通讯系统,除了良好的硬件电路外,通讯协议也至关重要。
在微控制器系统的RAM 资源和执行速度非常有限的情况下,简单有效的协议非常重要。
下面详细介绍一种更适合单片机通信的协议。
数据以数据包的形式传输。
数据包结构: ① 标头——表示数据包的开始,有利于数据包完整性检测,有时可以省略; ② 地址——要传输的数据包的目的地址,如果只是双机通信或者硬件区分地址可以省略; ③数据包长度——表示整个数据包的长度; ④命令——表示此数据包的作用; ⑤参数——需要传输的数据和参数; ⑥验证——验证数据包的正确性,可以是和校验、异或校验、CRC校验等或其组合; ⑦ Packet tail——表示数据包的结束,有利于数据包完整性检测,有时可以省略。
4)通信流程 首先要在FRAM中划分各个区域,包括各个单片机的参数区、数据接收区等。
然后,该微控制器可以向另一个微控制器发送数据包。
传输完成后,通过向握手线B发送1 脉冲,通知对方取数据;接收方读取数据并处理后,将发送方的数据发送到FRAM。
接收区写入返回数据或通讯失败标志,然后向握手线B发送脉冲以响应发送方。
表 3是微控制器1和微控制器2在启动一次时的通信示例。
如需单片机2发送,只需交换操作流程即可。
4。
总结 通过实践,可以看出上述方法是可行的。
与其他方法相比,它具有以下优点: ①简单。
占用微控制器端口线少(SCL、SDA、握手线A、握手线B)。
② 通用。
该软件模拟I2C主机模式,可以在任何类型的微控制器之间进行通信。
③高效。

由于使用了数据缓冲,可以在不同时钟频率和不同速度的微控制器之间进行通信;读写数据时,可以以I2C总线最高速度进行,可以达到1 一次性传输大量数据;当一个微控制器向FRAM传输数据时,另一个微控制器无需一一响应或等待,可以执行其他程序操作,提高软件工作效率。
④灵活。
通信硬件接口相当于每个微控制器。
通过软件配置,每个微控制器可以根据需要主动发送通信,或者只能响应其他微控制器的调用。
⑤易于扩展。
通过增加地址识别线和修改通信协议,可以实现多机通信。
以下是需要注意的地址: ①为了提高通信效率,握手线B最好使用中断口,负脉冲宽度必须满足速度较慢的单片机的中断信号要求。
如果没有中断,则应增加1 端口线,通过改变端口状态通知对方,等待对方查询,而不是负脉冲。
②向对方发送负脉冲时,应屏蔽自己的中断。
③由于参数和通讯缓冲区位于同一个FRAM ,因此必须避免参数部分的误操作。
更好的解决方案是将参数存储在地址的后半部分(A2=1),进行通信操作时,将FRAM的WP 引脚拉高(地址在后半部分的单元被写保护) ),可有效防止测试过程中参数误操作。
④ 由于 I2C 总线在一段时间内只有 1 个主设备和 1 个从设备,当一个微控制器正在写入通信数据时,另一个微控制器无法操作 FRAM 。
如果您需要实时、频繁地读取FRAM中的参数,请提前将参数读入RAM 单元中或额外增加专门存储参数的芯片。
以上就是单片机通信方式的分析。
我希望它能帮助你。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-17
06-18
06-08
06-18
最新文章
使用电子管有哪些注意事项?如何检查电子管之间是否短路?
博通支付1200万美元和解SEC财务欺诈指控
八名运营商高管确认加入虚拟运营商
内蒙古农牧区雷电灾害成因分析及防雷对策
北京联通将5G应用于世园会远程医疗急救
TD-SCDMA最后一轮冲刺测试启动,产业前景更加光明
专访阿里云总裁王健:云计算服务平台梦想成真
USB2.0控制器CY7C68013的接口设计与实现