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.

C6747的I2C1读写操作



C6747的I2C1与KSZ8893相连,想通过I2C1设置KSZ8893的start switch为1,NDK2.0的helloworld程序默认使用I2C0,BSL下的i2c.c中I2C0初始化时I2C_ICPSC=23;//设为1MHz,但根据数据手册prescaled module clock应为6.7~13.3MHz,这是什么原因?

我将I2C_BASE改为0x01E28000,PINMUX8=0x28811122,I2C1时钟由SYSCLK4提供为75MHz,I2C初始化时I2C_ICPSC=5;//设为12.5MHz,I2C_ICCLKL=5;I2C_ICCLKH=5;//设为625KHz。KSZ8893写为0x1011_1110,读为0x1011_1111,调用函数EVMOMAPL137_I2C_write(0xBE,data,2);其中data[2]={0x01,0x23},想确认是否写成功,调用函数EVMOMAPL137_I2C_write(0xBE,data,1);先写寄存器,再读寄存器的值EVMOMAPL137_I2C_read(0xBF,buf,1);,buf中的值为0xBE,说明I2C没有写成功,是什么原因呢?是I2C1还有地方没设置吗?

  • 看到数据手册

    I2C时钟最大为400kHz,设置I2C_ICPSC=7;//设为9.375MHz,I2C_ICCLKL=20;I2C_ICCLKH=20;//设为18.75KHz,EVMOMAPL137_I2C_write(0x5F,data,2);EVMOMAPL137_I2C_write(0x5F,data,2);EVMOMAPL137_I2C_read(0x5F,buf,1);得到buf[0]=0x23寄存器结果正确。

    根据手册的时序图,slave address为7位,第8位R/W代表读写,而ksz8893的写0x1011_1110,读为0x1011_1111,所以slave address设为0x5F,我的理解正确吗??

  • 写错了,是设为187.5KHz