首页 > 编程知识 正文

i2c扩展芯片,rx5700驱动问题

时间:2023-05-05 09:04:46 阅读:110334 作者:2353

一. I2C

1.I2C概述

I2C总线是由SDA和SCL构成双线式双向通信,通过组合这两个信号,进行通信的开始/停止/数据传输/响应等接收信号。

非通信时: SDA、SCL均维持高电平。

通过SCL变为高电平、上升或下降SDA来控制通信的开始和终止。

的数据传输和发送时的SDA线上的数据变更在SCL线的低电平区间进行,接收侧在SCL线的高电平区间进行数据的读出,无论哪种情况,都在SCL线的每个定时脉冲进行1比特。

I2C总线的设备没有通常的逻辑设备具有的芯片选择引脚,取而代之,对设备分配从地址,在接收机的从地质和选择从地址一致时开始通信。

2 .开始和停止I2C通信

3、I2C数据的传输

4、I2C数据响应

5、从地址

6、写入时机

7、阅读时机(RX8025官网资料中的阅读时机是错误的。 测试结果如下图所示的时机是正确的) ) )。

二. I2C和RX8025AC交流驱动

# include ' myiic.h ' # include ' delay.h ' voiddelayus (u16us ) ) { u16 i; for(I=0; ius; I(__NOP ); }voidIIC_init(void ) gpio _ inittypedefgpio _ init structure; RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ gpiob,ENABLE ); gpio _ init structure.gpio _ pin=gpio _ pin _6| gpio _ pin _ 7; gpio _ init structure.gpio _ mode=gpio _ mode _ out _ PP; //尸体gpio _ init structure.gpio _ speed=gpio _ speed _2MHz; gpio_init(gpiob,GPIO_InitStructure ); //gpio_setbits(gpiob,GPIO_Pin_6|GPIO_Pin_7); //PB6,Pb7}voidIIC_start(void ) {SDA_OUT; SCL_1sda_1Delayus(10 ); sda _ 0延迟us (10 ); SCL _ 0延迟us (10 ); }voidIIC_stop(void ) ) U8I; SDA_OUT (; //sdasda_0delayus(10; SCL _ 1延迟us (10 ); sda_1for(I=0; i5; I )延迟(10 ); }U8IIC_wait_ack(void ) {u8 ucErrTime=0; SDA_IN (; //sdadelayus(10; 延迟(10 ); while(read_sda ) {ucErrTime; ucerrtime 250 (IIC _ stop ); 返回1; }SCL_0/0return0; }voidIIC_ack(void ) {SDA_OUT ); SDA_0; 延迟(10 ); SCL _ 1延迟us (10 ); SCL _ 0延迟us (10 ); }voidIIC_nack(void ) {SDA_OUT; SDA_1; 延迟(10 ); SCL _ 1延迟us (10 ); SCL _ 0延迟us (10 ); }voidIIC_send_byte(U8TXD ) U8I; SDA_OUT (; for(I=0; i8; I ) if(txd0x80 ) SDA_1else SDA_0txd=1; 延迟(10 ); SCL _ 1延迟us (10 ); SCL_0}Delayus(10 ); SCL _ 1延迟us (10 ); SCL _0} U8Iic _ read _ byte (unsignedcharack ) u8i,receive=0; SDA_IN (; //sdafor(I=0; i8; I ) SCL_1Delayus(10; 接收=1; if(read_sda ) receive |=0x01; SCL _ 0延迟us (10 ); }SDA_OUT (; 返回接收; }voidr8025AC_read(U8sadd,u8 *buf,u8 len ) ) U8I; IIC_Start (; IIC_send_byte(0x64; IIC_send_byte(saDD4|0x01 ); IIC_Start (; IIC_send_byte(0x65; for(I=0; ilen-1; I ) {buf[I]=IIC_read_byte(1; IIC_Ack (; }buf[I]=IIC_read_byte(0; IIC_NAck (; IIC_Stop (; }voidr8025AC_write(U8sadd,u8 *buf,u8 len ) ) U8I; IIC_Start (; IIC_send_byte(0x64; IIC_send_byte(saDD4; for(I=0; ilen; I ) IIC_send_byte(buf[I]; (}IIC_Stop ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。