2024年3月30日发(作者:郜智杰)
从24c128到24c256
24C256程序控制原理(ZZ)
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) //
{
P2OUT&=0xf9; //
P2DIR&=0XFD; //SDA=1,
H,FD=1111,1101
P2DIR&=0XFB; //SCL=1
FB=1111,1011
P2DIR|=0X02; // SDA=0
P2DIR|=0X04; // SCL=0
}
//停止I2C模块
void stop_IIC(void) //
{
P2DIR|=0X02;//SDA=0
IIC_Delay();
P2DIR&=0XFB;//SCL=1 FB=1111,1011
P2DIR&=0XFD;//SDA=1,
FD=1111,1101
启动I2
设置P2输出
上拉电阻使得P2.1为
上拉电阻使得P2.1为H,
2024年3月30日发(作者:郜智杰)
从24c128到24c256
24C256程序控制原理(ZZ)
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) //
{
P2OUT&=0xf9; //
P2DIR&=0XFD; //SDA=1,
H,FD=1111,1101
P2DIR&=0XFB; //SCL=1
FB=1111,1011
P2DIR|=0X02; // SDA=0
P2DIR|=0X04; // SCL=0
}
//停止I2C模块
void stop_IIC(void) //
{
P2DIR|=0X02;//SDA=0
IIC_Delay();
P2DIR&=0XFB;//SCL=1 FB=1111,1011
P2DIR&=0XFD;//SDA=1,
FD=1111,1101
启动I2
设置P2输出
上拉电阻使得P2.1为
上拉电阻使得P2.1为H,