移植u-boot-2015.10到JZ2440开发板(二)——支持norflash

  串口打印出信息后,发现打印出Flash: 0 Bytes,很明显没有识别出norflash,因此在代码中搜索“Flash: ”,定位到initr_flash(),一路跟踪下去,flash_init(),

flash_detect_legacy()中有以下一段代码:

    flash_read_jedec_ids(info);
    debug("JEDEC PROBE: ID %x %x %x\n",
        info->manufacturer_id,
        info->device_id,
        info->device_id2);
    if (jedec_flash_match(info, info->start[0]))
            break;    

flash_read_jedec_ids函数读出厂商ID,设备ID等,debug能打印出来,因此我们要想看看ID读得对不对,就在smdk2410.h中定义DEBUG宏,让它打印出来。

改完编译烧写,发现读出的厂商ID和设备ID是正确的。因此,再看 jedec_flash_match函数,它将读出的ID和jedec_table对比,看是否存在这一项,表格里面并没有我们的norflash类型,于是我们仿照其他项自己添加上去,如下所示:

  {
        .mfr_id     = (u16)MX_MANUFACT,
        .dev_id     = 0x2249,
        .name       = "MX29LV160D",
        .uaddr      = {
            [1] = MTD_UADDR_0x0555_0x02AA /* x16 */
         },
        .DevSize    = SIZE_2MiB,
        .CmdSet     = CFI_CMDSET_AMD_LEGACY,
        .NumEraseRegions= 4,
        .regions    = {
            ERASEINFO(0x10000, 31),
            ERASEINFO(0x08000, 1),
            ERASEINFO(0x02000, 2),
            ERASEINFO(0x04000, 1),
        }
    },    

编译烧写,提示错误too many flash sectors,在代码中搜索,发现CONFIG_SYS_MAX_FLASH_SECT这个宏定义为19,而我们的norflash扇区数为35,大于19,于是把这个宏改为64,重新编译烧写,正确识别出了norflash为2M。我们来测试下norflash能否正确读写,cp.b 0 30000000 80;cmp.b 0 30000000 80 ,用上面两条命令发现读norflash没有问题。再用以下几条命令测试写norflash:mw.b 30000000 12 3;  protect off all; erase 0 ffff; cp.b 30000000 0 3; md.b 0 3;发现也是121212;因此写norflash成功,u-boot已经支持norflash。

时间: 2024-10-12 14:52:58

移植u-boot-2015.10到JZ2440开发板(二)——支持norflash的相关文章

移植u-boot-2015.10到JZ2440开发板(五)——设置nand分区,环境变量保存地址和其它默认参数

在下载内核或文件系统时,我们可以直接在命令中写明烧到nandflash的具体地址,但较麻烦,我们可以给nandflash分区,这样就可直接写烧到那个分区就行了,较为方便.如何设置呢?首先我们在uboot中输入mtdparts命令,看看默认的分区,结果提示mtdids not defined, no default present.搜索"mtdids not defined",定位到common/cmd_mtdparts.c的mtdparts_init函数中,分析发现是mtdids_de

Linux学习 :移植U-boot_2016.09到JZ2440开发板

一.下载源码:ftp://ftp.denx.de/pub/u-boot/ 二.初始化编译: ①make smdk2410_defconfig #首先使用默认配置,减少后续的配置工作 ②make menuconfig      #根据自身需求进一步配置 ③修改Makefile ,开头只能架构和编译器: ARCH=arm CROSS_COMPILE=arm-linux-      ④修改uboot代码:    1. 设置PLL的时钟的函数在_main中的board_init_f中初始化函数列表中的 

基于JZ2440开发板编写bootloader总结(一)

凡走过必留下痕迹,学点什么都会有用的. 本系列博文总结了自己在学习嵌入式Linux编程过程中的收获,若有错误,恳请指正,谢谢! --参考教材韦东山系列教材 bootloader 是一个用于启动linux内核的C程序,为了达到最终启动内核的目的需要完成以下几个步骤: step1:硬件相关初始化,为启动内核准备硬件平台: step2:将内核从NAND FLASH读取到SDRAM: step3:设置需要传递给内核的启动参数: step4:跳转到SDRAM,运行内核: 下面将详细讲述各个步骤细节: 第一

JZ2440开发板

2014年12月14日 刚拿到JZ2440开发板,视频第0课第一节: (1) 要给开发板烧系统,就要用到JTAG,(JTAG一般是与电脑的并口相连的),但是现在电脑都没有并口,所以出现了:OpenJTAG和J-Link.我用的是J-Link. 视频上讲的 offlash 程序,用于烧写系统,但是它只适用于 并口的JTAG 和 OpenJTAG ,不可以用于J-Link. 如果是 J-Link ,则只能使用J-Link烧写 Nor Flash .可以向Nor Flash中烧写 u-boot.bin

JZ2440开发板Uboot烧写

最近买了一块韦东山的JZ2440开发板,在学习的过程中,发现根据书上提供的Jflash烧写Uboot总是失败,最后定位问题原因: 1.文件路径名称含有中文字符 2.在Options->Program Settings->flash中选择正确的flash芯片 两项选择都正确后,即可正确烧写Uboot.

Jz2440开发板熟悉

title: Jz2440开发板熟悉 tags: ARM date: 2018-10-14 15:05:56 --- 概述 外部晶振为12M Nand Flash 256M,Nor Flash 2M,SDRAM 32*2=64M 分区 内容 Nand flash地址分配 bootloader分区 Uboot分区 0---256k 环境变量分区 环境变量(参数) 256k---256k+128k kernel 分区 Linux内核 256k+128k-256k+128k+2M Rootfs分区 根

2015业界良心迷你开发板大盘点

2015年,迷你电脑主机大走低价路线.以往动辄上百美金的开发板,在过去一年集体大幅度跳水,售价低至10美元左右,创客圈直呼业界良心.那么2015年究竟有哪些“业界良心”开发板上市了呢? 1. Raspberry Pi Zero 5美元 作为开源硬件的代表作品,Raspberry开启了迷你Linux电脑的先河.35美元的Raspberry Pi 成为了一代创客们心中对于创客文化最早的记忆.为了让编程开发变得更简单更亲民,在2015年11月份,英国树莓派基金会正式对外推出了迷你版的树莓派Zero.

JZ2440开发板之GPIO实验,遇到的链接语句的问题

自己写的 crt0.s , led.c , Makefile 文件,下到开发板上后始终无法运行,但是将led.c文件拷贝到光盘提供的对应程序中编译,结果可以运行.推测是 crt0.s 或者 Makefile的问题. 通过比对crt0.s发现没有问题.应该是Makefile的问题. 发现自己写的Makefile中的链接语句是: 1 arm-linux-ld -Ttext 0x00000000 -g led.o crt0.o -o led_elf 光盘中对应的语句是: 1 arm-linux-ld

JZ2440开发板之LCD

LCD的几个重要的引脚: (1)LED+\LED- 这两个引脚是由升压芯片来提供的,需要将GPB0置为高电平,才能使升压芯片工作,进而点亮屏幕 (2)水平方向和竖直方向的同步信号,时钟信号 垂直方向的 VSPW\VBPD\VFPD\LINEVAL 的单位都是行(说明屏幕的实际扫描范围比屏幕本身大). 水平方向的 HSPW\HBPD\HFPD\HOZVAL 的单位是像素 VDEN 表示像素的开始 (3)如何写LCD程序 1.打开LED背光 2.设置各个时序 3.将图片保存在buffer中,数据保存