由于NandFlash硬件升级比较快,公司去年一直在使用三星的K9GAG08U0D,现在MLC NandFlash 升级到了第二代,K9GAG08U0D 很快就会处在停产的状态,未雨绸缪,公司选型了K9GAG08U0E 来替代原有的NandFlash芯片。起初。本以为把新Nandflash ID信息增加到Uboot 和 Linux内核的NandFlash ID 列表文件中即可,也就是Uboot 和Linux源码中的nand_ids.c 文件中,但是仔细看了 K9GAG08U0E 的DataSheet,发现自己的想法错了。

下面记录了NandFlash更换时面临的几个问题,及解决方法:

第一个问题:ID 冲突

K9GAG08U0E 的 Product ID与 K9GAG08U0D 的Product ID 是相同的,都是 0xd5,而在Uboot 代码和Linux内核代码中,是根据ID信息来获取或者计算NandFlash的页大小和块大小这些关键信息的。

现在这两款的 Flash ID相同,而Page,OOB ,Block大小都是不同的。 K9GAG08U0D  Page,OOB,Block 关键参数:

而K9GAG08U0E 的 Page,OOB,Block  关键参数:


可见他们是不同的,U0E 每页大小是U0D的两倍。

针对相同ID的两款不同Flash是怎样区分的呢?仔细看DataSheet,发现了可以快速区分两种设备的方法:

U0D Page=4K,U0D Page=8K,我们只需判断Read第四个字节的第0位和第1位即可。

