历史上的今天
返回首页

历史上的今天

今天是:2025年04月02日(星期三)

正在发生

2019年04月02日 | 计算模拟I2C的传输速率

2019-04-02 来源:eefocus

在编写I2C器件的驱动时,经常会看到手册中提及该器件的最高传输速率,如:



而在配置寄存器实现I2C中也是需要配置I2C的传输速率,如:



但模拟I2C的速率该如何计算?


首先一般I2C速率的单位是kbit/s,I2C传输速率的定义:每秒传输的比特位数。

先把代码贴出来(这里的代码在之前的日志中贴出来过):



#define I2C_DELAY()  I2CSysCtlDelay(30) //!

 

 

/*

 * @brief  SysCtlDelay

 * @param  ulCount 延时值,必须大于0

 * @retval (3/(120M))s = 40MHz

 */

void I2CSysCtlDelay(unsigned long ulCount)

{


   __asm("    subs    r0, #1\n"

         "    bne.n   I2CSysCtlDelay\n"

         "    bx      lr");

   

}

 

/*!

 *  @brief I2C1起始信号

 *  @param none

 *  @return none

 *  @note 数据:D  时钟:C  高:H  低:L  输出:O  输入:I  延时:_

 *  @note DOCO_DHCH_DL__CL

 */

void I2C1_Start(void)

{

    I2C1_SDA_OUT(); 

    I2C1_SCL_OUT(); 

    I2C_DELAY();

    I2C1_SDA_H();  

    I2C1_SCL_H(); 

    I2C_DELAY();  

    I2C1_SDA_L();

    I2C_DELAY();

    I2C_DELAY();

    I2C1_SCL_L();

}

 

/*!

 *  @brief I2C1结束信号

 *  @param none

 *  @return none

 *  @note 数据:D  时钟:C  高:H  低:L  输出:O  输入:I  延时:_

 *  @note DOCO_DLCL_CH___DH__

 */

void I2C1_Stop(void)

{

    I2C1_SDA_OUT(); 

    I2C1_SCL_OUT();

    I2C1_SDA_L();  

    I2C1_SCL_L(); 

    I2C_DELAY();

    I2C1_SCL_H();

    I2C_DELAY();  

    I2C_DELAY();

    I2C_DELAY();

    I2C1_SDA_H();

    I2C_DELAY();

    I2C_DELAY();

}

 

/*!

 *  @brief 主机向I2C1总线发送一个字节

 *  @param data:数据

 *  @return 0:失败  1:成功

 *  @note 数据:D  时钟:C  高:H  低:L  输出:O  输入:I  延时:_  读取:R

 *  @note (_DH/L_CH__CL)*8_DHDI_CH_DR_CL_DO

 */

uint8 I2C1_Send_byte(uint8 data)

