Hi.
I am trying to read the ID of an IMU chip with I2C Address 0x18. The connections are:
RI <----> SCL
DCD <----> SDA
There is a 2.8V power supply for the IMU chip and 2.8Kohms pull up resistors for the I2C lines.
The Open CPU code is the following:
void proc_main_task(s32 taskId)
{
s32 ret;
ST_MSG msg;
// Register & open UART port
Ql_UART_Register(UART_PORT1, CallBack_UART_Hdlr, NULL);
Ql_UART_Open(UART_PORT1, 115200, FC_NONE);
Ql_UART_Register(UART_PORT2, CallBack_UART_Hdlr, NULL);
Ql_UART_Open(UART_PORT2, 115200, FC_NONE);
APP_DEBUG("\r\n<--OpenCPU: IIC TEST v4!-->\r\n");
APP_DEBUG("\r\n<--IMU Test \r\n",ret);
iRet = RIL_GPS_Open(1);
if(RIL_AT_SUCCESS != iRet)
{
APP_DEBUG("Power on GPS fail, iRet = %d.\r\n", iRet);
}
else
APP_DEBUG("Power on GPS Successful.\r\n");
init_iic();
while (1)
{
Ql_OS_GetMessage(&msg);
switch(msg.message)
{
case 0:
break;
default:
break;
}
}
}
void init_iic()
{
ret = Ql_IIC_Uninit(1);
ret = Ql_IIC_Init(1,PINNAME_RI,PINNAME_DCD,1); //Start I2C Communication
if(ret < 0)
{
APP_DEBUG("\r\n<–Failed !! IIC controller Ql_IIC_Init channel 1 fail ret=%d–>\r\n",ret);
}
APP_DEBUG("\r\n<–IIC controller Ql_IIC_Init ret=%d–>\r\n",ret);
ret = Ql_IIC_Config(1,TRUE, addr, 300); // just for the IIC controller
if(ret < 0)
{
APP_DEBUG("\r\n<--Failed !! IIC controller Ql_IIC_Config channel 1 fail ret=%d-->\r\n",ret);
}
APP_DEBUG("\r\n<--IIC controller Ql_IIC_Config ret=%d-->\r\n",ret);
//ret = Ql_IIC_Write(1, addr, write_buffer,2); //Clear PWR_MGMT_1 register 6B to 00
ret = Ql_IIC_Read(1, addr, 0x00, 1,read_buffer, 1); //Read WHO_AM_I register for MPU-6050
if(ret < 0)
{
APP_DEBUG("\r\n<--Failed !! IIC controller Ql_IIC_Read channel 1 fail ret=%d-->\r\n",ret);
}
APP_DEBUG("\r\n<--IIC controller Ql_IIC_Read ret=%d-->\r\n",ret);
//SerialPrint("–Who am I----->%X",read_buffer);
APP_DEBUG("\r\n<--IMU ID %x %d-->\r\n",ret,ret);
u8 c=read_buffer;
if(c==0x16)
{
APP_DEBUG("\r\n<--Accelereometer OK-->\r\n");
}
}
After Flashing the MC60, I got the following output:
2020-01-27 02:49:06:890_R:] <–OpenCPU: IIC TEST v4!–>
[2020-01-27 02:49:06:890_R:] <–IMU Test
[2020-01-27 02:49:06:890_R:] Power on GPS fail, iRet = -5.
[2020-01-27 02:49:06:890_R:] <–IIC controller Ql_IIC_Init ret=0–>
[2020-01-27 02:49:06:890_R:] <–IIC controller Ql_IIC_Config ret=0–>
[2020-01-27 02:49:06:890_R:] <–Failed !! IIC controller Ql_IIC_Read channel 1 fail ret=-1–>
[2020-01-27 02:49:06:890_R:] <–IIC controller Ql_IIC_Read ret=-1–>
[2020-01-27 02:49:06:890_R:] <–IMU ID ffffffff -1–>
Any advise why the I2C Read command returns a negative value? What does it mean?
The I2C Init and Configuration return correct values though.