• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 应用程序操作NorFlash示例代码分享(norflash接口使用方法)

应用程序操作NorFlash示例代码分享(norflash接口使用方法)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了norflash,norflash nandflash,stm32 norflash,norflash最大容量,norflash驱动等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

//    glob_t mtdbuf;
    struct mtd_info_user mtd;
    struct erase_info_user erase;
    int blocks = 0;
    int i = 0;  //用于控制擦除的块的个数
    int k = 0;
    int written = 0;  //已写入的字节数,只初始化一次
    unsigned int size = StateOfImage.st_size;  //应该是镜像的实际大小,因为内存中大于镜像的空间的内容不可预知
    unsigned int result = 0;
    unsigned int DevNum = 0;    //设备的数量
    unsigned int StartDev = 0;  //从第startDev开始擦除
    char DevName[20] = {0};
    unsigned int AllSize = 0;
    #define MAXPARTITIONS 40
    struct DeviceInfo
    {
        int fd;
        char dir[20];
        uint32_t size;     // Total size of the MTD
        uint32_t erasesize;

    }DevInfo[MAXPARTITIONS];//用来存储设备信息

    bzero(DevInfo, sizeof(struct DeviceInfo));


/* 这是一种方法,但是有一个缺点,当mtd设备大于10个是,通过glob搜索出来的结果
   会出问题,下面采用会采用第二种方法 */
//    if(searchmtd(&mtdbuf) != 0){

//        DEBUG("Sorry! Can not find mtd device\n");
//        return 1;   //返回大于零的数,表示升级失败
//    }
//    else
//    {
//        int fd;
//       
//        DEBUG("find %d mtd devices \n",mtdbuf.gl_pathc);
//        DevNum = mtdbuf.gl_pathc;

//        for(i=0; i<DevNum; i++)
//        {
//            fd = safeOpen (mtdbuf.gl_pathv[i],O_SYNC | O_RDWR);
//            if(fd < 0)
//            {
//                printf("failt to open\n");
//                return 1;
//            }
//            bzero(&mtd, sizeof(struct mtd_info_user));
//            if (ioctl(fd, MEMGETINFO,&mtd) < 0)
//            {
//                DEBUG("ioctl(): %m\n");
//                DEBUG("This doesn't seem to be a valid MTD flash device!\n");
//                return 1;
//            }
//           
//            strcpy(DevInfo[i].dir, mtdbuf.gl_pathv[i]);
//            DevInfo[i].fd = fd;
//            DevInfo[i].size = mtd.size;
//            DevInfo[i].erasesize = mtd.erasesize;
//        }

//        globfree(&mtdbuf);
//        for(i=0; i<DevNum; i++)
//        {
//            printf("\n\tinfo of %s\n",DevInfo[i].dir);
//            printf("%s.fd:            %d\n",DevInfo[i].dir, DevInfo[i].fd);
//            printf("%s.size:          %d\n",DevInfo[i].dir,DevInfo[i].size);
//            printf("%s.erasesize:     %d\n",DevInfo[i].dir,DevInfo[i].erasesize);
//        }
//    }


/* 下面是第二种方法,这种方法克服了第一种方法的缺陷,不受mtd设备数量的限制 */

 

    for(i=0; i<MAXPARTITIONS; i++)
    {
        int fd;
        sprintf(DevName, "%s%d", "/dev/mtd",i);

        if((fd = open (DevName,O_SYNC | O_RDWR)) > 0)
        {
            bzero(&mtd, sizeof(struct mtd_info_user));
            if (ioctl(fd, MEMGETINFO,&mtd) < 0)
            {
                DEBUG("ioctl(): %m\n");
                DEBUG("This doesn't seem to be a valid MTD flash device!\n");
                return 1;
            }
            strcpy(DevInfo[i].dir, DevName);
            DevInfo[i].fd = fd;
            DevInfo[i].size = mtd.size;
            DevInfo[i].erasesize = mtd.erasesize;
        }
        else
        {
            DevNum = i;
            break;
        }

    }

    for(i=0; i<DevNum; i++)
    {
        printf("\n\tinfo of %s\n",DevInfo[i].dir);
        printf("%s.fd:            %d\n",DevInfo[i].dir, DevInfo[i].fd);
        printf("%s.size:          %d\n",DevInfo[i].dir,DevInfo[i].size);
        printf("%s.erasesize:     %d\n",DevInfo[i].dir,DevInfo[i].erasesize);
        AllSize += DevInfo[i].size;
     }

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 应用程序操作NorFlash示例代码分享(norflash接口使用方法)

相关文章

  • 2017-05-28C++用new创建对象和不用new创建对象的区别解析
  • 2017-05-28Windows消息传递机制详解
  • 2017-05-28浅析C++中模板的那点事
  • 2017-05-28C++实现查壳程序代码实例
  • 2017-08-27ZOJ 3329 One Person Game (期望DP)
  • 2017-05-28详解C语言中结构体的自引用和相互引用
  • 2017-05-28C语言中交换int型变量的值及转换为字符数组的方法
  • 2017-05-28详解约瑟夫环问题及其相关的C语言算法实现
  • 2017-05-28C++求逆序对的方法
  • 2017-05-28C++大数模板(推荐)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++之CWnd窗口框架实例
    • C语言判断字符串是否以str2开头代码
    • c++类构造函数详解
    • C语言实现带头结点的链表的创建、查找、插入、删除操作
    • ON_COMMAND_RANGE多个按钮响应一个函数的解决方法
    • C语言安全编码之数值中的sizeof操作符
    • 解决C++ 无法从void 转换为LRESULT的方法详解
    • C++实现添加桌面右键新建菜单
    • C++ COM编程之什么是组件?
    • C++改变编程入口为main函数

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有