s3c6410 开发板Linux系统支持 K9GAG08U0E的方法(第一篇)
由于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的方法(第一篇)相关推荐
- s3c6410 开发板Linux系统支持 K9GAG08U0E的方法
由于NandFlash硬件升级比较快,公司去年一直在使用三星的K9GAG08U0D,现在MLC NandFlash 升级到了第二代,K9GAG08U0D 很快就会处在停产的状态,未雨绸缪,公司选型了K ...
- NUC980开发板Linux系统EC20模块 移植 串口 PPP拨号
NUC980开发板Linux系统EC20模块 移植 串口 PPP拨号 1. EC20模块连接 2. Linux内核配置 3. 交叉编译PPP 4. 拨号脚本 5. 进行拨号 1. EC20模块连接 在 ...
- 基于全志A33开发板linux系统移植学习记录(Boot0)
基于全志A33开发板linux系统移植学习记录 第一章 Boot0基于ARMGCC的编译与修改 文章目录 基于全志A33开发板linux系统移植学习记录 前言 一.全志A33简介以及上电引导流程 二. ...
- OK6410开发板linux系统下的SPI驱动和测试
OK6410下的SPI驱动是可以用的,但是飞凌把它作为其它用途了,我们修改一些代码才能在/dev目录下创建SPI的设备节点文件 Step1:打开arch/arm/mach_s3c64XX/mach_m ...
- 迅为RK3399开发板Linux系统TFTP传输文件服务器测试
本机测试:在/var/tftpboot 下面建立一个文件 test,在里面输入 hello world,然后保存该文件,如下图 再启动另一个终端,然后输入 tftp 127.0.0.1,如下图. 输入 ...
- linux imx6 书籍,迅为iMX6开发板-Linux系统-TFTP使用文档
TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于 UDP 协议实 现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大.不复杂的应用 ...
- linux开发板 wifi配置,iTOP-4412开发板Linux系统下使用wifi模块配置
精英版在 linux 下使用 wifi,需要进行下面的配置: 首先用户在拿到光盘资料以后查看下光盘里面的"linux"->"root_xxxxxxxx.tar.gz ...
- 编译linux系统到开发板,Linux系统有关交叉编译和移植到6410开发板上的简单过程...
在进行移植之前,要检查一下目标机(这里指6410开发板)与宿主机之间的接线问题,即串口线.网线是否正确连接,目标机的电源是否插好!在接线问题解决后,才能保证交叉编译正常进行! 个人理解,移植的主要思想 ...
- Firefly-rk3288 开发板Linux系统编译
前言 手上的一块Firefly-RK3288开发板,看了下Firefly提供的SDK,压缩包就有15个多G,直接吓退.还好最近看到了韦东山老师提供的教学资料.记下学习步骤及遇到的问题解决办法. 1.开 ...
- 使用xilinx最新工具vitis2019.2,定制zc702开发板linux系统
目录 需要的工具 定制自己的zc702包 vivado定制znyq7020板级描述 petalinux定制linux发行版 zc702启动自定制的linux系统 小结和后续工作 需要的工具 2019年 ...
最新文章
- vivox50pro鸿蒙系统,vivo X50 Pro最适合用来拍风景,看看网友的作品就知道了
- Web前端行业的机遇与自我规划,如果你对未来没有方向 不如看一看,或许就是一道曙光!
- 法线贴图Nomal mapping 原理
- sqlyog如何设置.时提示字段名_Spring boot 中使用 Tomcat时 用户名 密码如何设置呢?...
- C++ 静态成员变量静态成员函数
- java 装饰者_java装饰者模式怎么用?
- 2015年江苏省计算机c语言二级考试,2015江苏省计算机等级考试C语言部分试题.doc...
- 谁是HTML5新规则下的牺牲品?
- nginx 禁止访问配置,指定URL地址指定IP允许访问
- ctf赛题上传一个php木马,文件上传的ctf_web题目【伪协议】
- [报告]HDU 4343 Interval query
- XP上安装瑞友天翼4.0
- 学生选课系统—软件工程课程设计
- 【案例4-8】模拟物流快递系统
- 详细剖析市面手机基带/射频/处理器配置, 比较各家手机性能
- 车载以太网交换机功能和应用案例汇总, 适用于AVB/TSN, 802.1AS(gPTP时钟同步)
- KITTI 3D目标检测离线评估工具包说明
- C语言中关于二进制的换算
- 微信小程序:WeUI一个专为微信小程序设计的UI框架
- VUE项目学习(一):搭建VUE前端项目
热门文章
- AngularJS入门
- java公告栏源码_公告栏view
- PyTorch中 detach() 、detach_()和 data 的区别
- 杭州师范大学计算机科学与技术怎么样,杭州师范大学2020年本科专业录取分数大排名,计算机类专业最低...
- centos7.5 挂载超过2T的大硬盘步骤
- 程序设计思维与实践 Week7 作业 A TT的魔法猫
- ORA12514问题
- 终于有人把p值讲明白了
- 解决了这7个问题,我的产出效率提升了100%
- 华为手机默认浏览器打开应用宝链接直接启动应用问题解决