nand驱动移植

发布者:EnchantedDreams最新更新时间:2025-01-14 来源: cnblogs关键字:nand  驱动移植  S5PV210 手机看文章 扫描二维码
随时随地手机看文章

首先下载nand flash驱动 s3c_nand.c ,此文件包含着nand flash驱动具体的实现,将其复制到drivers/mtd/nand下;


在s3c_nand.c中添加nand flash分区信息,分区内容可以自由设定。

#if defined(CONFIG_ARCH_S5PV210)

struct mtd_partition s3c_partition_info[] = {

{

.name= 'misc',

.offset= (768*SZ_1K),          /* for bootloader */

.size= (256*SZ_1K),

.mask_flags= MTD_CAP_NANDFLASH,

},

{

.name= 'recovery',

.offset= MTDPART_OFS_APPEND,

.size= (5*SZ_1M),

},

{

.name= 'kernel',

.offset= MTDPART_OFS_APPEND,

.size= (5*SZ_1M),

},

{

.name= 'ramdisk',

.offset= MTDPART_OFS_APPEND,

.size= (3*SZ_1M),

},


{

.name= 'system',

.offset= MTDPART_OFS_APPEND,

.size= MTDPART_SIZ_FULL,

}


{

.name= 'system',

.offset= MTDPART_OFS_APPEND,

.size= (110*SZ_1M),

},

{

.name= 'cache',

.offset= MTDPART_OFS_APPEND,

.size= (80*SZ_1M),

},

{

.name= 'userdata',

.offset= MTDPART_OFS_APPEND,

.size= MTDPART_SIZ_FULL,

}

#endif

};


struct s3c_nand_mtd_info s3c_nand_mtd_part_info = {

.chip_nr = 1,

.mtd_part_nr = ARRAY_SIZE(s3c_partition_info),

.partition = s3c_partition_info,

};

 

结构体s3c_nand_mtd_info在源代码是没有的,所以要将其添加进去;

修改 arch/arm/plat-samsung/include/plat/nand.h 添加如下内容:

struct s3c_nand_mtd_info {

uint chip_nr;

uint mtd_part_nr;

struct matd_partition *partition;

};

 

为了能使s3c_nand.c正确编译,还要修改该目录下,也就是的drivers/mtd/nand的Makefile和Kconfig:

修改driver/mtd/nand/Kconfig添加如下内容:

config MTD_NAND_S3C

  tristate 'NAND Flash support for S3C Soc'

  depends on ARCH_S5PV210 && MTD_NAND

  help

  This enables the NAND flash controller on the S3C.

  No board specfic support is done by this driver , each board

  must advertise a platform_device for the driver to attach.

config MTD_NAND_S3C_DEBUG

  bool 'S3C NAND driver debug'

  depends on MTD_NAND_S3C

  help

  Enable debugging of the S3C NAND driver

config MTD_NAND_S3C_HWECC

  bool 'S3C NAND Hardware ECC'

  depends on MTD_NAND_S3C

  help  www.2cto.com  

  Enable the use of the S3C's internal ECC generator when 

  using NAND. Early versons of the chip have had problems with

  incorrect ECC generation, and if using these, the default of

  software ECC is preferable

  If you lay down a device with the hardware ECC, the you will

  currently not be able to switch to software, as there is no

  implementation for ECC method used by the S3C

修改drivers/mtd/nand/Makefile添加如下内容:

obj-$(CONFIG_MTD_NAND_S3C)        += s3c_nand.o


 在Mach-smdkv210.c (archarmmach-s5pv210) 中添加nand flash source,platform_device,需要头文件map.h map.h下载,下载将其放在(archarmmach-s5pv210includemach),在Mach-smdkv210.c中加入#include 。替换掉map.h文件

 

添加nand flash source

/* NAND Controller */

static struct resource s3c_nand_resource[] = {

[0] = {

.start= S5PV210_PA_NAND,

.end= S5PV210_PA_NAND + S5PV210_SZ_NAND - 1,

.flags= IORESOURCE_MEM,

}

};


struct platform_device s3c_device_nand = {

.name= 's5pv210-nand',

.id= -1,

.num_resources= ARRAY_SIZE(s3c_nand_resource),

.resource= s3c_nand_resource,

};

 

