s3c2440_uboot移植(四)添加NorFlash

uboot的问题

在这里插入图片描述
在前面中,我们完成了Nand启动代码的编写。启动后会出现Flash 错误的问题,我们在Source insight 里面进行搜索:
在这里插入图片描述
在532行除,当检测不到Nor Flash 时uboot会被hang() 挂起,这是不应该的。同时,结合我们Nor Flash检测错误,可以确定一点的是flash_init() 函数肯定需要进行修改。
在这里插入图片描述
修改后我们重新烧入,替换掉Nand 启动的代码,发现可以正常启动uboot 了。

完成Nor Flash支持

由于我们的开发板上使用Nand 启动时,无法操作Nor Flash,因此后续的测试需要使用Nor 启动。

对flash_init 进行分析在这里插入图片描述

上面为flash_init 的大致执行流程图,flash_init() 会根据 CONFIG_SYS_MAX_FLASH_BANKS 中指定的Flash BANKS的个数,对每一个BANK 的Flash 进行初始化操作。

初始化通过flash_detect_legacy() 函数来完成,该函数根据mode 的类型对Flash 进行初始化,一种是使用Intel 类型的操作,另一种是使用Amd 类型的操作,具体区别在于AMD 芯片有内存保护操作,而Intel 的没有。

获取了设备相关信息后,就要进行jedec_flash_match()将ID 信息同我们内核中指定的相关信息进行匹配,若匹配成功则说明是可以识别的Nor Flash 芯片,返回1;若失败则返回0。

修改jdec_table

根据上面对flash_init 的分析,再结合我们最终识别不出我们的Nor Flash 芯片,我们大致可以猜测问题可能出现在jedec_flash_match()函数处,我们进入该函数,进行详细的分析。其源码如下:在这里插入图片描述
jedec_table
上面是jedec_table的定义,从中可以看出内核只定义了CONFIG_SYS_FLASH_LEGACY_512Kx8CONFIG_SYS_FLASH_LEGACY_512Kx16两种,下面的CONFIG_SYS_FLASH_LEGACY_1Mx16是我新添加的,根据MX29LV160D芯片数据手册编写的。

  • MX29LV160DB/MX29LV160DT:都是我添加的新定义,分别对应数据手册中指定的设备号。

  • CONFIG_SYS_FLASH_LEGACY_1Mx16:定义在s3c2440.h配置文件中。

  • NumEraseRegions:指明的是Nor Flash内块的情况,这里的4表示有4种类型的块。

    在Sector Structure第一点,就说明了有4种类型的块,分别是容量为16KB一块,8KB两块,32KB一块以及31块64KB的块。

  • regions:指定的是这些块的排列方式,例如DT结尾的芯片,就按下面这种方式排列
    在这里插入图片描述
    从低地址开始,先排64KB、然后是32KB、8KB、16KB,因此我们的region就按照这个规则来指定。

编译烧写

修改完成后,我们重新编译,然后烧写到Nor Flash中。在此之前,我还修改了CONFIG_SYS_PROMPT,这样uboot 的命令行开头就以BinWatson #的形式显示出来。
在这里插入图片描述
烧入后的运行结果:
在这里插入图片描述
至此,我们的uboot已经可以识别Nor Flash了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值