From f405c24bc676c7ba91e737a57ca7e5088ad20400 Mon Sep 17 00:00:00 2001 From: michael-west Date: Sat, 22 Aug 2020 16:33:06 -0700 Subject: firmware: b2xx: Update to newer Cypress FX3 SDK - Updated README with instructions on how to build using new SDK (1.3.4 as of this change) - Updated makefiles - Updated memory map patch Signed-off-by: michael-west --- firmware/fx3/b200/bootloader/makefile | 46 +++------ firmware/fx3/b200/firmware/makefile | 22 ++++- firmware/fx3/b200/fx3_mem_map.patch | 174 ++++++++++++++++------------------ 3 files changed, 113 insertions(+), 129 deletions(-) (limited to 'firmware/fx3/b200') diff --git a/firmware/fx3/b200/bootloader/makefile b/firmware/fx3/b200/bootloader/makefile index 3dc7fcb80..e8b7d5916 100644 --- a/firmware/fx3/b200/bootloader/makefile +++ b/firmware/fx3/b200/bootloader/makefile @@ -8,23 +8,24 @@ IMGOUT = usrp_b200_bl.img all:$(IMGOUT) -BL_ROOT=../../boot_fw -BL_INC=$(BL_ROOT)/include -BL_LIB=$(BL_ROOT)/lib -BL_CYP_SRC=$(BL_ROOT)/src - -ELF2IMG_SRC=../../elf2img/elf2img.c +ELF2IMG_SRC=$(FX3FWROOT)/util/elf2img/elf2img.c ELF2IMG=elf2img CYFXBUILD = gcc -include fx3_build_config.mak +include $(FX3FWROOT)/fw_build/boot_fw/fx3_build_config.mak MODULE = cyfx_boot_app +ifeq ($(CYFXBUILD), arm) + APP_ASM_SOURCE = +else + APP_ASM_SOURCE = cyfx_gcc_startup.S +endif + APP_SOURCE = main.c usb_boot.c usb_descriptors.c ../common/common_descriptors.c ../common/common_helpers.c -INCFLAGS = -I$(BL_INC) -I../common +INCFLAGS = -I../common APP_OBJECT=$(APP_SOURCE:%.c=./%.o) @@ -32,20 +33,11 @@ APP_ASM_OBJECT=$(APP_ASM_SOURCE:%.S=./%.o) EXES = $(MODULE).$(EXEEXT) -ifeq ($(CYFXBUILD), gcc) - -APP_ASM_SOURCE = cyfx_gcc_startup.S - -else - -APP_ASM_SOURCE = - -endif - $(APP_ASM_OBJECT) : %.o : %.S $(ASSEMBLE) -$(APP_OBJECT) : %.o : %.c ../lib/cyfx3_boot.a cyfx3.ld + +$(APP_OBJECT) : %.o : %.c $(COMPILE) $(INCFLAGS) $(MODULE).$(EXEEXT): $(APP_OBJECT) $(APP_ASM_OBJECT) @@ -54,29 +46,15 @@ $(MODULE).$(EXEEXT): $(APP_OBJECT) $(APP_ASM_OBJECT) $(ELF2IMG): gcc -o $(ELF2IMG) $(ELF2IMG_SRC) -fx3_build_config.mak: - cp $(BL_CYP_SRC)/fx3_build_config.mak . -fx3_armgcc_config.mak: - cp $(BL_CYP_SRC)/fx3_armgcc_config.mak . cyfx_gcc_startup.S: - cp $(BL_CYP_SRC)/cyfx_gcc_startup.S . -cyfx3.ld: - cp $(BL_CYP_SRC)/cyfx3.ld . -../lib/cyfx3_boot.a: - mkdir -p ../lib - cp $(BL_LIB)/cyfx3_boot.a ../lib + cp $(FX3FWROOT)/firmware/boot_fw/src/cyfx_gcc_startup.S . clean: rm -f ./$(MODULE).$(EXEEXT) rm -f ./$(MODULE).map rm -f ./$(IMGOUT) - rm -f ./fx3_build_config.mak - rm -f ./fx3_armgcc_config.mak rm -f ./cyfx_gcc_startup.S - rm -f ./cyfx3.ld - rm -f ../lib/cyfx3_boot.a - rmdir ../lib --ignore-fail-on-non-empty rm -f ./*.o rm -f ../common/*.o rm -f ./$(ELF2IMG) diff --git a/firmware/fx3/b200/firmware/makefile b/firmware/fx3/b200/firmware/makefile index 53d423dfb..c4135829b 100644 --- a/firmware/fx3/b200/firmware/makefile +++ b/firmware/fx3/b200/firmware/makefile @@ -10,9 +10,7 @@ HEX_OUT = usrp_b200_fw.hex all:$(HEX_OUT) # Pull in the Cypress SDK files to build the firmware -FX3FWROOT=../.. -FX3PFWROOT=../../u3p_firmware -include $(FX3FWROOT)/common/fx3_build_config.mak +include $(FX3FWROOT)/firmware/common/fx3_build_config.mak ifndef OC OC = arm-none-eabi-objcopy @@ -20,13 +18,19 @@ endif MODULE = b200_main -SOURCE += $(MODULE).c b200_i2c.c b200_usb_descriptors.c ../common/common_helpers.c ../common/common_descriptors.c +SOURCE += $(MODULE).c b200_i2c.c b200_usb_descriptors.c ../common/common_helpers.c ../common/common_descriptors.c cyfxtx.c INCFLAGS = -I../common LDLIBS += \ "$$ARMGCC_INSTALL_PATH"/arm-none-eabi/lib/libm.a +ifeq ($(CYFXBUILD),arm) + SOURCE_ASM=cyfx_startup.S +else + SOURCE_ASM=cyfx_gcc_startup.S +endif + C_OBJECT=$(SOURCE:%.c=./%.o) A_OBJECT=$(SOURCE_ASM:%.S=./%.o) @@ -35,6 +39,15 @@ EXES = $(MODULE).$(EXEEXT) $(MODULE).$(EXEEXT): $(A_OBJECT) $(C_OBJECT) $(LINK) $(LINKFLAGS) +cyfxtx.c: + cp $(FX3FWROOT)/fw_build/fx3_fw/cyfxtx.c . + +cyfx_startup.S: + cp $(FX3FWROOT)/fw_build/fx3_fw/cyfx_startup.S . + +cyfx_gcc_startup.S: + cp $(FX3FWROOT)/fw_build/fx3_fw/cyfx_gcc_startup.S . + $(C_OBJECT) : %.o : %.c $(COMPILE) $(INCFLAGS) @@ -46,6 +59,7 @@ clean: rm -f ./$(MODULE).map rm -f ./*.o rm -f ../common/*.o + rm -f cyfxtx.c cyfx_startup.S cyfx_gcc_startup.S $(HEX_OUT): $(C_OBJECT) $(A_OBJECT) $(EXES) $(OC) -O ihex $(EXES) $@ diff --git a/firmware/fx3/b200/fx3_mem_map.patch b/firmware/fx3/b200/fx3_mem_map.patch index df9ff0e7a..5c1ca9849 100644 --- a/firmware/fx3/b200/fx3_mem_map.patch +++ b/firmware/fx3/b200/fx3_mem_map.patch @@ -1,91 +1,83 @@ -diff -ur 1.2.3-orig/common/cyfxtx.c 1.2.3/common/cyfxtx.c ---- 1.2.3-orig/common/cyfxtx.c 2013-02-07 17:16:54.000000000 -0800 -+++ 1.2.3/common/cyfxtx.c 2014-03-25 16:56:12.484602382 -0700 -@@ -33,7 +33,7 @@ - such as thread stacks and memory for message queues. The Cypress FX3 - libraries require a Mem heap size of at least 32 KB. - */ --#define CY_U3P_MEM_HEAP_BASE ((uint8_t *)0x40038000) -+#define CY_U3P_MEM_HEAP_BASE ((uint8_t *)0x40044000) - #define CY_U3P_MEM_HEAP_SIZE (0x8000) - - /* The last 32 KB of RAM is reserved for 2-stage boot operation. This value can be changed to -diff -ur 1.2.3-orig/common/fx3.ld 1.2.3/common/fx3.ld ---- 1.2.3-orig/common/fx3.ld 2013-02-07 17:16:54.000000000 -0800 -+++ 1.2.3/common/fx3.ld 2014-03-25 16:59:40.872240377 -0700 -@@ -26,10 +26,11 @@ - The default memory map used for FX3 applications is as follows: - - Descriptor area Base: 0x40000000 Size: 12KB -- Code area Base: 0x40003000 Size: 180KB -- Data area Base: 0x40030000 Size: 32KB -- Driver heap Base: 0x40038000 Size: 32KB (Update cyfxtx.c to change this.) -- Buffer area Base: 0x40040000 Size: 256KB (Update cyfxtx.c to change this.) -+ Code area Base: 0x40003000 Size: 212KB -+ Data area Base: 0x40038000 Size: 32KB -+ Heap Base: 0x40040000 Size: 16KB -+ Driver heap Base: 0x40044000 Size: 32KB (Update cyfxtx.c to change this.) -+ Buffer area Base: 0x4004C000 Size: 208KB (Update cyfxtx.c to change this.) - - Interrupt handlers to be placed in I-TCM (16KB). - The first 256 bytes of ITCM are reserved for Exception Vectors. -@@ -52,8 +53,8 @@ - MEMORY - { - I-TCM : ORIGIN = 0x100, LENGTH = 0x3F00 -- SYS_MEM : ORIGIN = 0x40003000 LENGTH = 0x2D000 -- DATA : ORIGIN = 0x40030000 LENGTH = 0x8000 -+ SYS_MEM : ORIGIN = 0x40003000 LENGTH = 0x35000 -+ DATA : ORIGIN = 0x40038000 LENGTH = 0x8000 - } - - SECTIONS -@@ -75,7 +76,7 @@ - _etext = .; - } > SYS_MEM - -- . = 0x40030000; -+ . = 0x40038000; - .data : - { - _data = .; -@@ -104,5 +105,16 @@ - } > DATA - __exidx_end = .; - -+ PROVIDE(__exidx_end = __exidx_end); -+ -+ . = ALIGN(4); -+ __heap_start = 0x40040000; -+ PROVIDE(__heap_start = __heap_start); -+ -+ . = ALIGN(4); -+ __heap_end = 0x40044000; -+ PROVIDE(__heap_end = __heap_end); -+ -+ PROVIDE(__heap_size = __heap_end - __heap_start); - } - -diff -ur 1.2.3-orig/boot_fw/src/cyfx3.ld 1.2.3/boot_fw/src/cyfx3.ld ---- 1.2.3-orig/boot_fw/src/cyfx3.ld 2019-02-12 16:40:48.000000000 -0800 -+++ 1.2.3/boot_fw/src/cyfx3.ld 2019-03-20 14:36:18.992529192 -0700 -@@ -34,12 +34,18 @@ - - MEMORY - { -+ BLANK : ORIGIN = 0x40070000 LENGTH = 0x0100 - SYS_MEM : ORIGIN = 0x40078000 LENGTH = 0x7000 - DATA : ORIGIN = 0x4007F000 LENGTH = 0x1000 - } - - SECTIONS - { -+ . = 0x40070000; -+ .blank : -+ { -+ . += 0x100; -+ } > BLANK - . = 0x40078000; - .text : - { - +diff -r -u cyfx3sdk/fw_build/boot_fw/cyfx3.ld cyfx3sdk-modified/fw_build/boot_fw/cyfx3.ld +--- cyfx3sdk/fw_build/boot_fw/cyfx3.ld 2018-05-23 02:25:01.000000000 -0700 ++++ cyfx3sdk-modified/fw_build/boot_fw/cyfx3.ld 2020-08-22 14:54:46.407481500 -0700 +@@ -39,12 +39,18 @@ + + MEMORY + { ++ BLANK : ORIGIN = 0x40070000 LENGTH = 0x0100 + SYS_MEM : ORIGIN = 0x40078000 LENGTH = 0x7000 + DATA : ORIGIN = 0x4007F000 LENGTH = 0x1000 + } + + SECTIONS + { ++ .blank : ++ { ++ . += 0x100; ++ } > BLANK ++ + .text : + { + *(RESET) +diff -r -u cyfx3sdk/fw_build/fx3_fw/cyfxtx.c cyfx3sdk-modified/fw_build/fx3_fw/cyfxtx.c +--- cyfx3sdk/fw_build/fx3_fw/cyfxtx.c 2018-05-23 02:25:01.000000000 -0700 ++++ cyfx3sdk-modified/fw_build/fx3_fw/cyfxtx.c 2020-08-21 12:34:14.344699800 -0700 +@@ -98,7 +98,7 @@ + area which is used by the application code as well as the drivers to allocate thread + stacks and other internal data structures. + */ +-#define CY_U3P_MEM_HEAP_BASE (0x40038000) ++#define CY_U3P_MEM_HEAP_BASE (0x40044000) + #define CY_U3P_MEM_HEAP_SIZE (0x8000) + + /* +diff -r -u cyfx3sdk/fw_build/fx3_fw/fx3_512k.ld cyfx3sdk-modified/fw_build/fx3_fw/fx3_512k.ld +--- cyfx3sdk/fw_build/fx3_fw/fx3_512k.ld 2018-05-23 02:25:01.000000000 -0700 ++++ cyfx3sdk-modified/fw_build/fx3_fw/fx3_512k.ld 2020-08-21 12:34:14.345050200 -0700 +@@ -32,11 +32,11 @@ + The default memory map used for FX3 applications is as follows: + + Descriptor area Base: 0x40000000 Size: 12KB +- Code area Base: 0x40003000 Size: 180KB +- Data area Base: 0x40030000 Size: 32KB +- Driver heap Base: 0x40038000 Size: 32KB (Update cyfxtx.c to change this.) +- Buffer area Base: 0x40040000 Size: 224KB (Update cyfxtx.c to change this.) +- 2-stage boot area Base: 0x40078000 Size: 32KB (Update cyfxtx.c to change this.) ++ Code area Base: 0x40003000 Size: 212KB ++ Data area Base: 0x40038000 Size: 32KB ++ Heap Base: 0x40040000 Size: 16KB ++ Driver heap Base: 0x40044000 Size: 32KB (Update cyfxtx.c to change this.) ++ Buffer area Base: 0x4004C000 Size: 208KB (Update cyfxtx.c to change this.) + + Interrupt handlers are placed in I-TCM (16KB). The first 256 bytes of ITCM are + reserved for Exception Vectors and will be loaded during firmware initialization. +@@ -58,8 +58,8 @@ + MEMORY + { + I-TCM : ORIGIN = 0x100 LENGTH = 0x3F00 +- SYS_MEM : ORIGIN = 0x40003000 LENGTH = 0x2D000 +- DATA : ORIGIN = 0x40030000 LENGTH = 0x8000 ++ SYS_MEM : ORIGIN = 0x40003000 LENGTH = 0x35000 ++ DATA : ORIGIN = 0x40038000 LENGTH = 0x8000 + } + + SECTIONS +@@ -114,5 +114,17 @@ + . = ALIGN(4); + } > DATA + __exidx_end = .; ++ ++ PROVIDE(__exidx_end = __exidx_end); ++ ++ . = ALIGN(4); ++ __heap_start = 0x40040000; ++ PROVIDE(__heap_start = __heap_start); ++ ++ . = ALIGN(4); ++ __heap_end = 0x40044000; ++ PROVIDE(__heap_end = __heap_end); ++ ++ PROVIDE(__heap_size = __heap_end - __heap_start); + } + -- cgit v1.2.3