添加platform_device

 找到static struct platform_device *smdkv210_devices[] __initdata

 添加

#if defined(CONFIG_MTD_NAND_S3C)

&s3c_device_nand,

#endif

 

 添加时钟信息

在Clock.c (archarmmach-s5pv210) 中找到static struct clk init_clocks_off[],添加

{
  .name  = 'nand',
  .id  = -1,
  .parent  = &clk_hclk_psys.clk,
  .enable  = s5pv210_clk_ip1_ctrl,
  .ctrlbit = ((1 << 28) | (1 << 24)),
 },

添加之后,nand flash驱动才能正确获取时钟。

 

以上操作完成后,开始配置内核

根目录下make menuconfig

 

Device Drivers --->

<*> Memory Technology Device (MTD) support --->

<*> Caching block device access to MTD devices

<*> NAND Device Support --->

<*> NAND Flash support for S3C SoCs

[*] S3C NAND Hardware ECC

 

到了这里,开发板已经支持nand flash驱动。

接下来

配置后保存,make clean ,make zImage

将zImage下载进开发板。从串口信息可以看出nand flash驱动是否完成:

 

S3C NAND Driver, (c) 2008 Samsung Electronics
S3C NAND Driver is using hardware ECC.
NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)
Creating 5 MTD partitions on 's5pv210-nand':
0x0000000c0000-0x000000100000 : 'misc'
0x000000100000-0x000000600000 : 'recovery'
0x000000600000-0x000000b00000 : 'kernel'
0x000000b00000-0x000000e00000 : 'ramdisk'
0x000000e00000-0x000010000000 : 'system'


关键字:nand  驱动移植  S5PV210 引用地址:nand驱动移植

上一篇:修改 Linux 内核 DM9000 支持 tiny210 开发板
下一篇:tiny210V2 Uboot kernel filesystem 烧写和启动

推荐阅读最新更新时间:2026-03-20 19:08

tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——NAND 8位硬件ECC
这节我们实现nand的ecc,保存环境变量到nand flash 中。然后把我们之前的led灯烧写到nand flash 中。开机启动。在 tiny210.h 中定义宏 CONFIG_S5PV210_NAND_HWECC、CONFIG_SYS_NAND_ECCSIZE、CONFIG_SYS_NAND_ECCBYTES CONFIG_SYS_NAND_ECCSIZE 定义了消息长度。即每多少字节进行 1 次 ECC 校验 CONFIG_SYS_NAND_ECCBYTES 定义为 13Byte,将 drivers/mtd/nand/s5pv210_nand.c 中的 CONFIG_S3C2410_NAND_HWECC 替换为CON
[单片机]
tiny210(<font color='red'>s5pv210</font>)<font color='red'>移植</font>u-boot(基于 2014.4 版本号)——<font color='red'>NAND</font> 8位硬件ECC
S5PV210(TQ210)学习笔记——Nand配置
  S5PV210的Nand flash跟2440和6410的Nand flash配置差不多,不同的是S5PV210的功能更加强大,尤其是S5PV210的硬件ECC(本文不涉及S5PV210中Nand ECC配置)。整体上来讲,S5PV210的Nand flash配置还是非常简单的。   其实,配置一个模块往往需要以下几个步骤:   (1)根据原理图,理清模块的接线方式,对于Nand flash来说,就是看看Nand flash接到了哪些GPIO上,然后把对应的GPIO配置为Nand功能即可。   (2)阅读S5PV210手册,掌握相关模块控制器的功能、操作方式及寄存器配置。   (3)阅读模块芯片手册,掌握模块的访问控制时序。
