S3C2416裸机开发系列八_MDK启动代码工程应用实例

发布者:HeavenlyWhisper最新更新时间:2016-12-12 来源: eefocus关键字:S3C2416  裸机开发  MDK  启动代码 手机看文章 扫描二维码
随时随地手机看文章

笔者前面章节简单介绍了s3c2416启动代码的实现过程,启动代码就是用来处理cpu体系结构中一些底层内容,一个功能强大的启动代码是可以当作bootloader(如uboot)来用的。有了启动代码,用户就可以专注于用c来作其它的功能函数开发了,现今的c编译器效率都很高,很智能,不会逐句翻译用户的c代码,而是总体把握编译。用c开发项目对于代码移植,提高效率都是很有必要的,笔者此处就加入启动代码到c工程,用c开发的过程作一个简单的介绍。

1. 启动代码工程架构

与启动代码相关的代码文件放在System目录文件夹中。目录架构如下:

s3c2416.s,启动代码文件,代码执行时的入口,用来初始化系统到一个必要的c环境中,最后进入c函数入口main执行c代码。

LowLevelInit.s,板级初始化代码,包括DDR2控制器的初始化,代码搬移到RAM的实现(sd卡启动,Nand启动),由s3c2416.s调用。

Nand.h/Nand.c,Nand flash驱动实现,包括Nand启动时,代码从Nand搬移到RAM的接口函数实现。

MMU.h/MMU.c,MMU映射,把异常向量表从0x0处映射到用户代码的首地址,其余地址空间1:1映射,内存区开启I/D-Cache。

Exception.h/Exception.c,异常处理(包括中断),各个异常的处理代码,IRQ实现统一管理各个外设中断,支持中断嵌套。

s3c2416.h,三星给出的s3c2416寄存器头文件。

s3c2416.sct,MDK链接文件。

笔者所用的DDR2型号为K4T51163QJ-BCE79(DDR2@400M5-5-5),64MB,行地址线13,列地址线为10,16位线宽。不同的板载DDR2,可能要修改LowLevelInit.s中DDR2的线宽时序配置,BANKCFG & BANKCON1, 2。所用的Nand flash为K9F2G08U0B,一页有(2048+64)Byte,一个block有64页,容量大小为(256M+8M)Byte,是一款8位宽的SLC flash。Nand flash不一致,需Nand启动的,则需要修改Nand.c驱动中的这些信息。其余代码文件对于s3c2416/50/51都是通用的。

2. c开发工程搭建

首先,启动代码工程是针对MDK的,对于其它编译器可以参考修改。

2.1. 新建MDK工程,不要加入启动代码,加入System目录下启动代码相关文件s3c2416.s,LowLevelInit.s,Exception.c,MMU.c,Nand.c,如图2-1。

图2-1 加入启动代码文件

2.2. 在MDK开发环境,Apps组加入或编写应用的c代码即可,需要有main函数。

2.3. 在Linker下取消点取Use Memory Layout from Target Dialog,在Scatter File中点浏览加入System目录下s3c2416.sct链接文件 (图2-2)。

图2-2 加入链接文件

2.4. 在工程属性->Use->RunUser Programs After Build/Rebuild栏中加入bin生成命令fromelf --bin ".\@L.axf" --output ".\@L.bin",在编译完成后即可在工程目录生成bin,这是我们用来烧录进SD卡或nand等存储器的二进制代码文件。

图2-3 加入生成二进制可执行代码bin命令

2.5. 加入头文件搜索路径,编译后会在工程目录下生成一个二进制可执行文件StartCode.bin。

3. 代码烧写

代码可以存储在Nand或sd/mmc中,不借助昂贵的烧写工具,代码烧写进Nand,只能先通过sd卡启动,sd卡代码中包含Nand写的函数实现,即可把代码从sd卡读出再烧写进Nand。Sd卡启动需要二个工具,SdBoot.exe和IROM_Fusing_Tool.exe。SdBoot工具是笔者专为Samsung arm9 S3C2450/S3C2451/S3C2416和arm11 S3C6410从sd卡启动开发的。编译器编译的二进制代码格式是不满足sd卡启动要求的,SdBoot能够转换编译器生成的bin文件,使之转换成符合sd卡启动的二进制代码格式,转换后会在原bin目录生成一个文件名多_1的bin文件。IROM_Fusing_Tool.exe为三星开发的工具,用来把二进制文件烧写进sd卡特定位置,以支持sd卡启动。通过SdBoot工具转换后的二进制代码,再通过ROM_Fusing_Tool.exe烧写进sd卡,即可从sd卡启动,运行代码。

