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年 ...
最新文章
- 根据ip获取用户地址-百度
- 一个快速、完善的Android开发框架整合实践(QuickAndroid)
- git push origin master和git push有什么区别?
- 8.1 概述-机器学习笔记-斯坦福吴恩达教授
- [导入]php 安全基础 附录C. 加密
- VTK:PolyData之MergeSelections
- 隐藏apache版本号的方法
- python 列表 mysql in_关于mysql:内嵌要在python MySQLDB IN子句中使用的列表
- rsync算法原理及使用
- a 标签中 rel=“noopener noreferrer“属性的含义和功能
- 用女朋友动态图做微信二维码,小白都会
- d).关于steal lock
- Tilera--100核cpu
- 南京周边城市两日游方案
- NTCUTTER BD-1002013年新包装通知
- SSO: Basic-Auth OAuth2 SAML OpeanID
- 电脑定时关机、取消定时关机、滑动关机
- Eggjs笔记:egg-mongoose插件的集成,crud操作, 多表关联查询
- ELO-Merchant-Category-Recommendation(上篇)
- 开发定位功能时如何检测手机是否开启虚拟定位?
热门文章
- 什么是 PaaS?“平台即服务“ 简介
- 一天一个小算法——最小生成树(kru Prm)
- CANoe.Diva之cdd文件配置
- 熊啸锋:在线生成个人网站,如何建立个人网站教程
- 力扣刷题篇——摩尔投票算法
- 《数据清洗》 第六章 数据转换
- oracle 币种符号,Oracle用户密码使用特殊符号,例如(AND)、$(Dollar)、#(Pound)、*(Star)等...
- 有了雀巢智能咖啡机,单身狗离“秀恩爱”还会远吗?
- SAP SEGW 事物码里的 ABAP 类型和 EDM 类型映射的一个具体例子
- gst 笔记1:信号、消息、事件、状态