📄 eeprom.c
字号:
#include <stdio.h>
#include <string.h>
#define WRITE_AT24C64_ADDR 0xa0
#define READ_AT24C64_ADDR 0xa1
#define MAX_BYTES_ONETIME 32
extern _VOID ppc860I2C_Init();
extern _ULONG32 I2CSend( _UCHAR8 *buffer, _USHORT16 length );
extern _ULONG32 I2CSendStartTwice( _UCHAR8 *ucFirstBuf,_UCHAR8 uclength1, _UCHAR8 *ucSecondBuf,_UCHAR8 uclength2);
extern _ULONG32 I2CReceive(_UCHAR8 *buffer, _USHORT16 *length);
_ULONG32 WriteEEPROM( _USHORT16 wAddr,_UCHAR8 pdatabuf[],_UCHAR8 length )
{
_UCHAR8 ucBufferTemp[MAX_BYTES_ONETIME+3];
_UCHAR8 i;
ppc860I2C_Init();
if( length > MAX_BYTES_ONETIME )
{
printf("\r\nEEPROM:Error! u want to write to AT24C64 over 32 bytes one time!");
return OS_ERROR;
}
ucBufferTemp[0] = WRITE_AT24C64_ADDR;
ucBufferTemp[1] = ( _UCHAR8 )( wAddr >>8 );
ucBufferTemp[2] = ( _UCHAR8 )( wAddr );
printf("\r\nEEPROM: U want to write addr %x%x",ucBufferTemp[1],ucBufferTemp[2]);
for( i=0;i<length;i++ )
{
ucBufferTemp[i+3] = pdatabuf[i];
}
I2CSend( ucBufferTemp,length+3 );
return OS_OK;
}
_ULONG32 ReadEEPROM( _USHORT16 wAddr,_UCHAR8 pdatabuf[],_USHORT16 length)
{
_UCHAR8 ucBufferFirst[3];
_UCHAR8 ucBufferSec[3];
_UCHAR8 ucRcvBuffer[MAX_BYTES_ONETIME];
_UCHAR8 i;
ppc860I2C_Init();
ucBufferFirst[0] = WRITE_AT24C64_ADDR;
ucBufferFirst[1] = (_UCHAR8)(wAddr>>8);
ucBufferFirst[2] = (_UCHAR8)wAddr;
ucBufferSec[0] = READ_AT24C64_ADDR;
for( i=0;i<length;i++)
{
ucBufferSec[i+1] = 0;
}
I2CSendStartTwice( ucBufferFirst, 3, ucBufferSec,(_UCHAR8)(length+1) );
I2CReceive( ucRcvBuffer,&length);
memcpy( ( void *)pdatabuf, ( void * )ucRcvBuffer, length);
return OS_OK;
}
_VOID TestEEPROM()
{
_UCHAR8 ucWriteAddr;
_UCHAR8 ucWriteDataBuf[3];
_UCHAR8 ucRcvDataBuf[3];
ucWriteAddr = 0x40;
ucWriteDataBuf[0] = 0x32;
ucWriteDataBuf[1] = 0x54;
ucWriteDataBuf[2] = 0x68;
WriteEEPROM( ucWriteAddr,ucWriteDataBuf,3 );
ReadEEPROM( ucWriteAddr,ucRcvDataBuf,3 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -