This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

6678 IIC 读写超时问题



  今天在实验6678 的IIC总线读写EEPROM的时候遇到一个有意思的问题。

     当我连接上仿真器在debug界面 无论怎么点击reset cpu 或者 reset system  或者是restart   EEPROM的读写都是正常的。但只有点击了停止仿真,在不断电的情况下,在连接进行仿真 就一直出现iic总线超时,不知是什么原因? 请高手指点一下,谢谢

程序中 I2C_write()I2C_read()均为  Keystone_I2C_init_drv.c 中定义函数

main

{

…………

I2C_Master_Init(400);

for(i=0; i<100; i++)
{
memset(IIC_Rcv_buf,0x30,256);
memset(IIC_Snd_buf,0x1+i,256);
/* fill with pattern */

I2C_EEPROM_block_write( I2C_address, address0, 256, &IIC_Snd_buf[0]);
I2C_EEPROM_read( I2C_address, address0 , 256, &IIC_Rcv_buf[0]);
printf("%x is receive \n", IIC_Rcv_buf[0]);

……

}

Uint32 I2C_EEPROM_block_write(Uint32 I2C_address, Uint32 data_address,
Uint32 uiByteCount, Uint8 * ucBuffer)
{
Uint8 i2cBuffer[I2C_EEPROM_BLOCK_SIZE+4];

/*put data address into first two bytes of i2cBuffer,
and write it to I2C EEPROM*/
i2cBuffer[0]= data_address>>8;
i2cBuffer[1]= data_address;
memcpy(i2cBuffer+2, ucBuffer, uiByteCount);

uiByteCount= I2C_write(I2C_address, uiByteCount+2, i2cBuffer, I2C_WAIT);
if(uiByteCount>2)
{
uiByteCount-= 2;
//wait about 5ms for I2C EEPROM internal write complete
TSC_delay_ms(5);
}
else
uiByteCount=0;

return uiByteCount;
}

Uint32 I2C_EEPROM_read(Uint32 I2C_address, Uint32 data_address,
Uint32 uiByteCount, Uint8 * ucBuffer)
{
Uint8 ucAddrBuffer[4];
Uint32 byteSuccess=0;

/*put data address into first two bytes of ucBuffer,
and write it to I2C EEPROM*/
ucAddrBuffer[0]= data_address>>8;
ucAddrBuffer[1]= data_address;

/*Dummy write, setup read address*/
byteSuccess= I2C_write(I2C_address, 2, ucAddrBuffer, I2C_WAIT);
if(2!=byteSuccess)
return 0;

//wait about 5ms for I2C EEPROM internal write complete
TSC_delay_ms(5);

/*read data*/
byteSuccess= I2C_read(I2C_address, uiByteCount, ucBuffer, I2C_WAIT);

return byteSuccess;
}