电子发烧友网 > 通信网络 > 正文

单片机和单片机是怎样通信的

2020年01月19日 17:36 次阅读

越来越多的功能各异的单片机为我们的设计提供了许多新的方法与思路。对于莫一些场合,比如:复杂的后台运算及通信与高实时性前台控制系统、软件资源消耗大的系统、功能强大的低消耗系统、加密系统等等。如果合理使用多种不同类型的单片机组合设计,可以得到极高灵活性与性能价格比,因此,多种异型单片机系统设计渐渐成为一种新的思路,但单片机之间的通信一直是困扰这种方法拓展的主要问题。

本文将分析比较几种单片机之间的方式、难点,并提出一种解决方案。

1、几种常用单片机之间的通信方式

①采用硬件UART进行异步串行通信。这是一种占用口线少,有效、可靠的通信方式;但遗憾的是许多小型单片机没有硬件 UART,有些也只有1个UART,如果系统还要与上位机通信的话,硬件资源是不够的。这种方法一般用于单片机有应件UART且不需与外界进行串行通信或采用双UART单片机的场合。

②采用片内SPI接口或2C总线模块串行通信形式。SPI/I2C接口具有硬件简单、软件编程容易等特点,但目前大多数单片机不具备硬件SPI/I2C模块。

③利用软件模拟SPI/I2C模式通信,这种方式很难模拟从机模式,通信双方对每一位要做出响应,通信速率与软件资源的开销会形成一个很大的矛盾,处理不好会导致系统整体性能急剧下降。这种方法只能用于通信量极少的场合。

④口对口并行通信,利用单片机的口线直接相连,加上1~2条握手信号线。这种方式的特点是通信速度快,1次可以传输4位或8位,甚至更多,但需要占用大量的口线,而且数据传递是准同步的。在一个单片机向另一个单片机传送1个字节以后,必须等到另一个单片机的接收响应信号后才能传送下一个数据。一般用于一些硬件口线比较富余的场合。

⑤利用双口RAM作为缓冲器通信。这种方式的最大特点就是通信速度快,两边都可以直接用读写存储器的指令直接操作;但这种方式需要大量的口线,而且双口RAM的价格很高,一般只用于一些对速度有特殊要求的场合。

单片机和单片机是怎样通信的

从上面几种方案来看,各种方法对硬件都有很大的要求与限制,特别是难以在功能简单的单片机上实现,因此寻求一种简单、有效的,能在各种单片机之间通信的方法具有重要的意义。③、④方案中,双方单片机要传递的每一位或每一个字节做出响应,通信数据量较大时会耗费大量的软件资源,这在一些实时性要求高的地方是不允许的。针对这一问题,假设在单片机之间增加1个数据缓冲器,大批数据先写入缓冲区,然后再让对方去取,各个单片机对数据缓冲器都是主控模式,这样必然会大大提高通信效率。谈到数据缓冲,我们马上会想到并行RAM,但是并行RAM需要占用大量的口线(数据线+地址线+读写线+片选线+握手线),一般在16条以上。这是一个让人望而生畏的数字,而且会大大增加PCB面积并给布线带来一定的困难,极少有人采用这种方式。串行接口的RAM在市场上很少见,不但难以买到而且价格很高。移位寄存器也可以做数据缓冲器,但目前容量最大的也只128位,因为是“先进先出”结构,所以不管传递数据多少,接收方必须移完整个寄存器,灵活性差而且大容量的移位寄存器也是少见难买的。一种被称为“铁电存储器”芯片的出现,给我们带来了解决方法。

2 、利用铁电存储器作为数据缓冲器的通信方式铁电存储器是美国Ramtran公司刚刚推出的一种新型非易失性存储器件,简称FRAM。与普通EEPROM、Flash-ROM相比,它具有不需写入时间、读写次数无限,没有分布结构可以连续写放的优点,因此具有RAM与EEPROM的双得特性,而且价格相对较低。现在大多数的单片机系统配备串行EEPROM(如24CXX、93CXX等)用来存储参数。如果用1片FRAM代替原有EEPROM,使它既能存储参数,又能作串行数据通信的缓冲器。2个(或多个)单片机与1片FRAM接成多主-从的I2C总线方式,增加几条握手线,即可得到简单高效的通信硬件电路。在软件方面,只要解决好I2C多主-从的控制冲突与通信协议问题,即可实现简单、高效、可靠的通信了。

3、 实例(双单片机结构,多功能低功耗系统)(1)硬件

