• mini2440移植uboot 2014.04(二)


    我修改的代码已经上传到github上,地址:https://github.com/qiaoyuguo/u-boot-2014.04-mini2440.git

    参考文章: 《u-boot-2011.09在ST2410上的移植-启用CS8900网卡功能

    参考文档: s3c2440手册(下载地址) mini2440电路图(下载地址) SST39VF1601芯片手册(下载地址

    前一篇博文:《mini2440移植uboot 2014.04(一)

    (四)添加nor flash支持

    我的mini2440使用的nor flash芯片型号是SST的39VF1601(16Mbits=2MByte)。该nor flash连接nGCS0。

    SST39VF1601的数据手册下载地址在这里

    先重启mini2440,进入官方的uboot(如果没有安装官方uboot, 可以按照《openocd+jlink为mini2440调试u-boot》将其先烧进去 )。

    然后执行下面命令查看nor flash信息:

    Bank # 1: SST: 1x SST39VF1601 (2MB)
      Size: 2 MB in 32 Sectors
      Sector Start Addresses:
        00000000 (RO) 00010000 (RO) 00020000 (RO) 00030000 (RO) 00040000 (RO)
        00050000 (RO) 00060000      00070000      00080000      00090000     
        000A0000      000B0000      000C0000      000D0000      000E0000     
        000F0000      00100000      00110000      00120000      00130000     
        00140000      00150000      00160000      00170000      00180000     
        00190000      001A0000      001B0000      001C0000      001D0000     
        001E0000      001F0000     

     确实使用了SST39VF1601这款芯片。

    上一部分编译出来的uboot在执行时得到下面的输出:

    U-Boot 2014.04-g35e1a7f-dirty (Jun 05 2014 - 10:44:42)
    
    U-Boot code: 33E80000 -> 33EF9FB4  BSS: -> 33F489D0
    CPUID: 32440001
    FCLK:      405 MHz
    HCLK:  101.250 MHz
    PCLK:   50.625 MHz
    monitor len: 000C89D0
    ramsize: 04000000
    TLB table from 33ff0000 to 33ff4000
    Top of RAM usable for U-Boot at: 33ff0000
    Reserving 802k for U-Boot at: 33f27000
    Reserving 4160k for malloc() at: 33b17000
    Reserving 32 Bytes for Board Info at: 33b16fe0
    Reserving 160 Bytes for Global Data at: 33b16f40
    New Stack Pointer is: 33b16f30
    RAM Configuration:
    Bank #0: 30000000 64 MiB
    addr=33f27000,_start=33e80000
    relocation Offset is: 000a7000
    WARNING: Caches not enabled
    monitor flash len: 000847BC
    Now running in RAM - U-Boot at: 33f27000
    Flash: fwc addr 00000000 cmd f0 00f0 16bit x 16 bit
    fwc addr 0000aaaa cmd aa 00aa 16bit x 16 bit
    fwc addr 00005554 cmd 55 0055 16bit x 16 bit
    fwc addr 0000aaaa cmd 90 0090 16bit x 16 bit
    fwc addr 00000000 cmd f0 00f0 16bit x 16 bit
    JEDEC PROBE: ID f0 ea00 0
    fwc addr 00000000 cmd ff 00ff 16bit x 16 bit
    fwc addr 00000000 cmd 90 0090 16bit x 16 bit
    fwc addr 00000000 cmd ff 00ff 16bit x 16 bit
    JEDEC PROBE: ID 90 ea00 0
    *** failed ***
    ### ERROR ### Please RESET the board ###

    是在识别nor flash时出错的,仔细看代码后发现jedec_table没有该芯片的定义,将其定义加入到jedec_table的末尾处:

    #ifdef CONFIG_SYS_FLASH_LEGACY_1Mx16
       {
            .mfr_id     = 0xf0,
            .dev_id     = 0xea00,
            .name       = "SST39VF1601",
            .uaddr      = {
                [0] = MTD_UADDR_0x5555_0x2AAA, /* x8 */
                [1] = MTD_UADDR_0x5555_0x2AAA /* x16 */
            },
            .DevSize    = SIZE_2MiB,
            .CmdSet     = P_ID_AMD_STD,
            .NumEraseRegions= 2,
            .regions    = {
                    ERASEINFO(0x1000,256),
                    ERASEINFO(0x1000,256)
            }
        },
    #endif

    然后将include/configs/mini2440.h中修改:

    #define CONFIG_SYS_FLASH_LEGACY_512Kx16
    #define CONFIG_SYS_FLASH_LEGACY_1Mx16

    重新编译,然后打开三个控制台,一个执行"sudo minicom",另一个执行"openocd -f interface/jlink.cfg -f board/mini2440.cfg",最后一个控制台执行下面内容:

    telnet localhost 4444
    reset
    init_2440
    load_image /home/host/soft/mini2440/u-boot-2014.04/u-boot.bin 0x33e80000 bin 
    resume 0x33e80000   

    得到下面的输出信息:

    U-Boot 2014.04-g35e1a7f-dirty (Jun 05 2014 - 10:41:41)
    
    U-Boot code: 33E80000 -> 33EF9FB4  BSS: -> 33F489D0
    CPUID: 32440001
    FCLK:      405 MHz
    HCLK:  101.250 MHz
    PCLK:   50.625 MHz
    monitor len: 000C89D0
    ramsize: 04000000
    TLB table from 33ff0000 to 33ff4000
    Top of RAM usable for U-Boot at: 33ff0000
    Reserving 802k for U-Boot at: 33f27000
    Reserving 4160k for malloc() at: 33b17000
    Reserving 32 Bytes for Board Info at: 33b16fe0
    Reserving 160 Bytes for Global Data at: 33b16f40
    New Stack Pointer is: 33b16f30
    RAM Configuration:
    Bank #0: 30000000 64 MiB
    addr=33f27000,_start=33e80000
    relocation Offset is: 000a7000
    WARNING: Caches not enabled
    monitor flash len: 000847BC
    dram_bank_mmu_setup: bank: 0
    Now running in RAM - U-Boot at: 33f27000
    Flash: fwc addr 00000000 cmd f0 00f0 16bit x 16 bit
    fwc addr 0000aaaa cmd aa 00aa 16bit x 16 bit
    fwc addr 00005554 cmd 55 0055 16bit x 16 bit
    fwc addr 0000aaaa cmd 90 0090 16bit x 16 bit
    fwc addr 00000000 cmd f0 00f0 16bit x 16 bit
    JEDEC PROBE: ID f0 ea00 0
    fwc addr 00000000 cmd ff 00ff 16bit x 16 bit
    fwc addr 00000000 cmd 90 0090 16bit x 16 bit
    fwc addr 00000000 cmd ff 00ff 16bit x 16 bit
    JEDEC PROBE: ID 90 ea00 0
    *** failed ***
    ### ERROR ### Please RESET the board ###
    
    
    U-Boot 2014.04-g35e1a7f-dirty (Jun 05 2014 - 10:44:42)
    
    U-Boot code: 33E80000 -> 33EF9FB4  BSS: -> 33F489D0
    CPUID: 32440001
    FCLK:      405 MHz
    HCLK:  101.250 MHz
    PCLK:   50.625 MHz
    monitor len: 000C89D0
    ramsize: 04000000
    TLB table from 33ff0000 to 33ff4000
    Top of RAM usable for U-Boot at: 33ff0000
    Reserving 802k for U-Boot at: 33f27000
    Reserving 4160k for malloc() at: 33b17000
    Reserving 32 Bytes for Board Info at: 33b16fe0
    Reserving 160 Bytes for Global Data at: 33b16f40
    New Stack Pointer is: 33b16f30
    RAM Configuration:
    Bank #0: 30000000 64 MiB
    addr=33f27000,_start=33e80000
    relocation Offset is: 000a7000
    WARNING: Caches not enabled
    monitor flash len: 000847BC
    Now running in RAM - U-Boot at: 33f27000
    Flash: fwc addr 00000000 cmd f0 00f0 16bit x 16 bit
    fwc addr 0000aaaa cmd aa 00aa 16bit x 16 bit
    fwc addr 00005554 cmd 55 0055 16bit x 16 bit
    fwc addr 0000aaaa cmd 90 0090 16bit x 16 bit
    fwc addr 00000000 cmd f0 00f0 16bit x 16 bit
    JEDEC PROBE: ID f0 ea00 0
    fwc addr 00000000 cmd ff 00ff 16bit x 16 bit
    fwc addr 00000000 cmd 90 0090 16bit x 16 bit
    fwc addr 00000000 cmd ff 00ff 16bit x 16 bit
    JEDEC PROBE: ID 90 ea00 0
    *** failed ***
    ### ERROR ### Please RESET the board ###
    
    
    U-Boot 2014.04-g35e1a7f-dirty (Jun 05 2014 - 10:55:37)
    
    U-Boot code: 33E80000 -> 33EF9ECC  BSS: -> 33F488D0
    CPUID: 32440001
    FCLK:      405 MHz
    HCLK:  101.250 MHz
    PCLK:   50.625 MHz
    monitor len: 000C88D0
    ramsize: 04000000
    TLB table from 33ff0000 to 33ff4000
    Top of RAM usable for U-Boot at: 33ff0000
    Reserving 802k for U-Boot at: 33f27000
    Reserving 4160k for malloc() at: 33b17000
    Reserving 32 Bytes for Board Info at: 33b16fe0
    Reserving 160 Bytes for Global Data at: 33b16f40
    New Stack Pointer is: 33b16f30
    RAM Configuration:
    Bank #0: 30000000 64 MiB
    addr=33f27000,_start=33e80000
    relocation Offset is: 000a7000
    WARNING: Caches not enabled
    monitor flash len: 000846BC
    Now running in RAM - U-Boot at: 33f27000
    Flash: fwc addr 00000000 cmd f0 00f0 16bit x 16 bit
    fwc addr 0000aaaa cmd aa 00aa 16bit x 16 bit
    fwc addr 00005554 cmd 55 0055 16bit x 16 bit
    fwc addr 0000aaaa cmd 90 0090 16bit x 16 bit
    fwc addr 00000000 cmd f0 00f0 16bit x 16 bit
    JEDEC PROBE: ID f0 ea00 0
    Found JEDEC Flash: SST39VF1601
    unlock address index 3
    unlock addresses are 0x5555/0x2aaa
    erase_region_count = 256 erase_region_size = 4096
    ERROR: too many flash sectors
    erase_region_count = 256 erase_region_size = 4096
    ERROR: too many flash sectors
    flash_protect ON: from 0x00000000 to 0x000846BB
    protect on 0
    protect on 1
    protect on 2
    protect on 3
    protect on 4
    protect on 5
    protect on 6
    protect on 7
    protect on 8
    protect on 9
    protect on 10
    protect on 11
    protect on 12
    protect on 13
    protect on 14
    protect on 15
    protect on 16
    protect on 17
    protect on 18
    flash_protect ON: from 0x00070000 to 0x0007FFFF
    protect on 18
    2 MiB
    NAND:  board_nand_init()
    end of nand_init
    hwcontrol(): 0xff 0x83
    hwcontrol(): 0xffffffff 0x81
    dev_ready
    hwcontrol(): 0x90 0x83
    hwcontrol(): 0x00 0x85
    hwcontrol(): 0xffffffff 0x81
    dev_ready
    hwcontrol(): 0x90 0x83
    hwcontrol(): 0x00 0x85
    hwcontrol(): 0xffffffff 0x81
    dev_ready
    hwcontrol(): 0xffffffff 0x80
    0 MiB
    *** Warning - bad CRC, using default environment
    
    Destroy Hash Table: 33f9c778 table = 00000000
    Create Hash Table: N=75
    INSERT: table 33f9c778, filled 1/79 rv 33b17238 ==> name="bootdelay" value="5"
    INSERT: table 33f9c778, filled 2/79 rv 33b170f8 ==> name="baudrate" value="115200"
    INSERT: table 33f9c778, filled 3/79 rv 33b170a8 ==> name="ipaddr" value="10.0.0.110"
    INSERT: table 33f9c778, filled 4/79 rv 33b17260 ==> name="serverip" value="10.0.0.1"
    INSERT: table 33f9c778, filled 5/79 rv 33b174f4 ==> name="netmask" value="255.255.255.0"
    INSERT: free(data = 33b17008)
    INSERT: done
    In:    serial
    Out:   serial
    Err:   serial
    Initial value for argc=3
    Final value for argc=3
    Initial value for argc=3
    Final value for argc=3
    Initial value for argc=3
    Final value for argc=3
    Net:   Initial value for argc=3
    Final value for argc=3
    CS8900-0
    ### main_loop entered: bootdelay=5
    
    ### main_loop: bootcmd="<UNDEFINED>"
    SMDK2410 # flinfo
    Bank # 1: SST39VF1601 flash (16 x 16)  Size: 2 MB in 19 Sectors
      AMD Legacy command set, Manufacturer ID: 0xF0, Device ID: 0xEA00
      Erase timeout: 30000 ms, write timeout: 100 ms

      Sector Start Addresses:
      00000000   RO   00001000   RO   00002000   RO   00003000   RO   00004000   RO
      00005000   RO   00006000   RO   00007000   RO   00008000   RO   00009000   RO
      0000A000   RO   0000B000   RO   0000C000   RO   0000D000   RO   0000E000   RO
      0000F000   RO   00010000   RO   00011000   RO   00012000   RO

    上面的修改方式是比较好的,改动相对来说比较小。

    另外一种方法是将mini2440开发板中u-boot的board/tekkman/mini244/flash.c拷贝到当前uboot的board/friendlyarm/mini2440下,

    然后在其下Makefile中添加flash.o,但是会有编译错误,提示函数reset_timer_masked未定义。这是因为二者的定时器的一些函数被删除了,

    需要对代码做些调整才行。

    另外一个方法是模仿m5253demo开发板(配置文件位于include/configs/M5253DEMO.h,开发板文件夹位于board/freescale/m5253demo下),

    将其下的flash.c(所用的nor flash是sst的6401,跟当前的1601差别就在于容量和ID号有些不同)拷贝过来做修改,如果感兴趣,可以自己移植看看。

  • 相关阅读:
    多个有序链表的合并
    链表学习
    机器人上楼梯
    字符驱动
    第一个内核模块hello world
    装饰模式(decorator)
    使用WebRTC搭建前端视频聊天室——数据通道篇
    使用WebRTC搭建前端视频聊天室——点对点通信篇
    使用WebRTC搭建前端视频聊天室——信令篇
    使用WebRTC搭建前端视频聊天室——入门篇
  • 原文地址:https://www.cnblogs.com/qiaoqiao2003/p/3768289.html
Copyright © 2020-2023  润新知