视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mini2440下载裸机程序
2025-09-29 22:39:32 责编:小OO
文档
在网上收集的几种给mini2440开发板下载裸机程序的方法。

1、MDK+JLINK

2、LINUX+JLINK

3、LINUX+supervivi+dnw

4、Uboot下载 

MDK+JLINK

1、实现1+2+3------+100 

 

AREA test02,CODE,READONLY

 start

  MOV R0,#0

  MOV R1,#1

  MOV R2,#1

 LOOP

  ADD R2,R2,R0

  ADD R1,R1,#1

  CMP R1,#101

  BEQ label

  ADD R2,R2,R1

  B LOOP

 label

  NOP

  NOP

  NOP

  END

 

2、汇编LED测试

 

/************************************

 

*注意修改段名为testLED(两处修改)

 

*在MDK中,要添加簇文件RuninRAM.sct

 

*在MDK中,要添加初始化文件Ext_RAM.ini

 

**************************************/

 

 AREA testLED,CODE,READWRITE

  ENTRY

 

rGPBCON  EQU  0x56000010

 rGPBDAT  EQU  0x56000014

 rGPBUP  EQU  0x56000018

 start

  ldr r0, =rGPBCON

  ldr r1, [r0]

  bic r1,r1,#(0xff<<10) 

  orr r1,r1,#0x01

  orr r1,r1,#(0x55<<10)

  str r1,[r0]

 

 ldr r0, =rGPBUP

  mov r1, #0xff

  str r1,[r0]

 

LED_LOOP

  ldr r0, =rGPBDAT

  mov r1, #0xE0

  str r1, [r0]

  

  mov r2, #0x120000

 delay1

  sub r2, r2, #1

  cmp r2, #0

  bne delay1

 

 ldr r0, =rGPBDAT

  mov r1, #0x00

  str r0, [r0]

 

 mov r2, #0x120000

 delay2

  sub r2, r2, #1

  cmp r2,#0

  bne delay2

 

 b LED_LOOP

 end

 

3、C语言LED测试

 

/*******************************************************

 

*在MDK中需要修改段名(RESET)

 

*在MDK中S3C2440A.S初始化文件已存在

 

*在MDK中需要添加簇文件RuninRAM.sct

 

******************************************************/

 #define rGPBCON  (*(volatile unsigned *)0x56000010)

 #define rGPBDAT  (*(volatile unsigned *)0x56000014)

 #define rGPBUP  (*(volatile unsigned *)0x56000018)

 

void msdelay(int time)

 {

  volatile unsigned int i,j;

  for(i=0;i<2000;i++)

  for(j=0;j }

 

void GPIO_init()

 {

  rGPBCON &= ~((3<<10)|(3<<12)|(3<<14)|(3<<16));

    rGPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);

  //rGPBCON = 0x15400;//0001 0101 0100 0000  0000

  rGPBUP = 0xff;

 

}

 

void ledtestC()

 {

  volatile unsigned int i;

  while(1)

  {

  for(i=0;i<4;i++)

  {

    rGPBDAT = 0x000;

    rGPBDAT |=(1<<(5+i));

    msdelay(500);

 

  rGPBDAT &=~(1<<(5+i));

    msdelay(500);

  }

  }

 }

 int main(int argc, char **argv)

 {

  GPIO_init();

  ledtestC();

  return 0;

 }

LINUX+JLINK

一、编写源代码

 

源代码:

 

/*******************************led_off.S**************************/

 

.text

 .global _start

 _start:

            LDR    R0,=0x56000010

            MOV    R1,#0x00015400

            STR    R1,[R0]

 

            LDR    R0,=0x56000014

            MOV    R1,#0x0df

            STR    R1,[R0]

 

MAIN_LOOP:

            B      MAIN_LOOP

 

/*******************************Makefile****************************/

 

*指定链接文件地址

 

*指定链接文件顺序

 

*********************************************************************/

 

 

 