W78LE52与EMC78P458组成一个电池供电、可远程通信的工业流量计。78P458采用32.768kHz晶振,工作电流低,不间断工作,实时采集传感器的脉冲及温度、压力等一些模拟量;W78LE52采11.0592MHz晶振,由于它的工作电流较大,采用间断工作,负责流量的非线性校正、参数输入、液晶显示、与上位机通信等功能,它的UART用于远程通信。通信接口部分线路如图1所示,2个单片机共用1片I2C接口的FRAM(FM24CL16)组成二主一从的I2C总线控制方式,W78LE52的P3.5、P3.2分别与78P458的P51、P50连接作握手信号线A与B。我们把握手线A(简称A线)定义为总线控制、指示线,主要用于获取总线控制权与判别总线是否“忙”;握手线B(简称B线)定义为通知线,主要用于通知对方取走数据。

(2)I2C总线仲裁

由于我们采用的是二主一从的I2C总线方式,因此防止2个主机同时去操作从机(防冲突)是一个非常重要的问题。带有硬件I2C模块的器件一般是这样的,器件内部有1个总线仲裁器与总线超时定时器:当总线超时定时器超时后指示总线空闲,这时单片机可以发出获取总线命令,总线仲裁器通过一系列操作后确认获取总线成功或失败;超时定时器清零,以后的每一个SCL状态变化对总线所有主机的超时定时器进行清零,以防止它溢出,指示总线正处于“忙”状态,直到一个主机对总线控制结束不再产生SCL脉冲;超时定时器溢出,总线重新回到“空闲”状态。但是目前大多数单片机没有配备硬件I2C模块,而且当2个主机的工作频率相差较大时,超时定时器定时值只能设为较大的值,这样也会影响总线的使用效率。下面介绍一种用软件模拟I2C总线仲裁的方式(I2C读写操作程序的软件模拟十分多见,这里不再多述):用1条握手线A,流程图如图2所示,当A线高电平时,指示总线空闲;当其中一个主机要获取总线控制权时,先查询总线是否空闲,“忙”则退出,空闲则向A线发送一个测试序列(如:1000101011001011),在每次发送位“1”后读取的A线状态。如果读取状态为“0”,马上退出,说明有其它器件已经抢先获取总线;如果一个序列读取的A线状态都正确,则说明已成功获得总线控制权,这时要拉低A线以指示总线“忙”,直到读写高A线,使总线回到“空闲”状态。不同的主机采用不同的测试序列,或产生随机测试序列,测试序列长度可以选得长一些,这样可以增加仲裁的可靠性。

(3)通信协议

一个可靠通信体系,除了好的硬件电路外,通信协议也至关重要。在单片机系统RAM资源与执行速度都非常有限的情况下,一个简捷有效的协议是非常重要的。下面具体介绍一种比较适用于单片机通信的协议,数据以包的形式传送。数据包结构:

①包头——指示数据包的开始,有利于包完整性检测,有时可省略;②地址——数据包要传送的目标地址,若只有双机通信或硬件区分地址可以省略;③包长度——指示整个数据包的长度;

④命令——指示本数据包的作用;

⑤参数——需要传送的数据与参数;

⑥校验——验证数据包的正确性,可以是和校验、异或校验、CRC校验等或者是它们的组合;⑦包尾——指示数据包的结尾,有利于包完整性检测,有时可省略。

(4)通信流程

首先,要在FRAM里划分好各个区域,各个单片机的参数区、数据接收区等。然后,单片机可以向另一个单片机发送数据包,发送完毕之后通过向握手线B发送1个脉冲通知对方取走数据;接收方读取数据并进行处理后,向FRAM内发送方的数据接收区写入回传数据或通信失败标志,再向握手线B发送1个脉冲回应发送方。表3是单片机1启动1次与单片机2之间的通信的例子。

如果需要单片机2发送的话,只需交换一下操作过程即可。

4 、总结

通过实践可知,以上方法是可行的。与其它方法相比具有发下优点:

①简单。占用单片机口线少(SCL、SDA、握手线A、握手线B)。

②通用。软件模拟I2C主机方式,可以在任何种类的单片机之间通信。

③高效。由于采用数据缓冲,可以在不同时钟频率、不同速度的单片机之间通信;读写数据时,可以I2C总线的最高速度进行,可以实现1次传送大量数据;在一个单片机向FRAM传送数据时,另一个单片机无须一一作出响应或等待,可以进行其它程序操作,提高软件工作效率。

④灵活。通信硬件接口对于各个单片机是对等的,通过软件配置,每个单片机既可以根据需要主动发送通信,也可以只响应其它单片机的呼叫。

⑤容易扩展。通过增加地址识别线,修改通信协议,即可做到多机通信。

