几种常用单片机之间的通信方式?-苏州安嘉

硬件工程师告诉你如何实现不同类型单片机之间的通信,少走弯路

单片机之间常见的几种通讯方式?① 使用硬件 UART 进行异步串行通信。这是一种有效且可靠的通信方式,占用较少的端口线。相关示例:STM32和51 MCU串行通信示例;但遗憾的是,很多小型MCU没有硬件UART,有的有独特的UART。如果系统需要的硬件资源不足以与主机通信。

///插曲:今年年初,记录了一个比较系统的单片机入门教程。如果你愿意,你可以找我拿。免费的,可以私信~点击我的黑字头像加我。收哦。最近比较闲,和学生一起完成项目,带学生参加省级以上比赛///

正文开始:

这种方式一般用于单片机有硬件UART,不需要与外界进行串行通信或使用双UART单片机的情况。②采用片内SPI接口或I2C总线模块串行通信形式。SPI/I2C接口具有硬件简单、软件编程容易的特点,但目前大多数单片机都没有硬件SPI/I2C模块。③用软件模拟SPI/I2C模式通信,这种方式很难模拟从机模式,通信双方必须对每个bit进行响应,通信速率和软件资源开销会构成很大的矛盾,而且将很难处理。这导致整体系统性能急剧下降。这种方法只能在流量很少的情况下使用。④端口对端口并行通信,直接通过单片机的端口线连接,增加1-2条握手信号线。这种方式的特点是通信速度快,一次可以传输4位或8位,甚至更多,但需要占用大量端口,数据传输是准同步的。一台单片机向另一台单片机传输1个字节后,必须等到另一台单片机接管响应信号后,才能传输下一个数据。一般用于一些硬件端口比较丰富的场合。⑤使用双口RAM作为缓冲通信。④端口对端口并行通信,直接通过单片机的端口线连接,增加1-2条握手信号线。这种方式的特点是通信速度快,一次可以传输4位或8位,甚至更多,但需要占用大量端口,数据传输是准同步的。一台单片机向另一台单片机传输1个字节后,必须等到另一台单片机接管响应信号后,才能传输下一个数据。一般用于一些硬件端口比较丰富的场合。⑤使用双口RAM作为缓冲通信。④端口对端口并行通信,直接通过单片机的端口线连接,增加1-2条握手信号线。这种方式的特点是通信速度快,一次可以传输4位或8位,甚至更多,但需要占用大量端口,数据传输是准同步的。一台单片机向另一台单片机传输1个字节后,必须等到另一台单片机接管响应信号后,才能传输下一个数据。一般用于一些硬件端口比较丰富的场合。⑤使用双口RAM作为缓冲通信。这种方式的特点是通信速度快,一次可以传输4位或8位,甚至更多,但需要占用大量端口,数据传输是准同步的。一台单片机向另一台单片机传输1个字节后,必须等到另一台单片机接管响应信号后,才能传输下一个数据。一般用于一些硬件端口比较丰富的场合。⑤使用双口RAM作为缓冲通信。这种方式的特点是通信速度快,一次可以传输4位或8位,甚至更多,但需要占用大量端口,数据传输是准同步的。一台单片机向另一台单片机传输1个字节后,必须等到另一台单片机接管响应信号后,才能传输下一个数据。一般用于一些硬件端口比较丰富的场合。⑤使用双口RAM作为缓冲通信。它必须等到另一台单片机接管响应信号后才能传输下一个数据。一般用于一些硬件端口比较丰富的场合。⑤使用双口RAM作为缓冲通信。它必须等到另一台单片机接管响应信号后才能传输下一个数据。一般用于一些硬件端口比较丰富的场合。⑤使用双口RAM作为缓冲通信。

这种方式最大的特点是通信速度快,双方可以直接用指令操作读写内存;但是这种方式需要大量的端口,而且双口RAM的价格很高,一般只用于一些对速度有特殊要求的场合。

从以上几种方案来看,各种方法对硬件的要求和限制都很大,尤其是在功能简单的单片机上很难实现。方法意义重大。③、④ 在方案中,两个微控制器要发送的每个位或每个字节都进行响应。当通信数据量大时,会消耗大量的软件资源,这在一些实时性要求高的地方是不允许的。针对这个问题,假设在单片机之间增加一个数据缓冲区,先将大量数据写入缓冲区,然后让对方取回。效率。说到数据缓冲,我们马上就会想到并行RAM,但是并行RAM需要占用大量的端口线(数据线+地址线+读写线+片选线+握手线),一般16线以上。这是一个令人望而生畏的数字,而且会大大增加PCB面积,使布线变得困难,很少有人用这种方式。

串行接口 RAM 在市场上很少见,难以获得且价格昂贵。移位寄存器也可以用作数据缓冲器,但目前容量最大的只有128位。由于是“先进先出”的结构,无论传输多少数据,接收方都必须移动整个寄存器,灵敏度差,移位寄存器容量大。位寄存器也很少见,很难买到。然后,一种名为“铁电存储器”的芯片的出现,为我们带来了克服它的方法。如何使用铁电存储器作为数据缓冲器进行通信?

铁电存储器是美国Ramtran公司推出的一种非易失性存储器件,简称FRAM。与普通的EEPROM和Flash-ROM相比,具有无需写入时间、读写次数不限、无分布式结构、可连续写入和播放等优点,具有RAM和EEPROM的双重特性,价格相对较低。.

此时,大多数单片机系统都配备了串行EEPROM(如24CXX、93CXX等)来存储参数。如果用一块 FRAM 代替原来的 EEPROM,它不仅可以存储参数,还可以作为串行数据通信的缓冲区。两台(或多台)单片机和一块FRAM连接成多主从I2C总线方式,加上几条握手线,得到简单高效的通信硬件电路。

