From cd7b1e00f3a80926d13faa42062f37e43bc17123 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sat, 28 Jun 2014 08:40:11 -0600 Subject: [PATCH] SAMA5D4-EK: Add a configuration to load a boot program into AT25 FLASH --- configs/sama5d4-ek/Kconfig | 36 +- configs/sama5d4-ek/at25boot/Make.defs | 130 ++++ configs/sama5d4-ek/at25boot/defconfig | 878 ++++++++++++++++++++++++++ configs/sama5d4-ek/at25boot/setenv.sh | 76 +++ configs/sama5d4-ek/src/at25_main.c | 274 ++++++++ configs/sama5d4-ek/src/dram_main.c | 4 +- configs/sama5d4-ek/src/sam_at25.c | 39 +- configs/sama5d4-ek/src/sam_boot.c | 3 +- configs/sama5d4-ek/src/sama5d4-ek.h | 39 +- 9 files changed, 1456 insertions(+), 23 deletions(-) create mode 100644 configs/sama5d4-ek/at25boot/Make.defs create mode 100644 configs/sama5d4-ek/at25boot/defconfig create mode 100755 configs/sama5d4-ek/at25boot/setenv.sh create mode 100644 configs/sama5d4-ek/src/at25_main.c diff --git a/configs/sama5d4-ek/Kconfig b/configs/sama5d4-ek/Kconfig index de0141c8a4..5c4ae21d8a 100644 --- a/configs/sama5d4-ek/Kconfig +++ b/configs/sama5d4-ek/Kconfig @@ -63,10 +63,34 @@ config SAMA5D4EK_DRAM_START SAMA5D4EK_DRAM_START is defined, then it will not wait but will, instead, immediately start the program in DRAM. +config SAMA5D4EK_AT25_MAIN + bool "Build at25_main" + default n + depends on SAMA5_BOOT_ISRAM + ---help--- + at25_main is a tiny program that runs in ISRAM. at25_main will + enable SDRAM and configure the AT25 Serial FLASH. It will prompt + and then load an Intel HEX program into SDRAM over the serial + console. If the program is successfully loaded in SDRAM, at25_main + will copy the program at the beginning of the AT26 Serial FLASH. + If the jumpering is set correctly, the SAMA5D4 RomBOOT loader will + then boot the program from the serial FLASH the next time that it + reset. + +config SAMA5D4EK_AT25_PROGSIZE + int "AT25 partition size" + default 131072 + depends on SAMA5D4EK_AT25_MAIN + ---help--- + This is the size of the partition at the beginning to the AT25 + serial FLASH that will be used to hold the boot program. Since + this program must run from SRAM, there would be no purpose int + making this size any larger than the size of the internal SRAM. + config SAMA5D4EK_DRAM_BOOT bool "Using DRAM boot loader" default y - depends on SAMA5_BOOT_SDRAM && !SAMA5D4EK_DRAM_MAIN + depends on SAMA5_BOOT_SDRAM && !SAMA5D4EK_DRAM_MAIN && !SAMA5D4EK_AT25_MAIN ---help--- Select this option if you are going to boot using the sdram_main bootloader (created with SAMA5D4EK_DRAM_MAIN=y). This selection @@ -115,7 +139,7 @@ endchoice # NAND FLASH configuration config SAMA5D4EK_AT25_AUTOMOUNT bool "AT25 serial FLASH auto-mount" default n - depends on NSH_ARCHINIT && SAMA5_SPI0 && MTD_AT25 + depends on (NSH_ARCHINIT || SAMA5D4EK_AT25_MAIN) && SAMA5_SPI0 && MTD_AT25 ---help--- Automatically initialize the AT25 SPI FLASH driver when NSH starts. @@ -132,6 +156,14 @@ config SAMA5D4EK_AT25_FTL any other file system. Any file system may be used, but there will be no wear-leveling. +config SAMA5D4EK_AT25_CHARDEV + bool "Create AT25 Serial FLASH character driver" + ---help--- + Create the MTD driver for the AT25 and "wrap" the AT25 as a standard + character driver that could then, for example, via simple open, close, + read, write file system operations. There will be no wear-leveling + in this configuration. + config SAMA5D4EK_AT25_NXFFS bool "Create AT25 serial FLASH NXFFS file system" depends on FS_NXFFS diff --git a/configs/sama5d4-ek/at25boot/Make.defs b/configs/sama5d4-ek/at25boot/Make.defs new file mode 100644 index 0000000000..cc534bf9b6 --- /dev/null +++ b/configs/sama5d4-ek/at25boot/Make.defs @@ -0,0 +1,130 @@ +############################################################################ +# configs/sama5d4-ek/at25boot/Make.defs +# +# Copyright (C) 2014 Gregory Nutt. All rights reserved. +# Author: Gregory Nutt +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name NuttX nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS 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. +# +############################################################################ + +include ${TOPDIR}/.config +include ${TOPDIR}/tools/Config.mk +include ${TOPDIR}$(DELIM)arch$(DELIM)arm$(DELIM)src$(DELIM)armv7-a$(DELIM)Toolchain.defs + +ifeq ($(CONFIG_SAMA5_BOOT_ISRAM),y) + LDSCRIPT = isram.ld +endif + +ifeq ($(CONFIG_SAMA5_BOOT_SDRAM),y) +ifeq ($(CONFIG_SAMA5D4EK_DRAM_BOOT),y) + LDSCRIPT = dramboot.ld +else + LDSCRIPT = uboot.ld +endif +endif + +ifeq ($(WINTOOL),y) + # Windows-native toolchains + ARCHINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)$(DELIM)include}" + ARCHXXINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)$(DELIM)include}" -isystem "${shell cygpath -w $(TOPDIR)$(DELIM)include$(DELIM)cxx}" + ARCHSCRIPT = -T "${shell cygpath -w $(TOPDIR)$(DELIM)configs$(DELIM)$(CONFIG_ARCH_BOARD)$(DELIM)scripts$(DELIM)$(LDSCRIPT)}" +else + # Linux/Cygwin-native toolchain + ARCHINCLUDES = -I. -isystem $(TOPDIR)$(DELIM)include + ARCHXXINCLUDES = -I. -isystem $(TOPDIR)$(DELIM)include -isystem $(TOPDIR)$(DELIM)include$(DELIM)cxx + ARCHSCRIPT = -T$(TOPDIR)$(DELIM)configs$(DELIM)$(CONFIG_ARCH_BOARD)$(DELIM)scripts$(DELIM)$(LDSCRIPT) +endif + +CC = $(CROSSDEV)gcc +CXX = $(CROSSDEV)g++ +CPP = $(CROSSDEV)gcc -E +LD = $(CROSSDEV)ld +AR = $(ARCROSSDEV)ar rcs +NM = $(ARCROSSDEV)nm +OBJCOPY = $(CROSSDEV)objcopy +OBJDUMP = $(CROSSDEV)objdump + +ifeq ($(CONFIG_DEBUG_SYMBOLS),y) + ARCHOPTIMIZATION = -g +endif + +ifneq ($(CONFIG_DEBUG_NOOPT),y) + ARCHOPTIMIZATION += $(MAXOPTIMIZATION) -fno-strict-aliasing -fno-strength-reduce -fomit-frame-pointer +endif + +ARCHCPUFLAGS = -mcpu=cortex-a5 -mfpu=vfpv4-d16 +ARCHCFLAGS = -fno-builtin +ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fno-rtti +ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow +ARCHWARNINGSXX = -Wall -Wshadow +ARCHDEFINES = +ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10 + +CFLAGS = $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe +CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS) +CXXFLAGS = $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe +CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS) +CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) +AFLAGS = $(CFLAGS) -D__ASSEMBLY__ + +NXFLATLDFLAGS1 = -r -d -warn-common +NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)$(DELIM)binfmt$(DELIM)libnxflat$(DELIM)gnu-nxflat-pcrel.ld -no-check-sections +LDNXFLATFLAGS = -e main -s 2048 + +OBJEXT = .o +LIBEXT = .a +EXEEXT = + +ifneq ($(CROSSDEV),arm-nuttx-elf-) + LDFLAGS += -nostartfiles -nodefaultlibs +endif +ifeq ($(CONFIG_DEBUG_SYMBOLS),y) + LDFLAGS += -g +endif + +HOSTCC = gcc +HOSTINCLUDES = -I. +HOSTCFLAGS = -Wall -Wstrict-prototypes -Wshadow -g -pipe +HOSTLDFLAGS = +ifeq ($(CONFIG_HOST_WINDOWS),y) + HOSTEXEEXT = .exe +else + HOSTEXEEXT = +endif + +ifeq ($(WINTOOL),y) + # Windows-native host tools + DIRLINK = $(TOPDIR)$(DELIM)tools$(DELIM)copydir.sh + DIRUNLINK = $(TOPDIR)$(DELIM)tools$(DELIM)unlink.sh + MKDEP = $(TOPDIR)$(DELIM)tools$(DELIM)mknulldeps.sh +else + # Linux/Cygwin-native host tools + MKDEP = $(TOPDIR)$(DELIM)tools$(DELIM)mkdeps$(HOSTEXEEXT) +endif + diff --git a/configs/sama5d4-ek/at25boot/defconfig b/configs/sama5d4-ek/at25boot/defconfig new file mode 100644 index 0000000000..3f7f82de18 --- /dev/null +++ b/configs/sama5d4-ek/at25boot/defconfig @@ -0,0 +1,878 @@ +# +# Automatically generated file; DO NOT EDIT. +# Nuttx/ Configuration +# + +# +# Build Setup +# +# CONFIG_EXPERIMENTAL is not set +# CONFIG_DEFAULT_SMALL is not set +# CONFIG_HOST_LINUX is not set +# CONFIG_HOST_OSX is not set +CONFIG_HOST_WINDOWS=y +# CONFIG_HOST_OTHER is not set +# CONFIG_WINDOWS_NATIVE is not set +CONFIG_WINDOWS_CYGWIN=y +# CONFIG_WINDOWS_MSYS is not set +# CONFIG_WINDOWS_OTHER is not set + +# +# Build Configuration +# +# CONFIG_APPS_DIR="../apps" +# CONFIG_BUILD_2PASS is not set + +# +# Binary Output Formats +# +# CONFIG_RRLOAD_BINARY is not set +CONFIG_INTELHEX_BINARY=y +# CONFIG_MOTOROLA_SREC is not set +CONFIG_RAW_BINARY=y +# CONFIG_UBOOT_UIMAGE is not set + +# +# Customize Header Files +# +# CONFIG_ARCH_STDINT_H is not set +# CONFIG_ARCH_STDBOOL_H is not set +# CONFIG_ARCH_MATH_H is not set +# CONFIG_ARCH_FLOAT_H is not set +# CONFIG_ARCH_STDARG_H is not set + +# +# Debug Options +# +# CONFIG_DEBUG is not set +CONFIG_ARCH_HAVE_STACKCHECK=y +# CONFIG_ARCH_HAVE_HEAPCHECK is not set +# CONFIG_DEBUG_SYMBOLS is not set +CONFIG_ARCH_HAVE_CUSTOMOPT=y +# CONFIG_DEBUG_NOOPT is not set +# CONFIG_DEBUG_CUSTOMOPT is not set +CONFIG_DEBUG_FULLOPT=y + +# +# System Type +# +# CONFIG_ARCH_8051 is not set +CONFIG_ARCH_ARM=y +# CONFIG_ARCH_AVR is not set +# CONFIG_ARCH_HC is not set +# CONFIG_ARCH_MIPS is not set +# CONFIG_ARCH_RGMP is not set +# CONFIG_ARCH_SH is not set +# CONFIG_ARCH_SIM is not set +# CONFIG_ARCH_X86 is not set +# CONFIG_ARCH_Z16 is not set +# CONFIG_ARCH_Z80 is not set +CONFIG_ARCH="arm" + +# +# ARM Options +# +# CONFIG_ARCH_CHIP_A1X is not set +# CONFIG_ARCH_CHIP_C5471 is not set +# CONFIG_ARCH_CHIP_CALYPSO is not set +# CONFIG_ARCH_CHIP_DM320 is not set +# CONFIG_ARCH_CHIP_IMX is not set +# CONFIG_ARCH_CHIP_KINETIS is not set +# CONFIG_ARCH_CHIP_KL is not set +# CONFIG_ARCH_CHIP_LM is not set +# CONFIG_ARCH_CHIP_TIVA is not set +# CONFIG_ARCH_CHIP_LPC17XX is not set +# CONFIG_ARCH_CHIP_LPC214X is not set +# CONFIG_ARCH_CHIP_LPC2378 is not set +# CONFIG_ARCH_CHIP_LPC31XX is not set +# CONFIG_ARCH_CHIP_LPC43XX is not set +# CONFIG_ARCH_CHIP_NUC1XX is not set +CONFIG_ARCH_CHIP_SAMA5=y +# CONFIG_ARCH_CHIP_SAMD is not set +# CONFIG_ARCH_CHIP_SAM34 is not set +# CONFIG_ARCH_CHIP_STM32 is not set +# CONFIG_ARCH_CHIP_STR71X is not set +# CONFIG_ARCH_ARM7TDMI is not set +# CONFIG_ARCH_ARM926EJS is not set +# CONFIG_ARCH_ARM920T is not set +# CONFIG_ARCH_CORTEXM0 is not set +# CONFIG_ARCH_CORTEXM3 is not set +# CONFIG_ARCH_CORTEXM4 is not set +CONFIG_ARCH_CORTEXA5=y +# CONFIG_ARCH_CORTEXA8 is not set +CONFIG_ARCH_FAMILY="armv7-a" +CONFIG_ARCH_CHIP="sama5" +CONFIG_ARCH_HAVE_FPU=y +CONFIG_ARCH_FPU=y +# CONFIG_ARCH_HAVE_MPU is not set +CONFIG_ARCH_HAVE_LOWVECTORS=y +CONFIG_ARCH_LOWVECTORS=y +# CONFIG_ARCH_ROMPGTABLE is not set + +# +# ARMv7-A Configuration Options +# +# CONFIG_ARMV7A_TOOLCHAIN_BUILDROOT is not set +CONFIG_ARMV7A_TOOLCHAIN_CODESOURCERYW=y +# CONFIG_ARMV7A_TOOLCHAIN_DEVKITARM is not set +# CONFIG_ARMV7A_TOOLCHAIN_GNU_EABIL is not set +# CONFIG_ARMV7A_TOOLCHAIN_GNU_EABIW is not set +# CONFIG_ARMV7A_TOOLCHAIN_GNU_OABI is not set +# CONFIG_ARMV7A_DECODEFIQ is not set + +# +# SAMA5 Configuration Options +# +CONFIG_SAMA5_HAVE_AESB=y +CONFIG_SAMA5_HAVE_ICM=y +CONFIG_SAMA5_HAVE_UART0=y +CONFIG_SAMA5_HAVE_UART1=y +CONFIG_SAMA5_HAVE_USART4=y +# CONFIG_SAMA5_HAVE_CAN0 is not set +# CONFIG_SAMA5_HAVE_CAN1 is not set +# CONFIG_SAMA5_HAVE_DMA is not set +CONFIG_SAMA5_HAVE_DDR32=y +CONFIG_SAMA5_HAVE_XDMA=y +CONFIG_SAMA5_HAVE_L2CC=y +CONFIG_SAMA5_HAVE_LCDC=y +# CONFIG_SAMA5_HAVE_GMAC is not set +# CONFIG_SAMA5_HAVE_EMACA is not set +CONFIG_SAMA5_HAVE_EMACB=y +CONFIG_SAMA5_HAVE_EMAC1=y +# CONFIG_SAMA5_HAVE_HSMCI2 is not set +CONFIG_SAMA5_HAVE_SAIC=y +CONFIG_SAMA5_HAVE_SBM=y +CONFIG_SAMA5_HAVE_SFC=y +CONFIG_SAMA5_HAVE_SPI2=y +CONFIG_SAMA5_HAVE_TC1=y +CONFIG_SAMA5_HAVE_TC2=y +CONFIG_SAMA5_HAVE_TRUSTZONE=y +CONFIG_SAMA5_HAVE_TWI3=y +CONFIG_SAMA5_HAVE_VDEC=y +# CONFIG_ARCH_CHIP_SAMA5D3 is not set +CONFIG_ARCH_CHIP_SAMA5D4=y +# CONFIG_ARCH_CHIP_ATSAMA5D31 is not set +# CONFIG_ARCH_CHIP_ATSAMA5D33 is not set +# CONFIG_ARCH_CHIP_ATSAMA5D34 is not set +# CONFIG_ARCH_CHIP_ATSAMA5D35 is not set +# CONFIG_ARCH_CHIP_ATSAMA5D36 is not set +# CONFIG_ARCH_CHIP_ATSAMA5D41 is not set +# CONFIG_ARCH_CHIP_ATSAMA5D42 is not set +# CONFIG_ARCH_CHIP_ATSAMA5D43 is not set +CONFIG_ARCH_CHIP_ATSAMA5D44=y + +# +# SAMA5 Peripheral Support +# +# CONFIG_SAMA5_AES is not set +# CONFIG_SAMA5_TDES is not set +# CONFIG_SAMA5_AESB is not set +# CONFIG_SAMA5_DBGU is not set +# CONFIG_SAMA5_L2CC is not set +# CONFIG_SAMA5_PIT is not set +# CONFIG_SAMA5_WDT is not set +# CONFIG_SAMA5_RTC is not set +# CONFIG_SAMA5_ICM is not set +CONFIG_SAMA5_HSMC=y +# CONFIG_SAMA5_SMD is not set +# CONFIG_SAMA5_SAIC is not set +# CONFIG_SAMA5_UART0 is not set +# CONFIG_SAMA5_UART1 is not set +# CONFIG_SAMA5_USART0 is not set +# CONFIG_SAMA5_USART1 is not set +# CONFIG_SAMA5_USART2 is not set +CONFIG_SAMA5_USART3=y +# CONFIG_SAMA5_USART4 is not set +# CONFIG_SAMA5_TWI0 is not set +# CONFIG_SAMA5_TWI1 is not set +# CONFIG_SAMA5_TWI2 is not set +# CONFIG_SAMA5_TWI3 is not set +# CONFIG_SAMA5_HSMCI0 is not set +# CONFIG_SAMA5_HSMCI1 is not set +# CONFIG_SAMA5_SBM is not set +# CONFIG_SAMA5_SFC is not set +CONFIG_SAMA5_SPI0=y +# CONFIG_SAMA5_SPI1 is not set +# CONFIG_SAMA5_SPI2 is not set +# CONFIG_SAMA5_TC0 is not set +# CONFIG_SAMA5_TC1 is not set +# CONFIG_SAMA5_TC2 is not set +# CONFIG_SAMA5_PWM is not set +# CONFIG_SAMA5_ADC is not set +# CONFIG_SAMA5_XDMAC0 is not set +# CONFIG_SAMA5_XDMAC1 is not set +# CONFIG_SAMA5_UHPHS is not set +# CONFIG_SAMA5_UDPHS is not set +# CONFIG_SAMA5_EMACB is not set +# CONFIG_SAMA5_EMAC0 is not set +# CONFIG_SAMA5_EMAC1 is not set +# CONFIG_SAMA5_LCDC is not set +# CONFIG_SAMA5_ISI is not set +# CONFIG_SAMA5_SHA is not set +# CONFIG_SAMA5_TRNG is not set +# CONFIG_SAMA5_ARM is not set +# CONFIG_SAMA5_FUSE is not set +CONFIG_SAMA5_MPDDRC=y +# CONFIG_SAMA5_VDEC is not set +# CONFIG_SAMA5_PIO_IRQ is not set + +# +# SPI device driver options +# + +# +# External Memory Configuration +# +CONFIG_SAMA5_DDRCS=y +CONFIG_SAMA5_DDRCS_SIZE=268435456 +# CONFIG_SAMA5_DDRCS_LPDDR1 is not set +CONFIG_SAMA5_DDRCS_LPDDR2=y +# CONFIG_SAMA5_EBICS0 is not set +# CONFIG_SAMA5_EBICS1 is not set +# CONFIG_SAMA5_EBICS2 is not set +# CONFIG_SAMA5_EBICS3 is not set +# CONFIG_SAMA5_HAVE_NAND is not set +# CONFIG_SAMA5_HAVE_PMECC is not set +CONFIG_SAMA5_BOOT_ISRAM=y +# CONFIG_SAMA5_BOOT_SDRAM is not set + +# +# Heap Configuration +# +CONFIG_SAMA5_DDRCS_HEAP=y +CONFIG_SAMA5_DDRCS_HEAP_OFFSET=0 +CONFIG_SAMA5_DDRCS_HEAP_SIZE=0 + +# +# Architecture Options +# +# CONFIG_ARCH_NOINTC is not set +# CONFIG_ARCH_VECNOTIRQ is not set +# CONFIG_ARCH_DMA is not set +CONFIG_ARCH_HAVE_IRQPRIO=y +# CONFIG_CUSTOM_STACK is not set +# CONFIG_ADDRENV is not set +CONFIG_ARCH_HAVE_VFORK=y +CONFIG_ARCH_HAVE_MMU=y +CONFIG_ARCH_NAND_HWECC=y +# CONFIG_ARCH_HAVE_EXTCLK is not set +# CONFIG_PAGING is not set +# CONFIG_ARCH_IRQPRIO is not set +CONFIG_ARCH_STACKDUMP=y +# CONFIG_ENDIAN_BIG is not set +# CONFIG_ARCH_IDLE_CUSTOM is not set +# CONFIG_ARCH_HAVE_RAMFUNCS is not set +# CONFIG_ARCH_HAVE_RAMVECTORS is not set + +# +# Board Settings +# +CONFIG_BOARD_LOOPSPERMSEC=65775 +# CONFIG_ARCH_CALIBRATION is not set + +# +# Interrupt options +# +CONFIG_ARCH_HAVE_INTERRUPTSTACK=y +CONFIG_ARCH_INTERRUPTSTACK=0 +# CONFIG_ARCH_HAVE_HIPRI_INTERRUPT is not set + +# +# Boot options +# +# CONFIG_BOOT_RUNFROMEXTSRAM is not set +# CONFIG_BOOT_RUNFROMFLASH is not set +CONFIG_BOOT_RUNFROMISRAM=y +# CONFIG_BOOT_RUNFROMSDRAM is not set +# CONFIG_BOOT_COPYTORAM is not set + +# +# Boot Memory Configuration +# +CONFIG_RAM_START=0x00200000 +CONFIG_RAM_VSTART=0x00200000 +CONFIG_RAM_SIZE=114688 +CONFIG_ARCH_HAVE_SDRAM=y +CONFIG_BOOT_SDRAM_DATA=y + +# +# Board Selection +# +CONFIG_ARCH_BOARD_SAMA5D4_EK=y +# CONFIG_ARCH_BOARD_CUSTOM is not set +CONFIG_ARCH_BOARD="sama5d4-ek" + +# +# Common Board Options +# +CONFIG_ARCH_HAVE_LEDS=y +CONFIG_ARCH_LEDS=y +CONFIG_ARCH_HAVE_BUTTONS=y +# CONFIG_ARCH_BUTTONS is not set +CONFIG_ARCH_HAVE_IRQBUTTONS=y + +# +# Board-Specific Options +# +# CONFIG_SAMA5D4EK_384MHZ is not set +# CONFIG_SAMA5D4EK_396MHZ is not set +CONFIG_SAMA5D4EK_528MHZ=y +CONFIG_SAMA5D4EK_MT47H128M16RT=y +# CONFIG_SAMA5D4EK_MT47H64M16HR is not set +# CONFIG_SAMA5D4EK_DRAM_MAIN is not set +CONFIG_SAMA5D4EK_AT25_MAIN=y +CONFIG_SAMA5D4EK_AT25_PROGSIZE=131072 +CONFIG_SAMA5D4EK_AT25_AUTOMOUNT=y +# CONFIG_SAMA5D4EK_AT25_FTL is not set +CONFIG_SAMA5D4EK_AT25_CHARDEV=y + +# +# RTOS Features +# +CONFIG_DISABLE_OS_API=y +# CONFIG_DISABLE_CLOCK is not set +# CONFIG_DISABLE_POSIX_TIMERS is not set +# CONFIG_DISABLE_PTHREAD is not set +# CONFIG_DISABLE_SIGNALS is not set +# CONFIG_DISABLE_MQUEUE is not set +CONFIG_DISABLE_ENVIRON=y + +# +# Clocks and Timers +# +CONFIG_MSEC_PER_TICK=10 +# CONFIG_SYSTEM_TIME64 is not set +# CONFIG_CLOCK_MONOTONIC is not set +# CONFIG_JULIAN_TIME is not set +CONFIG_START_YEAR=2014 +CONFIG_START_MONTH=7 +CONFIG_START_DAY=31 +CONFIG_MAX_WDOGPARMS=2 +CONFIG_PREALLOC_WDOGS=16 +CONFIG_PREALLOC_TIMERS=4 + +# +# Tasks and Scheduling +# +CONFIG_USER_ENTRYPOINT="at25_main" +CONFIG_RR_INTERVAL=200 +CONFIG_TASK_NAME_SIZE=32 +CONFIG_MAX_TASK_ARGS=4 +CONFIG_MAX_TASKS=16 +# CONFIG_SCHED_HAVE_PARENT is not set +CONFIG_SCHED_WAITPID=y + +# +# Pthread Options +# +# CONFIG_MUTEX_TYPES is not set +CONFIG_NPTHREAD_KEYS=4 + +# +# Performance Monitoring +# +# CONFIG_SCHED_CPULOAD is not set +# CONFIG_SCHED_INSTRUMENTATION is not set + +# +# Files and I/O +# +CONFIG_DEV_CONSOLE=y +# CONFIG_FDCLONE_DISABLE is not set +# CONFIG_FDCLONE_STDIO is not set +CONFIG_SDCLONE_DISABLE=y +CONFIG_NFILE_DESCRIPTORS=8 +CONFIG_NFILE_STREAMS=8 +CONFIG_NAME_MAX=32 +# CONFIG_PRIORITY_INHERITANCE is not set + +# +# RTOS hooks +# +# CONFIG_BOARD_INITIALIZE is not set +# CONFIG_SCHED_STARTHOOK is not set +# CONFIG_SCHED_ATEXIT is not set +# CONFIG_SCHED_ONEXIT is not set + +# +# Signal Numbers +# +CONFIG_SIG_SIGUSR1=1 +CONFIG_SIG_SIGUSR2=2 +CONFIG_SIG_SIGALARM=3 +CONFIG_SIG_SIGCONDTIMEDOUT=16 + +# +# POSIX Message Queue Options +# +CONFIG_PREALLOC_MQ_MSGS=4 +CONFIG_MQ_MAXMSGSIZE=32 + +# +# Stack and heap information +# +CONFIG_IDLETHREAD_STACKSIZE=1024 +CONFIG_USERMAIN_STACKSIZE=2048 +CONFIG_PTHREAD_STACK_MIN=256 +CONFIG_PTHREAD_STACK_DEFAULT=2048 + +# +# Device Drivers +# +CONFIG_DISABLE_POLL=y +CONFIG_DEV_NULL=y +# CONFIG_DEV_ZERO is not set +# CONFIG_LOOP is not set +# CONFIG_RAMDISK is not set +# CONFIG_CAN is not set +# CONFIG_ARCH_HAVE_PWM_PULSECOUNT is not set +# CONFIG_PWM is not set +# CONFIG_ARCH_HAVE_I2CRESET is not set +# CONFIG_I2C is not set +CONFIG_SPI=y +# CONFIG_SPI_OWNBUS is not set +CONFIG_SPI_EXCHANGE=y +# CONFIG_SPI_CMDDATA is not set +# CONFIG_SPI_BITBANG is not set +# CONFIG_I2S is not set +# CONFIG_RTC is not set +# CONFIG_WATCHDOG is not set +# CONFIG_TIMER is not set +# CONFIG_ANALOG is not set +# CONFIG_AUDIO_DEVICES is not set +# CONFIG_VIDEO_DEVICES is not set +# CONFIG_BCH is not set +# CONFIG_INPUT is not set +# CONFIG_LCD is not set +# CONFIG_MMCSD is not set +CONFIG_MTD=y + +# +# MTD Configuration +# +# CONFIG_MTD_PARTITION is not set +# CONFIG_MTD_SECT512 is not set +# CONFIG_MTD_BYTE_WRITE is not set +# CONFIG_MTD_CONFIG is not set +# CONFIG_MTD_CONFIG_RAM_CONSOLIDATE is not set + +# +# MTD Device Drivers +# +# CONFIG_MTD_NAND is not set +# CONFIG_RAMMTD is not set +# CONFIG_MTD_AT24XX is not set +CONFIG_MTD_AT25=y +CONFIG_AT25_SPIMODE=0 +CONFIG_AT25_SPIFREQUENCY=20000000 +# CONFIG_MTD_AT45DB is not set +# CONFIG_MTD_M25P is not set +# CONFIG_MTD_SMART is not set +# CONFIG_MTD_RAMTRON is not set +# CONFIG_MTD_SST25 is not set +# CONFIG_MTD_SST25XX is not set +# CONFIG_MTD_SST39FV is not set +# CONFIG_MTD_W25 is not set +# CONFIG_PIPES is not set +# CONFIG_PM is not set +# CONFIG_POWER is not set +# CONFIG_SENSORS is not set +# CONFIG_SERCOMM_CONSOLE is not set +CONFIG_SERIAL=y +# CONFIG_DEV_LOWCONSOLE is not set +# CONFIG_16550_UART is not set +# CONFIG_ARCH_HAVE_UART is not set +# CONFIG_ARCH_HAVE_UART0 is not set +# CONFIG_ARCH_HAVE_UART1 is not set +# CONFIG_ARCH_HAVE_UART2 is not set +# CONFIG_ARCH_HAVE_UART3 is not set +# CONFIG_ARCH_HAVE_UART4 is not set +# CONFIG_ARCH_HAVE_UART5 is not set +# CONFIG_ARCH_HAVE_UART6 is not set +# CONFIG_ARCH_HAVE_UART7 is not set +# CONFIG_ARCH_HAVE_UART8 is not set +# CONFIG_ARCH_HAVE_SCI0 is not set +# CONFIG_ARCH_HAVE_SCI1 is not set +# CONFIG_ARCH_HAVE_USART0 is not set +# CONFIG_ARCH_HAVE_USART1 is not set +# CONFIG_ARCH_HAVE_USART2 is not set +CONFIG_ARCH_HAVE_USART3=y +# CONFIG_ARCH_HAVE_USART4 is not set +# CONFIG_ARCH_HAVE_USART5 is not set +# CONFIG_ARCH_HAVE_USART6 is not set +# CONFIG_ARCH_HAVE_USART7 is not set +# CONFIG_ARCH_HAVE_USART8 is not set + +# +# USART Configuration +# +CONFIG_USART3_ISUART=y +CONFIG_MCU_SERIAL=y +CONFIG_STANDARD_SERIAL=y +CONFIG_USART3_SERIAL_CONSOLE=y +# CONFIG_NO_SERIAL_CONSOLE is not set + +# +# USART3 Configuration +# +CONFIG_USART3_RXBUFSIZE=256 +CONFIG_USART3_TXBUFSIZE=256 +CONFIG_USART3_BAUD=115200 +CONFIG_USART3_BITS=8 +CONFIG_USART3_PARITY=0 +CONFIG_USART3_2STOP=0 +# CONFIG_USART3_IFLOWCONTROL is not set +# CONFIG_USART3_OFLOWCONTROL is not set +# CONFIG_SERIAL_IFLOWCONTROL is not set +# CONFIG_SERIAL_OFLOWCONTROL is not set +# CONFIG_USBDEV is not set +# CONFIG_USBHOST is not set +# CONFIG_WIRELESS is not set + +# +# System Logging Device Options +# + +# +# System Logging +# +# CONFIG_RAMLOG is not set + +# +# Networking Support +# +# CONFIG_ARCH_HAVE_NET is not set +# CONFIG_ARCH_HAVE_PHY is not set +# CONFIG_NET is not set + +# +# File Systems +# + +# +# File system configuration +# +# CONFIG_DISABLE_MOUNTPOINT is not set +# CONFIG_DISABLE_PSEUDOFS_OPERATIONS is not set +CONFIG_FS_READABLE=y +CONFIG_FS_WRITABLE=y +# CONFIG_FS_RAMMAP is not set +CONFIG_FS_FAT=y +CONFIG_FAT_LCNAMES=y +CONFIG_FAT_LFN=y +CONFIG_FAT_MAXFNAME=32 +# CONFIG_FS_FATTIME is not set +# CONFIG_FAT_DMAMEMORY is not set +# CONFIG_FS_NXFFS is not set +# CONFIG_FS_ROMFS is not set +# CONFIG_FS_SMARTFS is not set +# CONFIG_FS_BINFS is not set +# CONFIG_FS_PROCFS is not set + +# +# System Logging +# +# CONFIG_SYSLOG_ENABLE is not set +# CONFIG_SYSLOG is not set + +# +# Graphics Support +# +# CONFIG_NX is not set + +# +# Memory Management +# +# CONFIG_MM_MULTIHEAP is not set +# CONFIG_MM_SMALL is not set +CONFIG_MM_REGIONS=1 +# CONFIG_ARCH_HAVE_HEAP2 is not set +# CONFIG_GRAN is not set + +# +# Audio Support +# +# CONFIG_AUDIO is not set + +# +# Binary Formats +# +# CONFIG_BINFMT_DISABLE is not set +# CONFIG_NXFLAT is not set +# CONFIG_ELF is not set +CONFIG_BUILTIN=y +# CONFIG_PIC is not set +CONFIG_SYMTAB_ORDEREDBYNAME=y + +# +# Library Routines +# + +# +# Standard C Library Options +# +CONFIG_STDIO_BUFFER_SIZE=64 +CONFIG_STDIO_LINEBUFFER=y +CONFIG_NUNGET_CHARS=2 +# CONFIG_LIBM is not set +# CONFIG_NOPRINTF_FIELDWIDTH is not set +# CONFIG_LIBC_FLOATINGPOINT is not set +CONFIG_LIB_RAND_ORDER=1 +# CONFIG_EOL_IS_CR is not set +# CONFIG_EOL_IS_LF is not set +# CONFIG_EOL_IS_BOTH_CRLF is not set +CONFIG_EOL_IS_EITHER_CRLF=y +# CONFIG_LIBC_EXECFUNCS is not set +CONFIG_POSIX_SPAWN_PROXY_STACKSIZE=1024 +CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048 +# CONFIG_LIBC_STRERROR is not set +# CONFIG_LIBC_PERROR_STDOUT is not set +CONFIG_ARCH_LOWPUTC=y +CONFIG_LIB_SENDFILE_BUFSIZE=512 +# CONFIG_ARCH_ROMGETC is not set +# CONFIG_ARCH_OPTIMIZED_FUNCTIONS is not set + +# +# Non-standard Library Support +# +# CONFIG_SCHED_WORKQUEUE is not set +# CONFIG_LIB_KBDCODEC is not set +# CONFIG_LIB_SLCDCODEC is not set + +# +# Basic CXX Support +# +# CONFIG_C99_BOOL8 is not set +CONFIG_HAVE_CXX=y +CONFIG_HAVE_CXXINITIALIZE=y +# CONFIG_CXX_NEWLONG is not set + +# +# uClibc++ Standard C++ Library +# +# CONFIG_UCLIBCXX is not set + +# +# Application Configuration +# + +# +# Built-In Applications +# +CONFIG_BUILTIN_PROXY_STACKSIZE=1024 + +# +# Examples +# +# CONFIG_EXAMPLES_BUTTONS is not set +# CONFIG_EXAMPLES_CAN is not set +# CONFIG_EXAMPLES_CONFIGDATA is not set +# CONFIG_EXAMPLES_CPUHOG is not set +# CONFIG_EXAMPLES_CXXTEST is not set +# CONFIG_EXAMPLES_DHCPD is not set +# CONFIG_EXAMPLES_ELF is not set +# CONFIG_EXAMPLES_FTPC is not set +# CONFIG_EXAMPLES_FTPD is not set +# CONFIG_EXAMPLES_HELLO is not set +# CONFIG_EXAMPLES_HELLOXX is not set +# CONFIG_EXAMPLES_JSON is not set +# CONFIG_EXAMPLES_HIDKBD is not set +# CONFIG_EXAMPLES_KEYPADTEST is not set +# CONFIG_EXAMPLES_IGMP is not set +# CONFIG_EXAMPLES_MM is not set +# CONFIG_EXAMPLES_MODBUS is not set +# CONFIG_EXAMPLES_MOUNT is not set +# CONFIG_EXAMPLES_NRF24L01TERM is not set +# CONFIG_EXAMPLES_NSH is not set +# CONFIG_EXAMPLES_NULL is not set +# CONFIG_EXAMPLES_NX is not set +# CONFIG_EXAMPLES_NXCONSOLE is not set +# CONFIG_EXAMPLES_NXFFS is not set +# CONFIG_EXAMPLES_NXFLAT is not set +# CONFIG_EXAMPLES_NXHELLO is not set +# CONFIG_EXAMPLES_NXIMAGE is not set +# CONFIG_EXAMPLES_NXLINES is not set +# CONFIG_EXAMPLES_NXTEXT is not set +# CONFIG_EXAMPLES_OSTEST is not set +# CONFIG_EXAMPLES_PIPE is not set +# CONFIG_EXAMPLES_POLL is not set +# CONFIG_EXAMPLES_POSIXSPAWN is not set +# CONFIG_EXAMPLES_QENCODER is not set +# CONFIG_EXAMPLES_RGMP is not set +# CONFIG_EXAMPLES_ROMFS is not set +# CONFIG_EXAMPLES_SENDMAIL is not set +# CONFIG_EXAMPLES_SERIALBLASTER is not set +# CONFIG_EXAMPLES_SERIALRX is not set +# CONFIG_EXAMPLES_SERLOOP is not set +# CONFIG_EXAMPLES_SLCD is not set +# CONFIG_EXAMPLES_SMART is not set +# CONFIG_EXAMPLES_TCPECHO is not set +# CONFIG_EXAMPLES_TELNETD is not set +# CONFIG_EXAMPLES_THTTPD is not set +# CONFIG_EXAMPLES_TIFF is not set +# CONFIG_EXAMPLES_TOUCHSCREEN is not set +# CONFIG_EXAMPLES_UDP is not set +# CONFIG_EXAMPLES_UIP is not set +# CONFIG_EXAMPLES_USBSERIAL is not set +# CONFIG_EXAMPLES_USBTERM is not set +# CONFIG_EXAMPLES_WATCHDOG is not set + +# +# Graphics Support +# +# CONFIG_TIFF is not set + +# +# Interpreters +# +# CONFIG_INTERPRETERS_FICL is not set +# CONFIG_INTERPRETERS_PCODE is not set + +# +# Network Utilities +# + +# +# Networking Utilities +# +# CONFIG_NETUTILS_CODECS is not set +# CONFIG_NETUTILS_DHCPD is not set +# CONFIG_NETUTILS_FTPC is not set +# CONFIG_NETUTILS_FTPD is not set +# CONFIG_NETUTILS_JSON is not set +# CONFIG_NETUTILS_SMTP is not set +# CONFIG_NETUTILS_TFTPC is not set +# CONFIG_NETUTILS_THTTPD is not set +# CONFIG_NETUTILS_UIPLIB is not set +# CONFIG_NETUTILS_WEBCLIENT is not set + +# +# FreeModBus +# +# CONFIG_MODBUS is not set + +# +# NSH Library +# +# CONFIG_NSH_LIBRARY is not set + +# +# NxWidgets/NxWM +# + +# +# Platform-specific Support +# +# CONFIG_PLATFORM_CONFIGDATA is not set + +# +# System Libraries and NSH Add-Ons +# + +# +# Custom Free Memory Command +# +# CONFIG_SYSTEM_FREE is not set + +# +# EMACS-like Command Line Editor +# +# CONFIG_SYSTEM_CLE is not set + +# +# FLASH Program Installation +# +# CONFIG_SYSTEM_INSTALL is not set + +# +# FLASH Erase-all Command +# + +# +# Intel HEX to binary conversion +# +CONFIG_SYSTEM_HEX2BIN=y +# CONFIG_SYSTEM_HEX2BIN_DEBUG is not set + +# +# I2C tool +# + +# +# INI File Parser +# +# CONFIG_SYSTEM_INIFILE is not set + +# +# NxPlayer media player library / command Line +# +# CONFIG_SYSTEM_NXPLAYER is not set + +# +# RAM test +# +# CONFIG_SYSTEM_RAMTEST is not set + +# +# readline() +# +CONFIG_SYSTEM_READLINE=y +CONFIG_READLINE_ECHO=y + +# +# P-Code Support +# + +# +# PHY Tool +# + +# +# Power Off +# +# CONFIG_SYSTEM_POWEROFF is not set + +# +# RAMTRON +# +# CONFIG_SYSTEM_RAMTRON is not set + +# +# SD Card +# +# CONFIG_SYSTEM_SDCARD is not set + +# +# Sysinfo +# +# CONFIG_SYSTEM_SYSINFO is not set + +# +# VI Work-Alike Editor +# +# CONFIG_SYSTEM_VI is not set + +# +# Stack Monitor +# + +# +# USB CDC/ACM Device Commands +# + +# +# USB Composite Device Commands +# + +# +# USB Mass Storage Device Commands +# + +# +# USB Monitor +# + +# +# Zmodem Commands +# +# CONFIG_SYSTEM_ZMODEM is not set diff --git a/configs/sama5d4-ek/at25boot/setenv.sh b/configs/sama5d4-ek/at25boot/setenv.sh new file mode 100755 index 0000000000..145024ad39 --- /dev/null +++ b/configs/sama5d4-ek/at25boot/setenv.sh @@ -0,0 +1,76 @@ +#!/bin/bash +# configs/sama5d4-ek/at25boot/setenv.sh +# +# Copyright (C) 2014 Gregory Nutt. All rights reserved. +# Author: Gregory Nutt +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name NuttX nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS 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. +# + +if [ "$_" = "$0" ] ; then + echo "You must source this script, not run it!" 1>&2 + exit 1 +fi + +WD=`pwd` +if [ ! -x "setenv.sh" ]; then + echo "This script must be executed from the top-level NuttX build directory" + exit 1 +fi + +if [ -z "${PATH_ORIG}" ]; then + export PATH_ORIG="${PATH}" +fi + +# This is the Cygwin path to the location where I installed the Atmel GCC +# toolchain under Windows. You will also have to edit this if you install +# this toolchain in any other location +#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/Atmel/Atmel Toolchain/ARM GCC/Native/4.7.3.99/arm-gnu-toolchain/bin" + +# This is the Cygwin path to the location where I installed the CodeSourcery +# toolchain under windows. You will also have to edit this if you install +# the CodeSourcery toolchain in any other location +#export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery G++ Lite/bin" +export TOOLCHAIN_BIN="/cygdrive/c/Program Files (x86)/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI/bin" + +# These are the Cygwin paths to the locations where I installed the Atollic +# toolchain under windows. You will also have to edit this if you install +# the Atollic toolchain in any other location. /usr/bin is added before +# the Atollic bin path because there is are binaries named gcc.exe and g++.exe +# at those locations as well. +#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for ARM Pro 2.3.0/ARMTools/bin" +#export TOOLCHAIN_BIN="/usr/bin:/cygdrive/c/Program Files (x86)/Atollic/TrueSTUDIO for STMicroelectronics STM32 Lite 2.3.0/ARMTools/bin" + +# This is the Cygwin path to the location where I build the buildroot +# toolchain. +#export TOOLCHAIN_BIN="${WD}/../misc/buildroot/build_arm/staging_dir/bin" + +# Add the path to the toolchain to the PATH varialble +export PATH="${TOOLCHAIN_BIN}:/sbin:/usr/sbin:${PATH_ORIG}" + +echo "PATH : ${PATH}" diff --git a/configs/sama5d4-ek/src/at25_main.c b/configs/sama5d4-ek/src/at25_main.c new file mode 100644 index 0000000000..30e4eb5224 --- /dev/null +++ b/configs/sama5d4-ek/src/at25_main.c @@ -0,0 +1,274 @@ +/***************************************************************************** + * configs/sama5d4-ek/src/at25_main.c + * + * Copyright (C) 2014 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include + +#include +#include + +#include "sama5d4-ek.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ +/* Configuration ************************************************************/ + +#ifndef HAVE_AT25 +# error The AT25 Serial FLASH is not available +#endif + +#ifndef CONFIG_SAMA5D4EK_NAND_AUTOMOUNT +# error CONFIG_SAMA5D4EK_NAND_AUTOMOUNT must be selected +#endif + +#ifndef CONFIG_SAMA5D4EK_AT25_CHARDEV +# error CONFIG_SAMA5D4EK_AT25_CHARDEV must be selected +#endif + +#ifndef CONFIG_BOOT_SDRAM_DATA +# error CONFIG_BOOT_SDRAM_DATA must be selected +#endif + +#if defined(CONFIG_SAMA5D4EK_AT25_PROGSIZE) || CONFIG_SAMA5D4EK_AT25_PROGSIZE < 128 +# error Large CONFIG_SAMA5D4EK_AT25_PROGSIZE must be selected +#endif + +#define DEVNAME_MAXSIZE 12 +#define IOBUFFER_SIZE 512 + +/**************************************************************************** + * Private Types + ****************************************************************************/ + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +static uint8_t g_heximage[CONFIG_SAMA5D4EK_AT25_PROGSIZE]; +static uint8_t g_iobuffer[IOBUFFER_SIZE]; +statid uint8_t g_at25dev[DEVNAME_MAXSIZE]; + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: at25_main + * + * Description: + * at25_main is a tiny program that runs in ISRAM. at25_main will + * configure DRAM and the AT25 serial FLASH, present a prompt, and load + * an Intel HEX file into the AT25 serial FLASH (after first buffering + * the binary data into memory). On re-boot, the program loaded into + * the AT25 FLASH should then execute. + * + * On entry: + * - SDRAM has already been initialized (we are using it for .bss!) + * - SPI0 chip select has already been configured. + * + ****************************************************************************/ + +int at25_main(int argc, char *argv) +{ + struct lib_rawinstream_s rawinstream; + struct lib_memsostream_s memoutstream; + const uint8_t *src; + uint8_t *dest; + ssize_t nwritten; + ssize_t nread; + ssize_t remaining; + size_t rdsize; + int fd; + int ret; + + /* Configure the AT25 as the a character device. */ + + ret = sam_at25_automount(AT25_MINOR); + if (ret < 0) + { + fprintf(stderr, "ERROR: Failed to mount AT25 FLASH: %d\n", ret); + return EXIT_FAILURE; + } + + /* Open the AT25 device for writing */ + + snprintf(g_at25dev, DEVNAME_MAXSIZE, "/dev/mtd%d", AT25_MINOR); + fd = open(g_at25dev, O_WRONLY); + if (fd < 0) + { + int errcode = errno; + fprintf(stderr, "ERROR: Failed to open %s: %d\n", g_at25dev, errcode); + return EXIT_FAILURE; + } + + /* Wrap stdin as an IN stream that can the HEX data over the serial port */ + + lib_rawinstream(&rawinstream, 0); + + /* Wrap the memory buffer as a seek-able OUT stream in which we can buffer + * the binary data. + */ + + lib_memsostream(&memoutstream, (FAR char *)g_heximage, + CONFIG_SAMA5D4EK_AT25_PROGSIZE); + + /* We are ready to load the Intel HEX stream into DRAM. + * + * Hmm.. With no hardware handshake, there is a possibility of data loss + * to overrunning incoming data buffer. So far I have not seen this at + * 115200 8N1, but still it is a possibility. + */ + + printf("Send Intel HEX file now\n"); + fflush(stdout); + + return hex2bin(&rawinstream.public, &memoutstream.public, + (uint32_t)SAM_ISRAM_VSECTION, + (uint32_t)(SAM_ISRAM_VSECTION + CONFIG_SAMA5D4EK_AT25_PROGSIZE), + 0); + if (ret < 0) + { + /* We failed the load */ + + fprintf(stderr, "ERROR: Intel HEX file load failed: %d\n", ret); + close(fd); + return EXIT_FAILURE; + } + + /* The HEX file load was successful, write the data to FLASH */ + + printf("Successfully loaded the Intel HEX file into memory...\n"); + printf(" Writing %d bytes to the AT25 Serial FLASH\n", + memoutstream.public.nput); + + remaining = memoutstream.public.nput; + dest = g_heximage; + + do + { + nwritten = write(fd, dest, memoutstream.public.nput); + if (nwritten <= 0) + { + int errcode = errno; + if (errno != EINTR) + { + fprintf(stderr, "ERROR: Write failed: %d\n", errcode); + close(fd); + return EXIT_FAILURE; + } + } + else + { + remaining -= nwritten; + dest += nwritten; + } + } + while (remaining > 0); + + close(fd); + + /* Now verify that the image in memory and the image in FLASH are truly + * the same. + */ + + printf(" Verifying %d bytes in the AT25 Serial FLASH\n", + memoutstream.public.nput); + + /* Open the AT25 device for writing */ + + fd = open(g_at25dev, O_RDONLY); + if (fd < 0) + { + int errcode = errno; + fprintf(stderr, "ERROR: Failed to open %s: %d\n", g_at25dev, errcode); + return EXIT_FAILURE; + } + + remaining = memoutstream.public.nput; + src = g_heximage; + + do + { + rdsize = remaining; + if (rdsize > IOBUFFER_SIZE) + { + rdsize = IOBUFFER_SIZE; + } + + nread = read(fd, g_iobuffer, rdsize); + if (nread <= 0) + { + int errcode = errno; + if (errno != EINTR) + { + fprintf(stderr, "ERROR: Read failed: %d\n", errcode); + close(fd); + return EXIT_FAILURE; + } + } + else + { + if (memcmp(g_iobuffer, src, nread) != 0) + { + fprintf(stderr, "ERROR: Verify failed at offset %d\n", + memoutstream.public.nput - remaining); + close(fd); + return EXIT_FAILURE; + } + + remaining -= nwritten; + dest += nwritten; + } + } + while (remaining > 0); + + printf(" Successfully verified %d bytes in the AT25 Serial FLASH\n", + memoutstream.public.nput); + + close(fd); + return EXIT_SUCCESS; +} diff --git a/configs/sama5d4-ek/src/dram_main.c b/configs/sama5d4-ek/src/dram_main.c index 8f38a3ad3a..1fa34d9209 100644 --- a/configs/sama5d4-ek/src/dram_main.c +++ b/configs/sama5d4-ek/src/dram_main.c @@ -85,7 +85,7 @@ typedef void (*dram_entry_t)(void); * * Description: * dram_main is a tiny program that runs in ISRAM. dram_main will - * configure DRAM, present a prompt, load and Intel HEX file into DRAM, + * configure DRAM, present a prompt, load an Intel HEX file into DRAM, * and either start that program or wait for you to break in with the * debugger. * @@ -105,7 +105,7 @@ int dram_main(int argc, char *argv) * Intel HEX stream into DRAM. * * Hmm.. With no hardware handshake, there is a possibility of data loss - * to overruning incoming data buffer. So far I have not seen this at + * to overrunning incoming data buffer. So far I have not seen this at * 115200 8N1, but still it is a possibility. */ diff --git a/configs/sama5d4-ek/src/sam_at25.c b/configs/sama5d4-ek/src/sam_at25.c index 5e7d126484..950b64d8ed 100644 --- a/configs/sama5d4-ek/src/sam_at25.c +++ b/configs/sama5d4-ek/src/sam_at25.c @@ -46,6 +46,7 @@ #include #include +#include #include #include #include @@ -75,6 +76,10 @@ int sam_at25_automount(int minor) { FAR struct spi_dev_s *spi; FAR struct mtd_dev_s *mtd; +#ifdef CONFIG_SAMA5D4EK_AT25_CHARDEV + uint8_t blockdev[18]; + uint8_t chardev[12]; +#endif static bool initialized = false; int ret; @@ -101,15 +106,41 @@ int sam_at25_automount(int minor) } #if defined(CONFIG_SAMA5D4EK_AT25_FTL) - /* And finally, use the FTL layer to wrap the MTD driver as a block driver */ + /* And finally, use the FTL layer to wrap the MTD driver as a block + * driver. + */ - ret = ftl_initialize(AT25_MINOR, mtd); + ret = ftl_initialize(minor, mtd); if (ret < 0) { fdbg("ERROR: Failed to initialize the FTL layer: %d\n", ret); return ret; } +#elif defined(CONFIG_SAMA5D4EK_AT25_CHARDEV) + /* Use the FTL layer to wrap the MTD driver as a block driver */ + + ret = ftl_initialize(minor, mtd); + if (ret < 0) + { + fdbg("ERROR: Failed to initialize the FTL layer: %d\n", ret); + return ret; + } + + /* Use the minor number to create device paths */ + + snprintf(blockdev, 18, "/dev/mtdblock%d", minor); + snprintf(chardev, 12, "/dev/mtd%d", minor); + + /* Now create a character device on the block device */ + + ret = bchdev_register(blockdev, chardev, false); + if (ret < 0) + { + fdbg("ERROR: bchdev_register %s failed: %d\n", chardev, ret); + return ret; + } + #elif defined(CONFIG_SAMA5D4EK_AT25_NXFFS) /* Initialize to provide NXFFS on the MTD interface */ @@ -128,8 +159,10 @@ int sam_at25_automount(int minor) fdbg("ERROR: Failed to mount the NXFFS volume: %d\n", errno); return ret; } + #endif - /* Now we are initializeed */ + + /* Now we are initialized */ initialized = true; } diff --git a/configs/sama5d4-ek/src/sam_boot.c b/configs/sama5d4-ek/src/sam_boot.c index 5814d032eb..d1ea4a5004 100644 --- a/configs/sama5d4-ek/src/sam_boot.c +++ b/configs/sama5d4-ek/src/sam_boot.c @@ -71,7 +71,8 @@ void sam_boardinitialize(void) * sam_spiinitialize() has been brought into the link. */ -#if defined(CONFIG_SAMA5_SPI0) || defined(CONFIG_SAMA5_SPI1) +#if defined(CONFIG_SAMA5_SPI0) || defined(CONFIG_SAMA5_SPI1) || \ + defined(CONFIG_SAMA5_SPI2) if (sam_spiinitialize) { sam_spiinitialize(); diff --git a/configs/sama5d4-ek/src/sama5d4-ek.h b/configs/sama5d4-ek/src/sama5d4-ek.h index 4e1fd20db7..fd1f96ff39 100644 --- a/configs/sama5d4-ek/src/sama5d4-ek.h +++ b/configs/sama5d4-ek/src/sama5d4-ek.h @@ -152,16 +152,29 @@ # undef CONFIG_SAMA5D4EK_AT25_NXFFS #endif -#if !defined(CONFIG_SAMA5D4EK_AT25_FTL) && !defined(CONFIG_SAMA5D4EK_AT25_NXFFS) +#if !defined(CONFIG_SAMA5D4EK_AT25_FTL) && !defined(CONFIG_SAMA5D4EK_AT25_CHARDEV) && \ + !defined(CONFIG_SAMA5D4EK_AT25_NXFFS) # undef HAVE_AT25 #endif +#if defined(CONFIG_SAMA5D4EK_AT25_FTL) && defined(CONFIG_SAMA5D4EK_AT25_CHARDEV) +# warning Both CONFIG_SAMA5D4EK_AT25_CHARDEV and CONFIG_SAMA5D4EK_AT25_FTL are set +# warning Ignoring CONFIG_SAMA5D4EK_AT25_FTL +# undef CONFIG_SAMA5D4EK_AT25_FTL +#endif + #if defined(CONFIG_SAMA5D4EK_AT25_FTL) && defined(CONFIG_SAMA5D4EK_AT25_NXFFS) # warning Both CONFIG_SAMA5D4EK_AT25_FTL and CONFIG_SAMA5D4EK_AT25_NXFFS are set # warning Ignoring CONFIG_SAMA5D4EK_AT25_NXFFS # undef CONFIG_SAMA5D4EK_AT25_NXFFS #endif +#if defined(CONFIG_SAMA5D4EK_AT25_CHARDEV) && defined(CONFIG_SAMA5D4EK_AT25_NXFFS) +# warning Both CONFIG_SAMA5D4EK_AT25_CHARDEV and CONFIG_SAMA5D4EK_AT25_NXFFS are set +# warning Ignoring CONFIG_SAMA5D4EK_AT25_NXFFS +# undef CONFIG_SAMA5D4EK_AT25_NXFFS +#endif + /* Assign minor device numbers. For example, if we also use MINOR number 0 * for the AT25, it should appear as /dev/mtdblock0 */ @@ -509,25 +522,21 @@ #endif /* SPI Chip Selects *****************************************************************/ -/* Both the Ronetix and Embest versions of the SAMAD3x CPU modules include an - * Atmel AT25DF321A, 32-megabit, 2.7-volt SPI serial flash. The SPI - * connection is as follows: +/* The SAMA5D4-EK includes an Atmel AT25DF321A, 32-megabit, 2.7-volt SPI serial + * FLASH on board. The connection is as follows: * - * AT25DF321A SAMA5 - * --------------- ----------------------------------------------- - * SI PD11 SPI0_MOSI - * SO PD10 SPI0_MIS0 - * SCK PD12 SPI0_SPCK - * /CS PD13 via NL17SZ126 if JP1 is closed (See below) + * AT25DF321A SAMA5D4-EK SAMA5 + * ---------- --------------- -------------------------------- + * SI AT25_SPI0_SI PC1 PC1/SPI0_MOSI/PWML2/ISI_D9 + * SO AT25_SPI0_SO PC0 PC0/SPI0_MISO/PWMH2/ISI_D8 + * SCK AT25_SPI0_SPCK PC2 PC2/SPI0_SPCK/PWMH3/ISI_D10 + * /CS AT25_SPI0_NCPS0 PC3 PC3/SPI0_NPCS0/PWML3/ISI_D11 * - * JP1 and JP2 seem to related to /CS on the Ronetix board, but the usage is - * less clear. For the Embest module, JP1 must be closed to connect /CS to - * PD13; on the Ronetix schematic, JP11 seems only to bypass a resistor (may - * not be populated?). I think closing JP1 is correct in either case. + * AT25_SPI0_NCPS0 goes to the AT25DF321A as via a NL17SZ126 if JP6 is closed */ #define PIO_AT25_NPCS0 (PIO_OUTPUT | PIO_CFG_PULLUP | PIO_OUTPUT_SET | \ - PIO_PORT_PIOD | PIO_PIN13) + PIO_PORT_PIOC | PIO_PIN3) #define AT25_PORT SPI0_CS0 /************************************************************************************