uet_cache 发表于 2013-2-26 19:00 
你的问题太大了。你可以用好的硬件对存储芯片指定地址写指定数据。用你的硬件对该地址只读。读对了,再考虑 ...
大哥 你帮我看下
unsigned char I2C_WritePageByte(unsigned char *SendByte, unsigned char length, unsigned int WriteAddress, unsigned char DeviceAddress)
{
if(!I2C_Start())
return FALSE;
I2C_SendByte( DeviceAddress );//设置器件地址
if(!I2C_WaitAck()){I2C_Stop(); return FALSE;}
I2C_SendByte((unsigned char)((WriteAddress>>8)&0XFF)); //设置高起始地址
I2C_WaitAck();
I2C_SendByte((unsigned char)(WriteAddress&0XFF));
I2C_WaitAck();
while(length!=0)
{
I2C_SendByte(*SendByte);
Systick_Delay_1ms(3);
if(length == 1)I2C_NoAck();
else I2C_Ack();
SendByte++;
length--;
//Systick_Delay_1ms(3);
}
//I2C_WaitAck();
I2C_Stop();
//注意:因为这里要等待EEPROM写完,可以采用查询或延时方式(10ms)
Systick_Delay_1ms(3);
return TRUE;
}
这个是写
//读出1串数据 存放读出数据 待读出长度 待读出地址 器件类型(24c16或SD2403)
unsigned char I2C_ReadByte(char* pBuffer, unsigned char length, unsigned int ReadAddress, unsigned char DeviceAddress)
{
if(!I2C_Start())return FALSE;
I2C_SendByte(DeviceAddress);//器件地址
if(!I2C_WaitAck()){I2C_Stop(); return FALSE;}
I2C_SendByte((unsigned char)((ReadAddress>>8)&0XFF)); //设置低起始地址
I2C_WaitAck();
I2C_SendByte((unsigned char)(ReadAddress&0XFF));
I2C_WaitAck();
I2C_Start();
I2C_SendByte( DeviceAddress | 0x01);
I2C_WaitAck();
while(length)
{
*pBuffer = I2C_ReceiveByte();
if(length == 1)I2C_NoAck();
else I2C_Ack();
pBuffer++;
length--;
}
I2C_Stop();
return TRUE;
}
这个是读
怎么就是不行呢 是什么地方的原因啊
|