本帖最后由 何昌昕 于 2016-10-12 14:35 编辑
紧接上一个帖子https://www.nxpic.org.cn/module/forum/thread-606549-1-1.html 首先先来了解下IIC通信,下面摘取百度百科一段简单的介绍,IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单、双向、二线制、同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线接口。80年代的通信协议沿用至今,足见其稳定与便捷性。现在市面上大多数字类传感器均是采用IIC通信协议。 IIC协议只需要使用到两根双向信号线,一根为数据线SDA,一根为时钟线SCL。当总线空闲时,两根线均为高电平。IIC总线在进行数据传输时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有时钟线上的信号为低电平时,数据线上的高低电平才允许变化。 下面简单叙述,我们如何通过模拟IIC的方式实现对MMA8451和MPU3050传感器的读写。 要实现模拟IIC需要几个关键的程序: 1.初始化程序,需要将SDA,SCL都拉高,释放总线。
2.IIC总线开始和停止信号
根据这张时序图,我们可以看到,IIC的起始信号是SCL在高电平期间,SDA一个下降沿即可产生开始信号 同样的,SCL在高电平期间,SDA一个上升沿即可产生停止信号,程序实现如下图所示
3.应答与非应答信号 每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。同样的我们根据上面的时序图写出如下代码。 IIC的应答信号为当SDA为低电平时,SCL低高低即可产生应答信号。 IIC的非应答信号为当SDA为高电平时,SCL低高低即可产生非应答信号。
4.写数据 单片机在进行写操作的过程中,首先先发送该器件的7位地址码和方向位0,共8位,一个字节,发送完后,释放SDA线,并在SCL线上产生第9个时钟信号,被选中的器件在确认是自己的地址后,在SDA线上产生一个应答信号作为回应,单片机收到应答后就可以传送数据了。 传送数据时,单片机首先发送一个字节的被写入器件存储的首地址,收到器件应答后,单片机依次发送各数据字节,但每个字节都需要等待应答。
5.读数据 读数据的过程和写数据一样,首先先发送该器件的7位地址码和方向位0,共8位,一个字节,发送完后,释放SDA线,并在SCL线上产生第9个时钟信号,被选中的器件在确认是自己的地址后,在SDA线上产生一个应答信号作为回应,单片机收到应答后就可以传送数据了。 然后,再发一个字节要读出器件存储区的首地址,收到应答后,单片机要重复一次起始信号,并发出器件地址和读方向位1,收到器件应答后就可以读出各数据字节了,每读出一个数据字节,单片机都要发出应答信号,当读完最后一个字节后,需要返回非应答信号,并发出结束信号终止操作。
基本的IIC总线的操作就这样,下面我们只需要查阅芯片的数据手册进行初始化配置和读写数据即可。
MMA8451datasheet.pdf
(489.05 KB, 下载次数: 3)
|