I2C分析及RX8025驱动编写

2019-07-13 09:05发布

一、        I2C 1.    I2C概要 I2C总线由SDA和SCL构成的2线式双向通信,通过组合这2个信号,进行通信的开始/停止/数据传送/应答等接收信号。 非通信时:SDA、SCL都保持高电平。 通信的开始和结束通过SCL处于高电平,切上升或者下降SDA来控制。 数据的传送及发送信号时的SDA线上的数据变更在SCL线低电平区间进行,接收信号侧在SCL线处于高电平区间进行读取数据,任何情况下,都在SCL线的每一计时器脉冲以1bit逐步进行。 I2C总线的器件没有通常的逻辑器件所具有的芯片选择引脚,代之以对的是器件分配从地址,当接收器的从地质与选择从地址一致时,开始通信。 2.    I2C通信的开始和停止 3、I2C数据的传送
4、I2C数据的应答
5、从地址
6、写时序
7、读时序(RX8025官网资料中的读时序是错误的,经过测试,下图中的时序是正确的)

二、I2C及RX8025AC驱动 #include "myiic.h" #include "delay.h" void Delayus(u16 us) { u16 i; for(i=0;i250) { IIC_Stop(); return 1; } } SCL_0//ʱÖÓÊä³ö0 return 0; } void IIC_Ack(void) { SDA_OUT(); SDA_0; Delayus(10); SCL_1 Delayus(10); SCL_0 Delayus(10); } void IIC_NAck(void) { SDA_OUT(); SDA_1; Delayus(10); SCL_1 Delayus(10); SCL_0 Delayus(10); } void IIC_Send_Byte(u8 txd) { u8 i; SDA_OUT(); for(i=0;i<8;i++) { if(txd & 0x80) SDA_1 else SDA_0 txd <<= 1; Delayus(10); SCL_1 Delayus(10); SCL_0 } Delayus(10); SCL_1 Delayus(10); SCL_0 } u8 IIC_Read_Byte(unsigned char ack) { u8 i,receive=0; SDA_IN();//SDAÉèÖÃΪÊäÈë for(i=0;i<8;i++) { SCL_1 Delayus(10); receive <<=1; if(READ_SDA) receive |= 0x01; SCL_0 Delayus(10); } SDA_OUT(); return receive; } void R8025AC_Read(u8 sadd, u8 *buf, u8 len) { u8 i; IIC_Start(); IIC_Send_Byte(0x64); IIC_Send_Byte(sadd<<4|0x01); IIC_Start(); IIC_Send_Byte(0x65); for(i=0;i