下面列出关键代码段:

     //这里必须有下面两行代码,因为U0E的DataSheet要求系统上电后第一条指令必须是NAND_CMD_RESET,而U0D没有这要求,如果不发送这条指令是无法读取到NandFlash的任何信息的,因为这个问题查找了很长时间,在这里提醒给大家。

     // K9GAG08U0E must add below codes     

       {
          s3c_nand_hwcontrol(0, NAND_CMD_RESET, NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
          s3c_nand_device_ready(0);
        }

s3c_nand_hwcontrol(0, NAND_CMD_READID, NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
        s3c_nand_hwcontrol(0, 0x00, NAND_CTRL_CHANGE | NAND_NCE | NAND_ALE);
        s3c_nand_hwcontrol(0, 0x00, NAND_NCE | NAND_ALE);
        s3c_nand_hwcontrol(0, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);

s3c_nand_device_ready(0);
       tmp = readb(nand->IO_ADDR_R); /* Maf. ID */

//  printf("Manufactor ID:%x\n",tmp);
       tmp = dev_id = readb(nand->IO_ADDR_R); /* Device ID */

//printf("dev_id ID:%x \n",dev_id);
     for (i = 0; nand_flash_ids[i].name != NULL; i++)

{
        if (tmp == nand_flash_ids[i].id) {
        type = &nand_flash_ids[i];
       break;
    }

nand->cellinfo = readb(nand->IO_ADDR_R);/* 3rd byte */
     tmp = readb(nand->IO_ADDR_R);/* 4th byte */

  int childType=tmp & 0x03; //Page size
     //  printf("dev_id=%x,childType=%x \n",dev_id,childType);

    if(dev_id == 0xd5 && childType==0x01) //U0D

    {   

    }else  if(dev_id == 0xd5 && childType==0x02) //U0E

   {


    }

这样针对不同的NandFlash做不同的初始化了,以上代码来自uboot1.1.6/cpu/s3c64xx/nand.c 文件中的void board_nand_init(struct nand_chip *nand) 函数。

s3c6410 开发板Linux系统支持 K9GAG08U0E的方法(第一篇)相关推荐

  1. s3c6410 开发板Linux系统支持 K9GAG08U0E的方法

    由于NandFlash硬件升级比较快,公司去年一直在使用三星的K9GAG08U0D,现在MLC NandFlash 升级到了第二代,K9GAG08U0D 很快就会处在停产的状态,未雨绸缪,公司选型了K ...

  2. NUC980开发板Linux系统EC20模块 移植 串口 PPP拨号

    NUC980开发板Linux系统EC20模块 移植 串口 PPP拨号 1. EC20模块连接 2. Linux内核配置 3. 交叉编译PPP 4. 拨号脚本 5. 进行拨号 1. EC20模块连接 在 ...

  3. 基于全志A33开发板linux系统移植学习记录(Boot0)

    基于全志A33开发板linux系统移植学习记录 第一章 Boot0基于ARMGCC的编译与修改 文章目录 基于全志A33开发板linux系统移植学习记录 前言 一.全志A33简介以及上电引导流程 二. ...

  4. OK6410开发板linux系统下的SPI驱动和测试

    OK6410下的SPI驱动是可以用的,但是飞凌把它作为其它用途了,我们修改一些代码才能在/dev目录下创建SPI的设备节点文件 Step1:打开arch/arm/mach_s3c64XX/mach_m ...

  5. 迅为RK3399开发板Linux系统TFTP传输文件服务器测试

    本机测试:在/var/tftpboot 下面建立一个文件 test,在里面输入 hello world,然后保存该文件,如下图 再启动另一个终端,然后输入 tftp 127.0.0.1,如下图. 输入 ...

  6. linux imx6 书籍,迅为iMX6开发板-Linux系统-TFTP使用文档

    TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于 UDP 协议实 现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大.不复杂的应用 ...

  7. linux开发板 wifi配置,iTOP-4412开发板Linux系统下使用wifi模块配置

    精英版在 linux 下使用 wifi,需要进行下面的配置: 首先用户在拿到光盘资料以后查看下光盘里面的"linux"->"root_xxxxxxxx.tar.gz ...

  8. 编译linux系统到开发板,Linux系统有关交叉编译和移植到6410开发板上的简单过程...

    在进行移植之前,要检查一下目标机(这里指6410开发板)与宿主机之间的接线问题,即串口线.网线是否正确连接,目标机的电源是否插好!在接线问题解决后,才能保证交叉编译正常进行! 个人理解,移植的主要思想 ...

  9. Firefly-rk3288 开发板Linux系统编译

    前言 手上的一块Firefly-RK3288开发板,看了下Firefly提供的SDK,压缩包就有15个多G,直接吓退.还好最近看到了韦东山老师提供的教学资料.记下学习步骤及遇到的问题解决办法. 1.开 ...

  10. 使用xilinx最新工具vitis2019.2,定制zc702开发板linux系统

    目录 需要的工具 定制自己的zc702包 vivado定制znyq7020板级描述 petalinux定制linux发行版 zc702启动自定制的linux系统 小结和后续工作 需要的工具 2019年 ...

最新文章

  1. vivox50pro鸿蒙系统,vivo X50 Pro最适合用来拍风景,看看网友的作品就知道了
  2. Web前端行业的机遇与自我规划,如果你对未来没有方向 不如看一看,或许就是一道曙光!
  3. 法线贴图Nomal mapping 原理
  4. sqlyog如何设置.时提示字段名_Spring boot 中使用 Tomcat时 用户名 密码如何设置呢?...
  5. C++ 静态成员变量静态成员函数
  6. java 装饰者_java装饰者模式怎么用?
  7. 2015年江苏省计算机c语言二级考试,2015江苏省计算机等级考试C语言部分试题.doc...
  8. 谁是HTML5新规则下的牺牲品?
  9. nginx 禁止访问配置,指定URL地址指定IP允许访问
  10. ctf赛题上传一个php木马,文件上传的ctf_web题目【伪协议】
  11. [报告]HDU 4343 Interval query
  12. XP上安装瑞友天翼4.0
  13. 学生选课系统—软件工程课程设计
  14. 【案例4-8】模拟物流快递系统
  15. 详细剖析市面手机基带/射频/处理器配置, 比较各家手机性能
  16. 车载以太网交换机功能和应用案例汇总, 适用于AVB/TSN, 802.1AS(gPTP时钟同步)
  17. KITTI 3D目标检测离线评估工具包说明
  18. C语言中关于二进制的换算
  19. 微信小程序:WeUI一个专为微信小程序设计的UI框架
  20. VUE项目学习(一):搭建VUE前端项目

热门文章

  1. AngularJS入门
  2. java公告栏源码_公告栏view
  3. PyTorch中 detach() 、detach_()和 data 的区别
  4. 杭州师范大学计算机科学与技术怎么样,杭州师范大学2020年本科专业录取分数大排名,计算机类专业最低...
  5. centos7.5 挂载超过2T的大硬盘步骤
  6. 程序设计思维与实践 Week7 作业 A TT的魔法猫
  7. ORA12514问题
  8. 终于有人把p值讲明白了
  9. 解决了这7个问题,我的产出效率提升了100%
  10. 华为手机默认浏览器打开应用宝链接直接启动应用问题解决