主题 : i2c eprom 在wince读取是成功的,但是写入就不成功 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 2615
精华: 0
发帖: 22
金钱: 120 两
威望: 40 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2008-11-27
最后登录: 2014-04-01
楼主  发表于: 2010-03-16 12:17

 i2c eprom 在wince读取是成功的,但是写入就不成功

test2440 写入 00-ff  wince下我写测试程序读出正确 用官方wince测试程序读取正确 ,但是用官方wince测试程序写入就失败 我自己写的程序也失败 (读出来不对)
for (i=0;i<16;i++)
    {

    
        memset(&IIC_AddressData, 0, sizeof(I2C_IO_DESC));
      
        IIC_AddressData.SlaveAddr=0xa0;
        IIC_AddressData.Data = inbuf;
        IIC_AddressData.WordAddr = 16*i;
        IIC_AddressData.Count = 16;

        {
            Ret = DeviceIoControl(h_I2C,IOCTL_I2C_WRITE, &IIC_AddressData, sizeof(I2C_IO_DESC), OutputBuf,16,&ReadBytes, NULL);
        }
        Sleep(20);
        
        if(Ret == TRUE)
            ;//MessageBox(_T("写AT24LC08成功!"));
        else
            MessageBox(_T("写AT24LC08失败!"));
    }
    for (i=0;i<1;i++)    
    {
        memset(&IIC_AddressData, 0, sizeof(I2C_IO_DESC));

        IIC_AddressData.SlaveAddr = 0xa1;            //READ
        IIC_AddressData.WordAddr = 0;        //start addr
        IIC_AddressData.Data = outbuf;
        IIC_AddressData.Count = 256;

        {
            Ret = DeviceIoControl(h_I2C,IOCTL_I2C_READ, &IIC_AddressData, sizeof(I2C_IO_DESC), OutputBuf, 256,&ReadBytes, NULL);
        }

        if (!ReadBytes)
        {
            MessageBox(TEXT("IIC read single data failed !"));
        }
级别: 新手上路
UID: 2615
精华: 0
发帖: 22
金钱: 120 两
威望: 40 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2008-11-27
最后登录: 2014-04-01
1楼  发表于: 2010-03-16 17:23
补充一下 在linux下测试也是成功的
级别: 新手上路
UID: 2615
精华: 0
发帖: 22
金钱: 120 两
威望: 40 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2008-11-27
最后登录: 2014-04-01
2楼  发表于: 2010-03-17 15:41
没人??!!!
级别: 新手上路
UID: 14672
精华: 0
发帖: 18
金钱: 90 两
威望: 18 点
贡献值: 0 点
综合积分: 36 分
注册时间: 2010-02-20
最后登录: 2011-03-16
3楼  发表于: 2010-04-12 14:18
是啊,我试着也试这样子,eep 根本写不进去。 楼上 留下qq 交流一下吧
级别: 新手上路
UID: 45732
精华: 0
发帖: 5
金钱: 25 两
威望: 5 点
贡献值: 0 点
综合积分: 10 分
注册时间: 2011-05-07
最后登录: 2011-09-19
4楼  发表于: 2011-05-20 09:58
搞了2天了,一点头绪都没有
级别: 新手上路
UID: 14928
精华: 0
发帖: 7
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 14 分
注册时间: 2010-02-25
最后登录: 2011-06-01
5楼  发表于: 2011-05-20 16:02
int CEeprom::WriteData( PUCHAR bData, int iSize)
{
    memset(&IIC_AddressData, 0, sizeof(I2C_IO_DESC));
    IIC_AddressData.SlaveAddr = 0xa0;            //WRITE
    IIC_AddressData.WordAddr = m_StartAddr;        //start addr
    IIC_AddressData.Data = bData;
    IIC_AddressData.Count = iSize;
    for(int i = 0; i < (int)iSize; i++)
        {
            printf("%c\n",IIC_AddressData.Data);
        }
    int Ret = DeviceIoControl(hI2C,IOCTL_I2C_WRITE, &IIC_AddressData, sizeof(I2C_IO_DESC), OutputBuf,iSize,&ReadBytes, NULL);
    if(Ret == true)
        printf("写AT24LC08成功!\n");
    else
        printf("写AT24LC08失败!\n");
    return Result;
}

int CEeprom::ReadData(PUCHAR bData, int iSize)
{
    memset(&IIC_AddressData, 0, sizeof(I2C_IO_DESC));
    IIC_AddressData.SlaveAddr = 0xa1;            //READ
    IIC_AddressData.WordAddr = m_StartAddr;        //start addr
    IIC_AddressData.Data = bData;
    IIC_AddressData.Count = iSize;
    DeviceIoControl(hI2C,IOCTL_I2C_READ, &IIC_AddressData, sizeof(I2C_IO_DESC), OutputBuf, iSize,&ReadBytes, NULL);
    if (!ReadBytes)
    {
        printf("IIC read single data failed !");
    }
    else
    {
        for(int i = 0; i < (int)ReadBytes; i++)
        {
            printf("%c\n",bData);
        }
    
    }
    return Result;
}


可以读但是写进去的怎么是乱码呀?用开发板提供的I2C-EEPROM来写进去然后用自己写的上面的一段代码来读是对的,但是按照写进去就是乱码!是怎么回事呢?