I2C时序分析.doc

上传人:scccc 文档编号:13823326 上传时间:2022-01-24 格式:DOC 页数:8 大小:275.50KB
返回 下载 相关 举报
I2C时序分析.doc_第1页
第1页 / 共8页
I2C时序分析.doc_第2页
第2页 / 共8页
I2C时序分析.doc_第3页
第3页 / 共8页
I2C时序分析.doc_第4页
第4页 / 共8页
I2C时序分析.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《I2C时序分析.doc》由会员分享,可在线阅读,更多相关《I2C时序分析.doc(8页珍藏版)》请在三一文库上搜索。

1、示波器查看I2C时序I2C的起始信号(start )是时钟保持高电平SDA拉低,表示控制总线。数 据只有在时钟低电平时变化,时钟变为高电平时保持。停止信号:时钟高电平时, SDA拉高,表示释放总线。r2.st5!8.M&.163.ecm料!C誥3SE:*irfcnFQsrkEfr v E吊r-i帛Emcn*td-ry3Ns -$一FEf暑TLlrlbeQ. 0Q0E10.03A图1 STM32模拟I2C启动BMP805的时序,红线为数据,绿线为时钟使用了 SDS1022C数字示波器采集的数据,然后将数据导入 Excel表格中, 形成的图表。将示波器存储格式修改为 CSV(MEN栏、SAVE/R

2、ECAL按键、类型 CSV存储、新建文件、确定),时钟信号与数字信号分别采集然后合成插入图 表,如图1。h 血 SDSOOOOl 国 5DS00Q0S痔茂丘新Mierosoft Office. Microsoft Office.-大91 KB91 KBEl s 1C6B9. bluy. 1 CG.cui r i图2示波器存储的数据文件,一个是 SDA数据,一个是 SCL数据在同一周期下采集这两组数据05 15 115 1 1图3数据分析S 5 冷專曇I&冲 旳-4.主机在发送完毕启动信号,接着发送地址,从机会产生应答信号。如果没有 应答信号表示通信异常。分析波形如果“起始”“地址”都严格正确,

3、 时钟不是 过快那一定是硬件有毛病,否则仔细调试软件。附参考STM32的端口模拟I2C程序:#in elude stm32f10x.h#define SCL_H GPI0_SetBits(GPI0B,GPI0_Pin_7) /SCL#define SCL_L GPI0_ResetBits(GPI0B,GPI0_Pin_7)#define SDA_H GPI0_SetBits(GPI0B,GPI0_Pin_6)#define SDA_L GPIO_ResetBits(GPIOB,GPIO_Pin_6)#define SDA_read GPIO_ReadI nputDataBit(GPIOB,GP

4、IO_Pin_6) ?SDA#define Addr 0xee /#define FALSE 0#define TRUE 1 /注意主程序里开 B 口的时钟,延时函数严格使用了滴答时钟,实际上可以不用准确; void I2C_GPIO_Config(void)GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out

5、_OD;GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;GPIO_Init(GPIOB, &GPIO_InitStructure);/* Function Name : I2C_Start* Description : Master Start Simulation IIC Communicat

6、ion* Input : None* Output : None* Return : Wheather Start* * unsigned char I2C_Start(void)SDA_H;SCL_H;delay_us(10);SDA_L;delay_us(10);SCL_L;delay_us(5);return TRUE;/* * Function Name : I2C_Stop* Description : Master Stop Simulation IIC Communication* Input : None* Output : None* Return : None*void I

7、2C_Stop(void)SCL_L; delay_us(10);SDA_L;SCL_H;delay_us(10);SDA_H;delay_us(10);/* Function Name : I2C_Ack* Description : Master Send Acknowledge Single* Input : None* Output : None* Return : None * */void l2C_Se ndAck(u nsig ned char ack) ack=0,?=1?SCL_L;delay_us(5);if(ack=0)SDA_L;elseSDA_H;delay_us(5

8、);SCL_H;delay_us(10);SCL_L;delay_us(10);/* Function Name : l2C_NoAck* Description : Master Send No Acknowledge Single* lnput : None* Output : None* Return : None*unsigned char l2C_RecvAck(void)unsigned char ack=0;SCL_L; delay_us(5); SDA_H; delay_us(5); SCL_H;delay_us(5);ack=SDA_read;SCL_L;delay_us(1

9、0);return ack; /?0?/* Function Name : I2C_WaitAck* Description : Master Reserive Slave Acknowledge Single* Input : None* Output : None* Return : Wheather Reserive Slave Acknowledge Single* * /* Function Name : I2C_SendByte* Description : Master Send a Byte to Slave* Input : Will Send Date* Output :

10、None* Return : None* *void I2C_SendByte(u8 SendByte) /?/u8 i=8;while(i-)SCL_L;delay_us(5);if(SendByte&0x80)SDA_H;elseSDA_L;SendByte=1;delay_us(5);SCL_H;delay_us(5);SCL_L;I2C_RecvAck();/* Function Name : I2C_RadeByte* Description : Master Reserive a Byte From Slave* Input : None* Output : None* Retur

11、n : Date From Slave*unsigned char I2C_RecvByte(void) /u8 i=8;u8 ReceiveByte=0;SDA_H;while(i-)ReceiveByte=1;SCL_L;delay_us(10);SCL_H;delay_us(10);if(SDA_read)ReceiveByte|=0x01;SCL_L;delay_us(10);return ReceiveByte;unsigned char Single_Write(unsigned char REG_Address,unsigned char REG_data) /void I2C_

12、Start();I2C_SendByte(Addr);I2C_SendByte(REG_Address);I2C_SendByte(REG_data);I2C_Stop();delay_ms(5);return TRUE; /?*unsigned char Single_Read(unsigned char REG_Address) unsigned char REG_data;I2C_Start(); I2C_SendByte(Addr);I2C_SendByte(REG_Address);I2C_Start();I2C_SendByte(Addr+1);REG_data= I2C_Recv

13、Byte();I2C_SendAck(1);I2C_Stop();return REG_data;short Multiple_read(u8 ST_Address)u8 msb, lsb;short _data;I2C_Start();I2C_SendByte(Addr);I2C_SendByte(ST_Address);I2C_Start();I2C_SendByte(Addr+1);msb = I2C_RecvByte();I2C_SendAck(0);lsb = I2C_RecvByte();I2C_SendAck(1);I2C_Stop();delay_ms(5);_data = m

14、sb 8;_data |= lsb;return _data;long bmp085ReadTemp(void)I2C_Start();I2C_SendByte(Addr);I2C_SendByte(0xF4);I2C_SendByte(0x2E);I2C_Stop();delay_ms(2);return (long) Multiple_read(0xF6);unsigned char Check_bmp085(void)u16 c1;c1 = Multiple_read(0xAA);if(c1!=0&c1!=0xffff)return 1;return 0;STM32 端口设置为开漏输出,读之前写1,读的是端口数据。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1