|
@@ -37,16 +37,16 @@ void AT24CXX_WriteOneByte(uint16_t WriteAddr,uint8_t DataToWrite)
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void AT24CXX_Read(uint16_t ReadAddr,uint8_t *pBuffer,uint16_t NumToRead)
|
|
|
|
|
|
|
+int AT24CXX_Read(uint16_t ReadAddr,uint8_t *pBuffer,uint16_t NumToRead)
|
|
|
{
|
|
{
|
|
|
uint8_t device_addr = 0xA0 | ((ReadAddr >>8) << 1);
|
|
uint8_t device_addr = 0xA0 | ((ReadAddr >>8) << 1);
|
|
|
int try_count = 100;
|
|
int try_count = 100;
|
|
|
while(0 >= gd32_i2c_read_nbytes(0, device_addr, (uint8_t)(ReadAddr&0xFF), pBuffer, NumToRead)){
|
|
while(0 >= gd32_i2c_read_nbytes(0, device_addr, (uint8_t)(ReadAddr&0xFF), pBuffer, NumToRead)){
|
|
|
if (try_count-- <= 0){
|
|
if (try_count-- <= 0){
|
|
|
- break;
|
|
|
|
|
|
|
+ return -1;
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
-
|
|
|
|
|
|
|
+ return NumToRead;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* use page write to improve write time */
|
|
/* use page write to improve write time */
|
|
@@ -61,17 +61,18 @@ static int AT24CXX_Write_Pages(uint16_t WriteAddr,uint8_t *pBuffer,uint16_t NumT
|
|
|
};
|
|
};
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
-void AT24CXX_Write(uint16_t WriteAddr,uint8_t *pBuffer,uint16_t NumToWrite){
|
|
|
|
|
|
|
+int AT24CXX_Write(uint16_t WriteAddr,uint8_t *pBuffer,uint16_t NumToWrite){
|
|
|
uint16_t remain_len = NumToWrite;
|
|
uint16_t remain_len = NumToWrite;
|
|
|
while(remain_len > 0){
|
|
while(remain_len > 0){
|
|
|
uint16_t w_len = (remain_len > PAGE_SIZE)?PAGE_SIZE:remain_len;
|
|
uint16_t w_len = (remain_len > PAGE_SIZE)?PAGE_SIZE:remain_len;
|
|
|
if (AT24CXX_Write_Pages(WriteAddr, pBuffer, w_len) < 0){
|
|
if (AT24CXX_Write_Pages(WriteAddr, pBuffer, w_len) < 0){
|
|
|
- return;
|
|
|
|
|
|
|
+ return -1;
|
|
|
}
|
|
}
|
|
|
WriteAddr += w_len;
|
|
WriteAddr += w_len;
|
|
|
pBuffer += w_len;
|
|
pBuffer += w_len;
|
|
|
remain_len -= w_len;
|
|
remain_len -= w_len;
|
|
|
}
|
|
}
|
|
|
|
|
+ return NumToWrite;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#if 0
|
|
#if 0
|