3.1. 打开SdBoot.exe,点击浏览,打开由编译器生成的可执行二进制代码bin。

 

3.2. 确保选中“制作SD卡启动文件”,点击“生成”,如果成功,将在原bin目录下生成一个文件名比原bin多_1的文件。这个转换后的bin文件即能符合sd卡启动的格式要求。


 

3.3. 如果没有点选“制作SD卡启动文件”,可以生成一个任意大小的文件(对文件扩充),该功能只为有需要的人使用(可生成特定大小的文件进行测试等)。

3.4. 通过IROM_Fusing_Tool.exe把转换后的代码烧写进sd卡,设置板从sd卡启动。请匆对生成的sd卡启动bin再重复转换,因为工具无法识别二制进代码是否已转换,重复转换将破坏原有的格式。

3.5. 代码烧写进Nand,C工程代码中调用WriteCodeToNand()函数即可把代码从内存中烧写进Nand,以后设置从Nand启动即可。本章测试c代码main.c中实现在开机时按住下载键,即可调用WriteCodeToNand()函数把代码固化进Nand。

4. 附录

至此,启动代码功能己完整,启动代码工程为用户设置系统时钟,初始化内存,自动识别启动设备并搬移代码到RAM,MMU映射,中断管理等,用户只需专注于用c开发其它功能函数即可。System目录下为启动代码相关的源码,需要理解后才能进一步修改,任何bug或疑问,欢迎联系笔者。

StartCode.rar,启动代码MDK测试工程,在System目录下包含启动代码的所有源码,Apps为c功能实现目录,main.c有代码固化进Nand的实例。

http://pan.baidu.com/s/1sj981Ql


关键字:S3C2416  裸机开发  MDK  启动代码 引用地址:S3C2416裸机开发系列八_MDK启动代码工程应用实例

上一篇:S3C2416裸机开发系列十_串口打印调试
下一篇:S3C2416裸机开发系列七_异常处理

推荐阅读最新更新时间:2024-03-16 15:24

