关于AT24C128页写的问题?

来源:百度知道 编辑:UC知道 时间:2024/07/04 10:33:24
我用51的单片机对AT24C128进行页写操作,为什么我一次写入的数据大于
64个字节就会出错?而小于64个字节则一切正常,后来我发现AT24C128的页写缓冲区只有64个字节,我想应该是这里的原因造成的。
我要问的具体问题是:我对AT24C128进行页写操作,我只连续写6个字节
,再发送停止信号结束,我不连续写完64个字节就停止结束这样可以吗?如果可以的话,那我下一次再次启动总线写数据时会不会出错啊?
那如果我第一次写发16位的子地址为0000H,从00H开始写,写6个字节。送停止信号结束
第二次写发16位的子地址为0006H,再写6个字节。送停止信号结束
依次类推,我一共进行10次写周期操作,这样可以吗?
是不是一定要写完一页才能送停止信号结束总线啊?

在页写模式下,单个写周期内AT24C128最多可以写入64个字节数据。页写操作的启动和字节写一样,不同在于传送了一字节数据后,主器件允许继续发送63个字节。每发送一个字节后,AT24C128将响应一个应答位,且内部低5位地址加1,高位地址保持不变。如果主器件在发送停止信号之前发送大于64个字节,地址计数器将自动翻转,先前写入的数据被覆盖。当所有64字节接收完毕,主器件发送停止信号,内部编程周期开始。此时,所有接收到的数据在单个写周期内写入AT24C128。(从IIC中文资料上抄下来的)

如果主器件在发送停止信号之前发送大于64个字节,地址计数器将自动翻转,先前写入的数据被覆盖。
那如果主器件在发送停止信号之前发送小于64个字节,接收到的数据会在单个写周期内写入AT24C128吗?

at24c128没有用过不清楚。

但是其他at24cxx。。都不是这样。。

所谓的页。。其实是对应的页地址的。

比如你说的64字节。。如果你的地址从0开始。
那么是可以一次写64个字节的。。
但是如果你从地址1开始。那么你只能这次写63个字节了。
相当于你写的地址。。如果是1111,1111,你的低6位的地址是可以改变的。
但是6位前的就不可以。。
at24x的pdf上面 应该有明确写道。如果超出这个页的地址。
会重新从页的第一个位置开始写入缓冲

有点乱。。还是直接用例子吧。

用64一个页说明
比如一个开始地址 假如 a = xxxx;
要连续写入的数据数十 y;
那么你必须保证 a & ~(64-1) == (a+y) & ~(64- 1)
如果不相等。。说明你的这些数据不是在一个页里面。
那就不能写。。必须分多次写了。

注意:
那如果我第一次写发16位的子地址为0000H,从00H开始写,写6个字节。送停止信号结束
第二次写发16位的子地址为0006H,再写6个字节。送停止信号结束
依次类推,我一共进行10次写周期操作,这样可以吗?
是不是一定要写完一页才能送停止信号结束总线啊?

这样是不能写完一页的。
因为 64不是6的倍数。。会出现跨页现象,
必须保证 a & ~(64-1) == (a+y) & ~(64- 1)

那如果主器件在发送停止信号之前发送小于64个字节,接收到的数据会在单个写周期内写入AT24C128吗?
会在单写周期完成。。否则页操作就没有实际的意义了。