当前位置:首页 > 单片机 > 单片机
[导读]笔者前面章节简单介绍了s3c2416启动代码的实现过程,启动代码就是用来处理cpu体系结构中一些底层内容,一个功能强大的启动代码是可以当作bootloader(如uboot)来用的。有了启动代码,用户就可以专注于用c来作其它的功

笔者前面章节简单介绍了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%20加入链接文件

2.4.%20在工程属性->Use->RunUser%20Programs%20After%20Build/Rebuild栏中加入bin生成命令fromelf%20--bin%20".@L.axf"%20--output%20".@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


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

特朗普集团近日取消了其新推出的T1智能手机“将在美国制造”的宣传标语,此举源于外界对这款手机能否以当前定价在美国本土生产的质疑。

关键字: 特朗普 苹果 AI

美国总统特朗普在公开场合表示,他已要求苹果公司CEO蒂姆·库克停止在印度建厂,矛头直指该公司生产多元化的计划。

关键字: 特朗普 苹果 AI

4月10日消息,据媒体报道,美国总统特朗普宣布,美国对部分贸易伙伴暂停90天执行新关税政策,同时对中国的关税提高到125%,该消息公布后苹果股价飙升了15%。这次反弹使苹果市值增加了4000多亿美元,目前苹果市值接近3万...

关键字: 特朗普 AI 人工智能 特斯拉

3月25日消息,据报道,当地时间3月20日,美国总统特朗普在社交媒体平台“真实社交”上发文写道:“那些被抓到破坏特斯拉的人,将有很大可能被判入狱长达20年,这包括资助(破坏特斯拉汽车)者,我们正在寻找你。”

关键字: 特朗普 AI 人工智能 特斯拉

1月22日消息,刚刚,新任美国总统特朗普放出重磅消息,将全力支持美国AI发展。

关键字: 特朗普 AI 人工智能

特朗普先生有两件事一定会载入史册,一个是筑墙,一个是挖坑。在美墨边境筑墙的口号确保边境安全,降低因非法移民引起的犯罪率过高问题;在中美科技产业之间挖坑的口号也是安全,美国企业不得使用对美国国家安全构成威胁的电信设备,总统...

关键字: 特朗普 孤立主义 科技产业

据路透社1月17日消息显示,知情人士透露,特朗普已通知英特尔、铠侠在内的几家华为供应商,将要撤销其对华为的出货的部分许可证,同时将拒绝其他数十个向华为供货的申请。据透露,共有4家公司的8份许可被撤销。另外,相关公司收到撤...

关键字: 华为 芯片 特朗普

曾在2018年时被美国总统特朗普称作“世界第八奇迹”的富士康集团在美国威斯康星州投资建设的LCD显示屏工厂项目,如今却因为富士康将项目大幅缩水并拒绝签订新的合同而陷入了僵局。这也导致富士康无法从当地政府那里获得约40亿美...

关键字: 特朗普 富士康

今年5月,因自己发布的推文被贴上“无确凿依据”标签而与推特发生激烈争执后,美国总统特朗普签署了一项行政令,下令要求重审《通信规范法》第230条。

关键字: 谷歌 facebook 特朗普

众所周知,寄往白宫的所有邮件在到达白宫之前都会在他地进行分类和筛选。9月19日,根据美国相关执法官员的通报,本周早些时候,执法人员截获了一个寄给特朗普总统的包裹,该包裹内包含蓖麻毒蛋白。

关键字: 美国 白宫 特朗普
关闭