| 
 
| !!!标记处应该再区分NumOfSingle > count,可仿照SPI M25P64的例程。不知道我的理解对么?欢迎指正。 
 void I2C_EE_BufferWrite(u8* pBuffer, u8 WriteAddr, u16 NumByteToWrite)
 {
 u8 NumOfPage = 0, NumOfSingle = 0, Addr = 0, count = 0;
 
 Addr = WriteAddr % I2C_PageSize;
 count = I2C_PageSize - Addr;
 NumOfPage =  NumByteToWrite / I2C_PageSize;
 NumOfSingle = NumByteToWrite % I2C_PageSize;
 
 /* If WriteAddr is I2C_PageSize aligned  */
 if(Addr == 0)
 {
 /* If NumByteToWrite < I2C_PageSize */
 if(NumOfPage == 0)
 {
 I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle);
 I2C_EE_WaitEepromStandbyState();
 }
 /* If NumByteToWrite > I2C_PageSize */
 else
 {
 while(NumOfPage--)
 {
 I2C_EE_PageWrite(pBuffer, WriteAddr, I2C_PageSize);
 I2C_EE_WaitEepromStandbyState();
 WriteAddr +=  I2C_PageSize;
 pBuffer += I2C_PageSize;
 }
 
 if(NumOfSingle!=0)
 {
 I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle);
 I2C_EE_WaitEepromStandbyState();
 }
 }
 }
 /* If WriteAddr is not I2C_PageSize aligned  */
 else
 {
 /* If NumByteToWrite < I2C_PageSize */
 if(NumOfPage== 0)
 {
 //!!!此处应该区分 NumOfSingle > count !!!!!! 可仿照SPI M25P64的例程
 I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle);
 I2C_EE_WaitEepromStandbyState();
 }
 /* If NumByteToWrite > I2C_PageSize */
 else
 {
 NumByteToWrite -= count;
 NumOfPage =  NumByteToWrite / I2C_PageSize;
 NumOfSingle = NumByteToWrite % I2C_PageSize;
 
 if(count != 0)
 {
 I2C_EE_PageWrite(pBuffer, WriteAddr, count);
 I2C_EE_WaitEepromStandbyState();
 WriteAddr += count;
 pBuffer += count;
 }
 
 while(NumOfPage--)
 {
 I2C_EE_PageWrite(pBuffer, WriteAddr, I2C_PageSize);
 I2C_EE_WaitEepromStandbyState();
 WriteAddr +=  I2C_PageSize;
 pBuffer += I2C_PageSize;
 }
 if(NumOfSingle != 0)
 {
 I2C_EE_PageWrite(pBuffer, WriteAddr, NumOfSingle);
 I2C_EE_WaitEepromStandbyState();
 }
 }
 }
 }
 | 
 |