6410 iic 读写问题
网上说6410的iic驱动有些问题,根据网上的资料修改了一下驱动后,用网上下载的一个exe测试程序随便读写都没有任何问题,网址如下:http://download.csdn.net/source/1488970
后来我自己研究下驱动后,根据自己的理解写了一个测试的代码,可以读写,但是读写的数据很不正常。代码如下:请做过的高手指点错误:
DWORD
HW_WriteRegisters(
PUCHAR pBuff, // Optional buffer
UCHAR StartRegs,
DWORD nRegs // number of registers
)
{
UCHAR tmpbuf[512];
DWORD dwErr=1;
DWORD bytes;
IIC_IO_DESC IIC_Data;
tmpbuf[0]=StartRegs;
memcpy(&tmpbuf[1],pBuff,nRegs);
IIC_Data.SlaveAddress = CAMERA_WRITE;
IIC_Data.Count = nRegs;
IIC_Data.Data = tmpbuf;
// use iocontrol to write
if ( !DeviceIoControl(hI2C,
IOCTL_IIC_WRITE,
&IIC_Data, sizeof(IIC_IO_DESC),
NULL, 0,
&bytes, NULL) )
{
dwErr = 0;
}
return dwErr;
}
DWORD
HW_ReadRegisters(
PUCHAR pBuff, // Optional buffer
UCHAR StartReg, // Start Register
DWORD nRegs // Number of Registers
)
{
DWORD dwErr=1;
DWORD bytes;
IIC_IO_DESC IIC_AddressData, IIC_Data;
IIC_AddressData.SlaveAddress = CAMERA_WRITE;
IIC_AddressData.Data = &StartReg;
IIC_AddressData.Count = 1;
IIC_Data.SlaveAddress = CAMERA_WRITE;
IIC_Data.Data = pBuff;
IIC_Data.Count = 1;
// use iocontrol to read
if ( !DeviceIoControl(hI2C,
IOCTL_IIC_READ,
&IIC_AddressData, sizeof(IIC_IO_DESC),
&IIC_Data, sizeof(IIC_IO_DESC),
&bytes, NULL) )
{
dwErr = 0;
}
return dwErr;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD i;
UCHAR bufin[100];
UCHAR bufout[100];
DWORD nbyte=100;
DWORD bytes;
UCHAR StartAddr=0x2;
UINT32 IICClock = 412500;
UINT32 uiIICDelay;
for(i=0;i<100;i++)
bufin[i]=0;
bufin[0]=0x5;
hI2C = CreateFile( L"IIC0:",
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, 0);
if ( INVALID_HANDLE_VALUE == hI2C )
{
MessageBox (0,TEXT("Open Error!"),NULL,MB_OK);
return FALSE;
}
else
{
MessageBox (0,TEXT("Open !"),NULL,MB_OK);
}
if ( !DeviceIoControl(hI2C,
IOCTL_IIC_SET_CLOCK,
&IICClock, sizeof(UINT32),
NULL, 0,
&bytes, NULL) )
{
RETAILMSG(1,(TEXT("IOCTL_IIC_SET_CLOCK ERROR: %u \r\n")));
return FALSE;
}
uiIICDelay = Clk_5;
if ( !DeviceIoControl(hI2C,
IOCTL_IIC_SET_DELAY,
&uiIICDelay, sizeof(UINT32),
NULL, 0,
&bytes, NULL) )
{
RETAILMSG(1,(TEXT("IOCTL_IIC_SET_DELAY ERROR: %u \r\n")));
return FALSE;
}
//HW_WriteRegisters(&bufin[0],0,1);
HW_ReadRegisters(bufout,StartAddr,1);
CloseHandle(hI2C);
return 0;
}
程序大部分是参考camera驱动里的。
后来我自己研究下驱动后,根据自己的理解写了一个测试的代码,可以读写,但是读写的数据很不正常。代码如下:请做过的高手指点错误:
DWORD
HW_WriteRegisters(
PUCHAR pBuff, // Optional buffer
UCHAR StartRegs,
DWORD nRegs // number of registers
)
{
UCHAR tmpbuf[512];
DWORD dwErr=1;
DWORD bytes;
IIC_IO_DESC IIC_Data;
tmpbuf[0]=StartRegs;
memcpy(&tmpbuf[1],pBuff,nRegs);
IIC_Data.SlaveAddress = CAMERA_WRITE;
IIC_Data.Count = nRegs;
IIC_Data.Data = tmpbuf;
// use iocontrol to write
if ( !DeviceIoControl(hI2C,
IOCTL_IIC_WRITE,
&IIC_Data, sizeof(IIC_IO_DESC),
NULL, 0,
&bytes, NULL) )
{
dwErr = 0;
}
return dwErr;
}
DWORD
HW_ReadRegisters(
PUCHAR pBuff, // Optional buffer
UCHAR StartReg, // Start Register
DWORD nRegs // Number of Registers
)
{
DWORD dwErr=1;
DWORD bytes;
IIC_IO_DESC IIC_AddressData, IIC_Data;
IIC_AddressData.SlaveAddress = CAMERA_WRITE;
IIC_AddressData.Data = &StartReg;
IIC_AddressData.Count = 1;
IIC_Data.SlaveAddress = CAMERA_WRITE;
IIC_Data.Data = pBuff;
IIC_Data.Count = 1;
// use iocontrol to read
if ( !DeviceIoControl(hI2C,
IOCTL_IIC_READ,
&IIC_AddressData, sizeof(IIC_IO_DESC),
&IIC_Data, sizeof(IIC_IO_DESC),
&bytes, NULL) )
{
dwErr = 0;
}
return dwErr;
}
int _tmain(int argc, _TCHAR* argv[])
{
DWORD i;
UCHAR bufin[100];
UCHAR bufout[100];
DWORD nbyte=100;
DWORD bytes;
UCHAR StartAddr=0x2;
UINT32 IICClock = 412500;
UINT32 uiIICDelay;
for(i=0;i<100;i++)
bufin[i]=0;
bufin[0]=0x5;
hI2C = CreateFile( L"IIC0:",
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, 0);
if ( INVALID_HANDLE_VALUE == hI2C )
{
MessageBox (0,TEXT("Open Error!"),NULL,MB_OK);
return FALSE;
}
else
{
MessageBox (0,TEXT("Open !"),NULL,MB_OK);
}
if ( !DeviceIoControl(hI2C,
IOCTL_IIC_SET_CLOCK,
&IICClock, sizeof(UINT32),
NULL, 0,
&bytes, NULL) )
{
RETAILMSG(1,(TEXT("IOCTL_IIC_SET_CLOCK ERROR: %u \r\n")));
return FALSE;
}
uiIICDelay = Clk_5;
if ( !DeviceIoControl(hI2C,
IOCTL_IIC_SET_DELAY,
&uiIICDelay, sizeof(UINT32),
NULL, 0,
&bytes, NULL) )
{
RETAILMSG(1,(TEXT("IOCTL_IIC_SET_DELAY ERROR: %u \r\n")));
return FALSE;
}
//HW_WriteRegisters(&bufin[0],0,1);
HW_ReadRegisters(bufout,StartAddr,1);
CloseHandle(hI2C);
return 0;
}
程序大部分是参考camera驱动里的。
...全文
相关推荐
s3c6410-drive-test-code.rar_6410 sdhc 驱动_s3c6410_s3c6410 iic Te
测试脚本应涵盖正常操作和异常情况,以充分暴露潜在问题。四、应用与实践理解并掌握S3C6410的SDHC驱动和IIC测试代码,对嵌入式系统开发者至关重要。
S3C6410读写AT24C02的IIC驱动测试程序_V1
本文将深入探讨如何在基于S3C6410处理器的系统中,通过IIC(Inter-Integrated Circuit)总线进行AT24C02 EEPROM的读写操作。
S3C6410 的WINCE IIC可用驱动和测试程序
这些测试可能包括读写特定IIC设备的寄存器、模拟多设备通信、测试不同数据长度的传输等。通过运行测试程序,开发者可以确认驱动在实际应用中的表现,及时发现并修复可能存在的问题。
6410 IIC驱动源码
在6410处理器中,IIC驱动负责控制这些线路,以执行读写操作,并与IIC总线上的设备通信。6410 IIC驱动源码主要包含以下组件:1.
S3C6410读写AT24C02的IIC驱动测试程序
此测试程序主要针对S3C6410读写AT24C02的IIC驱动定制的测试程序。这里要注意一点就是三星提供的IIC驱动有点问题,需要修改一点点,要不然会有数据异常。


