datasheet

OK6410启动分析

2018-10-11来源: eefocus 关键字:OK6410  启动分析

当在S3C6410跑操作系统的时候,我们不太会注意S3C6410的内存使用情况,但是,当我们做裸板测试时,该处理器的8K的片内内存的使用就不得不注意,一旦编写的程序大小超过了片内内存的大小,我们就不能得到正确的结果,究其原因,我们先看一下S3C6410的启动过程。

本文引用地址:http://www.eepw.com.cn/article/203124.htm

  S3C6410如果选用NANDflash启动,在我们烧写裸板程序是,先将程序烧写至NANDflash中,S3C6410通过硬件将NANDflash中前8K的程序完整复制到S3C6410片内内存中。若裸板程序较小,程序可以正常运行,若果程序超过了8K,那么裸板测试程序不能完整的复制到片内内存,使得程序出现未知的结果。这时,我们需要关注S3C6410的各种内存的使用情况了。

  我们知道,在一个程序文件中,拥有代码段、数据段和bss段,而一个程序的bin文件中是没有bss段,因此,在程序的bin文件中主要完成:

  ①硬件的初始化
  ②DDR的初始化
  ③S3C6410程序的重定位
  ④拷贝程序至DDR中
  ⑤清除DDR中bss段
  ⑥程序链接至DDR中

  为进一步说明启动过程,现在进行详细的说明:

  S3C6410为NANDflash启动,同时S3C6410外挂DDR,这样,就能解决程序超过8K之后的正常运行。三者之间的连接示意图如下图所示:

  我们知道,S3C6410启动的时候,将NANDflash中前8K的程序完整拷贝至S3C6410片内内存中,在这8K程序中,必须完成硬件初始化、DDR初始化和程序从NANDflash中拷贝到DDR中,这样才能保证S3C6410cpu程序可以跳转到DDR,保证程序的顺利进行。在这过程中会涉及到程序的链接地址和程序的重定位方面的知识,如果你对这方面知识不熟悉,请查阅该方面的知识。

  三者之间的操作步骤如下:

  1、系统上电,S3C6410为NANDflash启动,硬件自动将NANDflash中前8k的程序复制到S3C6410片内内存中;

  2、系统从S3C6410片内内存0地址开始执行,此时程序需要完成DDR初始化、将bin程序从S3C6410片内内存或者NANDflash拷贝到DDR链接地址起始位置;

  3、将NANDflash程序拷贝到DDR中,通过程序重定位和链接到DDR链接地址开始位置(此时注意,在程序的编写中需要用位置无关跳转指令进行编写,否则程序会因为跳转后找不到链接起始地址和变量而出现错误)

  4、当系统完成以上操作后,通过位置相关指令将PC值链接到DDR重定位位置,完成程序的运行(注意此时应使用位置相关指令完成PC值的跳转,若使用位置无关指令,则程序一直循环在S3C6410片内内存中)。


注意:

s3c6410启动时自动拷贝nand flash前4页的内容到片内内存执行,而且拷贝时只拷每页中的前2KByte好像是为了兼容2k页的 所有copy2ddr函数中不要把所有数据全部照搬过去,只搬每页的前2k到ddr连接起来 。可以参考“百问网6410第1期Nand flash的问题”修改nand_read函数!


关键字:OK6410  启动分析

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/2018/ic-news101141673.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:OK6410裸机片内内存中重定位代码
下一篇:OK6410裸机学习之串口实验

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

OK6410开发板uboot烧写

uboot的移植完成以后,满以为很快能烧写到板子上并安装linux,结果uboot烧写了三天才终于成功,这其中碰到了不少的问题,在此做个总结。首先,飞凌的OK6410开发板并不支持JLink烧写uboot,只能通过SD卡来烧写,这一点我事先并不知道,他们网店介绍里并未说明,而且销售人员也没有做出任何提示,结果我花了整整一天时间尝试所有通过JLink烧写uboot的可能方法,结合网上个别人反映,最终意识到通过JLink完成uboot烧写是不可能成功的了,后来在销售人员那里确认了这一点,对飞凌表示不满。当时买板的时候没有买SD卡,因为感觉没什么用,就想给老板省点钱,现在没SD卡不行了,但在寻找JLink烧写uboot方法的过程中我发现
发表于 2018-10-12

OK6410裸机汇编:1th_led

;   rm *.o led.elf led.bin led.dis=====================================================================下载测试,下载方法可以参考“烧写OK6410裸板方法汇总”章节介绍:    用SecureCRT下载led.bin:    tftp 0x50008000 led.bin    go 0x50008000即可看到程序运行效果。
发表于 2018-10-12

OK6410裸机学习第二天:2th_leds

start.S文件:.globl _start_start:1、硬件相关的设置:把外设的基地址告诉CPU 0 ~ 0x6fff ffff为内存的地址空间,0x7000 0000 ~ 0x7fff ffff为外设寄存器的地址空间       ldr r0, =0x70000000    orr r0, r0, #0x13    mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-
发表于 2018-10-12

OK6410裸机学习第三天:3th_leds_c

start.S文件:.globl _start_start:1、硬件相关的设置:把外设的基地址告诉CPU 0 ~ 0x6fff ffff为内存的地址空间,0x7000 0000 ~ 0x7fff ffff为外设寄存器的地址空间    //Peri port setup     ldr r0, =0x70000000    orr r0, r0, #0x13    mcr p15,0,r0,c15,c2,4     &
发表于 2018-10-12

OK6410裸机学习第四天:4th_leds_params

start.S文件:.globl _start_start:1、硬件相关的设置:把外设的基地址告诉CPU  0 ~ 0x6fff ffff为内存的地址空间,0x7000 0000 ~ 0x7fff ffff为外设寄存器的地址空间       ldr r0, =0x70000000    orr r0, r0, #0x13    mcr p15,0,r0,c15,c2,4       @ 256M(0x700
发表于 2018-10-12

OK6410光盘里的uboot不能用TFTP下载文件?

无论用ping命令还是tftp命令,都显示CS8900 Ethernet chip not found?!看了uboot1.1.6/include/configs/smdk6410.h,里面确实是配置为网卡使用CS8900,什么时候发布个配置为DM9000的uboot源码啊?或者发个补丁也行此问题已解决 方法很简单,给用飞凌S3C6410的朋友一个参考。  a.用\u-boot-1.1.6-TQ6410\drivers\目录下的dm9000x.c和dm9000x.h替换OK6410的u-boot里的同名文件  b.用\u-boot-1.1.6-TQ6410\include\configs\tq6410.h里配置网卡的几行代码替换
发表于 2018-10-12

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved
pt type="text/javascript" src="//v3.jiathis.com/code/jia.js?uid=2113614" charset="utf-8">