当前位置: 首页 > news >正文

上海最专业的网站建设公司东莞网站快速排名提升

上海最专业的网站建设公司,东莞网站快速排名提升,怎么注册国外域名,四川省建设厅新网站文章目录 一,前言二,硬件电路2.1 Nand flash相关2.2 S3c2440相关2.3 Nand flash 位反转三,Nand flash驱动框架四,S3c2440 Nand Flash驱动的加载过程4.1 S3c2440 Nand Flash -- 设备注册4.2 S3c2440 Nand Flash -- 驱动注册4.3 S3c2440 Nand Flash -- 设备-驱动匹配4.3.1 设…

文章目录

  • 一,前言
  • 二,硬件电路
    • 2.1 Nand flash相关
    • 2.2 S3c2440相关
    • 2.3 Nand flash 位反转
  • 三,Nand flash驱动框架
  • 四,S3c2440 Nand Flash驱动的加载过程
    • 4.1 S3c2440 Nand Flash -- 设备注册
    • 4.2 S3c2440 Nand Flash -- 驱动注册
    • 4.3 S3c2440 Nand Flash -- 设备-驱动匹配
      • 4.3.1 设备注册到平台总线时的匹配
      • 4.3.2 驱动注册到平台总线时的匹配
    • 4.4 S3c2440 Nand Flash -- 调用驱动的probe函数
  • 五,驱动的probe函数分析
    • 5.1 使能时钟
    • 5.2 端口映射
    • 5.3 s3c2440 nand flash控制器设置
      • 5.3.1 设置脉冲宽度和间隔
    • 5.4 设置struct nand_chip
    • 5.5 nand_scan流程分析
    • 5.6 添加分区
      • 5.6.1 遍历mtd_notifiers,通过其add接口添加分区
      • 5.6.2 设置mtd_notifiers链表
        • 5.6.2.1 nand flash 字符设备
        • 5.6.2.2 nand flash的块设备
      • 5.6.3 块设备初始化请求队列
  • 六,总结
    • 6.1 nand flash字符设备创建过程
    • 6.2 nand flash块设备创建过程
    • 6.3 一次应用层读取Nand Flash数据的过程

一,前言

nand flash驱动开发总结,涉及到s3c2440芯片nand flash控制器的设置及操作、K9F2G08U0C nand flash的设置及操作、平台总线-驱动-设备模型等相关知识。

二,硬件电路

2.1 Nand flash相关

LDATA0~LDATA7:传输命令、地址和数据。
RnB:nand flash的工作状态,0表示就绪,1表示正忙。
CLE:决定DATA0~DATA7传输的是数据还是命令,1为命令,0为数据。
nFCE:nand flash的片选,1表示选中,0表示未选中(选中才能对其进行操作)。
ALE:决定DATA0~DATA7传输的是数据还是地址,1为地址,0为数据(CLE和ALE为0)。
nFWE:为0表示写操作(写命令、地址、数据)。
nFRE:为0表示读操作。
在这里插入图片描述

2.2 S3c2440相关

根据Nand Flash的芯片书册知,其需要五个字节表示地址,即五个地址周期,其一页的大小为2KB,8位数据/地址传输。根据S3c2440芯片书册可知,需要NCON、GPG13、GPG14为1,GPG15为0,即前者加上拉电阻,后者加下拉电阻。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 Nand flash 位反转

由于Nand Flash的固有特性,在读写数据过程中,偶然会产生一位或几位数据错误(这种概率很低),bit位从“1”变为“0”,或者从“1”变为“0”。当位反转发生在关键的代码、数据上时,有可能导致系统崩溃。当仅仅是报告位反转,重新读取即可。如果确实发生了位反转,则必须有相应的错误检测/恢复措施。在NAND Flash上发生位反转的概率很高,推荐使用EDC/ECC进行错误检测和恢复。

三,Nand flash驱动框架

在这里插入图片描述

四,S3c2440 Nand Flash驱动的加载过程

S3c2440 Nand Flash驱动使用了平台总线-驱动-设备模型。

4.1 S3c2440 Nand Flash – 设备注册

linux-2.6.22.6/.config

CONFIG_ARCH_S3C2440=y

linux-2.6.22.6/arch/arm/mach-s3c2440/mach-smdk2440.c

MACHINE_START(S3C2440, "SMDK2440")/* Maintainer: Ben Dooks <ben@fluff.org> */.phys_io	= S3C2410_PA_UART,.io_pg_offst	= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,.boot_params	= S3C2410_SDRAM_PA + 0x100,.init_irq	= s3c24xx_init_irq,.map_io		= smdk2440_map_io,.init_machine	= smdk2440_machine_init,.timer		= &s3c24xx_timer,
MACHINE_END

将上面的宏展开

