打印

**声小了~~~不过有二极管的隔离就造成了不安全访问

[复制链接]
楼主: wxg699
手机看帖
扫描二维码
随时随地手机跟帖
21
hotpower| | 2008-2-21 20:42 | 只看该作者 回帖奖励 |倒序浏览

**声小了~~~不过有二极管的隔离就造成了不安全访问

任1个MCU不可能知道I2C总线(SDA/SCL)的状态~~~

应该和双口RAM等原理,1设备访问时应该封锁其他设备!!!

或用软件来进行总线的裁决。。。

使用特权

评论回复
22
awey| | 2008-2-21 20:49 | 只看该作者

我就知道 hotpower 看错电阻了,哈哈。。

I2C容许一夫多妻,但一妻多夫是非法的,除非偷着干。。。

使用特权

评论回复
23
alice84| | 2008-2-21 20:52 | 只看该作者

一妻多夫不非法

电视上看过我国某个地方有

使用特权

评论回复
24
bg6nw| | 2008-2-21 20:52 | 只看该作者

两只MCU中间有一根口线相连

就是商量商量谁先搞

使用特权

评论回复
25
香水城| | 2008-2-21 20:54 | 只看该作者

这不是一妻多夫,而是一仆二主

如果楼主使用STM32这种具有多主功能(Multimaster capability)的MCU,可以很简单地把两个MCU的I2C直接相连再连上I2C的EEPROM,如果线路不是太长SDA和SDL分别放一只(共2只)上拉电阻即可;不必加任何二极管。

2楼防止同时读写的信号线也属多余,因为I2C的多主结构自己会指示是否有冲突。

当然,如果使用支持多主功能的MCU,两个甚至多个MCU可以直接通信,不必通过多余的EEPROM。

使用特权

评论回复
26
alice84| | 2008-2-21 20:58 | 只看该作者

你们说的一妻多夫是?

妻--FM
夫--MCU?

使用特权

评论回复
27
gyt| | 2008-2-22 13:25 | 只看该作者

可以

使用特权

评论回复
28
sfofyyy| | 2008-2-22 13:37 | 只看该作者

干吗不直接两个mcu之间搞一个协议,岂不省心?

使用特权

评论回复
29
孤星119| | 2008-2-22 14:14 | 只看该作者

可以

使用特权

评论回复
30
后学| | 2008-2-22 17:22 | 只看该作者

一主一从,俩单片机握手,占用一个I/O,

使用特权

评论回复
31
程序匠人| | 2008-2-22 19:21 | 只看该作者

只要注意两个要点,就可以

1、总线仲裁。方法很多,比如加入仲裁线。或者两颗MCU进行其它约定。目的只有一个,就是避免同时访问。

2、SDA 和 SCL 口要做成 “线与”。即,当一个MCU要对该口置1时,应该设置为高阻态,通过外部上拉电阻拉高就可以了,这样可以避免另一个MCU把该口拉低时,二者的电平冲突。许多单片机IO口都可以实现“三态”的。如此,SDA 和 SCL 口需要外接上拉电阻。至于二极管,就没有必要了。

使用特权

评论回复
32
bg6nw| | 2008-2-22 20:29 | 只看该作者

实在惭愧的紧,用了很多画蛇添足的零件,误导了LZ

前段时间开发一个产品时候,想到的一个内部和外部都可以访问EEPROM的小电路,具体是这样的:某机器的MCU在初始化时需读取EEPROM内的数据,但是EEPROM内的数据还需要用外接的一个小手持设备定期更新,更新数据是在机器停机状态下的。这里就需要数据线和电源隔离一下,如不隔离的话手持设备将会给整个机器供电。电路如下:

前日看到LZ提问,没加思索的随便改了改便上传了,呵呵,严重误导了。应该学习chen guan xi 老弟,在此致歉~~

还是匠人姐姐说的对,直接线与,加仲裁,即可。

使用特权

评论回复
33
兴隆| | 2008-2-23 19:07 | 只看该作者

以前我设计的一个报警器,用51和2051,主要是需要双串口。

2个CPU靠的是IIC总线通信。是把2051模拟成一个可读写的I2C器件。主CPU就像读写24C08一样,读写2051,只是2051的I2C地址和24C08不同。

使用特权

评论回复
34
xyq.yz| | 2008-2-23 21:07 | 只看该作者

keyi

i2c总线是多主机总线,这意味着两台或多台主机可以连到同一条I2C总线上.因此总线接口上2片或多片MCU通过同I2C读写没有问题.下一步是解决对24C02访问的资源争用问题.通过I2C协议的IC2空闲检测和24C02忙时无应答机制,很容易解决这个问题.

使用特权

评论回复
35
zlgmcu| | 2008-2-27 08:34 | 只看该作者

麻烦,不就是双机交换数据吗?用全双工UART多简单呀!

I2C总线是NXP(原Philips)发明的2线制串行通信总线。因为其实现的简单性和使用上的方便性等原因而得到广泛的应用。I2C也支持多主机通信,但处理起来还是显得有些麻烦。针对楼主的“双机交换数据”的意图,可考虑采用全双工UART,收发互不干扰,处理起来要容易得多。

使用特权

评论回复
36
yewuyi| | 2008-2-27 08:46 | 只看该作者

同意LS

使用特权

评论回复
37
wjhhhh| | 2008-2-27 09:30 | 只看该作者

交换数据有可能是非实时的,这种思路有实用价值。

用全双工UART通讯,恐怕两端都得在同一时间作这件事。

使用特权

评论回复
38
ljh2269| | 2008-2-27 09:55 | 只看该作者

不用附加多于电路把

只要忙检测做好了应该没问题吧!我感觉是

使用特权

评论回复
39
xynicke| | 2008-2-27 23:22 | 只看该作者

re

两个单片机直接通信不能交换数据吗?

使用特权

评论回复
40
xieyuanbin| | 2008-2-28 08:54 | 只看该作者

I2C本身有总线竞争,为什么要搞那么复杂?

难道两个MCU不同时上电吗?软件完全可以解决的问题。两根线,两个上拉电阻就可以了。

使用特权

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

本版积分规则