|
问题描述:
1,每次上电,读取到的TotalArea的值,都是异常 ,很多都是65536,但是,其他值都是对的。
2,读取其他值都是正常的。
源代码如下:
void ReadParament_FromAT24C02(void)
{
volatile uint8 Parament_Data0 = 0;
volatile uint8 Parament_Data1 = 0;
volatile uint8 Parament_Data2 = 0;
volatile uint8 Parament_Data3 = 0;
volatile uint8 TmpBuffer[6] = {0};
volatile uint32 Parament_Data0_uint32 = 0;
volatile uint32 Parament_Data1_uint32 = 0;
volatile uint32 Parament_Data2_uint32 = 0;
volatile uint32 Parament_Data3_uint32 = 0;
I2c_AT24C02ReadNbyte(0x01,TmpBuffer,6);
/* Step1, read L Parament */
Parament_Data0 = TmpBuffer[0]; /* 上电读取AT24C02的存储数据 */
Parament_Data1 = TmpBuffer[1];/* 上电读取AT24C02的存储数据 */
WorkWidthL = (((uint16)Parament_Data0) |((uint16)(Parament_Data1<<8)));
/* Step2, read C Parament */
Parament_Data0 = TmpBuffer[2]; /* 上电读取AT24C02的存储数据 */
Parament_Data1 = TmpBuffer[3]; /* 上电读取AT24C02的存储数据 */
PulC = (((uint16)Parament_Data0) |((uint16)(Parament_Data1<<8)));
/* Step3, read R Parament */
VHalamIntvlR = TmpBuffer[4]; /* 上电读取AT24C02的存储数据 */
/* Step4, read S Parament */
Sensity = TmpBuffer[5]; /* 上电读取AT24C02的存储数据 */
/* Step5, read PartArea Parament */
I2c_AT24C02ReadNbyte(Addres_PartAreaParament,TmpBuffer,4);
Parament_Data0 = TmpBuffer[0]; /* 上电读取AT24C02的存储数据 */
Parament_Data1 = TmpBuffer[1];/* 上电读取AT24C02的存储数据 */
Parament_Data2 = TmpBuffer[2];/* 上电读取AT24C02的存储数据 */
Parament_Data3 = TmpBuffer[3]; /* 上电读取AT24C02的存储数据 */
PartArea = (((uint32)Parament_Data0) \
|((uint32)(Parament_Data1<<8))\
|((uint32)(Parament_Data2<<16))\
|((uint32)(Parament_Data3<<24)));
/* Step6, read TotalArea Parament */
I2c_AT24C02ReadNbyte(Addres_TotalAreaParament,TmpBuffer,4);
Parament_Data0 = TmpBuffer[0];/* 上电读取AT24C02的存储数据 */
Parament_Data1 = TmpBuffer[1];/* 上电读取AT24C02的存储数据 */
Parament_Data2 = TmpBuffer[2];/* 上电读取AT24C02的存储数据 */
Parament_Data3 = TmpBuffer[3]; /* 上电读取AT24C02的存储数据 */
TotalArea = (((uint32)Parament_Data0) \
|((uint32)(Parament_Data1<<8))\
|((uint32)(Parament_Data2<<16))\
|((uint32)(Parament_Data3<<24)));
/* Step7, read WorkTime Parament */
I2c_AT24C02ReadNbyte(Addres_WorkTimeParament,TmpBuffer,2);
Parament_Data0 = TmpBuffer[0]; /* 上电读取AT24C02的存储数据 */
Parament_Data1 = TmpBuffer[1]; /* 上电读取AT24C02的存储数据 */
WorkTime = (((uint16)Parament_Data0) \
|((uint16)(Parament_Data1<<8)));
}
下面是I2C的驱动:
void I2c_AT24C02ReadNbyte(uint8 i2c_addr, uint8 *i2c_p, uint8 i2c_number) /* WordAddress,First Data Address,Byte lenth */
{
Start(); //发送起始命令
SendData(SLAW); //发送设备地址+写命令
RecvACK();
SendData(i2c_addr); //发送存储地址
RecvACK();
Start(); //发送起始命令
SendData(SLAR); //发送设备地址+读命令
RecvACK();
do
{
*i2c_p = RecvData();
i2c_p++;
if(i2c_number != 1) SendACK(); //send ACK
}
while(--i2c_number);
SendNAK(); //send no ACK
Stop(); //发送停止命令
}
|
|