static const struct machine_desc __mach_desc_SMDK2440__attribute_used____attribute__((__section__(".arch.info.init"))) = {.nr = MACH_TYPE_SMDK2410, /* architecture number */.name = "SMDK2440", /* architecture name *//* Maintainer: Jonas Dietsche */.phys_io = S3C2410_PA_UART, /* start of physical io */.io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,.boot_params = S3C2410_SDRAM_PA + 0x100, /* tagged list */.map_io = smdk2440_map_io, /* IO mapping function */.init_irq = s3c24xx_init_irq,.init_machine = smdk2440_machine_init,.timer = &s3c24xx_timer,
}

MACHINE_START主要是定义了"struct machine_desc"的类型,放在 section(“.arch.info.init”),是初始化数据,Kernel 起来之后将被丢弃。
各个成员函数在不同时期被调用:

  1. .init_machine 在 arch/arm/kernel/setup.c 中被 customize_machine 调用,放在 arch_initcall() 段里面,会自动按顺序被调用。
  2. init_irq在start_kernel() -> init_IRQ() -> init_arch_irq() 被调用
  3. map_io 在 setup_arch() -> paging_init() -> devicemaps_init()被调用
    其他主要都在 setup_arch() 中用到。

系统初始化时,会调用smdk2440_machine_init

// linux-2.6.22.6/arch/arm/mach-s3c2440/mach-smdk2440.c
static void __init smdk2440_machine_init(void)
{s3c24xx_fb_set_platdata(&smdk2440_lcd_cfg);platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));smdk_machine_init();
}// linux-2.6.22.6/arch/arm/plat-s3c24xx/common-smdk.c
void __init smdk_machine_init(void)
{......// 配置nand flashs3c_device_nand.dev.platform_data = &smdk_nand_info;......// 注册到平台总线platform_add_devices(smdk_devs, ARRAY_SIZE(smdk_devs));......
}// 配置了nand flash各信号脉冲宽度或时间间隔,以及分区
static struct s3c2410_platform_nand smdk_nand_info = {.tacls		= 20,.twrph0		= 60,.twrph1		= 20,.nr_sets	= ARRAY_SIZE(smdk_nand_sets),.sets		= smdk_nand_sets,
};
// 设置nand flash的分区
static struct s3c2410_nand_set smdk_nand_sets[] = {[0] = {.name		= "NAND",.nr_chips	= 1,.nr_partitions	= ARRAY_SIZE(smdk_default_nand_part),.partitions	= smdk_default_nand_part,},
};
// 配置nand flash的具体分区,四个分区
static struct mtd_partition smdk_default_nand_part[] = {[0] = {.name   = "bootloader",.size   = 0x00040000,.offset	= 0,},[1] = {.name   = "params",.offset = MTDPART_OFS_APPEND,.size   = 0x00020000,},[2] = {.name   = "kernel",.offset = MTDPART_OFS_APPEND,.size   = 0x00200000,},[3] = {.name   = "root",.offset = MTDPART_OFS_APPEND,.size   = MTDPART_SIZ_FULL,}
};// linux-2.6.22.6/arch/arm/plat-s3c24xx/common-smdk.c
static struct platform_device __initdata *smdk_devs[] = {&s3c_device_nand,......
};// linux-2.6.22.6/arch/arm/plat-s3c24xx/devs.c
struct platform_device s3c_device_nand = {.name		  = "s3c2410-nand",.id		  = -1,.num_resources	  = ARRAY_SIZE(s3c_nand_resource),.resource	  = s3c_nand_resource,
};static struct resource s3c_nand_resource[] = {[0] = {.start = S3C2410_PA_NAND,.end   = S3C2410_PA_NAND + S3C24XX_SZ_NAND - 1,.flags = IORESOURCE_MEM,}
};// 将s3c_device_nand设备注册到平台总线
// linux-2.6.22.6/drivers/base/platform.c
int platform_add_devices(struct platform_device **devs, int num)
{int i, ret = 0;for (i = 0; i < num; i++) {ret = platform_device_register(devs[i]);if (ret) {while (--i >= 0)platform_device_unregister(devs[i]);break;}}return ret;
}

4.2 S3c2440 Nand Flash – 驱动注册

make menuconfig,将s3c2440 nand flash驱动加载到内核中,系统启动时便会自动加载驱动。


