历史上的今天
今天是:2024年10月11日(星期五)
2018年10月11日 | OK6410启动分析
2018-10-11 来源:eefocus
当在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裸机学习之串口实验
史海拾趣
|
KF750按键的蓝光是多个圈圈层叠,触摸的时候有“涟漪”的效果。今天有个客户想在一个产品上把原来的普通按键做成这个效果,触摸的好处理,但这个发光的材料好像是EL片。坛子里有知道的朋友吗?多谢! … 查看全部问答> |
|
我是一名初学8051者 最近看过很多关于8051的原理书 对单片机的基本原理略懂一二 想动手做些实验 一方面想加强自己对汇编指令或者说编程的熟悉程度 另一方面想对单片机有更彻底的了解 会些基本的应用 不知道怎么去选择购买板 ...… 查看全部问答> |
|
3M电磁吸波材料电磁屏蔽导电材料解决方案 上海常祥实业有限公司作为3M顶级合作伙伴,全面代理3M电磁屏蔽电磁吸波兼容胶带EMC/EMI/RFI胶带,上海常祥公司可以提供性价比最高的3M电磁屏蔽电磁兼容胶带EMC/EMI/RFI胶带产 ...… 查看全部问答> |
|
各位学习RT-THREAD的前辈,大家好。本人初学RT-THREAD操作系统,刚刚调试了LED灯程序。我发现一个比较初级的问题,我想提出来,请大家帮我指点一下。 我 ...… 查看全部问答> |
|
我想学习STM32F103VE + cortex-M3 + ucos-II 不知道现在有什么开发板,资料比较全的,学的人比较多的,功能比较强大的。 求高手推荐个! 谢谢。… 查看全部问答> |
|
方波脉冲计数,用INT1计数,T0定时器每1s处理一次方波数目,计算出频率,并通过串口将数目发送出去。 问题:LED1闪亮,并且串口调试助手接收到(06 0B 00 00 01 00 09),说明响应了T0中断,但是LED0没有亮,根据接收到的数据(06 0B 00 00 01 00 ...… 查看全部问答> |




