S3C2440移植uboot之支持NANDFLASH操作
上一节我们移植了uboot,S3C2440移植uboot之支持NORFLASH。这节我们继续移植,支持NANDFLASH。
编译报错
之前由于nand部分报错,直接注释了 u-boot-
2012.04.01\include\configs\smdk2440.h 中的#define CONFIG_CMD_NAND。现在我们去掉注释,重新编译。报错如下

我们没有定义CONFIG_S3C2410导致的

可以看到下面有2440的NAND结构体

拷贝s3c2410_nand.c,修改宏定义支持SC32440
所以我们可以拷贝一份s3c2410_nand.c给2440使用2410的NandFlash位于drivers/mtd/nand/s3c2410_nand.c,首先复制s3c2410_nand.c,改为s3c2440_nand.c,改Makefile,如下图所示:

在上一章分析过CONFIG_NAND_S3C2410宏,位于include/configs/smdk2440.h:


如上图所示,其中CONFIG_CMD_NAND宏:表示uboot是否支持nand,在上章里,我们把它屏蔽了,接下来便取消屏蔽CONFIG_CMD_NAND宏。
继续添加对CONFIG_NAND_S3C2440宏的支持,将:
#ifdef CONFIG_CMD_NAND
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_S3C2410_NAND_HWECC
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define CONFIG_SYS_NAND_BASE 0x4E000000
#endif
改为
#ifdef CONFIG_CMD_NAND
#ifdef CONFIG_S3C2410
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_S3C2410_NAND_HWECC
#else // CONFIG_S3C2440
#define CONFIG_NAND_S3C2440
#define CONFIG_SYS_S3C2440_NAND_HWECC
#endif
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define CONFIG_SYS_NAND_BASE 0x4E000000
#endif
由于smdk2410.h中定义的是CONFIG_S3C2410,而smdk2440.h中定义的是CONFIG_S3C2440,所以便会根据上面的#ifdef来动态定义宏
修改s3c2440_nand.c 中的NFCONF,NFCONT,支持S3C2440
往下看代码发现原来的NFCONF设置并不能匹配我们的2440


2440的NFCONF的15位是保留的

所以注释掉这部分代码

2410 NFCONF的其他位设置也不匹配我们的2440

2440NFCONF 时序参数设置

s3c2440_hwcontrol中使能选中


对照2440手册修改为支持2440的

修改为
/*2440的NAND时序设置*/
cfg = ((tacls-1)<<12)|((twrph0-1)<<8)|((twrph1-1)<<4);
nand_reg->nfcont=(1<<1)|(1<<0); // bit1:关闭片选(), bit0:开启nand flash 控制器
nand_reg->nfconf = (tacls<<12) | (twrph0<<8) | (twrph1<<4); //设置时序
writel(cfg, &nand_reg->nfconf);
/* 使能NAND Flash控制器, 初始化ECC, 禁止片选 */
writel((1<<4)|(1<<1)|(1<<0), &nand_reg->nfcont);
/* initialize nand_chip data structure */
nand->IO_ADDR_R= (void *)&nand_reg->nfdata;
nand->IO_ADDR_W = (void *)&nand_reg->nfdata;
nand->select_chip = s3c2440_select_chip; //设置CE ;
修改s3c2440_hwcontrol区分命令和地址
/*ctrl:表示做什么,选中芯片/取消选中,发命令还是发地址
* cmd :命令值或者地址值
*/
static void s3c2440_hwcontrol(struct mtd_info *mtd, int dat, unsigned int ctrl)
{
struct nand_chip *chip = mtd->priv;
struct s3c2440_nand *nand = s3c2440_get_base_nand(); //获取nand寄存器地址
if (ctrl & NAND_CLE)
// 传输的是命令
writeb(dat,&nand->nfcmd);
else if (ctrl & NAND_ALE)
// 传输的是地址
writeb(dat,&nand->nfaddr);
}
修改完成
添加选中芯片函数
修改选中芯片函数
nand->select_chip = NULL; //设置CE ;
改为
nand->select_chip = s3c2440_select_chip; //设置CE ;
选中芯片函数如下
static void s3c2440_select_chip(struct mtd_info *mtd, int chipnr)
{
struct s3c2440_nand *nand = s3c2440_get_base_nand();
switch (chipnr) {
case -1:
/*取消选中*/
nand->nfcont |=(1<<1);
break;
case 0:
/*选中*/
nand->nfcont &=~(1<<1);
break;
default:
BUG();
}
}
编译烧写
如下图所示,可以看到已支持Nand Flash:

试验nand是否能读写:
nand erase 0 2000 //擦除
mw.b 30000000 0x55 2000 //向30000000 写入0x55,长度为2000
nand write 30000000 0 2000 //将0x55写入nand,
nand dump 0 2000 //打印
如下图所示, 可以看到读写nand都没问题