[单片机]
<font color='red'>S5PV210</font>(TQ210)学习笔记——<font color='red'>Nand</font>配置
S5PV210(TQ210)学习笔记——Nand配置
S5PV210的Nand flash跟2440和6410的Nand flash配置差不多,不同的是S5PV210的功能更加强大,尤其是S5PV210的硬件ECC(本文不涉及S5PV210中Nand ECC配置)。整体上来讲,S5PV210的Nand flash配置还是非常简单的。 其实,配置一个模块往往需要以下几个步骤: (1)根据原理图,理清模块的接线方式,对于Nand flash来说,就是看看Nand flash接到了哪些GPIO上,然后把对应的GPIO配置为Nand功能即可。 (2)阅读S5PV210手册,掌握相关模块控制器的功能、操作方式及寄存器配置。 (3)阅读模块芯片手册,掌握模块的访问控制时序。 我们按照以上步
[单片机]
<font color='red'>S5PV210</font>(TQ210)学习笔记——<font color='red'>Nand</font>配置
S5PV210(TQ210)学习笔记——Nand flash驱动编写
跟裸机程序一样,S5PV210的Nand flash模块跟S3C2440的Nand flash模块非常相似,如果不引入ECC,驱动程序的编写也非常简单,具体的分析及编写过程强烈推荐观看韦东山老师的视频教程,我是使用的Linux-3.8.6(Linux-3.8.3也一样)内核,驱动的API函数有些变化,不过原理是相通的,稍微看一下内核源码并参考下其他平台的相关代码就可以自己写出Nand flash驱动了,下面是Nand flash驱动的源码,没有启用ECC,当然,你也可以改成软件ECC,但是我的觉得既然软件ECC不如HWECC快,我就采用硬件ECC吧,我会在下篇文章中加入HWECC。 #include linux/module.h
[单片机]
无刷电机小车开发记录04——互补PWM驱动移植
前言   上篇文章记录了为GD32的BSP添加了PWM信号输入捕获的驱动,并实现了对SC60228DC磁编码器数据的读取(PWM接口),最后还做了一点简单的测试。今天过来继续修轮子,适配一下PWM驱动。这里不得不提一下,造轮子或者修轮子可能是比较枯燥的,如果有也想搞一搞这个小车但懒得造轮子的小伙伴可以等我都弄完了直接用完适配好的程序,可能大多数同学都更喜欢玩上层实现具体功能的部分。不过对于我来说,在这之前还有很多轮子要修。 相关硬件电路   介于上篇文章有小伙伴产生了一些疑问,所以后面的文章我尽量把相关的一些东西提前罗列一下,比如今天要调试的是驱动无刷电机的PWM信号。那下面就是其中一路电机的驱动电路原理图,无刷电机的三项
[单片机]
无刷电机小车开发记录04——互补PWM<font color='red'>驱动</font><font color='red'>移植</font>
Linux帧缓冲设备驱动程序框架及图形界面GUI的移植
硬件平台   S3C2410X是三星公司的基于ARM920T的S3C2410X芯片。S3C2410X集成了一个LCD控制器(支持STN和TFT带有触摸屏的液晶显示屏)、SDRAM、触摸屏、USB、SPI、SD和MMC等控制器,4个具有PWM功能的计时器和1个内部时钟,8通道的10位ADC,117位通用I/O口和24位外部中断源,8通道10位AD控制器,处理器工作频率最高达到203MHz。   S3C2410中的LCD控制器可支持单色/彩色LCD显示器。支持彩色TFT时,可提供4/8/12/16位颜色模式,其中16位颜色模式下可以显示65536种颜色。配置LCD控制器重要的一步是指定显示缓冲区,显示的内容就是从缓冲区中读出的,其大小
[单片机]
S3C6410(Real6410) Linux 6x6矩阵键盘驱动移植
Real6410默认的键盘驱动是gpio键盘驱动,现在要取消gpio键盘,实现矩阵键盘。6410的矩阵键盘驱动对应的是samsung-keypad.c,位于driver/input/keyboard目录,可按照下面步骤进行移植。 1、 在arch/arm/mach-s3c64xx/mach-real6410.c中签加 添加头文件: #include plat/keypad.h 添加struct定义 static uint32_t smdk6410_keymap __initdata = { /* KEY(row, col, keycode) */ /*S00(0,0), S01(0,1),
[单片机]
linux2.6.32 内核移植s3c2440 - DM9000网卡驱动移植
参考: http://caiming1987612.blog.163.com/blog/static/118556676200961752714307/ http://blog.chinaunix.net/u1/34474/showart_401078.html http://hi.baidu.com/%D3%F3%C4%E0%C4%EA%B8%E2/blog/item/6256fea7bfceac98d0435819.html 时序图和引脚连接 :http://blog.chinaunix.net/u1/57901/showart_2023852.html (一)打开arch/arm/mach-s3c2440/mach-test
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved