打印

关于I2C模拟从机的是否可行与可行性方案研究

[复制链接]
12500|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
peichao888|  楼主 | 2012-3-9 14:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
手头上由于项目需要,须模拟I2C从机,选了很多片子,也试了很多方案,可一直没有找到最佳的思路,自己似乎也陷入死循环。网上的资料都是模拟主机的,其方法在这里就不提了。模拟从机寥寥无几,而且也都有诸多问题。今天在这里再提出此问题,望各位高手包括坛主能将此问题在此做个深入的研究,模拟从机究竟是否可行,如果可行最佳方案与硬件配置为几何?
1.SCL的读写状态信息判断:在主机写时序中,比较容易,判断SCL的下降沿来读取SDA线上的信息。在主机读时序中,我分析必须要判断SCL的上升沿来发送SDA信息。所以,在无外置电路的情况下,MCU必须有上升沿中断这一功能。
2.SDA的状态在Start和Stop时正好是一个下降一个上升,而且一侦数据只出现一次,用中断先不说浪费资源,如何在接收数据和接收Start和Stop之间有效结合,如果用查询方式来读Start与Stop又会漏检测。
3.MCU模拟从机是为了完成其它功能,不管用中断还是用查询,MCU的负荷与效率似乎是非常大的挑战。数据位必须在SCL下一个下降沿来之前处理完毕,而且每一个SCL都会中断一次,我很担心MCU的其它任务是否会正常执行。
4.如果看到此贴有设计过I2C电路芯片的高手的话,希望能贴个图上来,我相信这会让大家对模拟I2C从机设计有更大的帮助。
再次恳请各位将此问题进行到底!

相关帖子

沙发
dqyubsh| | 2012-3-9 19:21 | 只看该作者
模拟从机?目的何在?

AVR的一些单片机可以做IIC主机,也可以做从机。根据我的粗浅经验,从机最好用现成的IIC芯片,如串并转换、DAC之类的,如果用MCU做IIC从机,确如你所说,中断实现起来很麻烦,有一定的风险。我的实测结果显示,尽量少用MCU自带的从机。

如果用一个普通单片机做从机,我确实想不出它有什么意义。速率、效率、多机通讯等等一系列事情会让人发狂。如果你用FPGA做个从机,我还是认可的。

使用特权

评论回复
板凳
MIKEZHONG| | 2012-3-9 20:26 | 只看该作者
我用PIC自带的从机模式,做了一对6,一个主机,对应6个从机,主机端是模拟的,从机端用IC自带的,只要频率不高,比如5K以下,还是没有问题的。产品出过货的。

使用特权

评论回复
地板
peichao888|  楼主 | 2012-3-9 20:36 | 只看该作者
万分感谢楼上专家们的指点!
回3楼,模拟从机主要是用MCU双机通信,IO资源紧张,只剩两个,串口也被占用,用这两个IO口模拟串口也考虑过,但其实现软件更为复杂,系统效率问题依然存在,做为长远的系统扩展的话不适合。综合看来只有I2C最合适不过了。
回4楼,谢谢指点,不知能否提供型号,如果有带I2C从机模式的而且其它资源又符合条件那就太方便了。
不管能不能用器件替代,我还是想把这个问题进行到底,哪怕是不行,我们在这里讨论清楚,让后来人不要再为此问题费时了。

使用特权

评论回复
5
NE5532| | 2012-3-9 21:10 | 只看该作者
1.可以模拟,但是需要较高的技术。
2.能用硬口尽量用硬口,别给自己找事。

使用特权

评论回复
6
MIKEZHONG| | 2012-3-9 23:19 | 只看该作者
PIC16F系列基本上都带,我用的是16F723,价格便宜,性能不错。兄弟,好东西不要浪费了。

使用特权

评论回复
7
joyme| | 2012-3-10 11:59 | 只看该作者
是自己的定协议的话怎么模拟都没有问题,如果要跟标准IIC主机通信就多一些麻烦事,速度不快的话模拟单总线也不难吧(一个口就好了)

使用特权

评论回复
8
peichao888|  楼主 | 2012-3-11 09:19 | 只看该作者
谢谢MIKEZHONG的回复,好人啊
回7楼,单总线方案也是考虑过,但没有做过,我回头尝试做一下。
期待对I2C从机模拟有更多人关注。

使用特权