下一节S3C2440移植uboot之支持DM9000我们将移植DM9000网卡程序。
有任何问题,均可通过公告中的二维码联系我
S3C2440移植uboot之支持NANDFLASH操作的更多相关文章
- 1.ok6410移植bootloader,移植u-boot,学习u-boot命令
ok6410移植u-boot 既然是移植u-boot当然首先需要u-boot源码,这里的u-boot代码是由国嵌提供的. 一.配置编译u-boot A. 解压 u-boot 压缩文件 B. 进入解压生 ...
- 04.移植u-boot
1.读readme获取信息 1.1 由Building the Software可知,需修改顶层makefile,指定架构和编译器 ifeq ($(HOSTARCH),$(ARCH)) ...
- Linux主机上使用交叉编译移植u-boot到树莓派
0环境 Linux主机OS:Ubuntu14.04 64位,运行在wmware workstation 10虚拟机 树莓派版本:raspberry pi 2 B型. 树莓派OS: Debian Jes ...
- S5PV210之Sate210-F DIY硬件,移植uboot,kernel,android 活动现在已经进入实施阶段吗,欢迎广大网友参与 !
大家一起来diy 超低价四核的exynos4412或者Cortex A8S5pv210开源开发板 商业版Sate210已经完成了好久了.Sate4412 也已经出来.但是这两个接口非常全,主要是针对企 ...
- 3.移植uboot-使板卡支持nor、nand
在上一章,我们添加了nor,nand启动后,uboot启动出如下图所示: 上面的Flash: *** failed *** 是属于uboot第二阶段函数board_init_r()里的代码, 代码如下 ...
- 移植U-Boot时遇到的问题
1. 在lowlevel_init过程中,本来想实现一个串口直接打印字符串的过程,编译的时候出现了问题,说是发现代码执行段没有对齐:“unaligned opcodes detected in exe ...
- 基于S3C2440的U-BOOT的start.S分析
基于S3C2440的U-BOOT的start.S分析 在了解了ARM相关的汇编指令后,同时结合网上各位大虾的提点开始阅读u-boot的启动代码,现将分析过程记录如下 可执行文件及内存映射 我们可以把可 ...
- mini2440移植uboot 2014.04(一)
最新版的uboot添加了很多新功能,我决定在最新版代码基础上重新移植一遍加深理解. 我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot- ...
- mini2440移植uboot 2014.04(二)
我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文章: <u-boot-2011 ...
- mini2440移植uboot 2014.04(三)
我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git 参考文档: s3c2440手册(下载地址) ...
随机推荐
- stm32存储器:Flash
先擦除后写入,stm32内置flash擦或写时,必须打开外部/内部高速振荡器. 擦除操作 以页为单位,每页1024个字节 起始地址0x0800 0000 擦写时要避开用户程序存储区 最多擦写10万次 ...
- javascript+php 实现blob加密视频(html video)
1.mp4地址加密为blob链接在html5的video标签展示 PHP: 1 $file_path = "...mp4"; //视频文件地址 2 ob_end_clean(); ...
- vue + node 前后端分离项目解决跨域问题
vue + node 前后端分离项目解决跨域问题 由于前端 和 后端 项目运行于不同端口,无法直接传递数据 后端 app.js 添加如下代码 var cors = require('cors') ap ...
- xray+bp+echole+rad
安装证书 burp安装证书 开启burp suite,如下图所示下载证书后输入cacert.der即可 浏览器中上传证书,设置-->隐私和安全-->管理证书,一直下一步. xray安装证书 ...
- vue-project-------(模板语法,属性绑定)
<template> <h3>模板语法</h3> <p>{{msg}}</p> <p>{{number+1}}</p> ...
- MybatisPlus高级特性之SimpleQuery工具类
1.是很么? SimpleQuery可以对selectList查询后的结果使用Stream流进行操作,使其可以返回指定的结果,简洁了api的调用 2.怎么玩? 案例演示 (1) list操作 /** ...
- 深度学习前沿 | 利用GAN预测股价走势
本文是对于medium上Boris博主的一篇文章的学习笔记,这篇文章中利用了生成对抗性网络(GAN)预测股票价格的变动,其中长短期记忆网络LSTM是生成器,卷积神经网络CNN是鉴别器,使用贝叶斯优化( ...
- 如何从零开始实现TDOA技术的 UWB 精确定位系统(3)
这是一个系列文章<如何从零开始实现TDOA技术的 UWB 精确定位系统>第3部分. 重要提示(劝退说明): Q:做这个定位系统需要基础么?A:文章不是写给小白看的,需要有电子技术和软件 ...
- Luogu P4524 Ceste 题解
题目链接:\(\texttt{Luogu P4524 Ceste}\) 简化题意 给定一个有 \(n\) 个点 \(m\) 条边的无向图.每条边的边权为一个二元组 \((a, b)\),求以 \(1\ ...
- Prometheus 监控告警系统搭建(对接飞书告警)
Prometheus 是一套开源的系统监控报警框架,非常适合大规模集群的监控.它也是第二个加入CNCF的项目,受欢迎度仅次于 Kubernetes 的项目.本文讲解完整prometheus 监控和告警 ...