金牌会员
 
- 积分
- 1822
- 金钱
- 1822
- 注册时间
- 2014-6-27
- 在线时间
- 978 小时
|
发表于 2016-2-26 17:29:58
|
显示全部楼层
/*********************************************************************
写数据,考虑跨页问题,只需要关心写入起始地址即可
返回:0,操作失败,1操作成功
*********************************************************************/
u8 AT24CXX_PageWrite(u16 WriteAddr, u8 *buf, u16 Len)
{
u8 wr_page,wr_offset,x;
wr_offset=I2C_PageSize-WriteAddr%I2C_PageSize;//起始地址所在的页还可以写入数据的个数
if(Len>wr_offset)//需要跨页写,如果wr_offset为I2C_PageSize,刚好是一个页的开始
{
x=AT24CXX_WriteLenByte(WriteAddr, buf, wr_offset);//x=0,操作IIC失败,下面操作没必要了
if(x)
{
Len-=wr_offset;buf+=wr_offset;WriteAddr+=wr_offset;//重新定位
wr_page=Len/I2C_PageSize;//重新计算要写入的页数量
wr_offset=Len%I2C_PageSize;//重新计算页偏移量?
while(wr_page)//写入整页数据
{
AT24CXX_WriteLenByte(WriteAddr, buf, I2C_PageSize);
buf+=I2C_PageSize;
WriteAddr+=I2C_PageSize;
wr_page--;
}
if(wr_offset)//不够一页的数据
{
AT24CXX_WriteLenByte(WriteAddr, buf, wr_offset);
}
}
}
else//可以在当前起始地址所在的页写入
{
x=AT24CXX_WriteLenByte(WriteAddr, buf, Len);
}
return x;
}
最近用到24LC256,写了一个写数据函数,你可以看下。 |
|