zoukankan      html  css  js  c++  java
  • 十八、flash 适配(二)

    18.5 流程总结

    同时我们也知道我们可能需要配置的配置宏:

    • CONFIG_CMD_NAND
    • CONFIG_SYS_MAX_NAND_DEVICE
    • CONFIG_SYS_NAND_BASE
    • CONFIG_S3C24XX_CUSTOM_NAND_TIMING
    • CONFIG_S3C2440_NAND_HWECC
    • CONFIG_S3C2440_NAND_BBT

    18.6 代码移植

    18.6.1 Kconfig 中添加配置

    需要修改的 kconfig 文件 driversmtd andKconfig,添加如下代码:

     1 config NAND_S3C24X0
     2     bool "Support S3c24x0 NAND Controller"
     3     default n
     4     help
     5       Support s3c2410 s3c2440.
     6 
     7 config SYS_MAX_NAND_DEVICE
     8     int "Number of nand device"
     9     default 0
    10     help
    11       There may be more than one nandflash on a board.
    12       Enter the number of nandflash on your board.
    13       default 0
    14 
    15 config SYS_NAND_BASE
    16     hex "Basic address of NAND controller"
    17     default 0x4e000000 if S3C2440
    18     default 0x4e000000 if S3C2410
    19     help
    20       Base address of NAND controller of SOC.
    21 
    22 config S3C24XX_CUSTOM_NAND_TIMING
    23     bool "Support s3c24xx Custom NAND Timing"
    24     default n
    25     depends on NAND_S3C24X0
    26     help
    27       Support s3c24xx custom nand timing
    28 
    29 config S3C24XX_TACLS
    30     int "Tacls of NAND controller of S3C24XX"
    31     depends on S3C24XX_CUSTOM_NAND_TIMING
    32     help
    33       Tacls of NAND controller of S3C24XX.
    34       This is the parameter of the NAND controller's register nfconf.
    35       For S3C2440, tacls = S3C24XX_TACLS - 1
    36 
    37 config S3C24XX_TWRPH0
    38     int "Twrph0 of NAND controller of S3C24XX"
    39     depends on S3C24XX_CUSTOM_NAND_TIMING
    40     help
    41       Twrph0 of NAND controller of S3C24XX.
    42       This is the parameter of the NAND controller's register nfconf.
    43       For S3C2440, twrph0 = S3C24XX_TWRPH0 - 1
    44 
    45 config S3C24XX_TWRPH1
    46     int "Twrph1 of NAND controller of S3C24XX"
    47     depends on S3C24XX_CUSTOM_NAND_TIMING
    48     help
    49       Twrph1 of NAND controller of S3C24XX.
    50       This is the parameter of the NAND controller's register nfconf.
    51       For S3C2440, Twrph1 = S3C24XX_TWRPH1 - 1
    52 
    53 choice
    54     prompt "s3c24x0 nand ecc"
    55     default n
    56     depends on NAND_S3C24X0
    57     help
    58       Support s3c24x0 nand hwecc
    59 
    60 config S3C2410_NAND_HWECC
    61     bool "s3c2410 nand hwecc"
    62 
    63 config S3C2440_NAND_HWECC
    64     bool "s3c2440 nand hwecc"
    65 
    66 endchoice
    67 
    68 choice
    69     prompt "s3c24x0 nand BBT"
    70     default n
    71     depends on NAND_S3C24X0
    72     help
    73       Support s3c24x0 nand BBT
    74 
    75 config S3C2410_NAND_BBT
    76     bool "s3c2410 nand BBT"
    77 
    78 config S3C2440_NAND_BBT
    79     bool "s3c2440 nand BBT"
    80 
    81 endchoice

    修改完成后,执行 make menuconfig 将配置打开。

    18.6.2 文件名修改

    mv s3c2410_nand.c s3c24x0_and.c 

    在文件使用特性宏隔开 2410 和 2440 不同的配置

    18.6.3 时钟、NFCONF、NFCONT 修改

     s3c24x0_get_base_clock_power 和 s3c24x0_get_base_nand 都有对应的芯片头文件对应,不用管。

    需要注意的是 s3c24x0_clock_power 和 s3c24x0_nand 这两个结构体,这两个结构体是用来描述时钟电源寄存器和 nand 控制器寄存器的。对照 datasheet 确认是否修改。

    继续流程向下:时钟设置、NFCONF寄存器设置和 nand 结构体中的 IO_ADDR_R 和 IO_ADDR_W 设置

    带 S3C2410 的字样的宏需要进行修改,这是与 2440 的差异。修改如下:

    board_nand_init() 中修改:

     

    18.6.4 片选函数修改

    继续向下查看源码,开始初始化 nand_chip 的数据结构了,但是 nand->select_chip 这个回调函数没有写。

     写一个 select_chip 的回调函数:

    board_nand_init 修改:

    18.6.5 hwcontrol 修改

     继续向下查看修改,nand_read_buf 与我们当前无关,没有看 SPL,不用管,后面两个函数需要做适配 S3C2440。

     s3c24x0_hwcontrol 修改如下:

     注意:在后面的编译测试中发现一个问题,NAND_CLE 和 NAND_ALE 的定义反了,ALE 应该是地址总线的,但是却成了命令,CLE 是命令的,却成了地址,为了不改变 u-boot 的总体架构,这里的两个宏也定义成反的:

     当然也可以做源码修改。

    修改后的代码如下

    18.6.6 dev_ready 修改

    此函数的作用是,读取 nfstat 寄存器, 获取 nandflash 的状态,不需要修改。

  • 相关阅读:
    skynet源代码学习
    白话经典算法系列之七 堆与堆排序
    数据结构与算法二
    [hadoop系列]Pig的安装和简单演示样例
    感动前行——给医学媳妇写的演讲稿(非IT类)
    怎样提高团队管理能力3
    Linux守护进程的编程实现
    人脸识别 开放书籍 下载地址
    Objective-C中经常使用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect
    动态规划整理(两)
  • 原文地址:https://www.cnblogs.com/kele-dad/p/13154024.html
Copyright © 2011-2022 走看看