欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 一.基于C语言fwrite实现dump Eeprom数据

一.基于C语言fwrite实现dump Eeprom数据

2025/2/10 3:12:08 来源:https://blog.csdn.net/hjlgs/article/details/145509900  浏览:    关键词:一.基于C语言fwrite实现dump Eeprom数据

1.1 问题背景

开机初始化时,程序会基于i2c接口从Eeprom/OTP模块读取数据,保存在buffer缓冲区中。

在进行50M remosaic拍照时需要将buffer中xtc数据传给remosaic_gainmap_gen()。

为了确保数据正确,传入参数前需要将buffer数据dump至一个文件中,方便查看内容。

1.2 思路

读取数据:使用i2c接口读取Eeprom数据保存在buffer中;

筛选数据:从buffer中筛选出xtc数据;

打开文件:fopen创建一个新文件/data/vendor/cameraserver/s5kjn1_xtc.bin;

写入数据:fwrite将xtc数据写入上述文件中;

关闭文件:fclose关闭上述文件

1.3 实现代码

#define OTP_SIZE    0x30F0+1
#define XTALK_START      0x0cd5
#define XTALK_END        0x2f94
static cmr_u8 param_ptr_otp[OTP_SIZE] = {0x00};
static cmr_int s5kjn1_dump_xtc(void);
static char xtc_data_buf_otp[XTALK_TOTAL];
static char *bin_path = "/data/vendor/cameraserver/";

/**从Eeprom中读取数据、筛选xtc数据保存至xtc_data_buf_otp**/
    //清空buffer数据
    memset(param_ptr_otp, 0, sizeof(param_ptr_otp));
    //i2c读取eeprom数据并保存至param_ptr_otp
    rtn = hw_sensor_read_i2c(sns_drv_cxt_parameter->hw_handle, S5KJN1_EEPROM_I2C_ADDR >> 1, param_ptr_otp,
        (OTP_SIZE) << 16 | SENSOR_I2C_REG_16BIT);
    SENSOR_LOGD("ret:%d", rtn);
    //筛选出xtc数据保存至xtc_data_buf_otp
    for(i = XTALK_START; i<=XTALK_END; i++){
        xtc_data_buf_otp[i-XTALK_START] = param_ptr_otp[i];
    }
/**********************End***********************/


/**将xtc数据写入/data/vendor/cameraserver/s5kjn1_xtc.bin **/
static cmr_int s5kjn1_dump_xtc(void){
    int i = 0;
    cmr_int ret = 0;
    size_t bytesWritten;
    char *name = "s5kjn1";
    char xtc_dta_dump_path[256];
    
    //wb+表示以读写方式打开或新建一个二进制文件,允许读写。写入前会清空覆盖原来内容
    snprintf(xtc_dta_dump_path, sizeof(xtc_dta_dump_path), "%s%s_xtc.bin", bin_path,name);
    FILE *file = fopen(xtc_dta_dump_path, "wb+" );
    if (file != NULL){
        bytesWritten = fwrite(xtc_data_buf_otp, sizeof(char), sizeof(xtc_data_buf_otp), file);
        if (bytesWritten < sizeof(xtc_data_buf_otp)) {
            SENSOR_LOGE("Error writting file\n");        
        }
        fclose(file);
    }else{
        SENSOR_LOGE("can't open file\n");
        ret = -1;      
    }   
    SENSOR_LOGD("dump xtc file success\n");
    return ret;
}
/**********************End***********************/


/****设置dump开关***/
    property_get("debug.vendor.cam.otp.dump", value, "0");
    if (atoi(value)) {
        DumpOtp = 1;
    }
    
    if (DumpOtp) {
        s5kjn1_dump_xtc();
    }
/**********************End***********************/

1.4 验证

adb root
adb shell setprop debug.vendor.cam.otp.dump 1
adb shell ls -l data/vendor/cameraserver/s5kjn1_xtc.bin
adb pull data/vendor/cameraserver/s5kjn1_xtc.bin .

1.5 数据确认

NotePad++ 查看二进制文件:

文件以ff 00开头:数据正常

待续。。。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com