打印

关于两个单片机通过I2C进行通讯的问题

[复制链接]
4963|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chengan123439|  楼主 | 2016-6-20 10:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我现在碰到了一个问题:
   有单片机A,这个A无IO口,只有一个I2C 总线接口,并且只能做主机,
   有单片机B,这个B有IO口和I2C 总线接口,并且也是主机。由于B 上有传感器的采集数据,所以想将B的数据传给A,不知道该怎么办?

我现在的想法:
   方法一:单片机B通过IO口来模拟I2C协议来让 A 将B视为是从机。(这种方法我没试,我觉得可能工作量比较大一些);
   方法二:这个是我想的一个绕一下的方法,假设A有一个EEPROM,或者类似的存储设备,A通过I2C总线从该存储设备中读取数据;那单片机B能否向A的这个存储设备中写数据?EEPROM我不知道有没有这个能力,比较B写A读,一般看到的都是A对其读写。

如果B能写,这样就间接实现了B传数据给A,不知可不可行??
  如果还有其他的建议,还得麻烦各位写下您的思路,灰常感谢....

相关帖子

沙发
ayb_ice| | 2016-6-20 12:38 | 只看该作者
都是主机无法通信,从机模拟很难的

使用特权

评论回复
板凳
suxindg| | 2016-6-20 14:41 | 只看该作者
如果要采用方法一,将B作为从机,则B的I2C接口必须具备从机中断功能,显然不行。
采用方法二,A和B都是主机,都能对EEPROM进行读写,但是必须想办法保证A和B不能同时去访问EEPROM,也就是A或B在去访问EEPROM时,先要判断一下EEPROM是否正在被另一个单片机访问,若是,则要等待访问结束;若不是,则可立即访问,同时要告知另一个单片机EEPROM正在被其它单片机访问,访问结束后,再告知另一个单片机已经结束访问。这个通常需要A和B之间用另一个I/O口来实现,你现在的情况是A没有I/O口可用,难!

使用特权

评论回复
地板
suxindg| | 2016-6-20 14:48 | 只看该作者
不知道你的单片机A和B中的I2C总线接口是芯片内部的硬件总线还是用通用I/O口模拟的软件总线?

使用特权

评论回复
5
ningling_21| | 2016-6-20 15:24 | 只看该作者
可以试试将B设为从机和A通信

使用特权

评论回复
6
JasonWangSE| | 2016-6-27 12:56 | 只看该作者
A和B之间没有其他的接口了么?板凳说的I/O也行啊;要是没有,A和B是只通过轮询去通知对方数据准备好的么?单纯通过共享EEPROM来解决双机通信问题比较困难。。。
A和B的I2C控制器有总线仲裁功能吧?要是有应该可以实现双主访问EEPROM,剩下就是双机通信的机制了,可以在EEPROM里设置两个标志位aFlag和bFlag,在读写之前进行检查

如果A想向EEPROM里写数据时可以按以下步骤处理:

aFlag = 1;

if (bFlag != 0)
    wait until bFlag == 0;

write data;
aFlag = 0;

如果B想从EEPROM中读数据时,则按以下步骤处理:

check:
    bFlag = 1;

    if (aFlag != 0)
        {
        bFlag = 0;
        wait until aFlag == 0;
        goto check;
        }

    read data;
    bFlag = 0;

使用特权

评论回复
7
chengan123439|  楼主 | 2016-6-30 18:54 | 只看该作者
非常感谢各位大虾de回答  ,问题已经解决(A空出了I/O口)

使用特权

评论回复
8
ahui1105| | 2016-7-1 09:54 | 只看该作者
群众的力量大。我们的单片机带IIC,带PWM,带触摸按键,带LCD/LED驱动,需要的可以联系锦锐科技,原厂MCU

使用特权

评论回复
9
fffqqqh| | 2017-8-10 23:25 | 只看该作者
你好,请问你的问题解决了吗?
我现在有类似的问题,想咨询下您。
如果你在线的话能加下我QQ吗?QQ:312515907

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

19

帖子

1

粉丝