硬件IIC模块的话直接配置寄存器来修改传输速率,软件的话只能加时延了。
你可以了解一下I2C的协议标准。其实不只是I2C对上升时间有要求,应该是在所有的数字电路中,对上升沿都是有要求。I2C由两根线组成,数据线SDA,时钟线SCL,标准模式的时候,SCL的频率可达100KHZ,高速模式的时候,频率可达400KHZ。频率越高,对上升沿的要求越高。现在拿100KHZ的频率来说,一个SCL周期为10uS,这其中包括一个上升沿,一个下降沿,一个高电平时间和一个低电平的时间。如果SCL的上升沿要15uS,那么波形都还么有上升到1就开始向0变化了,这样连I2C的起始条件都不能达到。因为I2C从设备一般都是MOS工艺,所以I2C总线都有上拉电阻,而传输线是有电容效应的,你接的设备越多,电容会增大,在上升的时候就会造成延时,连接到总线的接口数量只由总线电容限制决定。 我们也曾经遇到过类似问题,就是外围从设备I2C的速度太慢,用主设备的I2C去通讯出错,最后的解决方法是不用主设备的I2C,而是用I/O去模拟I2C去跟外围设备通讯。希望对你有帮助。
请问IIC的速度(100k、400k)由什么决定,是通过软件还是上拉电阻?怎么确定速度到底是多大?
首先主从设备都具备速度要求,然后是SCL尽量用推挽输出(无需线或),SDA用小阻值获得高速(通常10K上拉对400K没问题)。另外若模拟IIC请仔细研究时序,让程序中每个细节最佳。
只能这么说,外电阻影响速度(太大快不了)。
你的意思是说电阻太大影响边缘的质量是吧?
影响上升沿速率。
有人说100k用10k上拉,400k用4.7k上拉,对吗?还有个计算公式,Rmin=(vddmin-0.4v)/3ma,Rmax=T/0.874.C,最大值计算看不懂?(0字)
最大速率除了与上拉电阻有关,还与线路容抗有关,显然不能简单计算获得正确的上拉电阻值。。。
线路长段影响很大。
是,长短粗细、与其他信号线的距离、板材品质、。。。。(0字)红心J[2次]
上拉小可以让上升沿变陡!
软件模拟的话,可以减小电阻。硬件的话10k电阻太大,建议换4.7K!
如果通信距离较远,导线的分布电容较大,而上拉电阻又取得太时,信号上升时间不够,接收方就可能会读不到高电平。我们知道IIC是靠上拉出来的高电平,信号上升所需的时间正比于上拉电阻值和该点对地电容的乘积。
FROM:本文摘自各个论坛