AT24C16读写注意事项

本讲解不涉及详细IIC通信,重点在于AT24C系列器件的介绍 和 IIC的通信流程,不喜勿喷, 望请修正。。。。。GO

图AT24C01/02/04/08/16的外形级封装和引脚说明

AT24C系列为美国ATMEL公司推出的串行COMS型E2PROM,是典型的串行通信E2PROM 。

AT24CXX是IIC总线串行器件,具有工作电源宽(1.8~6.0 V),抗干扰能力强(输入引脚内置施密特触发器滤波抑制噪声),功耗低(写状态时最大工作电流3 mA),高可靠性(写次数100万次,数据保存100年),支持在线编程等特点.

从上面两张图片可以得知:

AT :ATMEL公司出品

24: 系列号

C :商业

XX : 存储容量 ,举例 01 –> 1K à 128 字节

02 à 2K à 256 字节

…………….

16à 16K à 2K 字节

I2C总线协议规定,任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。

主器件控制串行时钟和起始、停止信号的发生。主器件任何期间都可以发送或接收数据,但是主器件控制数据传送模式(发送或者接收)。

WP写保护引脚:当该引脚连接到VCC,I2C器件内的内容被写保护(只能读)。如果允许对器件进行正常的读写,那么WP引脚需连接到地或者悬空。

通过器件地址输入端A0、A1、A2可以实现讲最多8个at24c01器件和at24c02器件、4个at24c04器件、2个at24c08器件、1个at24c16器件连接到总线上。当总线上只有一个器件时,A0、A1、A2可以连接到地或者悬空。

下面重点分析一下这句话:为什么 at24c01/at24c02 可以挂接8个器件呢?为什么到了 at24C16 却只能挂接1个器件呢???

WHY?

器件识别控制字节的作用

以at24c01/at24c02 和at24C16 举例:

I2C总线上所有外围器件都有唯一的地址,这个地址由器件地址和引脚地址两部分组成。共7位。

器件地址是I2C器件固有的地址编码,器件出厂时已经给定,不可更改。

引脚地址由I2C总线外围器件的地址引脚A0、A1、A2决定,根据其在电路中接电源正极、接地或者悬空的不同,形成不同的地址代码。引脚地址数也决定了同一器件可接入总线的最大数目。

此时于引脚地址无关,与 P2、P1、P0有关,即页地址有关,页地址高三位是器件识别控制字节的1-3位,器件上的A0,A1,A2,就无效了,所以只能接1个AT24C16器件。

页地址是什么乖乖,从何而来呢????

上图可知 AT24C16 存储容量 16K = 2K字节 = 128(页面数)* 16 (每页的字节数) = 2^11 (寻址地址位数 11位)。

AT24C16内部有2048*8位的存储容量,即可以存储2K字节的数据。这2K字节被放在128个页内,每页存放16个字节。所以对AT24C16内部的访问需要11位地址(0-7ff)。

举个实际的例子:

对AT24C16访问时,按照页地址和页偏移量的方式进行访问。

比如要访问第100页的第3个字节,则在发送寻址的时候,就要发送0X0643,其中页地址的高三位放在器件地址中。

第100页的第3个字节 == 0X0643

0643 = 6 * 256 + 4 * 16 + 3 = (6*16+4)*16 + 3 = 1603

就是 100页的第3个字节。

所以在编写程序对AT24C16第100页的第3个字节进行写数据的时候,步骤如下:

1)发送起始信号;

2)发送器件地址0XA6(1010 0110,1010是固定地址,011是页地址的高三位,0表示写操作);

3)发送操作地址0X43(0100 0011,0100是页地址的低四位,0011是页地址偏移量,即第100页内的第三个字节,

4)发送要写的数据,

5)发送终止信号。

AT24C02属于AT24CXX系列,是一个2K位串行CMOS EEPROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。

附几张杂图:

看一下10位地址的读写:

本文对如何使用stm32cube生成I2C工程不作说明,仅对在对AT24Cxx系列的使用时作出易忽略的说明;

1、at24cxx页面结构:

从该图可以看出16K(bit)共有128个页,每页由16byte构成。16k = 128 * 16 * 8;

特别注意:除at24c01和at24c02的页由8个byte构成,其它的都是由16byte构成。(这关系到对芯片的连续读写)

2.at24cxx的设备地址:

A:作为设备地址的一部分;P:作为页地址的一部分;

对于大多数人来说都知道I2c设备具有一个设备地址,并且在一条总线上是唯一。若要在一个I2C总线上挂多个AT24CXX系列芯片,则需要A2,A1,A0作为设备地址的一部分,设备地址的最低位作为是读(1)写(0)。

对于在一条总线挂载的设备数:看有几个位用作设备地址。

例:AT24C04: 有两位用作设备地址(A2,A1),一位用作页地址(P0).则可挂载的设备数为2^2 = 4个。

   AT24C16:没有用作设备地址的位,三位用作页地址(P0,P1,P2)。则仅可挂载设备数为2^0= 1个。

可能有人会考虑若A0,A1,A2用作地址了,那实际硬件接线该怎么接呢?

直接按照AT24C02的接就OK了.都接地。

3、页面连续读写:

注意:连续写并不是可以一直连续的写N个数据,而是写一页的数据(AT24C02只能连续写8byte的数据,其它的可以连续写16byte的数据。);

当从某个地址连续写多个数据时,要确定这个地址在某一页的偏移量,从而确定该页中最多还可以连续写多少byte数据。

以AT24C16为例;

比如在0x0025读写,则该位置的偏移量为:0x0025 & 0x000FF = 0x0005, 即该页还可以写 = 每页的字节数 - 偏移量 = 0x0F - 0x05 = 0x0A 即在该页还可以连续写10byte数据;

4、地址问题:

由于在传输过程中,地址数据是一个8位的地址,只能按该8位地址寻址的数据有2^8=256byte数据,

对于容量大于256byte容量的设备,我们还有设备ID中的页地址位可以使用。

例:以AT24C16为例 :

比如我们要访问(写)第0x0456的这一byte数据0x55:

(1)、开始信号:

(2)、设备号(高4位为:1101 p p p r/w), 此时设备号应设置为:0xA4;

(3)、地址:0x56;

(4)、数据:0x55;

(5)、结束;

5、时间控制:

每完成一次写操作后要进行一定的延时,让芯片去处理数据;从该图看,保险的时间为5ms.


作者:sovnee
来源:CSDN
原文:https://blog.csdn.net/ytdsf/article/details/79466133
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值