以下是需要注意的地址:

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

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

③由于参数与通信缓冲区同时设在同一片FRAM内,要避免对参数部分的误操作。一个较好的解决办法是把参数存放在地址的后半部分(A2=1),在进行通信操作时,把FRAM的WP引脚拉高(地址在后半部分的单元写保护),这样可以有效地防止测验时对参数区误操作。

④由于I2C总线在一个时间段内只有1个主机和1个从机,所以当1个单片机正在写通信数据时,另一个单片机是不能对FRAM进行操作的。如果需要实时、频繁地读取FRAM中参数的话,请预先将参数读入RAM单元使用或另外增加专门存放参数的芯片。

责任编辑:ct

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

uCOS3源码解析视频教程-第4季第7部分

课程目标本课程是《朱有鹏老师单片机完全学习系列课程》第4季第7个课程,简明扼要的分析了ucos3的源码。其中重点分析了u
发烧友学院发表于 2017-12-16 00:00 17920次阅读
uCOS3源码解析视频教程-第4季第7部分

如何实现嵌入式应用的人机界面交互性设计

用户界面设计是屏幕产品的重要组成部分,它为人机交互构建了一个沟通环境。其中交互性设 计是用户界面设计....
发表于 2020-01-19 10:46 32次阅读
如何实现嵌入式应用的人机界面交互性设计

一个X25045的C51读写程序

本文档的主要内容详细介绍的是一个X25045的C51读写程序。
发表于 2020-01-18 11:13 69次阅读
一个X25045的C51读写程序

如何使用单片机驱动标准PC机键盘?C51程序详细...

键盘时钟接在p3.2口,既8051的外部中断int0上,键盘数据接到p1.0上每次按键,键盘会向单片....
发表于 2020-01-18 11:07 118次阅读
如何使用单片机驱动标准PC机键盘?C51程序详细...

如何使用通用单片机制作MIDI键盘

MIDI是电子乐器的语言,随着MIDI的诞生,数字化电子乐器已经越来越多,MIDI的应用也越来越普遍....
发表于 2020-01-18 09:07 75次阅读
如何使用通用单片机制作MIDI键盘

香橙派OrangePi开发板连接HDMI接口显示屏如何修改分辨率

Orange Pi 全志H2(型号:Zero,R1)和H3芯片系列(型号:One,Lite,PC,PC Plus,Plus 2E)的开发板...
发表于 2020-01-17 19:50 309次阅读
香橙派OrangePi开发板连接HDMI接口显示屏如何修改分辨率

单片机系统的扩展和配置应遵循哪些原则

一个单片机应用系统的硬件电路设计包含两部门内容:一是系统扩展,即单片机内部的功能单元,如ROM、RA....
发表于 2020-01-17 16:47 103次阅读
单片机系统的扩展和配置应遵循哪些原则

HC32L110设计注意事项

HC32L110设计注意事项 一、华大单片机HC32L110 在做硬件设计时请注意以下事项: 1 RESET引脚可以复...
发表于 2020-01-17 15:57 284次阅读
HC32L110设计注意事项

Orange Pi Zero开发板在Armbian系统下如何使用声卡功能

在使用Orange Pi Zero开发板时,安装Armbian的系统,有开发者反馈找不到声卡,这是因为声卡的功能是在Zero的转接...
发表于 2020-01-16 19:42 606次阅读
Orange Pi Zero开发板在Armbian系统下如何使用声卡功能

关于中美贸易战的影响,以及国产MCU企业的发展瓶颈

今年中美贸易摩擦对国内半导体企业的影响不少。国民技术认为正是在中美贸易战的影响下,国内市场对国产芯片的需求也更...
发表于 2020-01-16 14:42 172次阅读
关于中美贸易战的影响,以及国产MCU企业的发展瓶颈

Keil 破解

发表于 2020-01-16 10:33 310次阅读
Keil 破解

Microchip发布业界首款宇航级耐辐射以太网...

Microchip发布业界首款宇航级基于COTS的耐辐射以太网收发器和嵌入式单片机,耐辐射器件拓展了....
发表于 2020-01-16 07:56 138次阅读
Microchip发布业界首款宇航级耐辐射以太网...

香橙派开发板OrangePi 2G-IOT如何升级 NAND 中的 Android

OrangePi 2G-IOT 提供了两种方式的 Android 启动, 分别为 SD 卡启动和 Nand 启动。当需要升级 SD 卡或者 ...
发表于 2020-01-15 20:53 876次阅读
香橙派开发板OrangePi 2G-IOT如何升级 NAND 中的 Android

