0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

IIC通信,我猜你不会陌生

454398 来源:罗姆半导体社区 作者:罗姆半导体社区 2022-12-23 12:37 次阅读

来源:罗姆半导体社区

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

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


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 用于远程通信。通信接口部分线路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,当 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 单元使用或另外增加专门存放参数的芯片。

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IIC
    IIC
    +关注

    关注

    11

    文章

    300

    浏览量

    38277
收藏 人收藏

    评论

    相关推荐

    IIC信号线需要增加上拉电阻,是因为IIC的IO是什么

    IIC通信中扮演着至关重要的角色,而上拉电阻的加入则是实现这种通信方式有效性和可靠性的关键。以下是对此现象的介绍: 一、IIC通信与开漏输出
    的头像 发表于 10-06 15:50 477次阅读

    IIC通信模式下,如何提高INA260测量电流的精度?

    IIC通信模式下,如何提高INA260测量电流的精度?
    发表于 08-19 06:18

    NSA2302iic通讯地址

    最近正在用NSA2302这个芯片,想问一下NSA2302的IIC通信地址是出厂时就设置好的吗,还是买回来后需要自己烧写,使用数据手册里给出的通信地址一直无法建立
    发表于 07-04 09:55

    stm8的供电电压是3.3V,IIC从机的供电电压是5V,请问这个IIC能正常通信吗?

    请教一下,stm8的供电电压是3.3V,IIC从机的供电电压是5V,请问这个IIC能正常通信吗?是不是只要stm8的耐压是5V就没问题?
    发表于 05-07 08:01

    stm8s103k与AT24C02的iic通信不稳定是什么原因导致的?

    stm8s103k与AT24C02的iic通信不稳定,有时可以读取数据,有时读不出 是什么原因? 有人与ADS1110用iic通信过吗?
    发表于 04-30 07:33

    lis3dh使用IIC通讯,CS引脚悬空也能正常IIC通信吗?

    芯片手册上CS引脚接高电平是IIC通讯,接低电平是SPI通讯;接手的项目中,CS引脚是悬空的,IIC通讯能进行,想知道悬空能IIC可靠通讯嘛?
    发表于 03-28 09:44

    STM32 IIC通信升级系统

    诸神,需求一套可以使用IIC通信升级固件的系统 1,STM32烧录板,型号自定,尽量低成本,程序 2,STM32G031G8U6目标板示例程序 有人能做这项目吗?或者大家有好的思路吗? 如果能接请联系425453660@qq.com 欢迎大家发表看法!
    发表于 03-20 12:40

    FPGA实现IIC协议的设计

    今天给大家带来的是IIC通信IIC协议应用非常广泛,例如与MPU6050进行通信,配置OV5640摄像头、驱动OLED屏幕等等,都需要使用到IIC
    的头像 发表于 03-04 10:49 1182次阅读
    FPGA实现<b class='flag-5'>IIC</b>协议的设计

    GD32 MCU碰到IIC总线卡死怎么办?

    大家在使用MCU IIC通信时,若碰到设备复位或者总线干扰等情况,可能会导致IIC总线卡死,表现上总线上SDA或者SCL其中一根线为低电平,IIC总线一直处于busy状态。此时若代码上
    的头像 发表于 02-24 09:46 3699次阅读
    GD32 MCU碰到<b class='flag-5'>IIC</b>总线卡死怎么办?

    没有10年工作经验,不会用电磁场来分析高速问题吧?

    过孔stub到底有什么影响时,也非常的有用。例如以下这个有比较长stub的过孔结构。 从S参数上,我们当时知道会出现谐振点,如下所示: 但是不看看电场,不会了解这个在谐振点频点位置的信号是怎么走
    发表于 02-01 14:48

    通过Python脚本实现WIFI密码的自动

    本文将记录学习下如何通过 Python 脚本实现 WIFI 密码的自动解。
    的头像 发表于 01-25 10:46 3305次阅读
    通过Python脚本实现WIFI密码的自动<b class='flag-5'>猜</b>解

    Wi-Fi 7的出现会不会对5G这样的蜂窝通信技术造成影响?

    说到短距无线通信,大家应该不会感到陌生。我们每天都在使用的Wi-Fi、蓝牙,都属于这个技术类别。
    的头像 发表于 01-22 17:18 2054次阅读
    Wi-Fi 7的出现会<b class='flag-5'>不会</b>对5G这样的蜂窝<b class='flag-5'>通信</b>技术造成影响?

    【有那么点详细的CW32学习笔记】IIC接口-主机发送

    OLED屏幕,如果对如何编写各种模块的驱动代码束手无策,那本系列教程的IIC章节或许能让受益匪浅。 Inter-Integrated Circuit Bus,集成电路总线,简称IIC
    的头像 发表于 01-11 09:53 573次阅读
    【有那么点详细的CW32学习笔记】<b class='flag-5'>IIC</b>接口-主机发送

    【CW32学习笔记】IIC接口-主机发送

    接着就是比较重要的部分了,IIC接口的收发并不是全自动的,因为一个完整的通信不仅包括发数据(地址、数据什么的),还包含收数据(啥也不干也得接收ACK信号),所以IIC通信的每个部分基本
    的头像 发表于 01-10 15:59 607次阅读
    【CW32学习笔记】<b class='flag-5'>IIC</b>接口-主机发送

    芯知识 | 什么是语音芯片的IIC控制模式?

    Inter-IntegratedCircuit,是一种串行通信协议,用于连接微控制器和各种外设芯片。在语音芯片中,IIC控制模式是指通过IIC接口对语音芯片进行控制和数据传输的方式。与传统的
    的头像 发表于 12-20 08:41 545次阅读
    芯知识 | 什么是语音芯片的<b class='flag-5'>IIC</b>控制模式?