在软件方面,只有克服I2C多主从的控制冲突和通信协议问题,才能实现简单、高效、可靠的通信。示例(双单片机结构,多功能低功耗系统) 硬件?W78LE52 和 EMC78P458 组成了一个电池供电的远程通信工业流量计。78P458采用32.768kHz晶振,工作电流小,连续工作,实时采集传感器脉冲和温度、压力等一些模拟量;W78LE52采用11.0592MHz晶振,因为它的工作电流比较大。大,采用间歇性工作,负责流量的非线性校正,参数输入写入,液晶显示,与上位机通讯等功能,它的UART用于长距离通信。两台单片机共用一块带I2C接口的FRAM(FM24CL16)构成两主一从I2C总线控制方式,P3.5、P3.2的W78LE52分别与78P458的P51、P50相连作为握手信号线A和B。

我们把握手A线(简称A线)定义为总线控制指示线,主要用于获取总线控制权,判断总线是否“忙”;握手线B(简称B线)定义为通知线,主要用于通知对方取数据。I2C 总线仲裁?由于我们使用的是两主一从的I2C总线方式,所以防止两个主机同时操作从机(防冲突)是一个非常重要的问题。带有硬件I2C模块的设备一般是这样的。设备内部有一个总线仲裁器和一个总线超时定时器:当总线超时定时器超时时,指示总线空闲,微控制器可以发出命令获取总线。经过一系列的操作,确认获取总线的成功或失败;超时定时器清零,后续每次SCL状态改变都会清零总线上所有master的超时定时器,防止溢出,表示总线处于“busy”状态,直到一个主机完成后才会产生SCL脉冲总线控制;超时定时器溢出,总线返回“空闲”状态。

但是目前大部分单片机都没有配备硬件I2C模块,当两台主机的工作频率相差较大时,超时定时器的计时值只能设置一个较大的值,这也会影响公交车的效率。

下面介绍一种通过软件模拟I2C总线仲裁的方法(软件模拟I2C读写操作程序很常见,这里不再赘述):使用握手线A,当A线为高电平时,表示公共汽车空闲;当其中一台主机想要获得总线控制权时,它首先检查总线是否空闲,当它“忙”时退出。如果空闲,则向A线发送一个测试序列(例如:1000101011001011),每个发送位“1”后读取A线状态。

如果读取状态为“0”,则立即退出,说明其他设备已经抢占总线;如果顺序读取的A线状态正确,则说明已成功获得总线控制。指示总线处于“忙碌”状态,直到读取或写入高 A 线,使总线返回“空闲”状态。不同的主机使用不同的测试序列,或者生成随机的测试序列。测试序列的长度可以选择更长的,这样可以增加仲裁的可靠性。

协议书

对于一个可靠的通信系统来说,除了好的硬件电路之外,通信协议也是至关重要的。在单片机系统的 RAM 资源和执行速度非常有限的情况下,一个简单有效的协议非常重要。下面详细介绍一种更适合单片机通信的协议,数据以包的形式传输。包结构:

?包头——表示数据包的开始,有利于包完整性检测,有时可以省略

?地址——要传输的数据包的目的地址,如果地址是双机通信或硬件区分唯一的,可以省略

?Packet Length – 表示整个数据包的长度

?Command – 指示此数据包的角色

?Parameters – 要传输的数据和参数

?校验——校验数据包的正确性,可以是和校验、异或校验、CRC校验等或它们的组合

?Packet tail – 表示数据包的结束,有利于包完整性检测,有时可以省略

沟通过程?首先需要划分FRAM中的各个区域两个模拟信号如何同时输入到单片机,各个单片机的参数区域和数据接管区域。然后,单片机可以向另一台单片机发送数据包。传输完成后,向握手线B发送一个脉冲,通知对方取数据;接收方读取数据并处理后,写入 FRAM 中发送方的数据接管区。输入返回数据或通信失败标志两个模拟信号如何同时输入到单片机,然后向握手线B发送一个脉冲响应发送方。如果需要MCU 2发送,只需更换操作流程即可。

总结

五个优势

?简单:占用MCU端口线少(SCL、SDA、握手线A、握手线B)

?通用:软件模拟I2C主机模式,可以在任意多种单片机之间进行通信

高效率:由于使用数据缓冲,可以在不同时钟频率和速度的微控制器之间进行通信;读写数据时,可以以I2C总线的最高速度进行,一次可以传输大量数据;单个单片机可以将数据传输到 FRAM 当其他单片机不需要响应或等待时,它可以执行其他程序操作,提高软件工作效率。

Sensitive:通信硬件接口相当于每个MCU。通过软件配置,每个 MCU 既可以根据需要主动发送通信,也可以只响应其他 MCU 的呼叫。

?易于扩展:增加地址识别线,修改通讯协议,即可实现多机通讯

注意事项

?为了提高通信效率,握手线B最好使用中断端口,负脉冲宽度必须满足低速单片机的中断信号要求。如果没有中断,加一条端口线,通过改变端口状态通知对方,等待对方查询,不是负脉冲

?向对方发送负脉冲时,应屏蔽自己的中断

?由于参数和通讯缓冲区是同时设置在同一块FRAM中的,所以要避免参数的局部误操作。更好的解决办法是在地址后半部分注册参数(A2=1),在通信操作时拉高FRAM的WP管脚(单元后半部分的地址为protected)) ,可有效防止测试过程中参数区的误操作

?由于I2C总线在一段时间内只有一个主控和一个从控,当一个单片机写入通信数据时,另一个单片机无法操作FRAM。如需实时频繁读取FRAM中的参数,请提前将参数读入RAM单元或添加专用芯片进行参数注册。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论