您的位置:程序门 -> 硬件/嵌入开发 -> 片机/工控



51单片机做从i2c,能做到400khz的通讯速度吗?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


51单片机做从i2c,能做到400khz的通讯速度吗?[已结贴,结贴人:shen_guang_wu]
发表于:2007-11-15 16:00:37 楼主
51单片机做从i2c,实现51单片机的模块作为一个标准的i2c设备,连接在标准的i2c总线上,晶体是使用的22.1184mhz,能实现400khz的速度吗?有做过这方面的高手没有?
发表于:2007-11-15 18:57:071楼 得分:10
算一下:


400k要求一位的传送时间   /   一条指令时间(十二分频)   ==   400k下十二分频的单片机的机器周期

(1   /   400   000)   /   (12   /   22   118   400)   ==   4.608

才能跑4个周期,基本上几个mov就完了,
12分频的机器应该跑不上

但是,不分频或是四分频的51多的是,
像c8051f,msc等等

其它的机器肯定能跑上400k嘿嘿

不知道对不?大伙拍拍
发表于:2007-11-16 15:29:372楼 得分:80
400k的速度肯定是到不了的,从i2c中处理也涉及到状态转换,不是几条指令好搞定的。但是i2c并没有严格的时序要求。master虽然很快,但它要等slave的应答啊,所以slave其实是可以做的很慢的。完全可以工作。如果对速度有很高的要求,建议不要选i2c了。
个人看法
发表于:2007-11-16 19:35:443楼 得分:5
对啊,关键看iic   的从啊,别看他们吹的多少多少

如zlg7290   我只用了   30k   ,   吹的好象是   400k   吧

超50k   就不灵了
发表于:2007-11-19 09:35:564楼 得分:0
呵呵,同意楼上的,有很多器件都达不到他说的速度,但是如果是从i2c的话,为了正确检测到起始条件,希望使用中断处理。我已经使用两个外部中断实现从i2c功能,现在我的系统中只有一个外部中断可以使用了,该怎样做才是最好的?
发表于:2007-11-19 10:07:165楼 得分:5
某些扩展的51芯片好像有集成i2c总线接口,不知道速度怎么样。
发表于:2007-11-20 12:07:176楼 得分:0
回4楼,这个简单啊,两个外部中断合用一根中断线就可以了,硬件产生中断的时候设置标志位,比如某寄存器比特0表示中断a发生,比特1表示中断b发生....以此类推。收到中断的时候,通过检测这些标志位区分是哪个中断。现在的复杂系统都是这么用的,要不然cpu哪有这么多中断线给设备用啊。
发表于:2007-11-20 12:13:387楼 得分:0
关于速度问题,i2c有3种速度:普通模式100k;快速模式400k;还有高速模式,好像是1m吧。上面的100k,400k应该是指master   最高能以多少速度工作。实际上使用中slave是可以hold总线的,这样slave就可以控制总线速度。所以工作在400k的模式,slave照样可以将总线速度控制在不高于400k的任何速度。这可看一下i2c协议2.3版本的时序就知道了。

另外楼主因为要对i2c协议解码,涉及到状态转化等问题(通信协议都需要类似的处理),而且还需要处理上层的业务相关信息,另外中断也有一定延迟,所以你那频率要到到这个速度有困难。
发表于:2007-11-21 11:03:388楼 得分:0
谢谢楼上的!现在我做了一些试验,slave在时钟下降沿时中断把数据放到总线上,master速度快的话,slave单片机还没有把数据放上去,master时钟就产生上升沿开始读数据了,因为时钟都是master发出的啊!对于这种情,我的程序该怎样hold总线?
发表于:2007-11-21 13:02:599楼 得分:0
你看一下i2c的一些,应该是可以通过把时钟线拉低来实现hold的.
发表于:2007-11-21 13:28:0910楼 得分:0
从设备可以通过将scl(时钟线)拉低来实现暂停传输,等数据准备好后再传输。


快速检索

最新资讯
热门点击