S3C2440之NAND FLASH移植到S3C2410的驱动分析[一]

编译openwrt到s3c2410(1) 目前OpenWrt-DreamBox(https://dev.openwrt.org.cn/)已经支持FS2410,因此不需再使用本文中的补丁了~~ 上手openwrt四五天,今天把刚弄好的补丁之类的都放出来,供大家尝试下~ 下载地址:http://download.youkuaiyun.com/detail/niyufeng/4117704 这个是针对优龙的FS2410,但是其 阅读详情

S3C2440A的NAND FLASH驱动移植到S3C2410还是有些不一样的,最主要的这两个IC的NAND FLASH的寄存器有些不一样,请看下面的两者之间不同:

//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
//------------------------------------------------------------------------------
//
//  Header: s3c2410x_nand.h
//
//  Defines the NAND controller CPU register layout and definitions.
//
#ifndef __S3C2410X_NAND_H
#define __S3C2410X_NAND_H

#if __cplusplus
    extern "C" 
    {
#endif


//------------------------------------------------------------------------------
//  Type: S3C2410X_NAND_REG    
//
//  NAND Flash controller register layout. This register bank is located 
//  by the constant CPU_BASE_REG_XX_NAND in the configuration file 
//  cpu_base_reg_cfg.h.
//

typedef struct  
{
    UINT32  NFCONF;             // configuration reg
    UINT8   NFCMD;              // command set reg
    UINT8   pad1[3];            // pad 
    UINT8   NFADDR;             // address set reg
    UINT8   pad2[3];            // pad 
    UINT8   NFDATA;             // data reg
    UINT8   pad3[3];            // pad
    UINT32  NFSTAT;             // operation status reg
    UINT32  NFECC;             // error correction code 0

} S3C2410X_NAND_REG, *PS3C2410X_NAND_REG;    


#if __cplusplus
    }
#endif

#endif 

上面的代码是S3C2410A的寄存器,我们在看看S3C2440A的寄存器地址说明:

//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
//------------------------------------------------------------------------------
//
//  Header: s3c2440a_nand.h
//
//  Defines the NAND controller CPU register layout and definitions.
//
#ifndef __S3C2440A_NAND_H
#define __S3C2440A_NAND_H

#if __cplusplus
    extern "C" 
    {
#endif


//------------------------------------------------------------------------------
//  Type: S3C2440A_NAND_REG    
//
//  NAND Flash controller register layout. This register bank is located 
//  by the constant CPU_BASE_REG_XX_NAND in the configuration file 
//  cpu_base_reg_cfg.h.
//

typedef struct  
{
    UINT32  NFCONF;             // configuration reg
	UINT32  NFCONT;
    UINT8  	NFCMD;              // command set reg
    UINT8	d0[3];
    UINT8 	NFADDR;             // address set reg
    UINT8	d1[3];
    UINT8  	NFDATA;             // data reg
    UINT8	d2[3];
	UINT32  NFMECCD0;
	UINT32  NFMECCD1;
    UINT32  NFSECCD;    
    UINT32  NFSTAT;             // operation status reg
	UINT32  NFESTAT0;
	UINT32  NFESTAT1;
    UINT32  NFMECC0;             // error correction code 0
    UINT32  NFMECC1;             // error correction code 1
	UINT32  NFSECC;
	UINT32  NFSBLK;
    UINT32  NFEBLK;             // error correction code 2

} S3C2440A_NAND_REG, *PS3C2440A_NAND_REG;    


#if __cplusplus
    }
#endif

#endif 

这两者之间的差别是很大的。因此移植起来的难点主要是ECC部分,同时还有个别寄存器位地址不一样,需要修改,见下面:

//  Use Macros here to avoid extra over head for c function calls
#define READ_REGISTER_BYTE(p)		(*(PBYTE)(p))
#define WRITE_REGISTER_BYTE(p, v)	(*(PBYTE)(p)) = (v)
#define READ_REGISTER_USHORT(p)		(*(PUSHORT)(p))
#define WRITE_REGISTER_USHORT(p, v)	(*(PUSHORT)(p)) = (v)
#define READ_REGISTER_ULONG(p)		(*(PULONG)(p))
#define WRITE_REGISTER_ULONG(p, v)	(*(PULONG)(p)) = (v)

以上的代码不论S3C2410还是S3C2440都可以用,我在移植的时候,这两部是一样的。当然至于S3C2443和S3C2450这部分的寄存器改变并不多,不过S3C2450的BSP中NAND FLASH驱动还是有很大的变化,那以后再来分析吧,现在还是分析这个,WINCE5.0下的。WINCE6.0的我还没有来得急移植呢。我一般喜欢动手自己移植一遍,这样能深入的了解WINCE的流程,同时对这颗IC,也更熟悉。看看两者之间的不同吧。

S3C2440A的寄存器宏定义:

//  MACROS
#define NF_CE_L()			WRITE_REGISTER_USHORT(pNFCONT, (USHORT) (READ_REGISTER_USHORT(pNFCONT) & ~(1<<1)))
#define NF_CE_H()			WRITE_REGISTER_USHORT(pNFCONT, (USHORT) (READ_REGISTER_USHORT(pNFCONT) | (1<<1)))
#define NF_CMD(cmd)			WRITE_REGISTER_USHORT(pNFCMD, (USHORT) (cmd))
#define NF_ADDR(addr)		WRITE_REGISTER_USHORT(pNFADDR, (USHORT) (addr))
#define NF_DATA_R()			READ_REGISTER_BYTE(pNFDATA)
#define NF_DATA_W(val)		WRITE_REGISTER_BYTE(pNFDATA, (BYTE) (val))
#define NF_DATA_R4()		READ_REGISTER_ULONG(pNFDATA)
#define NF_DATA_W4(val)		WRITE_REGISTER_ULONG(pNFDATA, (ULONG) (val))
#define NF_STAT()			READ_REGISTER_USHORT(pNFSTAT)
#define NF_MECC_UnLock()	WRITE_REGISTER_USHORT(pNFCONT, (USHORT) (READ_REGISTER_USHORT(pNFCONT) & ~(1<<5)))
#define NF_MECC_Lock()		WRITE_REGISTER_USHORT(pNFCONT, (USHORT) (READ_REGISTER_USHORT(pNFCONT) | (1<<5)))
#define NF_RSTECC()			WRITE_REGISTER_USHORT(pNFCONT, (USHORT) (READ_REGISTER_USHORT(pNFCONT) | (1<<4)))
#define NF_WAITRB()			{while(!(NF_STAT() & (1<<1))) ;}
#define NF_CLEAR_RB()		WRITE_REGISTER_USHORT(pNFSTAT, (USHORT) (READ_REGISTER_USHORT(pNFSTAT) | (1<<2)))
#define NF_DETECT_RB()		{while(!(NF_STAT() & (1<<2)));}
#define NF_ECC()			READ_REGISTER_ULONG(pNFECC)

S3C2410A的寄存器宏定义:

//  MACROS
#define NF_CE_L()				WRITE_REGISTER_USHORT(pNFCONF, (USHORT) (READ_REGISTER_USHORT(pNFCONF) & ~(1 << 11)))
#define NF_CE_H()				WRITE_REGISTER_USHORT(pNFCONF, (USHORT) (READ_REGISTER_USHORT(pNFCONF) | (1 << 11)))
#define NF_CMD(cmd)     		WRITE_REGISTER_USHORT(pNFCMD, (USHORT) (cmd))
#define NF_ADDR(addr)   		WRITE_REGISTER_USHORT(pNFADDR, (USHORT) (addr))
#define NF_DATA_R()     		READ_REGISTER_USHORT(pNFDATA)
#define NF_DATA_W(val)			WRITE_REGISTER_BYTE(pNFDATA, (BYTE)(val))

#define NF_STAT()       		READ_REGISTER_USHORT(pNFSTAT)
		
#define NF_RSTECC()				WRITE_REGISTER_USHORT(pNFCONF, (USHORT) (READ_REGISTER_USHORT(pNFCONF) | (1 << 12)))
#define NF_WAITRB()				{while(!(NF_STAT() & (1<<0))) ;}
#define NF_DETECT_RB()			{while(!(NF_STAT() & 0x01));}
#define NF_ECC()				READ_REGISTER_ULONG(pNFECC)

S3C2410的寄存器是我修改过的寄存器定义,主要不同之处:NF_CE_L()、NF_CE_H()、NF_RSTECC()、NF_WAITRB()、NF_DETECT_RB(),这些寄存器可以通过两者的Datasheet上的详细说明可以分别出来。这里不详细解说啦!寄存器的修改是移植NAND FLASH驱动的第一步。也是最重要的一步,下一步主要分析驱动移植需要注意的部分。
   未完待续。。。。。。

移植linux内核到mini2440常见问题 <br />具体方法参考移植手册,常见问题如下。<br />错误一:<br />NOW, Booting Linux......<br />Uncompressing Linux...................................................................................... done, booting the kernel.<br />停止的情况<br /><br />下面的是tools/mach-types中关于体系的参数定义<b 阅读详情

相关推荐

S3C2440 NAND FLASH驱动移植至S3C2410的分析与编程

根据S3C2410的手册,找到与NAND FLASH控制器相关的寄存器,并将其与驱动代码中的相应寄存器进行映射。根据S3C2410的手册,找到与NAND FLASH相关的GPIO引脚,并将其与驱动代码中的相应引脚进行映射。这可能涉及到修改时钟控制寄存器的配置以及相关的时序参数。它们之间有一些硬件和寄存器配置的差异,因此需要对NAND FLASH驱动进行适当的修改和调整才能在S3C2410芯片上正常工作。请注意,上述代码仅为示例,具体的寄存器配置和时序参数需要根据S3C2410的手册进行相应的修改。

2301_79325339的博客 221

u-boot在s3c2410开发板上移植(NAND Flash Boot)过程

1)u-boot版本1.1.3,gcc version 3.3.3 (DENX ELDK 3.1.1 3.3.3-9)2)在Makefile中加入bks2410_config : unconfig @./mkconfig $(@:_config=) arm arm920t bks2410 NULL s3c24x0我把我的板子起名叫bks2410,可以依自己的喜好修改3)建立board/bk