使用Keil MDK运行第一个STM32程序
1.1.1 使用Keil MDK运行第一个STM32F10X程序 在上一小节中已经详细介绍了使用Keil MDK和标准外设库创建一个工程的过程,下面将介绍基于这个工程来编写一个小程序,通过这个程序我们可以初步了解: l STM32标准外设库的简单使用过程 l STM32外设的使用方法和大致流程 l 程序的编译、链接、下载步骤 l 利用Keil MDK的在线仿真功能进行软件仿真的简要步骤 1. 程序的编写 (1)程序实现的功能 为了方便各位读者的入门和理解,这个小程序的功能非常简单,作为本书功能实践的第一个程序,其功能当然也是最为经典的“Hello World!”了,只不过不是简单的屏幕输出,而是利用硬件的串口进行输出,同时作为单片
[单片机]
使用Keil <font color='red'>MDK</font>运行第一个STM32程序
MDK中STM32使用Printf函数详细解析
在用MDK调试STM32板子串口时,为了方便串口调试,调用了printf()函数,用Keil仿真是,串口不能正确的输出,软件仿真时,总是卡在那 里。有点纳闷,然后调用USART_SendData()函数,发现串口可以接收到正确的数据,证明串口配置没有问题,问题应该是出在printf()函 数上,参照ST公司的printf例子也不能在串口输出数据。由此可知应该是软件配置的原因。后面,百度,再AVR论坛上找到了答案。 如果使用的是MDK,请在工程属性的“Target“-》”Code Generation“中勾选”Use MicroLIB“ 进行如上设置后编译一下,串口输出正确的数据。 #ifndef __UART_INTERFAC
[单片机]
keil MDK的信号函数
keil的信号函数用于模拟和测试串行IO,模拟IO,端口通讯等重复发生的外部事件。 信号函数以关键字signal开头。在函数中必须调用twatch用于延时,不然keil会陷入死循环。twatch函数的参数表示要延时的CPU执行周期,比如twatch(1000000)表示一个信号函数延时1000000个CPU周期。 信号函数受到如下约束: 函数的返回值类型必须为void。 函数最多只能有8个参数。 信号函数可以调用其他重定义函数和用户函数。 信号函数之间不能相互调用。 信号函数可以被用户函数调用。 信号函数必须调用twatch至少一次。如果信号函数从不调用twatch,则目标程序将得不到时间执行。而且由于不能使用Ct
[单片机]
keil <font color='red'>MDK</font>的信号函数
stm32f4启动代码分析(一)
因为使用的开发板是stm32f407discovery,所以启动代码为st公司的官方库文件里的startup_stm32f40_41xxx.s,至于如何去找官方库文件,不在本节讨论的范围内,本节只是初步的分析startup_stm32f40_41xxx.s,其中更深入的东西需要在以后的章节中分析。 在startup_stm32f40_41xxx.s中,有一段注释: ;* File Name : startup_stm32f40_41xxx.s ;* Author : MCD Application Team ;* @version : V1.7.0 ;* @date : 22-April-2016 ;* Description
[单片机]
STM32——MDK4与MDK5中对于数据类型的不同
首先我们来看MD4中的对于数据类型的定义: 然后我们跳转到其定义处查看对其的定义: typedef unsigned long u32; typedef unsigned short u16; typedef unsigned char u8; /*首先我们来认识typedef,这是用来为复杂的声明定义简单的别名,也就是说,我们可以用它来给我们的数据类型来进行定义。*/ /* 然后我们再来看之后的unsigned,unsigned用于限定后面的为无符号类型,如果后面不加什么的话,就默认为unsigned int。*/ /*unsigned long 无符号长数据 unsigned char 无符号字符型 u
[单片机]
ARM启动代码中的断言伪指令ASSERT
ASSERT :DEF:ENDIAN_CHANGE ASSERT :DEF:ENDIAN_CHANGE ;DCD 0x070000ea ] | b ResetHandler ] 1、ASSERT :DEF:ENDIAN_CHANGE ASSERT 是断言伪指令,语法是:ASSERT +逻辑表达式 def 是逻辑伪操作符,格式为: :DEF:label,作用是:判断label是否定义过 //*****************补充,如果label未定义,编译器在编译的时候会报错。 2、四句蓝色的指令能且只能执行一句,并且前三句若执行跳转后处理程序的最后一句也是 b ResetHandler 3、 相当于endi
[单片机]
U-boot 在 mini2440-S3C2440 上的移植(3)-第一阶段:探索启动代码
1.本文以mini2440开发板为例: u-boot属于两阶段的Bootloader,第一阶段文件为CPU/arm920t/start.S和board/mini2440/lowlevel_init.S,前者是平台相关的,后者是开发板相关的; U-boot第一阶段代码: 1.硬件设备初始化 该部分完成:将CPU的工作模式设置为管理模式;关闭WATCHDOG; 设置FCLK;HCLK;PCLK的比例,关闭MMU;CACHE 参考代码:cpu/arm920t/start.S 2.为加载Bootloader的第二阶段代码准备RAM空间;所谓准备RAM空间,就是初始化内存芯片,参考代码start.S中调用的lowlevel_init.S函数
[单片机]
SylixOS的BSP开发实例之S3C2416 【第五篇】S3C2416 启动模式之 NandFlash
S3C2416 支持 NandFlash 和 MMC (两者都属于 iROM 模式),启动方式的选择取决于 OM ,启动模式配置如下图。 iROM 启动时内存映射方式如下图。 NandFlash 启动时的引脚配置如下图。 NandFlash 启动时的页面大小配置参数如下图。 NandFlash 启动时的特性如下图。为了能正常的从 NandFlash 启动请注意下图红色框图内的内容。 NandFlash 控制器特性如下图。 Tiny2416 的 NandFlash 控制器接口原理图如下。其中引脚配置在下图左上角框图内有说明。 总结:S3C2416 的 NandFlash 启动需要 8Bit 硬件 ECC
[单片机]
SylixOS的BSP<font color='red'>开发</font>实例之<font color='red'>S3C2416</font> 【第五篇】<font color='red'>S3C2416</font> <font color='red'>启动</font>模式之 NandFlash
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved