完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一:IIC通信接口的历史
IIC(Inter-Integrated Circuit)其实总的一个名称就是IICBUS,所以在中文上叫做集成电路总线,它是一种串行通信总线,可以实现一主多从。由飞利浦公司在1980年为了让主板、嵌入式系统用以了连接周围设备发展而来。二:IIC通信接口的特点 1.双线制:一根SCL(时钟同步线);一根SDA(数据传输线)IIC从设备地址的说明: 一 :设备地址般由7bit组成,在IIC通信时,将其左移一位,将最低位作为读写位。 比如:0xA1(1010 0001),实际使用过程中应该是0XA1<<1 = 0X42(0100 0010),这里默认为写模式。 二 :读写位: 因为IIC是半双工通信接口,所以在主机开始于从机通信前,主机需要告诉从机此次通信是谁作为发送端,谁作为接收端。其中最低位控制读还是写。 0:表示写模式—主机作为发送端 1:表示读模式—主机作为接收端 以我们上图的一个地址(0XA1)作为例子: (0xA1)<<1|0x00 ==0x42-----主机为发送端(写模式) (0xA1)<<1|0x01 ==0x43-----主机为接收端(读模式) 设备地址的作用:确保在IIC通信中主机可以找到从机,从而达到一主多从的功能 二:IIC通信的时序图(非常重要) 一:数据位有效性规定: I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。 void IIC_Send_Byte(u8 txd){ u8 t; SDA_OUT(); IIC_SCL=0;//拉低时钟开始数据传输 for(t=0;t<8;t++) { delay_us(2); IIC_SDA=(txd&0x80)>>7; //将发送的数据置到最低位 txd<<=1; delay_us(3); //对TEA5767这三个延时都是必须的 IIC_SCL=1; delay_us(2); IIC_SCL=0; delay_us(2); } } 起始和终止信号SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。 void IIC_Start(void){ SDA_OUT(); //sda线输出 IIC_SDA=1; IIC_SCL=1; //保证IIC处于空闲状态 delay_us(4); IIC_SDA=0;//START:when CLK is high,DATA change form high to low delay_us(4); //看时序图 IIC_SCL=0;//钳住I2C总线,准备发送或接收数据 } //产生IIC停止信号void IIC_Stop(void){ SDA_OUT();//sda线输出 IIC_SCL=0; IIC_SDA=0;//STOP:when CLK is high DATA change form low to high delay_us(5); IIC_SCL=1; delay_us(5); IIC_SDA=1;//发送I2C总线结束信号 } 应答和非应答:IIC 总线协议规定,每传送一个字节数据(即8个bit)后,第9为一个应答信号以确定数据传送是否被对方收到。应答信号由接受设备产生,在SCL为高电平期间,接受设备将SDA拉低为低电平,表示数据传输正确,产生应答。 //产生ACK应答void IIC_Ack(void){ IIC_SDA=0; SDA_OUT(); IIC_SCL=1; delay_us(4); IIC_SCL=0; delay_us(2); IIC_SCL=1;}//不产生ACK应答 void IIC_NAck(void){ IIC_SCL=0; SDA_OUT(); IIC_SDA=1; delay_us(2); IIC_SCL=1; delay_us(2); IIC_SCL=0;} 读写周期范围: |
|
|
|
只有小组成员才能发言,加入小组>>
3308 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9049 浏览 16 评论
4083 浏览 18 评论
1167浏览 3评论
601浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
592浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2329浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1892浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:35 , Processed in 1.202229 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号