Bekars涡轮增压的Blog ^_^ 1万+

基于S3C系列处理器的Linux Flash驱动开发实战项目

Flash驱动是Linux内核中负责管理非易失性存储设备的核心模块,通过MTD(Memory Technology Device)子系统实现对NOR/NAND Flash的统一抽象。其主要功能包括:物理地址映射、读写擦除操作封装、ECC校验、坏块管理及与上层文件系统(如JFFS2、UBIFS)的接口对接。在函数中扩展私有命令:if (!/* 调用底层erase接口 */break;用户空间可通过实现精细控制。

weixin_35757191的博客 516

u-boot1.1.6移植到S3C2410的详细步骤--nand flash(新代码)

一、移植前说明:1. 工作环境:          RedHat 9 ,内核 2.4.20     交叉编译器:        Arm-linux-gcc 3.4.4     目标板:     s3c2410,NAND Flash:64M K9F1208U0B2. 下载源码,建立工作目录     u-boot的源码可以从以下网址下载:     http://downloads.source

wiserstar的专栏 2325

微积分,用编程理解高数(python,C,C++)

很好理解,导数中,x是哪一点的导数,dx是精准度,y等于f(x)即函数。导数结果就是瞬时变化率。积分很好理解,a为下限,b为上限,y为函数,结果就是y=f(x)下a到b的面积。只要用定积分代入a=0,b=10(10s)y=x(1*x=1)就得到结果。F(x)为原函数,即微分后的函数是f(x)dx,微分前是F(x)一列车初始速度为10m/s,加速度为。才几十行代码,微积分也不是很难啊。,问速度达到20时车走了多少米。

linhhanpy的博客 1176

2022-04-06 RK3566 上调试百兆以太网卡YT8512C 调试记录

一、原理图 二、dts &gmac1_clkin{ clock-frequency = <50000000>; status = "okay"; }; &gmac1 { phy-mode = "rmii"; clock_in_out = "input"; snps,reset-gpio = <&gpio4 RK_PC2 GPIO_ACTIVE_LOW>; snps,reset-active-low; sn...

海月汐辰 1万+

【nand】基于DJYOS下S3C2440A的nand驱动移植过程

基于DJYOS下S3C2440A的nand驱动移植过程 王建忠 2011-9-14 1      开发环境及说明 软件平台:DJYOS 1.0.0 硬件平台:TQ2440开发板(CPU:S3C2440)NAND芯片:K9F2G08B0B(256M) 1.1    说明

DJYOS都江堰操作系统 3473

属性基加密(Attribute-based Encryption, ABE)

KP-ABE中,用户的密钥定义了访问策略,密文的属性与策略进行匹配。CP-ABE中,密文定义了访问策略,用户的属性与策略进行匹配。

2201_75392924的博客 1830

U-boot移植 (v2012.04.1 S3C2440平台) (三) Nor flash Nand flash 驱动支持

7  NOR Flash(SSTVF1601) 支持 在u-boot中添加对Nor flash的支持比较简单,大多数Nor flash都支持CFI接口,而u-boot有对cfi flash的驱动支持。对于SSTVF1601,并不支持标准的CFI接口,所以得使用JEDEC接口。但jedec_flash.c中并没有SSTVF1601的配置信息,所以得手动添加上: drivers/mtd/jed

Nova的专栏 2728

【笔记软件obsidian】从入门到精通

目录 一、前言 二、下载及安装 三、【选修】ios用户如何通过iCloud进行三平台同步 四、基本Markdown语法 五、【选修】插件的下载及安装方式 六、

patrick的博客 9万+

声纹识别实战:用Python从零搭建一个简易声纹验证系统(附完整代码)

本文是一份详细的声纹识别实战指南,教你使用Python从零搭建一个简易的声纹验证系统。文章涵盖了从音频采集、预处理、MFCC特征提取,到基于高斯混合模型(GMM)的建模与验证全流程,并提供了完整的代码实现,帮助开发者快速掌握这项生物特征识别核心技术。

ik6789012的博客 229

S3C2410支持64M到1GB的NAND FLASH

参考其它的ARM的NAND FLASH驱动,发现别人的NAND FLASH是采用一个表格来检测不同的NAND FLASH,现在已经移植到S3C2410中了。测试也是OK滴。。。只测试过64M的NAND FLASH,我想1G也是差不多滴,只需要看看SPEC。就知道怎么去做了。这是S3C2410下的NAND FLASH驱动表格:#define BW_X08                              0#define BW_X16                              1#de

嵌入式与人工智能天地 1602

ELK 企业级日志分析系统(1)

ELK平台是一套完整的日志集中处理解决方案,将、Logstash和Kiabana三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信。

云计算运维工程师的成长之路 1864

基于S3C2410A的WINCE下Stepldr程序移植详细分析

在SAMSUNG公司提供的S3C2440A的BSP中有一个Stepldr引导程序。现在我把它移植到S3C2410A上了,已经移植成功。需要修改的地方就是NAND FLASH驱动部分,因为S3C2410A的NAND FLASH寄存器和S3C2440A的NAND FLASH寄存器是有点不一样滴。相比较而言:S3C2440A的NAND FLASH的寄存器丰富一些。而S3C2410A的就比较少。不说废话了

天道酬勤,恒者能胜 1077

【Cmder】--- Windows11 配置CMD神器 (超详细 持续更新中)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

秋知叶i 1万+

RK3588 开启多窗口

这样就支持多窗口了。

tzj1058756809的博客 266

TQ2440 u-boot-2012.04.01移植四支持NAND Flash

继 u-boot-2012.04.01移植二支持NOR Flash,继续修改代码支持NAND Flash。最后直接用NOR Flash里的u-boot烧写自己移植的u-boot到NAND,方便电脑没有并口或手上没有openjtag,照样能移植u-boot,当然有openjtag更方便。 开发环境: 系统:ubuntu 10.04.4 单板:tq2440 NAND FLASH:K9F1216

u010216127的专栏 1362

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

基于S3C2410A的WINCE下Stepldr程序移植详细分析[二]

<br />前面分析STEPLDR.BIB文件,现在分析的是NAND FLASH驱动部分。至于startup.s文件,主要是进行初始化:看门狗。配置MPLL和UPLL以及待机和休眠。还有的就是上电,还是复位等,在移植到STEPLDR到S3C2410A的时候需要修改的地方就是NAND FLASH驱动部分,代码如下:<br />; NAND code...<br />;<br />A410_BASE_ADDR EQU 0x2000000<br /> MACRO<br /> LDR4STR1 $src,$tmp1

嵌入式与人工智能天地 1673

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JZ2440学习笔记,第三部分,移植uboot2015支持JZ2440的nand flash

JZ2440学习笔记 Chili 2015.5 第三部分,移植uboot2015支持JZ2440的nand flash 6,修改uboot支持nand flash  与nor flash的初始化类似,nand flash初始化在文件u-boot-2015.04-rc4\u-boot-2015.04-rc4-my2440\arch\arm\lib\Board.c 中的函数voi

Leo_Walker的博客 2196

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

mini2440移植之nand驱动

1.linux2.6.32.2内核支持的所有nand类型 Linux2.6.32.2 已经自带了大部分Nand Flash 驱动, 在 linux-2.6.32.2/drivers/mtd/nand/nand_ids.c 文件中,定义了所支持的各种Nand Flash 类型 2.修改Nand Flash分区表 系统默认的分区不能满足mini2440的系统,需要修改,Nand Flash的结

tong646591的专栏 819

在s3c2440上linux镜像在nand flash中吗,s3c2440 移值u-boot-2016.03 第4篇 支持NAND flash 识别...

1, /include/configs/smdk2440.h中添加#define CONFIG_CMD_NAND编译drivers/mtd/nand/built-in.o: In function `nand_init_chip':/u-boot-2016.03/drivers/mtd/nand/nand.c:76: undefined reference to `board_nand_init'...

weixin_39622905的博客 187

uboot研读笔记 | 05 - 移植uboot 2012.04到JZ2440(支持Nand Flash读写)

在支持Nand Flash操作之前,首先要对Nand Flash的读写方法有一定的了解,参考文章: S3C2440-裸机篇-10 | 使用S3C2440操作Nand Flash 1. 去除nand flash屏蔽 在之前初步移植uboot时,发现开启nand flash之后编译不通过,所以屏蔽了nand flash的使用,在单板配置文件include/configs/smdk2440.h中开启...

Mculover666的博客(嵌入式) 2158

u-boot2008.10非nand_leagcy移植mini2440,支持yaffs,附源码 ---转!!

jun2ran的专栏 2338

uboot移植之修改支持NandFlash识别篇6(超详细)

遗留问题“NAND write to offset 0 failed -5”解决方法 nand的底层程序框架可以分为两部分:一部分是通用的协议层,另一部分是和单板硬件相关。比方说:xxx函数知道发出90命令,接着再发出0地址,然后读出的第一个数据是厂家id,第二个数据是设备id。这是所有nand都有的一个特点,但是至于怎样发命令,怎样发地址等等,这些都是协议层中的代码 使用底层提供的函数 去实现(后面分析代码可以知道,其实就是构造好mtd_info结构体提供给协议层使用,里面含有各种底层函数,如果我们没有去

弯弯月牙儿 5495

linux2.6.30.4移植到TQ2440

http://blog.chinaunix.net/uid-28194872-id-3358090.html   修改根目录下的Makefile文件 命令:gedit Makefile大概193行和194行 修改: ARCH=arm CROSS_COMPILE=arm-linux- 原因:指明体系结构为arm,采用的交叉编译器为arm-linux-,这一步一定要改完再执

阿鲁的嵌入式之路 1423

u-boot移植到mini2440

,u-boot版本2008.10 收藏 这篇文章写于2008.12.28日,主要记录了我移植u-boot-2008.10的过程,并附上了移植好的patch文件。移植好的u-boot-2008.10适用友善公司的mini2440和阳初公司的yc2410。其它的开发板,可能要根据相应的电路配置做稍许修改。我的移植是使用非nand-leagcy方法的,移植好的u-boot-2008.10功能除了基本功能

share8888的专栏 869
上一篇: Busybox支持中文的解决办法
下一篇: 驱动开发利器Microsoft Windows Driver Kit 7.1.0下载
wang-bob
博客等级 码龄20年 356粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值