移植at91sam9260从norflash启动

淩亂°似流年 2022-01-28 00:09 370阅读 0赞

先贴一下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 文件, 文件内容:

  1. /* ----------------------------------------------------------------------------
  2. * ATMEL Microcontroller Software Support - ROUSSET -
  3. * ----------------------------------------------------------------------------
  4. * Copyright (c) 2006, Atmel Corporation
  5. * All rights reserved.
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions are met:
  9. *
  10. * - Redistributions of source code must retain the above copyright notice,
  11. * this list of conditions and the disclaimer below.
  12. *
  13. * - Redistributions in binary form must reproduce the above copyright notice,
  14. * this list of conditions and the disclaimer below in the documentation and/or
  15. * other materials provided with the distribution.
  16. *
  17. * Atmel's name may not be used to endorse or promote products derived from
  18. * this software without specific prior written permission.
  19. *
  20. * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
  21. * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  22. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
  23. * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
  24. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  25. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  26. * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  27. * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  28. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  29. * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30. * ----------------------------------------------------------------------------
  31. * File Name : at91sam9260ek.h
  32. * Object :
  33. * Creation : NLe Sep 28th 2006
  34. *-----------------------------------------------------------------------------
  35. */
  36. #ifndef _AT91SAM9260EK_H
  37. #define _AT91SAM9260EK_H
  38. /* ******************************************************************* */
  39. /* PMC Settings */
  40. /* */
  41. /* The main oscillator is enabled as soon as possible in the c_startup */
  42. /* and MCK is switched on the main oscillator. */
  43. /* PLL initialization is done later in the hw_init() function */
  44. /* ******************************************************************* */
  45. #define MASTER_CLOCK (198656000/2)
  46. #define PLL_LOCK_TIMEOUT 1000000
  47. #define PLLA_SETTINGS 0x2060BF09
  48. #define PLLB_SETTINGS 0x10483F0E
  49. /* Switch MCK on PLLA output PCK = PLLA = 2 * MCK */
  50. #define MCKR_SETTINGS (AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK | AT91C_PMC_MDIV_2)
  51. #define MCKR_CSS_SETTINGS (AT91C_PMC_CSS_PLLA_CLK | MCKR_SETTINGS)
  52. /* ******************************************************************* */
  53. /* BootStrap Settings */
  54. /* */
  55. /* ******************************************************************* */
  56. #define IMG_ADDRESS 0x10004000 /* Image Address in NorFlash */
  57. #define IMG_SIZE 0x30000 /* Image Size in NorFlash */
  58. #define MACH_TYPE 0x44B /* AT91SAM9260-EK */
  59. #define JUMP_ADDR 0x23F00000 /* Final Jump Address */
  60. /* ******************************************************************* */
  61. /* Application Settings */
  62. /* ******************************************************************* */
  63. #define CFG_DEBUG
  64. #define CFG_SDRAM
  65. #define CFG_HW_INIT
  66. #undef CFG_DATAFLASH
  67. #undef CFG_NANDFLASH
  68. #ifndef CFG_NORFLASH
  69. #define CFG_NORFLASH
  70. #endif
  71. #endif /* _AT91SAM9260EK_H */
  72. 添加Makefile文件
  73. # TODO: set this appropriately for your local toolchain
  74. ifndef ERASE_FCT
  75. ERASE_FCT=rm -f
  76. endif
  77. ifndef CROSS_COMPILE
  78. CROSS_COMPILE=arm-elf-
  79. endif
  80. TOOLCHAIN=gcc
  81. BOOTSTRAP_PATH=../../..
  82. # NorFlashBoot Configuration for AT91SAM9260EK
  83. # Target name (case sensitive!!!)
  84. TARGET=AT91SAM9260
  85. # Board name (case sensitive!!!)
  86. BOARD=at91sam9260ek
  87. # Link Address and Top_of_Memory
  88. LINK_ADDR=0x200000
  89. TOP_OF_MEMORY=0x301000
  90. # Name of current directory
  91. PROJECT=norflash
  92. ifndef BOOT_NAME
  93. BOOT_NAME=$(PROJECT)_$(BOARD)
  94. endif
  95. INCL=./$(BOOTSTRAP_PATH)/board/$(BOARD)/$(PROJECT)
  96. ifeq ($(TOOLCHAIN), gcc)
  97. AS=$(CROSS_COMPILE)gcc
  98. CC=$(CROSS_COMPILE)gcc
  99. LD=$(CROSS_COMPILE)gcc
  100. NM= $(CROSS_COMPILE)nm
  101. SIZE=$(CROSS_COMPILE)size
  102. OBJCOPY=$(CROSS_COMPILE)objcopy
  103. OBJDUMP=$(CROSS_COMPILE)objdump
  104. CCFLAGS=-g -mcpu=arm926ej-s -Os -Wall -D$(TARGET) -I$(INCL)
  105. ASFLAGS=-g -mcpu=arm926ej-s -c -Os -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY)
  106. # Linker flags.
  107. # -Wl,...: tell GCC to pass this to linker.
  108. # -Map: create map file
  109. # --cref: add cross reference to map file
  110. LDFLAGS+=-nostartfiles -nostdlib -Wl,-Map=$(BOOT_NAME).map,--cref
  111. LDFLAGS+=-T $(BOOTSTRAP_PATH)/elf32-littlearm.lds -Ttext $(LINK_ADDR)
  112. OBJS=crt0_gnu.o
  113. endif
  114. OBJS+=/
  115. $(BOARD).o /
  116. main.o /
  117. gpio.o /
  118. pmc.o /
  119. debug.o /
  120. sdramc.o /
  121. norflash.o /
  122. _udivsi3.o /
  123. _umodsi3.o /
  124. div0.o /
  125. udiv.o /
  126. string.o
  127. rebuild: clean all
  128. all: $(BOOT_NAME)
  129. ifeq ($(TOOLCHAIN), gcc)
  130. $(BOOT_NAME): $(OBJS)
  131. $(LD) $(LDFLAGS) -n -o $(BOOT_NAME).elf $(OBJS)
  132. $(OBJCOPY) --strip-debug --strip-unneeded $(BOOT_NAME).elf -O binary $(BOOT_NAME).bin
  133. endif
  134. $(BOARD).o: $(BOOTSTRAP_PATH)/board/$(BOARD)/$(BOARD).c
  135. $(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/board/$(BOARD)/$(BOARD).c -o $(BOARD).o
  136. main.o: $(BOOTSTRAP_PATH)/main.c
  137. $(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/main.c -o main.o
  138. gpio.o: $(BOOTSTRAP_PATH)/driver/gpio.c
  139. $(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/driver/gpio.c -o gpio.o
  140. pmc.o: $(BOOTSTRAP_PATH)/driver/pmc.c
  141. $(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/driver/pmc.c -o pmc.o
  142. debug.o: $(BOOTSTRAP_PATH)/driver/debug.c
  143. $(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/driver/debug.c -o debug.o
  144. sdramc.o: $(BOOTSTRAP_PATH)/driver/sdramc.c
  145. $(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/driver/sdramc.c -o sdramc.o
  146. norflash.o: $(BOOTSTRAP_PATH)/driver/norflash.c
  147. $(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/driver/norflash.c -o norflash.o
  148. crt0_gnu.o: $(BOOTSTRAP_PATH)/crt0_gnu.S
  149. $(AS) $(ASFLAGS) $(BOOTSTRAP_PATH)/crt0_gnu.S -o crt0_gnu.o
  150. div0.o: $(BOOTSTRAP_PATH)/lib/div0.c
  151. $(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/lib/div0.c -o div0.o
  152. string.o: $(BOOTSTRAP_PATH)/lib/string.c
  153. $(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/lib/string.c -o string.o
  154. udiv.o: $(BOOTSTRAP_PATH)/lib/udiv.c
  155. $(CC) -c $(CCFLAGS) $(BOOTSTRAP_PATH)/lib/udiv.c -o udiv.o
  156. _udivsi3.o: $(BOOTSTRAP_PATH)/lib/_udivsi3.S
  157. $(AS) $(ASFLAGS) $(BOOTSTRAP_PATH)/lib/_udivsi3.S -o _udivsi3.o
  158. _umodsi3.o: $(BOOTSTRAP_PATH)/lib/_umodsi3.S
  159. $(AS) $(ASFLAGS) $(BOOTSTRAP_PATH)/lib/_umodsi3.S -o _umodsi3.o
  160. clean:
  161. $(ERASE_FCT) *.o *.bin *.elf *.map

修改 Bootstrap-v1.15/board/at91sam9260ek/at91sam9260ek.c 文件, 添加:

  1. #ifdef CFG_NORFLASH
  2. #include "../../include/norflash.h"
  3. #endif
  4. #ifdef CFG_NORFLASH
  5. void norflash_hw_init(void)
  6. {
  7. /* Configure CS0 */
  8. writel(AT91C_FLASH_NWE_SETUP | /
  9. AT91C_FLASH_NCS_WR_SETUP | /
  10. AT91C_FLASH_NRD_SETUP | /
  11. AT91C_FLASH_NCS_RD_SETUP, AT91C_BASE_SMC + SMC_SETUP0);
  12. writel(AT91C_FLASH_NWE_PULSE | /
  13. AT91C_FLASH_NCS_WR_PULSE | /
  14. AT91C_FLASH_NRD_PULSE | /
  15. AT91C_FLASH_NCS_RD_PULSE, AT91C_BASE_SMC + SMC_PULSE0);
  16. writel(AT91C_FLASH_NWE_CYCLE | /
  17. AT91C_FLASH_NRD_CYCLE, AT91C_BASE_SMC + SMC_CYCLE0);
  18. writel(AT91C_SMC_READMODE | /
  19. AT91C_SMC_WRITEMODE | /
  20. AT91C_SMC_NWAITM_NWAIT_DISABLE | /
  21. AT91C_SMC_BAT_BYTE_WRITE | /
  22. AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS | /
  23. (AT91C_SMC_TDF & (1 << 16)), AT91C_BASE_SMC + SMC_CTRL0);
  24. }
  25. #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文件中的两个宏:

  1. /* ******************************************************************* */
  2. /* BootStrap Settings */
  3. /* */
  4. /* ******************************************************************* */
  5. #define IMG_ADDRESS 0x10004000 /* Image Address in NorFlash */
  6. #define IMG_SIZE 0x30000 /* Image Size in NorFlash */

2、配置debug信息显示与否

  1. /* ******************************************************************* */
  2. /* Application Settings */
  3. /* ******************************************************************* */
  4. #define CFG_DEBUG

另外注意:

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

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

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

发表评论

表情:
评论列表 (有 0 条评论,370人围观)

还没有评论,来说两句吧...

相关阅读