从前面发帖的朋友那里获得的IIC读写源代码,怎么读写都失败呢?盼望高人指点,错在那里?
// IIC初始化
h_I2C = CreateFile(L"IIC0:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
if(h_I2C == INVALID_HANDLE_VALUE)
{
MessageBox(_T("打开IIC驱动失败!"));
}
// I2C写操作:
void CMy6410Dlg::OnBnClickedBtnwri2c()
{
// TODO: 在此添加控件通知处理程序代码
unsigned short str_tmp, *str;
int Ret;
BYTE databuf[1024];
int WriteNum = 0;
int i;
DWORD dwBytesWritten = 0;
// TODO: Add your control notification handler code here
if(h_I2C == INVALID_HANDLE_VALUE)
{
MessageBox(_T("IIC驱动未打开!"));
return;
}
UpdateData(false);
if(m_StartAddr > 0x3ff)
{
MessageBox(_T("起始地址错误!"));
return;
}
WriteNum = m_strWrDisp.GetLength();
memset(&IIC_AddressData, 0, sizeof(I2C_IO_DESC));
str = (unsigned short*)m_strWrDisp.GetBuffer(WriteNum);
for(i = 0; i < WriteNum; i++)
{
str_tmp = *(str + i);
databuf = (BYTE)str_tmp;
}
IIC_AddressData.SlaveAddr=0xa0;
IIC_AddressData.Data = databuf;
IIC_AddressData.WordAddr = m_StartAddr;
IIC_AddressData.Count = WriteNum;
Ret = DeviceIoControl(h_I2C,IOCTL_I2C_WRITE, &IIC_AddressData, sizeof(I2C_IO_DESC), OutputBuf,WriteNum,&ReadBytes, NULL);
if(Ret == true)
MessageBox(_T("写AT24LC04成功!"));
else
MessageBox(_T("写AT24LC04失败!"));
m_strWrDisp.ReleaseBuffer();
}
// I2C读操作:
void CMy6410Dlg::OnBnClickedBtnrdi2c()
{
// TODO: 在此添加控件通知处理程序代码
int Ret;
int ReadNum = 0;
int i;
DWORD dwBytesRead = 0;
CString tmp;
BYTE databuf[1024];
unsigned short buf;
// TODO: Add your control notification handler code here
if(h_I2C == INVALID_HANDLE_VALUE)
{
MessageBox(_T("IIC驱动未打开!"));
return;
}
UpdateData(false);
if(m_StartAddr > 0x3ff)
{
MessageBox(_T("起始地址错误!"));
return;
}
ReadNum = m_ReadNum;
memset(&IIC_AddressData, 0, sizeof(I2C_IO_DESC));
IIC_AddressData.SlaveAddr = 0xa1; //READ
IIC_AddressData.WordAddr = m_StartAddr; //start addr
IIC_AddressData.Data = databuf;
IIC_AddressData.Count = ReadNum;
Ret = DeviceIoControl(h_I2C,IOCTL_I2C_READ, &IIC_AddressData, sizeof(I2C_IO_DESC), OutputBuf, ReadNum,&ReadBytes, NULL);
if (!ReadBytes)
{
MessageBox(TEXT("读AT24LC04失败!"));
}
else
{
m_strRdDisp=' ';
for(i = 0; i < (int)ReadBytes; i++)
{
buf = (unsigned short)databuf;
tmp.Format(_T("%c"), buf);
if(buf < 0x10)
tmp.Insert(0, _T("0"));
m_strRdDisp =m_strRdDisp + tmp;
}
UpdateData(false);
}
}
初始化都OK,就是读写都返回失败,请问怎么回事呢?