加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

移植at91sam9260从norflash启动

发布时间:2020-12-15 18:05:59 所属栏目:百科 来源:网络整理
导读:先贴一下u-boo1的下载地址:ftp://ftp.denx.de/pub/u-boot/ at91的补丁地址:ftp://www.at91.com/pub/uboot/ ATMEL官方的AT91 BootStrap 不支持NorFlash,可以到这里下载at91sam的BootStrap:ftp://www.at91.com/ 如果需要支持NorFlash就要自己动手了 在 Boot

先贴一下u-boo1的下载地址:ftp://ftp.denx.de/pub/u-boot/

at91的补丁地址:ftp://www.at91.com/pub/uboot/


ATMEL官方的AT91BootStrap不支持NorFlash,可以到这里下载at91sam的BootStrap:ftp://www.at91.com/



如果需要支持NorFlash就要自己动手了

在 Bootstrap-v1.15/board/at91sam9260ek 目录添加 norflash文件夹,

在该目录下面添加 at91sam9260ek.h 文件, 文件内容:

/* ----------------------------------------------------------------------------
* ATMEL Microcontroller Software Support - ROUSSET -
* ----------------------------------------------------------------------------
* Copyright (c) 2006,Atmel Corporation


* All rights reserved.
*
* Redistribution and use in source and binary forms,with or without
* modification,are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,* this list of conditions and the disclaimer below.
*
* - Redistributions in binary form must reproduce the above copyright notice,* this list of conditions and the disclaimer below in the documentation and/or
* other materials provided with the distribution.
*
* Atmel's name may not be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
* IMPLIED WARRANTIES,INCLUDING,BUT NOT LIMITED TO,THE IMPLIED WARRANTIES OF
* MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,INDIRECT,* INCIDENTAL,SPECIAL,EXEMPLARY,OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT
* LIMITED TO,PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA,* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY,WHETHER IN CONTRACT,STRICT LIABILITY,OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ----------------------------------------------------------------------------
* File Name : at91sam9260ek.h
* Object :
* Creation : NLe Sep 28th 2006
*-----------------------------------------------------------------------------
*/
#ifndef _AT91SAM9260EK_H
#define _AT91SAM9260EK_H


/* ******************************************************************* */
/* PMC Settings */
/* */
/* The main oscillator is enabled as soon as possible in the c_startup */
/* and MCK is switched on the main oscillator. */
/* PLL initialization is done later in the hw_init() function */
/* ******************************************************************* */
#define MASTER_CLOCK (198656000/2)
#define PLL_LOCK_TIMEOUT 1000000


#define PLLA_SETTINGS 0x2060BF09
#define PLLB_SETTINGS 0x10483F0E


/* Switch MCK on PLLA output PCK = PLLA = 2 * MCK */
#define MCKR_SETTINGS (AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK | AT91C_PMC_MDIV_2)
#define MCKR_CSS_SETTINGS (AT91C_PMC_CSS_PLLA_CLK | MCKR_SETTINGS)


/* ******************************************************************* */
/* BootStrap Settings */
/* */
/* ******************************************************************* */
#define IMG_ADDRESS 0x10004000 /* Image Address in NorFlash */
#define IMG_SIZE 0x30000 /* Image Size in NorFlash */


#define MACH_TYPE 0x44B /* AT91SAM9260-EK */
#define JUMP_ADDR 0x23F00000 /* Final Jump Address */


/* ******************************************************************* */
/* Application Settings */
/* ******************************************************************* */
#define CFG_DEBUG


#define CFG_SDRAM
#define CFG_HW_INIT


#undef CFG_DATAFLASH
#undef CFG_NANDFLASH


#ifndef CFG_NORFLASH
#define CFG_NORFLASH
#endif


#endif /* _AT91SAM9260EK_H */


添加Makefile文件


# TODO: set this appropriately for your local toolchain
ifndef ERASE_FCT
ERASE_FCT=rm -f
endif
ifndef CROSS_COMPILE
CROSS_COMPILE=arm-elf-
endif


TOOLCHAIN=gcc


BOOTSTRAP_PATH=../../..


# NorFlashBoot Configuration for AT91SAM9260EK


# Target name (case sensitive!!!)
TARGET=AT91SAM9260
# Board name (case sensitive!!!)
BOARD=at91sam9260ek
# Link Address and Top_of_Memory
LINK_ADDR=0x200000
TOP_OF_MEMORY=0x301000
# Name of current directory
PROJECT=norflash


ifndef BOOT_NAME
BOOT_NAME=$(PROJECT)_$(BOARD)
endif


INCL=./$(BOOTSTRAP_PATH)/board/$(BOARD)/$(PROJECT)


ifeq ($(TOOLCHAIN),gcc)


AS=$(CROSS_COMPILE)gcc
CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)gcc
NM= $(CROSS_COMPILE)nm
SIZE=$(CROSS_COMPILE)size
OBJCOPY=$(CROSS_COMPILE)objcopy
OBJDUMP=$(CROSS_COMPILE)objdump
CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL)
ASFLAGS=-g -mcpu=arm926ej-s -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY)


# Linker flags.
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS+=-nostartfiles -nostdlib -Wl,-Map=$(BOOT_NAME).map,--cref
LDFLAGS+=-T $(BOOTSTRAP_PATH)/elf32-littlearm.lds -Ttext $(LINK_ADDR)
OBJS=crt0_gnu.o


