本文目录一览

1,i2c通信从机

看一下iic协议就明白了,一个始终一个数据,按顺序发送写命令,发送高地址,发送器件地址(单片机存储器地址),写数据,发送低地址,进入接收模式,直到退出。
太专业了 这种问题建议您去一些专业性比较强的论坛提问

i2c通信从机

2,STC单片机模拟的I2C总线上数据传送速率能达到12M吗

这个问题很简单!困难,就以12c5a系列为例,最高频率最高频率35MHz。你一个时钟做一个下降沿,至少要两个指令周期,一高一低。还要写数据线,加一个指令周期,写数据前要判断,判断前要移位。你写一个程序即可以算算要多少指令周期。这还不考虑,上升沿与下降沿的延时。stc单片机IO口由0变1会有两个周期的强推,这就说,在最高频率下可能需要两个周期才能确保低电平变高,也就是你写数据线后可能要等待一下,才能赋予时钟线下降沿。你为什么需要这么高的速度,很多芯片都不支持这么高的速度,一般400k。而且你还要看走线长短,和使用环境。

STC单片机模拟的I2C总线上数据传送速率能达到12M吗

3,HDMI的I2C频率能到多少

I2C的频率与用在什么芯片上没有太多关系,一般能够到400Khz,有时为了系统资源,会降到200K——400K之间。并且,HDMI有图像没声音与I2C关系不大。
HDMI的I2C主要负责终端显示设备(如:电视)与信号源设备(如:笔记本)进行沟通,以满足HDMI协议等, HDMI RX0/1/2/3主要来传送图像; HDMI EDID共256字节,其中部分字节通过I2C来控制声音; 两者之间没有直接的信号联系,分别走不同的通道; 故有图像无声音应该是EDID整个线路环节出现问题了;

HDMI的I2C频率能到多少

4,单片机里面I2C串行扩展总线的负载能力是多少 信号传输最高速率是

由于I2C总线器件均为CMOS器件,因此总线具有足够的电流驱动能力。总线上扩展的器件数不是受制于电流驱动能力,而是受制于电容负载总量。I2C总线的电容负载能力为400 pF (通过驱动扩展可达4000pF)。每一器件的输入端都相当于一个等效电容,由于I2C总线扩展器件的连接关系为并联,因此,I2C总线总等效电容等于每一器件等效电容之和,等效电容的存在会造成传输信号波形的畸变,超出范围时,会导致数据传输出错。 I2C总线传输速率为100Kbit/s(改进后的规范为400Kbit/s)。
任务占坑

5,I2C总线的术语

