创客神器NanoPi
直播中

DXK123~

9年用户 85经验值
擅长:嵌入式技术 控制/MCU
私信 关注
[资料]

【NanoPi M2试用体验】+SD卡启动BL1拷贝BL2到DDR2中运行

裸机程序SD卡启动BL1拷贝BL2DDR2中运行;
代码的拷贝会用到一些指针函数,第一个参数为SD卡存放BL2的开始BLOCK,第二个参数为BL2大小有几个BLOCK,第三个参数为BL2拷贝到的目的地址,第四个参数为外部晶振大小,irom会根据其将EPLL设为25MHz,第三个参数设为0
MMC Copy Function Address Exermal source clock parameter is used to fit EPLL source at 25MHZ*This function copy MMC(MoviNAND/iNand)Card Date to memory*Always use EPLL source clock*This function work at 25MHZ*@param u32 StartBlkAddress:source card (MoviNAND/iNand MMC)Address.(It must block address)*@param        u16 blockSize:Number of blocks to copy*@param u32*memoryptr:Buffer to copy from*@param u32extClockspeed:External clock speed(per HZ)*@param bool with_init:determined card initialization*@Return bool(u8)-success or failure #define copyMovitoMen (a,b,c,d,e)(bool(*)(u32,u16,u32*,u32,bool))
(*(u32*)0x40004008)(a,b,c,d,e)


BL1  copy
#include "types.h"
typedef u32(*copy_sd_mmc_to_mem)(u32 startBlkAdress,u16 blockSize,u32*memoryPtr,u32 extClockSpeed,u32 init);
void copy_sd(u32 start_block,u16 block_size,u32 addr)
{
  copy_sd_mmc_to_mem copy_b12=(copy_sd_mmc_to_mem)(*(u32*)(0x40004008));
        copy_b12(start_block,block_size,(u32*)addr,1200000,0);
}
BL1  main:
#include "uart.h"
int main ()
{
  puts("n##### s3s2451 Running in bl1 #####");
        copy_sd(8,2,0x30000000);
        return 0;
}
BL1  start.S:
.global _start                                /* 声明一个全局的标号 */
_start:
        bl uart_init                /* 串口初始化 */
        bl ddr_init                /* DDR初始化 */
        bl main                                /* 跳转到C函数去执行 */
        ldr sp, =0x34000000        /* 重新设在栈为DDR内存的最高地址 */
        ldr pc, =0x30000000         /* 跳转到bl2的起始地址执行 */
halt:
        b halt
BL1   Makefile
OBJ =b11
$(OBJ).bin:start.o,uart.o,add.o,copy.o,main.o;
   ARM-linux-ld-Text-0,binary$(OBJ).elf $@;
         arm-linux-objdump-D $(OBJ).elf>$(OBJ).dis;
%.o:%.c
  arm-linux-gcc-c$<-o$@-fno-builtin;
%.o:%.s
         arm-linux-gcc-c$<-o$@ ;
clean:
  rm*.o*.elf*.bin*.dis
BL2   Makefile:
b12.bin:start.o led.o
  arm-linux-ld -text 0x3000000 -o led.elf$@;
        arm-linux-objcopy-o binary led.elf $@        ;
        arm-linux-objdump-D led.elf>led.dis        ;

led.o:main.c
   arm-linux-gcc -c $<-o $@                 ;
start.o:start.S
   arm-linux-gcc -c $<-o $@                ;
clean:
    rm*.o*.elf*.bin*.dis                ;

  • 图片1.png
  • 图片2.png
  • 图片3.png
  • 图片6.png
  • 图片5.png

回帖(5)

DXK123~

2016-6-11 17:38:59
这个不小心发错了,怎么删除呀
举报

Elecfans管家

2016-6-12 10:10:22
引用: DXK123~ 发表于 2016-6-11 17:38
这个不小心发错了,怎么删除呀

发错?你的帖子有什么问题?
举报

DXK123~

2016-6-12 22:17:25
引用: Elecfans管家 发表于 2016-6-12 10:10
发错?你的帖子有什么问题?

就是没有换行,再也没有什么
举报

李杰

2016-6-20 06:53:53
谢谢分享,好东西一起来分享!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分