endif


OBJS+=/
$(BOARD).o /
main.o /
gpio.o /
pmc.o /
debug.o /
sdramc.o /
norflash.o /
_udivsi3.o /
_umodsi3.o /
div0.o /
udiv.o /
string.o


rebuild: clean all


all: $(BOOT_NAME)


ifeq ($(TOOLCHAIN),gcc)
$(BOOT_NAME): $(OBJS)
$(LD) $(LDFLAGS) -n -o $(BOOT_NAME).elf $(OBJS)
$(OBJCOPY) --strip-debug --strip-unneeded $(BOOT_NAME).elf -O binary $(BOOT_NAME).bin
endif


$(BOARD).o: $(BOOTSTRAP_PATH)/board/$(BOARD)/$(BOARD).c
$(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/board/$(BOARD)/$(BOARD).c -o $(BOARD).o


main.o: $(BOOTSTRAP_PATH)/main.c
$(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/main.c -o main.o


gpio.o: $(BOOTSTRAP_PATH)/driver/gpio.c
$(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/driver/gpio.c -o gpio.o


pmc.o: $(BOOTSTRAP_PATH)/driver/pmc.c
$(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/driver/pmc.c -o pmc.o


debug.o: $(BOOTSTRAP_PATH)/driver/debug.c
$(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/driver/debug.c -o debug.o


sdramc.o: $(BOOTSTRAP_PATH)/driver/sdramc.c
$(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/driver/sdramc.c -o sdramc.o


norflash.o: $(BOOTSTRAP_PATH)/driver/norflash.c
$(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/driver/norflash.c -o norflash.o


crt0_gnu.o: $(BOOTSTRAP_PATH)/crt0_gnu.S
$(AS) $(ASFLAGS) $(BOOTSTRAP_PATH)/crt0_gnu.S -o crt0_gnu.o


div0.o: $(BOOTSTRAP_PATH)/lib/div0.c
$(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/lib/div0.c -o div0.o


string.o: $(BOOTSTRAP_PATH)/lib/string.c
$(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/lib/string.c -o string.o


udiv.o: $(BOOTSTRAP_PATH)/lib/udiv.c
$(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/lib/udiv.c -o udiv.o


_udivsi3.o: $(BOOTSTRAP_PATH)/lib/_udivsi3.S
$(AS) $(ASFLAGS) $(BOOTSTRAP_PATH)/lib/_udivsi3.S -o _udivsi3.o


_umodsi3.o: $(BOOTSTRAP_PATH)/lib/_umodsi3.S
$(AS) $(ASFLAGS) $(BOOTSTRAP_PATH)/lib/_umodsi3.S -o _umodsi3.o


clean:
$(ERASE_FCT) *.o *.bin *.elf *.map




修改 Bootstrap-v1.15/board/at91sam9260ek/at91sam9260ek.c 文件,添加:
#ifdef CFG_NORFLASH
#include "../../include/norflash.h"
#endif


#ifdef CFG_NORFLASH
void norflash_hw_init(void)
{
/* Configure CS0 */
writel(AT91C_FLASH_NWE_SETUP | /
AT91C_FLASH_NCS_WR_SETUP | /
AT91C_FLASH_NRD_SETUP | /
AT91C_FLASH_NCS_RD_SETUP,AT91C_BASE_SMC + SMC_SETUP0);
writel(AT91C_FLASH_NWE_PULSE | /
AT91C_FLASH_NCS_WR_PULSE | /
AT91C_FLASH_NRD_PULSE | /
AT91C_FLASH_NCS_RD_PULSE,AT91C_BASE_SMC + SMC_PULSE0);
writel(AT91C_FLASH_NWE_CYCLE | /
AT91C_FLASH_NRD_CYCLE,AT91C_BASE_SMC + SMC_CYCLE0);
writel(AT91C_SMC_READMODE | /
AT91C_SMC_WRITEMODE | /
AT91C_SMC_NWAITM_NWAIT_DISABLE | /
AT91C_SMC_BAT_BYTE_WRITE | /
AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS | /
(AT91C_SMC_TDF & (1 << 16)),AT91C_BASE_SMC + SMC_CTRL0);
}
#endif

在 Bootstrap-v1.15/board/at91sam9260ek/norflash 目录执行 make命令,就会在norflash下生成

我们需要的 norflash_at91sam9260ek.bin 文件。

或者可以到这里直接下载别人做好的来用:http://bbs.ednchina.com/BLOG_ARTICLE_227846.HTM


配置参数

1、修改u-boot的加载地址

修改at91sam9260ek.h文件中的两个宏:

/* ******************************************************************* */
/* BootStrap Settings */
/* */
/* ******************************************************************* */
#define IMG_ADDRESS 0x10004000 /* Image Address in NorFlash */
#define IMG_SIZE 0x30000 /* Image Size in NorFlash */
2、配置debug信息显示与否

/* ******************************************************************* */
/* Application Settings */
/* ******************************************************************* */
#define CFG_DEBUG

另外注意:

makefile文件中,CROSS_COMPILE=arm-elf-(表示选择winarm编译器),修改成自己的交叉编译工具。

关于bin文件的烧录可以参考:http://www.doc88.com/p-985621303040.html

其他更多内容,请参考嵌入式系列文章。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读