at24c256.c
来自「ucos v2.62 安装程序 附带已移植到C8051F020的UCOS源码」· C语言 代码 · 共 137 行
C
137 行
#include "IIC.h"
#include "at24c256.h"
unsigned char AT24C256_ReadBlock(unsigned int blockAddress,unsigned char *recBuf);
unsigned char AT24C256_WriteBlock(unsigned int blockAddress,unsigned char *SendBuf);
unsigned char AT24C256_ReadMultiBlock(unsigned int blockAddress,unsigned int blockNum,unsigned char *recBuf);
unsigned char AT24C256_WriteMultiBlock(unsigned int blockAddress,unsigned int blockNum,unsigned char *sendBuf);
unsigned char AT24C256_ReadBlock(unsigned int blockAddress,unsigned char *recBuf)
{
unsigned char slaveAddress;
unsigned int tmp;
unsigned char subAddress[2];
if(blockAddress>=(AT24C256_BLOCK_SIZE*4))
return 0;
if(blockAddress<AT24C256_BLOCK_SIZE)
{
slaveAddress = AT24C256_ADDRESS +0x00;
tmp = blockAddress*AT24C256_BYTE_SIZE;
subAddress[0] = (unsigned char) (tmp>>8);
subAddress[1] = (unsigned char) (tmp);
}
if((blockAddress>=AT24C256_BLOCK_SIZE)&&(blockAddress<(AT24C256_BLOCK_SIZE*2)))
{
slaveAddress = AT24C256_ADDRESS +0x01;
tmp = (blockAddress-AT24C256_BLOCK_SIZE);
tmp *= (AT24C256_BYTE_SIZE);
subAddress[0] = (unsigned char) (tmp>>8);
subAddress[1] = (unsigned char) tmp;
}
if(blockAddress>=AT24C256_BLOCK_SIZE*2&blockAddress<AT24C256_BLOCK_SIZE*3)
{
slaveAddress = AT24C256_ADDRESS +0x02;
tmp = (blockAddress-AT24C256_BLOCK_SIZE*2);
tmp *= AT24C256_BYTE_SIZE;
subAddress[0] = (unsigned char) (tmp>>8);
subAddress[1] = (unsigned char) (tmp);
}
if(blockAddress>=AT24C256_BLOCK_SIZE*3&blockAddress<AT24C256_BLOCK_SIZE*4)
{
slaveAddress = AT24C256_ADDRESS +0x03;
tmp = (blockAddress-AT24C256_BLOCK_SIZE*3);
tmp *= AT24C256_BYTE_SIZE;
subAddress[0] = (unsigned char) (tmp>>8);
subAddress[1] = (unsigned char) (tmp);
}
return SmbRec(slaveAddress,subAddress,TWO_BYTE_SUBA,AT24C256_BYTE_SIZE,recBuf);
}
unsigned char AT24C256_WriteBlock(unsigned int blockAddress,unsigned char *SendBuf)
{
unsigned char slaveAddress;
unsigned int tmp;
unsigned char subAddress[2];
if(blockAddress>=AT24C256_BLOCK_SIZE*4)
return 0;
if(blockAddress<AT24C256_BLOCK_SIZE)
{
slaveAddress = AT24C256_ADDRESS +0x00;
tmp = blockAddress*AT24C256_BYTE_SIZE;
subAddress[0] = (unsigned char) (tmp>>8);
subAddress[1] = (unsigned char) (tmp);
}
if(blockAddress>=AT24C256_BLOCK_SIZE&blockAddress<AT24C256_BLOCK_SIZE*2)
{
slaveAddress = AT24C256_ADDRESS +0x01;
tmp = (blockAddress-AT24C256_BLOCK_SIZE);
tmp *= AT24C256_BYTE_SIZE;
subAddress[0] = (unsigned char) (tmp>>8);
subAddress[1] = (unsigned char) (tmp);
}
if(blockAddress>=AT24C256_BLOCK_SIZE*2&blockAddress<AT24C256_BLOCK_SIZE*3)
{
slaveAddress = AT24C256_ADDRESS +0x02;
tmp = (blockAddress-AT24C256_BLOCK_SIZE*2);
tmp *= AT24C256_BYTE_SIZE;
subAddress[0] = (unsigned char) (tmp>>8);
subAddress[1] = (unsigned char) (tmp);
}
if(blockAddress>=AT24C256_BLOCK_SIZE*3&blockAddress<AT24C256_BLOCK_SIZE*4)
{
slaveAddress = AT24C256_ADDRESS +0x03;
tmp = (blockAddress-AT24C256_BLOCK_SIZE*3);
tmp *= AT24C256_BYTE_SIZE;
subAddress[0] = (unsigned char) (tmp>>8);
subAddress[1] = (unsigned char) (tmp);
}
return SmbSend(slaveAddress,subAddress,TWO_BYTE_SUBA,AT24C256_BYTE_SIZE,SendBuf);
}
unsigned char AT24C256_ReadMultiBlock(unsigned int blockAddress,unsigned int blockNum,unsigned char *recBuf)
{
unsigned char tmp;
unsigned char tmp1;
for(tmp=0;tmp<blockNum;tmp++)
{
tmp1 = AT24C256_ReadBlock(blockAddress,(recBuf+AT24C256_BYTE_SIZE*tmp));
if(tmp1== 0)
{
return 0;
}
blockAddress++;
}
return 1;
}
unsigned char AT24C256_WriteMultiBlock(unsigned int blockAddress,unsigned int blockNum,unsigned char *sendBuf)
{
unsigned char tmp;
unsigned char tmp1;
for(tmp=0;tmp<blockNum;tmp++)
{
tmp1 = AT24C256_WriteBlock(blockAddress,sendBuf+AT24C256_BYTE_SIZE*tmp);
if(tmp1 == 0)
{
return 0;
}
blockAddress++;
}
return 1;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?