评论回复
9
NE5532| | 2012-3-11 09:38 | 只看该作者
说真话,这东西我们就做过的,所以知道深浅。楼主为啥就不愿意静心想下有没有方法不走独木桥呢?

使用特权

评论回复
10
古道热肠| | 2012-3-11 10:08 | 只看该作者
呵呵,多机通讯简单的就用串口,技术最成熟,用115200bps,短距离通讯不会有问题的。

使用特权

评论回复
11
古道热肠| | 2012-3-11 10:12 | 只看该作者
要想再高速通讯,得用SPI接口了,I2C总线速度不快,接口还复杂,没想到为什么非要模拟它的用途,倒是SPI从机接口的模拟有些用处,因为这接口的通讯速度是普通串口和I2C所达不到的。

使用特权

评论回复
12
MIKEZHONG| | 2012-3-11 10:54 | 只看该作者
本帖最后由 MIKEZHONG 于 2012-3-11 10:55 编辑

楼主想用I2C从模式,肯定也是有他的考虑,一般一个普通的单片机,只有一个串口,可能要他用,I2C主机又好模拟,也可能对I2C比较熟悉,传送的速度又不需要太快,我觉得选用带I2C从模式的单片机是首选。

模拟从机,没有见过这么做。真要这么做,何必呢。

使用特权

评论回复
13
Ryanhsiung| | 2012-3-11 11:31 | 只看该作者
PIC MO我都写过I2C从机,模拟不太好实现!!!

使用特权

评论回复
14
dengm| | 2012-3-11 15:51 | 只看该作者
可用“单总线”+ “单总线”, 2 线通信, 软件会好处理的多

使用特权

评论回复
15
Ynnus| | 2012-3-11 17:06 | 只看该作者
如果是模拟存储器,因为在收到地址之前,你无法确定是哪个地址的数据,因此一般MCU难以实现;
如果只是I2C,不需要考虑地址,只要把某个值返回,则支持I2C Slave的MCU可能实现。
之前某个项目需要,我们做过模拟I2C 存储器的。经过若干评估,最后是用FPGA做的,已经商用。

使用特权

评论回复
16
peichao888|  楼主 | 2012-3-11 18:52 | 只看该作者
今天关注人比较多啊,谢谢谢谢!
我再次申明,我提出这个问题是想得到这样做是否可行或者可行性主案,让路过的和以后还有此想法的人知道这到底是否可行。
回9楼:请说出具体方案。
回15楼:您提到的无法确定是哪个地址的数据,我怎么还没有想太明白,如果是能可靠检测到起始与停止信号并能接收到数据的话,不管是地址还是数据,再去处理就已经简单化了。拙见,还请指点,能否透漏一些详细的实现方案

使用特权

评论回复
17
linqing171| | 2012-3-11 19:52 | 只看该作者
用双中断,两个io都要电平变化的。
之前21ic有个例子,但是实现起来确实特麻烦,而且速度上不去。

如果你只是给自己用的话,只要能通讯上就可以了。

使用特权

评论回复
18
linqing171| | 2012-3-11 20:00 | 只看该作者
之前用40M的ARM7,双中断弄过一个,单片机本来带高速的slave I2C,用IO又模拟了一个slave I2c。压力还是非常大的,搞到最后均衡的情况下测试,两个I2C都只能做到150k,本来硬件的很快的,就是两个中断同时来,搞的另外一个慢了。

使用特权

评论回复
19
peichao888|  楼主 | 2012-3-11 20:32 | 只看该作者
谢谢linqing171的回复,您的思路也是我现在正在测试的,我考虑似乎只有这个方案了,检测两个信号线的电平变化,用双中断。这样CPU的符合好高啊,而且其它流程的效率还取决于I2C的访问,如果一直处于访问状态的话,即便速度低,CPU也会不停的中断。按您说的150K算,几乎每800us左右就要中断一次。按每个指令平均4个时钟算的话,12M晶振800us才能执行200条代码,就要中断一次,还要除去中断中I2C数据处理本身的代码。晕死,我简直无法想像这样的系统,真是像楼上一位所说,让人发疯了。

使用特权

评论回复
20
qixiangelec| | 2012-3-11 20:58 | 只看该作者
好问题,关注啊!希望冒出高手!

使用特权

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

本版积分规则

1

主题

18

帖子

1

粉丝