led_off.bin : led_off.S

        arm-linux-gcc -g -c -o led_off.o led_off.S

        arm-linux-ld -Ttext 0x0000000 -g led_off.o -o led_off_elf

        arm-linux-objcopy -O binary -S led_off_elf led_off.bin

 clean:

        rm -f  led_off.bin led_off_elf *.o

 

/*******************************************************************/

 

二、使用Jlink下载led_off.bin到nand flash(参考烧写Uboot方法)

 

5.1 打开 J-Link Commander,输入-r

 5.2 speed 12000

 5.3  J-Link Commonder 输入loadbin f:\\init.bin 0

 5.4  setpc 0

 5.5  g

 5.5  h

 5.6  J-Link Commonder 输入loadbin f:.bin_openjtag 0x33f80000

 5.7  setpc 0x33f80000

 5.8  g

 5.9  h

 5.10 J-Link Commonder 输入loadbin f:.bin  0x30000000

 ******************************************************************************************

 J-Link Commonder 输入loadbin f:\\led_off.bin  0x30000000,即可以烧写汇编程序

 ******************************************************************************************

 5.11 g

 5.12 h

 5.13 在secretcat 中输入nand scrub

 5.14 y

 5.15 在secretcat 中输入nand erase 0 0x40000

 5.16 在secretcat 中输入nand write.jffs2 30000000 0 0x40000

 5.17 重新启动进入nand flash

 

三、开发板重启即可。

LINUX+SUPERVIVI+DNW

@******************************************************************************

 @ File:init.S

 @ 功能:通过它转入C程序

 @******************************************************************************      

 

.text

 .global _start

 _start:

            ldr    r0, =0x53000000    @ WATCHDOG寄存器地址

            mov    r1, #0x0                    

            str    r1, [r0]            @ 写入0,禁止WATCHDOG,否则CPU会不断重启

            

            ldr    sp, =1024*4      @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K

                                              @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K

            bl      main                @ 调用C程序中的main函数

 halt_loop:

            b      halt_loop

 

/***********************************

 

*功能:链接文件TestledC.lds

 

*************************************/

 SECTIONS {

  . = 0x00;

    .text          :  { *(.text) }

  .rodata ALIGN(4) : {*(.rodata)} 

  .data ALIGN(4) : { *(.data) }

    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }

 }

 SECTIONS {

  . = 0x00;

    .text          :  { *(.text) }

  .rodata ALIGN(4) : {*(.rodata)} 

  .data ALIGN(4) : { *(.data) }

    .bss ALIGN(4)  : { *(.bss)  *(COMMON) }

 }

 

/**************************************

 

*编写testledC.c源程序

 

*************************************/

 

/*************************************************

 * File: testledC.c

 * funtion:stream light 

* author:zhaochuang

 * data: 2013.5.8

 * vision 1.0

 **************************************************/

 #define rGPBCON  (*(volatile unsigned *)0x56000010)

 #define rGPBDAT  (*(volatile unsigned *)0x56000014)

 #define rGPBUP  (*(volatile unsigned *)0x56000018)

 

void msdelay(int time)

 {

  volatile unsigned int i,j;

  for(i=0;i<2000;i++)

  for(j=0;j }

 

void GPIO_init()

 {

  rGPBCON &= ~((3<<10)|(3<<12)|(3<<14)|(3<<16));

    rGPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);

  //rGPBCON = 0x15400;//0001 0101 0100 0000 0000

  rGPBUP = 0xff;

 

}

 

void ledtestC()

 {

  volatile unsigned int i;

  while(1)

  {

  for(i=0;i<4;i++)

  {

    rGPBDAT = 0x000;

    rGPBDAT |=(1<<(5+i));

    msdelay(5);

 

  rGPBDAT &=~(1<<(5+i));

    msdelay(5);

  }

  }

 }

 int main(int argc, char **argv)

 {

  GPIO_init();

  ledtestC();

  return 0;

 }

 /*************************************************/

 /*********************************************************************************************

 * File: int_test.c

 * Author: Hanson 

* 嵌入式家园  www.embedclub.com

 * 上海嵌入式家园-开发板商城  http://embedclub.taobao.com

 * Desc: LED test using c code

 * History: May 16th 2011

 *  

 *********************************************************************************************/

 