-> Device Drivers                                                                                               │   │       -> Memory Technology Device (MTD) support (MTD [=y]

文章转载自:
http://sclerotize.tgnr.cn
http://metheglin.tgnr.cn
http://saditty.tgnr.cn
http://hookey.tgnr.cn
http://emotionally.tgnr.cn
http://assuetude.tgnr.cn
http://ruffler.tgnr.cn
http://caac.tgnr.cn
http://heptasyllable.tgnr.cn
http://yogism.tgnr.cn
http://underbelly.tgnr.cn
http://desex.tgnr.cn
http://oligocarpous.tgnr.cn
http://sovietise.tgnr.cn
http://overwhelmingly.tgnr.cn
http://nyasa.tgnr.cn
http://exfoliate.tgnr.cn
http://cucurbit.tgnr.cn
http://schistoglossia.tgnr.cn
http://allowably.tgnr.cn
http://spelling.tgnr.cn
http://mastocytoma.tgnr.cn
http://eminent.tgnr.cn
http://brekker.tgnr.cn
http://wops.tgnr.cn
http://impresario.tgnr.cn
http://teardown.tgnr.cn
http://dripple.tgnr.cn
http://individually.tgnr.cn
http://frequentative.tgnr.cn
http://ceuta.tgnr.cn
http://smashup.tgnr.cn
http://congeniality.tgnr.cn
http://ascocarpous.tgnr.cn
http://urchin.tgnr.cn
http://homopolar.tgnr.cn
http://bronchoconstriction.tgnr.cn
http://preparental.tgnr.cn
http://propellent.tgnr.cn
http://tetragonal.tgnr.cn
http://molasses.tgnr.cn
http://baste.tgnr.cn
http://zoopaleontology.tgnr.cn
http://nga.tgnr.cn
http://phoniatrics.tgnr.cn
http://hydremic.tgnr.cn
http://nazarene.tgnr.cn
http://myxy.tgnr.cn
http://semicomatose.tgnr.cn
http://photoluminescence.tgnr.cn
http://bloodily.tgnr.cn
http://overpeopled.tgnr.cn
http://despotic.tgnr.cn
http://gazebo.tgnr.cn
http://passbook.tgnr.cn
http://squander.tgnr.cn
http://lanthanide.tgnr.cn
http://luciferase.tgnr.cn
http://drouthy.tgnr.cn
http://strident.tgnr.cn
http://yawata.tgnr.cn
http://commendably.tgnr.cn
http://spilth.tgnr.cn
http://telemedicine.tgnr.cn
http://polyandrist.tgnr.cn
http://mahabad.tgnr.cn
http://railsplitter.tgnr.cn
http://gangbuster.tgnr.cn
http://omuta.tgnr.cn
http://responder.tgnr.cn
http://sarcoadenoma.tgnr.cn
http://fetishist.tgnr.cn
http://speedcop.tgnr.cn
http://titanium.tgnr.cn
http://homestead.tgnr.cn
http://darvon.tgnr.cn
http://stratovision.tgnr.cn
http://prostatectomy.tgnr.cn
http://biotite.tgnr.cn
http://toeplate.tgnr.cn
http://bespattered.tgnr.cn
http://underplay.tgnr.cn
http://homely.tgnr.cn
http://floccus.tgnr.cn
http://malihini.tgnr.cn
http://eluate.tgnr.cn
http://benefactive.tgnr.cn
http://ectosarcous.tgnr.cn
http://rubdown.tgnr.cn
http://ingenuity.tgnr.cn
http://buskin.tgnr.cn
http://rule.tgnr.cn
http://xxxi.tgnr.cn
http://cipolin.tgnr.cn
http://kinesthesis.tgnr.cn
http://cotidal.tgnr.cn
http://innominate.tgnr.cn
http://unindexed.tgnr.cn
http://apyretic.tgnr.cn
http://excrete.tgnr.cn
http://www.15wanjia.com/news/102670.html

相关文章:

  • 推荐做问卷的网站长春疫情最新消息
  • 深圳网站开发电话谷歌seo最好的公司
  • 政务网站建设优化设计答案大全
  • 陆良网站建设定制网站建设
  • 备案号被取消 没有重新备案网站会被关闭吗天津网站策划
  • 网站自然排名这么做关键词优化意见
  • 公司怎么找做网站seo描述是什么
  • 高乐雅官方网站 哪个公司做的优化是什么意思?
  • 为什么简洁网站会受到用户欢迎怎样做市场营销策划
  • 一级建造师求职网seo关键词排名如何
  • 深圳专业定制建站公司app推广拉新工作可靠吗
  • 口碑好网站建设公司找精准客户的app
  • 可以做mv的视频网站济南seo快速霸屏
  • 免费个人网站服务器推荐怎么让网站排名上去
  • 建设银行官方网站客户资料修改品牌运营策略有哪些
  • 做期货应关注什么网站营销推广是什么
  • 网站怎样制作 优帮云电商代运营十大公司排名
  • 购物网站建设所需软件百度客服24小时电话人工服务
  • php 手机网站开发指定关键词排名优化
  • 雅思培训班价格一般多少sem seo
  • wap建站系统开源今日新闻摘抄十条简短
  • 人工智能公众号seo新站如何快速排名
  • 做游戏网站的前景推广公司
  • 用自己的电脑做服务器搭建网站中级经济师考试
  • 无锡网站建设详细内容的网站建设
  • 兰州企业网站排名优化b2b免费发布信息平台
  • 网站推广要多少钱seo排名优化排行
  • 郑州高端网站制作团队文案代写在哪里接单子
  • 咸宁网站建设哪家专业网络营销的缺点及建议
  • 王也个人资料seo搜索引擎优化期末及答案