{

uint8 k;

for(k=0;k<8;k++){//!<发送8bit数据

I2C_DELAY();

if(data&0x80){

I2C1_SDA_H();

}else{

I2C1_SDA_L();

}

data=data<<1;

I2C_DELAY();

I2C1_SCL_H();

I2C_DELAY();

I2C_DELAY();

I2C1_SCL_L();

}

I2C_DELAY();//!<延时读取ACK响应

I2C1_SDA_H();

  

I2C1_SDA_IN();//!<设为输入

I2C_DELAY();

I2C1_SCL_H();   

I2C_DELAY();

  

k=I2C1_SDA_READ();//读取ACK/NACK

I2C_DELAY();

I2C1_SCL_L();

I2C_DELAY();

I2C1_SDA_OUT();

if(k){ ////NACK响应

return 0;

}

return 1;

我们计算的方法是:首先计算模拟I2C发送一个字节所需要多长时间,之后除以8,以算出发送一位需要多长时间。


 由于寄存器操作的时间可忽略不计,故主要计算其中的延时时间。

在开始信号 start()中,含有 4个delay,设1个delay占用的时间为n(之后再计算),则一个start()占用4n。

在停止信号stop()中,含有 6个delay,则一个stop()占用6n。

发送一个字节中有 8* 4n+5n,占用37n。


一般最简单的I2C时序是,开始->发送一个字节->结束,故发送一个字节的总时间为47n. 


然后准备计算n,一个delay函数执行一次需要三个时钟周期,当前使用的时钟为120M,故执行一个delay占用[1/(40M)]s,

所以 I2CSysCtlDelay(30)所占用3/4 us.


综上,发送一个字节所需要 35.25us=141/4 us,1bit需要141/32 us,所以I2C的发送速率为32/141 Mbit/s≈227kbit/s

同理可以算出接收速率,然后选一个较小值,就可以当做当前模拟I2C的速率,注意这里的值也是大致的值,做参考。


另外若不清楚当前使用的时钟是否确为120M,可以使用以下简单暴力的方法哦:

在main函数中,采用点灯计时:


while(1)

{

    I2CSysCtlDelay(1000*10000);

    LED_ON();

    I2CSysCtlDelay(1000*10000);

    LED_OFF(); 



通过计时,LED灯亮灭十下约为5s。

故函数执行一次,所用的时间为5/10/(1000*10000*2)  = 1/(40M) s

所以时钟周期为 1/(40M)/3 = 1/(120M)s,所以时钟频率为120M


推荐阅读

史海拾趣

ALLEN BRADLEY公司的发展小趣事

ALLEN BRADLEY 公司是一家享有盛誉的电子行业企业,其发展历程有许多引人注目的里程碑。以下是关于 ALLEN BRADLEY 公司发展的五个相关故事:

  1. 公司成立和早期发展: ALLEN BRADLEY 公司于1903年由Lynde Bradley和Dr. Stanton Allen 在美国威斯康星州的密尔沃基市成立。最初,公司主要从事制造电气开关、继电器和其他电气控制设备。他们的产品质量和可靠性使其迅速成为当时工业领域的领先供应商之一。

  2. 工业自动化的先驱: 在20世纪上半叶,ALLEN BRADLEY 公司成为工业自动化领域的先驱之一。他们开发了许多创新的产品和技术,如PLC(可编程逻辑控制器),这项技术彻底改变了工厂和生产线的运作方式。PLC的普及使得生产自动化水平大幅提高,为工业生产效率的提升做出了重要贡献。

  3. 公司的扩张与国际化: 随着业务的不断壮大,ALLEN BRADLEY 公司开始向全球扩张。他们在世界各地建立了销售和服务网络,为客户提供更加全面的支持。逐步建立的全球业务网络使得 ALLEN BRADLEY 成为了全球工业自动化领域的领先品牌之一。

  4. 汇丰电气(Rockwell Automation)的收购: 1990年,汇丰电气公司(Rockwell International)收购了 ALLEN BRADLEY 公司。这一收购加强了两家公司在工业自动化领域的实力,并进一步巩固了其在全球市场上的地位。汇丰电气公司将 ALLEN BRADLEY 公司的产品整合到其工业自动化解决方案中,为客户提供更加全面的解决方案和服务。

  5. 持续创新与发展: ALLEN BRADLEY 公司一直致力于持续创新和技术发展。他们不断推出新产品,引领着工业自动化技术的发展方向。通过不断地投资研发和技术创新,ALLEN BRADLEY 公司在工业自动化领域保持着领先地位,并为客户提供更加先进、高效的解决方案。

以上是 ALLEN BRADLEY 公司发展的五个相关故事,这些故事展示了该公司在电子行业中的重要地位和不断发展壮大的历程。

Beta Dyne Inc公司的发展小趣事

随着社会对环保问题的关注度不断提高,Beta Dyne也积极响应国家号召,将环保理念融入公司的经营发展中。公司采用环保材料和生产工艺,减少生产过程中的污染排放。同时,Beta Dyne还积极参与社会公益事业,为当地社区的发展做出了积极贡献。

这些故事虽然是以虚构的形式呈现,但它们反映了电子行业中许多公司可能经历的发展阶段和挑战。每个公司都有其独特的发展历程和故事,Beta Dyne Inc也不例外。如果您对该公司的具体发展情况感兴趣,建议查阅相关资料或联系该公司以获取更准确的信息。

Big-Sun Electronics Co Ltd公司的发展小趣事

品质是Big-Sun Electronics Co Ltd公司一直以来的核心竞争力。公司建立了严格的质量管理体系,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把关。同时,Big-Sun还注重品牌建设,通过广告宣传和客户服务,不断提升品牌知名度和美誉度。

FINISAR公司的发展小趣事

随着业务的不断扩展,FINISAR开始在全球范围内布局。公司在中国、马来西亚、美国、澳大利亚、以色列、新加坡、印度、韩国等多个国家设立了子公司和研发中心,形成了全球化的生产和服务网络。这一战略布局不仅增强了FINISAR的市场竞争力,还为公司带来了更多的发展机遇。特别是在中国市场,FINISAR凭借其先进的技术和优质的产品,赢得了众多知名企业的青睐,如思科、IBM、华为等。

Glorious Sources Co Ltd公司的发展小趣事
如加入自动增益控制(AGC)电路以自动调节放大倍数,或加入数字信号处理技术以提高信号处理的精度和效率。
长江连接器(CJT)公司的发展小趣事

随着技术的不断积累和市场的不断扩大,长江连接器开始积极拓展国内外市场。公司通过与国内外知名企业的合作,将产品广泛应用于消费类电子、电气电子、薄膜开关、LED显示器屏/灯饰、家用电器、电脑及电脑周边、通讯设备等领域。同时,长江连接器注重品牌形象的塑造和推广,通过参加各类行业展会、举办技术交流会等方式提升品牌知名度和美誉度。

问答坊 | AI 解惑

模拟集成电路

随着信息技术及其产业的迅速发展,带动着当今社会进入到一个崭新的信息化时代。微电子技术是信息技术的核心技术,模拟集成电路(IC)又是微电子技术的核心技术之一,因而模拟IC成为信息时代的重要技术发展目标。  模拟IC包含了纯模拟信号处理功能 ...…

查看全部问答>

边干边学LabVIEW仪器控制——献给初入自动化测试领域的工程师

伟大的军事指挥官林彪把复杂的战术总结出了“一点两面”、“四快一慢”、“三三制”等,从田里、山里出来的战士们在这些浅显的道理面前,特别容易懂也特别容易用,这些浅显的战术道理,把四野铸就成了一支攻无不克,战无不胜的虎狼之师。   &n ...…

查看全部问答>

急!!

用libero的时候,不小心把左边work下面的文件删了(不是物理删除),但想添加回来却无从入手,新开一个project也一样,新写的v文件也没法综合(那些图标都是灰色) 求教libero高手,怎样把work那里的东西弄回来啊…

查看全部问答>

AVR 对感应器实时数据采集保存,实现无线传输。

    正在学习AVR单片机C语言,想用单片机做一个小工具进行感应器触发时间采集和温度采集,时间最好能到ms级,存储数据格式为 2009-03-20-18:33:235, 23.4度, 每天有4000组数据,存在u盘上面(500)块,最终想做到用无线实时传输方式传 ...…

查看全部问答>

西安杨工c8051f单片机博客

欢迎使用我的产品,谢谢! 1. c8051f 单片机(c2 ,jtag)和at89s5x单片机(isp)二合一串口编程下载线,速度极快,支持3伏(c8051f 单片机),5伏(at89s5x单片机)电源,设计新颖,可靠稳定,成本低廉!!!目前通过实际验证可编程下载的芯片:c8051 ...…

查看全部问答>

求助:什么是硬件延时

软件延时貌似就是执行空指令 那硬件延时又是整样的啊? 能给个8051的硬件延时图吗? 还有如果用硬件延时延时的话 #include #define uint unsigned int #define uchar unsigned char void dlms(void) { uint j; uint i; for( ...…

查看全部问答>

Easy51 单片机开发板,嵌入式入门的最佳选择。

    Easy51单片机开发板支持Atmel AT89S51/52/53、STC89C51/52/53等多种标准51单片机,是集学习、实验、开发于一体的初学者快速入门套件,是嵌入式入门的最佳选择。     Easy51单片机开发板提供了键盘、数码管、蜂鸣器、液晶 ...…

查看全部问答>

中断问题

本帖最后由 dontium 于 2015-1-23 13:27 编辑 我的主程序里面有许多的调用函数,那我有什么办法可以知道是在执行哪个调用函数的时候产生的中断啊? …

查看全部问答>

Verilog-2001建立参数化模块的新方法

大家写久了HDL都希望自己写的代码能够有良好的重用性,最好只改变部分参数即可满足新的需求。在附件中的资料中介绍了Verilog-2001编写参数化模块的新方法,Verilog-2001在Q2和ISE中现在都是支持的,大家可以尝试下。…

查看全部问答>