疯雨-版权所有,转载请注明【http://blog.csdn.net/u010346967】
欢迎加入朱老师物联网大课堂qq群 一起学习进步
群号:397164505
点led之前必须懂得s5pv210IROM启动流程,不清楚的请看我的另一篇文章 s5pv210 IROM启动流程详解
怎么点灯呢?先得打开x210v3底板原理图x210bv3.pdf,搜索led,看到我们开发板有四个led,分别连接到GPJ0_3 、GPJ0_4 、GPJ0_5和 PWMTOUT1
接下来就是操作GPIO口了,查看datasheet,搜索GPJ0CON,找到如下内容,下图led0瞎写的,别管他实际上GPJ0口控制3个led
要点亮led,分两步:第一,配置GPxxCON寄存器为输出模式;第二,配置GPxxDAT寄存器相应位为低电平(有的是高电平,看原理图)。
根据上面的分析配置GPJ0CON[4]为0001、GPJ0CON[5]为0001、GPJ0CON[6]为0001.也就是设置GPJ0CON为0x111000
下面灭掉2盏led试试,配置GPJ0DAT[3]为1,GPJ0DAT[4]为0,GPJ0DAT[5]为1。也就是设置GPJ0DAT为0x28
好,现在开始写代码,那么一开始从哪下手呢?熟悉uboot的朋友一定知道是从start.S文件开始分析,那么不熟悉的朋友怎么找一开始下手的文件呢?源头就是u-boot.lds,这个链接脚本规定了文件的排放顺序,还有程序的入口点。不扯太远了,直接看start.S文件。
root@crazyrain:/home/share/uboot/u-boot-2012.10# vim arch/arm/cpu/armv7/start.S
</pre><pre name="code" class="plain">
因为前部分代码都是跟armv7体系结构有关的代码,猜想并不需要修改。直接在文件末尾添加如下led测试代码:
/* --->for FengYu */ /*led test*/ .globl led_test led_test: ldr r1,=0xe0200240 /*设置GPJ0CON为0x111000 */ ldr r2,=0x111000 str r2,[r1] ldr r1,=0xe0200244 /*设置GPJ0DAT为0x28 */ ldr r2,=0x28 str r2,[r1] mov pc, lr /* <---for FengYu */
然后在文件的下列位置调用:
/* --->for FengYu */ bl led_test /* <---for FengYu */ /* the mask ROM code should have PLL and others stable */ #ifndef CONFIG_SKIP_LOWLEVEL_INIT bl cpu_init_cp15 bl cpu_init_crit #endif
<pre name="code" class="plain">
</pre><pre name="code" class="plain">
</pre><p>保存退出vim,make一下,得到u-boot.bin文件,我们要的就是它,还一些其他文件u-boot u-boot.map 暂时不管 </p><h1></h1><h1>3.给程序加校验头</h1><p>接下来就是给u-boot.bin文件加校验头,别人已经编写好了加头程序。可以去网上下载,下面的程序(mkv210_image.c)是我从老朱那里弄过来的共享给大家。</p><pre name="code" class="cpp">
{CSDN:CODE:692081}
接下编译mkv210_image.c得到可执行文件mkv210.然后给文件添加可执行权限
root@crazyrain:/home/share/uboot/u-boot-2012.10# gcc mkv210_image.c -o mkv210
root@crazyrain:/home/share/uboot/u-boot-2012.10# chmod a+x mkv210
root@crazyrain:/home/share/uboot/u-boot-2012.10# ./mkv210 u-boot.bin u-boot_16k.bin
u-boot_16k.bin 就是我们需要的BL1
怎么烧?烧到SD卡哪里?首先,烧写可以用linux提供的dd命令。经过前面的分析知道要烧到SD卡的第一个扇区。还一个要注意的就是SD卡要插到卡槽2(这个九鼎官方手册上有说明).好了,插好sd卡,拨码开关打到SD卡启动。
还得先查看SD卡挂载在哪里? 用命令:fdisk -l
root@crazyrain:/home/share/uboot/u-boot-2012.10# fdisk -l
看到 Disk /dev/sdb: 7948 MB, 7948206080 bytes 可以知道挂载点在/dev/sdb
root@crazyrain:/home/share/uboot/u-boot-2012.10# dd if=u-boot_16k.bin of=/dev/sdb seek=1
弹出下列信息表示烧写成功:
记录了32+0 的读入
记录了32+0 的写出
16384字节(16 kB)已复制,0.0137991 秒,1.2 MB/秒
拔出SD卡,插入开发板SD2卡槽,长按POWER键,可以看到有两盏led是灭的。
呵呵! 说明程序没问题,我们下篇论文再见。。。。。