IIC方式读驱动AT24C16芯片

闲来无事,找了块msp430的板子编写了个IIC驱动AT24C16的程序。

IIC作是一种简单,双向,同步的二进制总线,由SDA数据线和SCL时钟线组成,所有接到IIC总线上的各设备的SDA数据线都连接到总线的SDA数据线上,用来进行数据的传输;所有接到IIC总线上的各设备的SCL时钟线都连接到总线的SCL时钟线上,用来同意时钟。以下是IIC的各个状态:

当总线是空闲状态时,都为SCL和SDA都为高片平。

IIC的启动状态为:SCL为高电平期间,SDA由高电平变为低电平

IIC的主机发送数据方式:当SCL为高电平期间,SDA的数据由主机写入从机,当SCL为低电平期间,主机发送的SDA数据线上的数据才能发生变化。当SDA上的的8位数据或者命令发送出去后(8位数据发送是先发送高位,再发送低位),SDA线会被设置为输入,此时SCL依旧是高电平,等待从机的应答信号,如果从机有应答信号,则主机会在SDA线上收到低电平应答,没有应答则为高电平,主机在接收到应答后可以继续发送字节或者结束IIC数据传输。

IIC的主机接收数据:当主机接收数据时,会先把SCL线置位高电平,SDA设为输入,等待数据到来,主机通过IIC方式每读取一个字节就要返回一个应答给从机(读取最后一个字节不需要返回应答,如果只读取一个字节,也不需要应答),每个字节都是从高位开始接收,全部接收完毕后,可以结束IIC数据传输。

IIC的结束状态为:SCL为高电平期间,SDA由低电平变为高电平,即恢复到空闲状态。

接下来是AT24C16的存储:

AT24C16芯片存储空间位16Kbit,也就是能存储2M字节,AT24C16的读取方式是IIC方式。

以下是包括AT24C16在内的AT24Cxx系列的数据手册,是英文版的:https://download.csdn.net/download/qq_15897815/10640486

写驱动就是要看数据手册,而绝大多数手册都是英文的,因此,学好英语真的很重要啊。

我们先看Memory Organization部分,这里主要讲不同芯片的存储区域划分,直接看AT24C16部分:

这里说的是AT24C16分为128页,每一页由16个字节。

由于IIC已经讲过了,这里我们可以直接看Device Addressing部分,这一章大体上讲的是芯片的A2,A1,A0对于不同芯片的作用,

这里讲到ATC16芯片的A2,A1,A0不起作用,也就是不用管这三个引脚。

接下来我们来看Write Operations和Read Operations部分,这两部分大体上讲的是AT24C16的地址是11位数据,但是由于IIC每次只能写入一个字节,也就是8位数据,因此主机通过IIC与AT24C16通信时的地址要分两次写入。

接下来我们直接看通过IIC向AT24C16如何写入和读取数据:

首先将地址分成两个字节,AT24C16的地址范围为0x000-0x7FF,刚好是2048个字节。假如我要向第三页的第一个地址写入数据,则地址为0x031,这里的高两个字节表示页地址,如0x03表示第三页,低一个字节表示该页的第几个地址,如0x1表示第一个地址。将11位的地址分为两个部分,高三位和1010和读/写状态位组合成一个字节,组合方式为10100000+高三位<<1+0(0表示写,1表示读,如果是写数据则用0,读数据则用1),构成一个高地址字节,低八位构成一个低地址字节。

主机向AT24C16写入数据流程为:启动IIC-->发送写设备地址(高地址字节)-->等待响应-->发送字地址(低地址字节)-->等待应答-->向AT24C16写入数据-->等待应答-->继续写入,等待答复......直到写完最后一个数据并收到答复-->--->停止IIC

主机向AT24C16读取数据流程为:

启动IIC-->发送写设备地址(高地址字节)-->等待响应-->发送字地址(低地址地址)-->等待应答-->重新启动IIC-->发送读设备地址(高地址字节)-->等待应答-->每接受一个数据就要发送一个应答给从机,但是最后一个数据不需要发送应答-->停止IIC

以上就是IIC读取和写入AT24C16数据的过程,以下是本人今天用msp430F2418的IIC读取和写入AT24C16芯片的程序,可直接调用里面的函数:

https://download.csdn.net/download/qq_15897815/10640445

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(msp430,IIC,AT24C16)