嵌入式爱好者

查看: 16052|回复: 1

[Linux] nandflash的mtdblock分区写入数据,重启后数据丢失

[复制链接]

16

主题

32

帖子

79

积分

AM335x通行证

扫一扫,手机访问本帖
发表于 2016-8-28 19:33:41 | 显示全部楼层 |阅读模式
参照手册,如图,直接编写应用程序来对nandflash进行数据的存储操作。运行程序后能正常的读取和写入,但是掉电后再次读写,数据丢失了。是怎么回事?
是不是块设备的读和写的应用函数写的不正确呢????
  1. #include<sys/types.h>
  2. #include<fcntl.h>
  3. #include<sys/stat.h>
  4. #include<unistd.h>
  5. #include<stdio.h>
  6. #include<string.h>
  7. #include<errno.h>
  8. #include<stdlib.h>

  9. //#define BUF_SIZE         256
  10. #define ROW 28
  11. #define COLUMN 6
  12. /* ./nandflash -w
  13.    ./nandflash -r  */

  14. int main(int argc, char **argv)
  15. {
  16.         int ret = 0;
  17.         int i,j;
  18.         //char arr[BUF_SIZE] = {'0'};
  19.         //char buf[BUF_SIZE] = {'0'};

  20.         float data_base_write[ROW][COLUMN] = {
  21.                                                           1.891052295,1.880637028,1.880662672,1.880770901,1.879450873,1.880700352,
  22.                                                           1.879935252,1.881508812,1.869690787,1.87005238, 1.870044239,1.859651899,
  23.                                                          1.859074656,1.859008458,1.859362259,1.858735545,1.847817291,1.848525292,
  24.                                                          1.848378952,1.880780544,1.88147216, 1.881095431,1.871008965,1.870199515,
  25.                                                          1.870671536,1.859612464,1.86003391, 1.859165311,1.848139818,1.849201702,
  26.                                                          1.883467744,1.862821112,1.85208504, 1.846950465,1.836828431,1.837161962,
  27.                                                          1.831672258,1.821147095,1.816506092,1.81138156, 1.811605633,1.806054896,
  28.                                                          1.813204183,1.806264194,1.795831025,1.78588526, 1.78032686, 1.81507569,
  29.                                                          1.815702515,1.800243218,1.790447621,1.780343032,1.77532877, 1.770262973,
  30.                                                          1.760081062,1.749647594,1.749650075,1.745028739,1.739645746,1.728564228,
  31.                                                          1.723900325,1.713978878,1.7139702,  1.703652117,1.704013747,1.693571616,
  32.                                                          1.687657736,1.683074436,1.677927014,1.673206028,1.667436721,1.662266263,
  33.                                                          1.657424307,1.652538685,1.647217463,1.636413681,1.636255431,1.641119179,
  34.                                                          1.631570079,1.621213283,1.616427321,1.61582351, 1.61672418, 1.610865586,
  35.                                                          1.600660337,1.595917449,1.596217952,1.595806511,1.590650782,1.688821116,
  36.                                                          1.625993828,1.615743386,1.605662676,1.594974692,1.590410244,1.585351706,
  37.                                                          1.579973715,1.575218547,1.569798485,1.570256538,1.565249874,1.559633934,
  38.                                                          1.564982053,1.5749795,1.565281117,  1.559755497,1.549897686,1.543877153,
  39.                                                          1.545018749,1.544594015,1.534308672,1.528760394,1.528926025,1.52909165,
  40.                                                          1.523905932,1.518667542,1.513648227,1.513605019,1.513947061,1.533959919,
  41.                                                          1.53913728, 1.523624797,1.513581304,1.507785075,1.503196068,1.49782206,
  42.                                                          1.492848535,1.49241439, 1.487482777,1.482535149,1.482787432,1.47697118,
  43.                                                          1.481901555,1.49813662, 1.482077521,1.477115531,1.472077278,1.472248014,
  44.                                                          1.467010667,1.46176725, 1.456695267,1.451354973,1.451615926,1.446816133,
  45.                                                          1.446757061,1.441379748,1.436245625,1.436815415,1.436294515,1.441857532,
  46.                                                          1.467206348,1.451864037,1.447137975,1.441790587,1.431630948,1.431808425,
  47.                                                          1.426256259,1.426087753,1.421263351,1.416327275,1.416578183,1.410840173,
  48.                                                          1.410994963,1.406171429,1.406335848,1.40045524, 1.421786505,1.432455272
  49.                                  };
  50.        
  51.         float data_base_read[ROW][COLUMN] = {0.0};
  52.        
  53.         int fd = open("/dev/mtdblock7", O_RDWR);
  54.         if (fd < 0) {
  55.                 perror("open nandflash device:");
  56.                 exit(1);
  57.         }
  58.        
  59.         if(argc < 2)
  60.         {
  61.                 printf("please input correct argument\n");
  62.                 exit(1);
  63.         }       

  64.         if(!strcmp(argv[1],"-w"))
  65.         {
  66.                 /*if(argc != 3)
  67.                 {
  68.                         printf("please input like this : ./nandflash -w  forlinx\n");
  69.                         exit(1);
  70.                 }
  71.                 strcpy(arr,argv[2]);

  72.                 ret = write(fd,arr,strlen(arr));
  73.                 */
  74.                
  75.                 ret = write(fd, data_base_write, sizeof(data_base_write));
  76.                 printf("%d data has been writen\n",sizeof(data_base_write)/sizeof(float));
  77.                
  78.                 if(ret < 0)
  79.                 {
  80.                         fprintf(stderr,"error nandflash_write: %s\n",strerror(errno));
  81.                         exit(1);
  82.                 }
  83. //                printf("write ret = %d\n",ret);

  84. //                ret = lseek(fd,30,SEEK_SET);
  85. //                ret = write(fd,arr,strlen(arr) + 1);
  86. //                if(ret < 0)
  87. //                {
  88. //                        fprintf(stderr,"error eeprom_write: %s\n",strerror(errno));
  89. //                        exit(1);
  90. //                }
  91. //                printf("write ret = %d\n",ret);
  92.         }
  93.         if(!strcmp(argv[1],"-r"))
  94.         {
  95.                 if(argc != 2)
  96.                 {
  97.                         printf("please input like this : ./nandflash -r\n");
  98.                         exit(1);
  99.                 }
  100.                 //ret =  read(fd,buf,BUF_SIZE);
  101.                
  102.                 ret = read(fd, data_base_read, sizeof(data_base_write));
  103.                 if(ret < 0)
  104.                 {
  105.                         fprintf(stderr,"error nandflash_read: %s\n",strerror(errno));
  106.                         exit(1);
  107.                 }
  108.                 //printf("the value in  buf is  %s\n",buf);
  109.                
  110.                 for(i = 0;i < ROW;i++)
  111.                         for(j = 0;j < COLUMN;j++)
  112.                         {
  113.                                 printf("  %.9f",data_base_read[i][j]);
  114.                                 if (j==COLUMN-1)
  115.                                         printf("\n");
  116.                         }

  117.         /*        ret = lseek(fd,6,SEEK_SET);       
  118.                 ret =  read(fd,buf,BUF_SIZE);
  119.                 if(ret < 0)
  120.                 {
  121.                         fprintf(stderr,"error nandflash_read: %s\n",strerror(errno));
  122.                         exit(1);
  123.                 }
  124.                 printf("lseek to the seventh bytes in buf is %s\n",buf);
  125.                 */
  126.         }
  127.         close(fd);

  128.         return 0;
  129.        
复制代码
QQ图片20160828192554.png
回复

使用道具 举报

153

主题

3910

帖子

4207

积分

AM5718通行证AM335x通行证i.MX6UL通行证i.MX RT通行证i.MX6Q通行证XX18通行证TCU通行证FCU1401通行证FCU1301通行证FCU11xx通行证

发表于 2016-8-30 14:04:04 | 显示全部楼层
您好,您可以直接通过sd卡或者u盘 拷贝一些文件放到开发板的文件系统中,然后sync同步一下,重启看看文件有没有丢失,如果该操作正常的话,那您就检查检查您的应用代码可能是有些地方没有写好。
技术支持电话:0312-3119192
技术支持邮箱:Linux@forlinx.com
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-12-20 19:10

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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