搜索
bottom↓
回复: 1

请教关于I2C驱动AT24C64的问题

[复制链接]

出0入0汤圆

发表于 2014-10-20 11:59:56 | 显示全部楼层 |阅读模式
最近用LPC1114做了个电路,直接用硬件I2C驱动AT24C64,现在出现的问题是同一器件,统一个写入函数,在某些地址写不进去。程序如下:


/*********************************************************************************************************
  宏定义
*********************************************************************************************************/
#define                                        ADR_EP_BYTES                                        32                                                                                /*        24c64每页字节数                  */

#define                                        ADR_EP_PROSN                                        0*ADR_EP_BYTES                        /*        产品编号写入地址                */
#define                                        ADR_EP_PROSNCT                                9*ADR_EP_BYTES                        /*        产品编号写入地址                */
#define                                        ADR_EP_RANGE                                        3*ADR_EP_BYTES                        /*        传感器量程写入地址        */
#define                                        ADR_EP_RANGEADC                                7*ADR_EP_BYTES                        /*  量程ADC写入地址                        */
#define                                        ADR_EP_CEFFCO                                        5*ADR_EP_BYTES                        /*        曲线方程系数写入地址*/

/*********************************************************************************************************
** Function name:               
** Descriptions:                变量初始化       
** input parameters:   
** output parameters:  
** Returned value:     
*********************************************************************************************************/
void StructInit(void)
{
        RangeDef *pRangeDef=RangeDefTrans();
        ParameterDef *pParameterDef=ParaTrans();
        ProductInf *pProductInf=ProductInfTrans();
        RangeAdc        *pRangeAdc = RangeAdcStructTrans();
        Ceffco  *pCeffco =CeffcoStructTrans();
       
        I2C_ReadNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_PROSN,                (unsigned char*)pProductInf,32);
        I2C_ReadNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_PROSNCT,        (unsigned char*)&pProductInf->MacAddress,2);
       
        I2C_ReadNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_RANGE,                (unsigned char*)pRangeDef,        sizeof(RangeDef));
        I2C_ReadNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_RANGEADC,(unsigned char*)pRangeAdc,        sizeof(RangeAdc));
        I2C_ReadNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_CEFFCO,        (unsigned char*)pCeffco,                sizeof(Ceffco));

        if((pRangeDef->PressLRV==0)&&(pRangeDef->PressURV==0))
        {
                        pRangeDef->PressLRV=-50;
                        pRangeDef->PressURV=50;
                        pProductInf->MacAddress=2;
                       
                        pRangeAdc->PressLRV=838870;
                        pRangeAdc->PressURV=1114650;
               
                        pCeffco->A = 0;
                        pCeffco->B = 0;
                        pCeffco->C = 0;
                        pCeffco->D = 1;
                        pCeffco->E = 0;
               
                        I2C_WriteNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_PROSN,         (unsigned char*)pProductInf,32);
                        I2C_WriteNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_PROSNCT, (unsigned char*)&pProductInf->MacAddress,32);               
                        I2C_WriteNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_RANGE,         (unsigned char*)pRangeDef,         32);
                        I2C_WriteNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_RANGEADC,(unsigned char*)pRangeAdc,         32);
                        I2C_WriteNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_CEFFCO,         (unsigned char*)pCeffco,                 32);       
        }       
       
}

现在现象是 ADR_EP_RANGE,ADR_EP_CEFFCO这两个地址写入的数据读取后是正常的,ADR_EP_RANGEADC,ADR_EP_PROSN,ADR_EP_PROSNCT这三个地址无法写入。
求各路大神指教!谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2014-11-3 10:37:52 | 显示全部楼层
程序调用后不是每次写入都成功。需判断程序返回值,确认I2C成功读取或写入后才能进行其他操作
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 14:59

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表