/*------------------------------------------------------------------------------------------*/

 /*                                    include files                                    */

 /*------------------------------------------------------------------------------------------

 

#define rGPBCON    (*(volatile unsigned *)0x56000010) //Port B control

 #define rGPBDAT    (*(volatile unsigned *)0x56000014) //Port B data

 #define rGPBUP    (*(volatile unsigned *)0x56000018) //Pull-up control B

 

#define U32 unsigned long

 

#define LED1_ON  ~(1<<5)

 #define LED2_ON  ~(1<<6)

 #define LED3_ON  ~(1<<7)

 #define LED4_ON  ~(1<<8)

 

#define LED1_OFF  (1<<5)

 #define LED2_OFF  (1<<6)

 #define LED3_OFF  (1<<7)

 #define LED4_OFF  (1<<8)

 

void dely(U32 tt)

 {

    U32 i;

    for(;tt>0;tt--)

    {

      for(i=0;i<10000;i++){}

    }

 }

int main()

 {

 

 rGPBCON &= ~((3<<10)|(3<<12)|(3<<14)|(3<<16));

    rGPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);

 

 rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);

 

 while (1)

  { 

  rGPBDAT = rGPBDAT&(LED1_ON);

  dely(100);

  rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);

  dely(100);

  rGPBDAT = rGPBDAT&(LED2_ON);

  dely(100);

  rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);

  dely(100);

  rGPBDAT = rGPBDAT&(LED3_ON);

  dely(100);

  rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);

  dely(100);

  rGPBDAT = rGPBDAT&(LED4_ON);

  dely(100);

  rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF);

  dely(100);

  }    

}

 ***********************************************************************/

 /*********************************************************************************

 

*Makefile编写规则

 

***********************************************************************************/

 

CFLAGS  := -Wall -O2 

testledC.bin : init.S testledC.c 

 arm-linux-gcc $(CFLAGS) -c -o init.o init.S

  arm-linux-gcc $(CFLAGS) -c -o testledC.o testledC.c

  arm-linux-ld -TtestledC.lds  init.o testledC.o -o testledC_elf

  arm-linux-objcopy -O binary -S testledC_elf testledC.bin

  arm-linux-objdump -D -m arm  testledC_elf > testledC.dis

 clean:

  rm -f  testledC.bin testledC_elf testledC.dis *.o

二、使用在lunux下make,生成可执行文件testled.bin

 

 

 

三、下载testledC.bin到开发板中

 

1、使用supervivi 下载,打到NOR命令行,-v

 

2、使用DNW下载二进制testledC.bin文件到开发板中

 

3、拨到Nand flash 下,重启开发板即可

U-BOOT下载

6.1 进入Uboot命令行

 

6.2 使用tftp下载.bin文件

 

6.2.1 设置开发板

 

printenv

 

setenv ipaddr192.168.1.100    // 开发板IP

 

setenv serverip192.168.1.101  //Windows IP

 

setenv gatewayip192.168.1.1    // 网关

 

saveenv

 

6.2.2 把uImage放到tftpboot目录下,自动加载

 

烧写XX.bin到nand Flash

 

将XX.bin拷贝至/tftpboot/

 

在SecureCRT中依次输入:

 

SMDK2440A>tftp 0x30000000 XX.bin

 

SMDK2440A>nand erase0x0000 0x40000

 

SMDK2440A>nand write0x30000000 0x00000 0x400000

 

  6.3 重启开发板

U-Boot源代码下载地址 http://www.linuxidc.com/Linux/2011-07/387.htm下载本文

显示全文
专题