Platform Type : SMDK6410 [IIC ERROR]TX Time out. -IIC_IOControl Error Ecode=1460 (len=0) [IIC ERROR]TX Time out. [IIC ERROR]RX Time out. -IIC_IOControl Error Ecode=1460 (len=0) i get this error while writing data using iic. my code is HANDLE hIIC; BOOL bRet; unsigned char iic_write_buffer = 127; unsigned char iic_read_buffer = 0; DWORD bytes; DWORD dwErr; hIIC = CreateFile (L"IIC0:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0); if (hIIC == INVALID_HANDLE_VALUE) { MessageBox(L"Unable to open i2c driver", L"Error", MB_OK); return; } UINT32 IICClock2 = 3000; bRet = DeviceIoControl(hIIC,IOCTL_IIC_SET_CLOCK, &IICClock2,sizeof(UINT32),&IICClock2,sizeof(UINT32),&bytes,NULL); UINT32 uiIICDelay = Clk_0; if ( !DeviceIoControl(hIIC, IOCTL_IIC_SET_DELAY, &uiIICDelay, sizeof(UINT32), NULL, 0, &bytes, NULL) ) { dwErr = GetLastError(); return; } IIC_IO_DESC IIC_Data; UCHAR buff[2]; WCHAR Reg = 0x0001; UCHAR Val = 0x11; IIC_Data.SlaveAddress = 0x00; IIC_Data.Data = buff; IIC_Data.Count = 2; buff[0] = Reg; buff[1] = Val; bRet = false; bRet = DeviceIoControl(hIIC, IOCTL_IIC_WRITE, &IIC_Data, sizeof(IIC_IO_DESC), NULL, 0, NULL, NULL); if (!bRet) { dwErr = GetLastError(); if (dwErr == 1) { int abc = dwErr; } } UCHAR StartReg = 0x0000; PUCHAR pBuff; IIC_IO_DESC IIC_AddressData; IIC_AddressData.SlaveAddress = 0x01; IIC_AddressData.Data = &StartReg; IIC_AddressData.Count = 1; IIC_Data.SlaveAddress = 0x01; IIC_Data.Data = pBuff; IIC_Data.Count = 1; // use iocontrol to read bRet = DeviceIoControl(hIIC, IOCTL_IIC_READ, &IIC_AddressData, sizeof(IIC_IO_DESC), &IIC_Data, sizeof(IIC_IO_DESC), &bytes, NULL); if (!bRet) { dwErr = GetLastError(); if (dwErr == 1) { int abc = dwErr; } } CloseHandle(hIIC);
using iic in wince6 for ok6410
'PUCHAR pBuff;' is not initialised ie. should be a pointer to some allocated space. Try: UCHAR Buff; and IIC_Data.Data = &Buff;
Also, you need to bit shift the slave address one to the left, also then OR with 0x01 for the read address.. eg. #define SLAVE_ADDRESS 0x01 #define SLAVE_ADDRESS_WRITE (SLAVE_ADDRESS << 1) #define SLAVE_ADDRESS_READ ((SLAVE_ADDRESS << 1) | 0x01) IIC_AddressData.SlaveAddress = SLAVE_ADDRESS_WRITE; IIC_Data.SlaveAddress = SLAVE_ADDRESS_READ; :)