24C256 程序控制原理(ZZ)
2008 年 04 月 02 日 星期三 09:00
24C256 是具有 I2C 接口的 512x64 存储器,在数据的存储过程中除了遵
循 I2C 协议必须的逻辑以外,一个最容易忽视并且最容易导致出错的问题就是
存储地址问题。
24C256 的数据容量是 32768,即可以存储的有效字节数。所以它的地址
是 16 位整型数,有效范围是 0~32768,数据字节为单位存储,在 16 位地址
其中有效数据只有 15 位,低 6(0~5)位地址表示的容量是 0~63,然后连
续的 9(6~14)位地址表示页码的范围是 0~511,在数据连续存储过程
中,相同的页面内,存储地址自动完成累加过程;数据在不同页面的存储时,
地址不能自动累加,如果不做正确处理,数据将从本页开始的地址重新开始覆
盖已经存在的数据。例如,地址是 63(二进制码 111111)表示的是第 0 页
的最后一个存储空间,地址 64(二进制码 1,000000)表示第 1 页最开始的存
储空间。在当前存储地址是 63 时如果该器件处于连续存储模式下,数据将出
错。
原因是什么呢? 24C256 支持数据的连续存储,最大的存贮数量是 64 即
一页的内容,如果在地址选择上超过了这个限制,数据将会覆盖本页开始的位
置重新存储,这就造成数据的错误,在使用上,虽然数据是分页存储的,但在
形式上是连续数据,所以存储中不需要特意区分页地址和页内地址。
在连续存储中,尽管数据每次存储的数量小于 64,数据也可能出错,例如
每次存储数量为 11,地址的变化是 0,11,22,33,44,55,66……,看
上去没有什么问题,地址是按照每次 11 递增的,然而存储的结果还是出错
了,原因是什么呢?在地址 55 开始的空间无法提供连续 11 个页内存储空间,
当地址增加到 63 以后数据又从该页 0 地址重新开始,从而导致数据储存的错
误。有效的解决办法是如果使用连续存储模式,地址的安排上要使存储块的大
小为 64,32,16,8,4,2 此外都不能使用连续地址存储。如果数据采集中
的有效数据位小于 64,比如每次采集的结果是 30 字节,在连续存储模式下要
按照 32 为单位存储,不足的字节补零处理。
以下是 MSP430F449 对 24C256 数据传输基本控制模块
//延时处理模块
void IIC_Delay(void)
{
_NOP();
_NOP();
_NOP();
}
//启动 I2C 模块
void start_IIC(void) // 启动 I2
{
P2OUT&=0xf9; //设置 P2 输出
P2DIR&=0XFD; //SDA=1, 上拉电阻使得 P2.1 为
H,FD=1111,1101