发送器:发送数据到总线的器件;接收器:从总线接收数据的器件;主机:启动数据传送并产生时钟信号的设备;从机:被主机寻址的器件;多主机:同时有多于一个主机尝试控制总线但不破坏传输;主模式:用I2CNDAT支持自动字节计数的模式;位I2CRM,I2CSTT,I2CSTP控制数据的接收和发送;从模式:发送和接收操作都是由I2C模块自动控制的;仲裁:是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使传输不被破坏的过程;同步:两个或多个器件同步时钟信号的过程 。
没有4位机制,有8位51单片机的汇编程序。还有一个c语言的,可以给你参考,这都是我项目中用到的程序。给你作个参考,在产品的实际工作中也很稳定。下面是汇编的:;;-----启动-----;;start1: lcall del5us setb sda1 lcall del5us setb scl1 lcall del5us clr sda1 lcall del5us clr scl1 lcall del5us ret;;-----结束-----;;stop1: lcall del5us setb scl1 lcall del5us setb sda1 lcall del5us ret;;-----应答检查-----;;cack1: setb sda1 lcall del5us setb scl1 lcall del5us mov c,sda1 jc cack1 clr scl1 clr sda1 lcall del1ms ret;;-----应答-----;;mack1: clr sda1 lcall del5us setb scl1 lcall del5us clr scl1 lcall del5us setb sda1 ret;;-----向从器件指定单元写n个字节数据-----;;;;入口:传递的地址在pointer,数据在wr_buf中,发送字节数在n中;;资源占用:acc、r0、r1、r3、cwr_nb1: clr ea setb sda1 setb scl1 lcall start1 mov a,#0a2h lcall wr8bit1 lcall cack1 mov a,pointer lcall wr8bit1 lcall cack1 mov r3,n mov r1,#wr_bufwrnb11: mov a,@r1 lcall wr8bit1 lcall cack1 inc r1 djnz r3,wrnb11 lcall stop1 lcall del10ms setb ea ret;;-----从从器件指定单元读n个字节数据-----;;;;入口:传递的地址在pointer,接收数据缓冲区rd_buf,接收字节数在n中;;资源占用:acc、r0、r1、r3、crd_nb1: mov r3,nrdnb11: lcall start1 mov a,#0a2h lcall wr8bit1 lcall cack1 mov a,pointer lcall wr8bit1 lcall cack1 lcall start1 mov a,#0a3h;#0a1h lcall wr8bit1 lcall cack1 mov r1,#rd_bufrdb1: lcall rd8bit1 mov @r1,a djnz r3,sack1 lcall stop1 retsack1:inc r1 lcall mack1 sjmp rdb1;;-----字节发送-----;;;;入口:要发送的数据在acc中;;每发送完一个字节,要调用一次cack,以判断是否有应答wr8bit1: push acc mov r0,#08hwr_bit1: rlc a mov sda1,c lcall del5us setb scl1 lcall del5us clr scl1 djnz r0,wr_bit1 pop acc ret;;-----字节接收-----;;;;出口:接收到的数据在acc中;;每接收完一个字节,要调用一mcack/mnackrd8bit1: mov r0,#08hrd_bit1: setb sda1 lcall del5us setb scl1 lcall del5us mov c,sda1 rlc a lcall del5us clr scl1 djnz r0,rd_bit1 clr sda1 ret以下的程序是c语言的程序,用于读24c01存贮器,稍加修改可以用于所有的i2c总线驱动。/******************************************************************** 名 称:readiic_24c01** 功 能:读24c01指定的地址的数据** 输 入: address 24c01的地址** 输 出: ddata 读出的数据** 全局变量: 无** 调用模块: write_8bit();delay();** 备注:******************************************************************/uint8 readiic_24c01(uint8 data address)uint8 data ddata=0;uint8 data i=8; _nop_(); _nop_(); _nop_(); ea=0; scl=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //tsu:sta sda=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //thd:sta scl=0; //start write_8bit( (address<<1) | 0x01); //写页地址和操作方式 ack_r(); while (i--) sda=1; ddata<<=1; scl=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); scl=1; if (sda) ddata|=0x01; } scl=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); scl=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); sda=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); scl=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); sda=1; //stop _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); ea=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); delay(50); _nop_(); _nop_(); _nop_(); return ddata;}/******************************************************************** 名 称:writeiic_24c01** 功 能:将数据写入24c01指定地址** 输 入: address 24c01的地址** ddata 待写入的数据 ** 输 出: 无** 全局变量: 无** 调用模块: write_8bit();delay();** 备注:******************************************************************/void writeiic_24c01(uint8 data address,uint8 data ddata) _nop_(); _nop_(); _nop_(); ea=0; scl=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //tsu:sta sda=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); //thd:sta scl=0; //start _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();write_8bit( (address<<1) & 0xfe); //写页地址和操作方式,对于24c32-24c256,page不起作用 ack_r(); write_8bit(ddata); //发送数据 ack_r(); sda=0; _nop_(); _nop_(); _nop_(); scl=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); sda=1; //stop _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); ea=1; _nop_(); _nop_(); _nop_(); delay(50); _nop_(); _nop_(); _nop_();}/******************************************************************** 名 称:write_8bit** 功 能:将一个字节数据写入24c01** 输 入: 无** 输 出: 无** 全局变量: 无** 调用模块: 无** 备注:******************************************************************/void write_8bit(uint8 data ch)uint8 data i=8; _nop_(); _nop_(); _nop_(); scl=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); while (i--) sda=(bit)(ch&0x80); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); ch<<=1; scl=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); scl=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();}/******************************************************************** 名 称:ack_r** 功 能:等待24c01ack信号** 输 入: 无** 输 出: 无** 全局变量: 无** 调用模块: 无** 备注:******************************************************************/void ack_r(void) _nop_(); _nop_(); _nop_(); sda=1; scl=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); scl=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); while(sda) _nop_(); } //ack scl=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();}

文章TAG:i2c可以发送多少数据可以  发送  多少  
下一篇