基于单片机AT89S52与总线技术实现小区周界防...

随着科学技术和经济的快速发展,人们对居家的概念已从最初满足简单的居住到注重对住宅的人性化需求,如安全....
发表于 2020-01-15 17:07 159次阅读
基于单片机AT89S52与总线技术实现小区周界防...

如何利用PIC16F877A单片机读写AT24C...

AT24C系列在增强型PIC实验板上编程的硬件原理图如下图所示,U7为实验板上24C02芯片,SDA....
发表于 2020-01-15 15:50 139次阅读
如何利用PIC16F877A单片机读写AT24C...

求助!单片机测自行车加速度

大四毕设 老师要求做一个单片机自行车测速装置, 要求:能测速度和加速度,要求两种测速方法,一个是通过软件求出,...
发表于 2020-01-14 19:47 260次阅读
求助!单片机测自行车加速度

2019年OrangePi 香橙派开发板人气盘点,谁是你心目中的C位?

年关将至,趁着快回家过年,除了吃喝玩乐“葛优躺”的例行活动,我们还可以来一点不一样的活动——开发板测评!下面就...
发表于 2020-01-14 16:47 427次阅读
2019年OrangePi 香橙派开发板人气盘点,谁是你心目中的C位?

如何利用单片机和C语言来设计数字滤波系统

数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。数据采集技术广....
发表于 2020-01-14 15:34 198次阅读
如何利用单片机和C语言来设计数字滤波系统

不断发展的网络和协议使智慧城市创新成为可能

到2020年,物联网产生的数据量将推动向“智慧边缘”的转变。随着组织致力于实现更有效的数据集成,他们....
发表于 2020-01-14 10:18 228次阅读
不断发展的网络和协议使智慧城市创新成为可能

基于fpga的电源设计

我现在没有一个具体的方案 谁能给我个提示一下 比如 fpga从哪入手(fpga一点不会) 具体的电路应该分为哪几个模块 单...
发表于 2020-01-13 23:30 279次阅读
基于fpga的电源设计

基于单片机语音控制开关设计

本人大四 现在想做一个单片机的语音控制开关系统 。因为之前学过一点单片机,不是很深入 想向各位大神寻求一点有关的资...
发表于 2020-01-13 13:00 532次阅读
基于单片机语音控制开关设计

智能家居主要的通信技术有哪几种

智能家居通信技术分为有线和无线。无线技术主要有:zigbee,z-wave,蓝牙,wifi,RF,E....
发表于 2020-01-13 09:11 82次阅读
智能家居主要的通信技术有哪几种

泛在电力物联网的发展进程

如果将2019年比作泛在电力物联网的建设元年,那么2020年,将是泛在电力物联网建设“三年攻坚”的突....
发表于 2020-01-11 10:03 354次阅读
泛在电力物联网的发展进程

单片机工作几小时后又出现重启是怎么回事

单片机产品在工作的时候,上电后是正常工作的,但是工作了几个小时后,偶尔会出现单片机重启的现象。从描述....
发表于 2020-01-11 09:39 449次阅读
单片机工作几小时后又出现重启是怎么回事

采用单片机和MCP2510、MCP2551芯片设...

本文提出的基于CAN现场总线的集散型火灾报警控制系统的网络结构如图1所示,每个节点都以AT89C51....
发表于 2020-01-10 16:48 160次阅读
采用单片机和MCP2510、MCP2551芯片设...

基于MSP430F135单片机与DSl8820芯...

煤炭作为一种重要的能源,在工业生产等许多方面发挥着举足轻重的作用,关系着国民经济的命脉。煤炭开采中的....
发表于 2020-01-10 16:31 120次阅读
基于MSP430F135单片机与DSl8820芯...

80C196KB单片机对灭菌器的控制设计方案

而灭菌器灭菌是否合格大部分取决于控制系统是否可靠,针对某医疗设备厂灭菌器控制系统不稳定、人机界面不友....
发表于 2020-01-10 16:12 126次阅读
80C196KB单片机对灭菌器的控制设计方案

动目标识别系统的关键技术及基于Z85C30芯片实...

MIS访问数据链的控制采用时分多址(TDMA)技术。根据不同的应用和操作模式,可采用不同的四种TDM....
发表于 2020-01-10 16:04 125次阅读
动目标识别系统的关键技术及基于Z85C30芯片实...

Endless OS在4GB RAM的Raspb...

在2020年国际消费电子展(CES 2020)上,Endless公司现场展示了如何在具有4GB RA....
发表于 2020-01-10 11:28 445次阅读
Endless OS在4GB RAM的Raspb...