ITOP4412裸机编程-点亮LED灯

本文介绍了使用SD卡启动的ITOP4412裸机编程,通过修改start.S、s3c4412_gpio.h、Makefile和myboot.lds来控制LED灯。讲解了启动原理,包括IROM、BL1和BL2的加载过程,并提供了两种烧录SD卡的方法。最后,描述了实际操作中LED的点亮现象。
摘要由CSDN通过智能技术生成

参考博文
ITOP4412裸机开发—LED
tiny4412裸机程序之点灯

前言:

       这是我的第一篇博客,不足之处还请批评指正,涉及侵权问题请与我联系,转载注明出处即可。
       本文介绍用SD卡启动的裸机编程,学会这个裸机编程,移植uboot之类的也不再话下了,由于Exynos4412这个芯片有两种封装方式pop和scp,这两个芯片对应着不同的BL1,盲目烧写错的BL1可能实现不了目标,详细实现功能请向下翻阅,博主的板子是迅为的精英板4412 pop1G封装。
博主的板子

启动原理:

overview
       图片是迅为提供的uboot文档中截的,从图中看开发板在上电时会经过以上三个步骤,就是图中的圆圈中的123了,第一步,开发板上电会去执行IROM,这个IROM会由OM的控制决定从哪个介质开始引导加载程序。
编码方式
       如图由五位二进制编码决定,详细不再讲,我们这里讲SD卡启动,就将开发板的拨码开关拨到SD卡启动。第二步,程序会从SD卡中加载第一段代码BL1到IRAM中;第三步,OS系统会被加载到DRAM中,至此引导结束。
       但是这个地方有个问题,第一步和第二步都对,但是第三步,BL1会从SD卡中的第18个扇区开始读取16K代码到internal SRAM中并跳转到这段代码的起始位置。如下图第一个:IRAM结构

       加载的这个BL2实际上是uboot的前16K,uboot后面的大部分代码会被BL2加载到DRAM中,然后跳转到DRAM中uboot开始的位置开始执行,我们这里讲裸机程序,实际上就是把BL2替换成裸机程序,但是这个裸机程序必须小于14K,为什么要小于14K呢?如下图BL2的结构:
BL2
       如图BL2的结构实际上是BL2的程序+4Byte的校验和+256Byte的签名+补全0=16K,因为BL1加载BL2到IRAM后要验证校验和是否正确,所以我们写好的裸机程序最终还要加上4字节的校验和后等于14K,官方提供的uboot中有制作校验和的源码,后面会介绍。

源码:

       新建文件夹及文件

mkdir leds
cd leds
touch start.S s3c4412_gpio.h myboot.lds Makefile mkbl2.c

       修改start.S

       这个汇编代码0x1002330c是PS_HOLD_CONTROL寄存器,保证电源管理芯片正常工作,0x11000c08是GPX0组控制上下拉的寄存器,有个ONO(GPX0_2)在控制电源管理。

#include "s3c4412_gpio.h"
.global _start

.word 0x2000
.word 0x0
.word 0x0
.word 0x0

_start:
   ldr	r10,=0x1002330c
   ldr	r11,[r10]
   orr	r11,r11,#0x300
   str	r11,[r10]

   ldr	r10,=0x11000c08
   ldr	r11,=0x0
   str	r11,[r10]

   ldr	r10,=GPL2CON
   mov	r11,#(0x01<<0)
   str	r11,[r10]

   ldr	r10,=GPK1CON
   mov	r11,#(0x01<<4)
   str	r11,[r10]

1:
   ldr	r10,=GPK1DAT
   mov	r11,#0x02
   str	r11,[r10]

   ldr	r10,=GPL2DAT
   mov	r11,#0x01
   str	r11,[r10]

   b	1b

       修改s3c4412_gpio.h

#ifndef S3C4412_GPIO_H
#define S3C4412_GPIO_H

#define GPX1CON (0x11000000+0x0c20)
#define GPX1DAT (0x11000000+0x0c24)
#define GPX1PUD (0x11000000+0x0c28)
#define GPX1DRV (0x11000000+0x0c2c)

#define GPK1CON (0x11000000+0x0060)
#define GPK1DAT (0x11000000+0x0064)
#
  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值