Merge tdk_new and Ti375 Efinity support
Keep the current GPS software and Genesys2/VCU118 flows while integrating Ti375C529 Efinity, flash, programming, and debug support. Add board-specific SPI NOR profiles and persistent GPS flash layouts across all three boards.
This commit is contained in:
@@ -14,12 +14,15 @@ GPS_DEBUG_LEVEL ?= 1
|
||||
GPS_ESKF_ENABLE ?= 1
|
||||
GPS_EPHEMERIS_FLASH_ENABLE ?= 1
|
||||
GPS_EPHEMERIS_FLASH_SEED_INITIAL ?= 1
|
||||
GPS_EPHEMERIS_FLASH_BASE ?= 0x01fe0000
|
||||
GPS_NAV_CONTEXT_ENABLE ?= 1
|
||||
GPS_NAV_CONTEXT_FLASH_BASE ?= 0x01fc0000
|
||||
IMU_SENSOR ?= auto
|
||||
BSP_UART_CLOCK_HZ ?= 100000000
|
||||
BSP_UART_BAUDRATE ?= 460800
|
||||
GPS_SYSTEM_UART_BAUDRATE ?= 460800
|
||||
BSP_CLINT_TIMEBASE_HZ ?= 1000000
|
||||
BSP_SPI_FLASH_PROFILE ?= 1
|
||||
GPS_SYSTEM_CLINT_TIMEBASE_HZ ?= 500000
|
||||
GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES ?= 5
|
||||
# BSP_DTIM_* mirrors the FPGA DTIM_* knobs and is used by C code plus linker scripts.
|
||||
@@ -51,9 +54,12 @@ help:
|
||||
@echo " GPS_ESKF_ENABLE=$(GPS_ESKF_ENABLE)"
|
||||
@echo " GPS_EPHEMERIS_FLASH_ENABLE=$(GPS_EPHEMERIS_FLASH_ENABLE)"
|
||||
@echo " GPS_EPHEMERIS_FLASH_SEED_INITIAL=$(GPS_EPHEMERIS_FLASH_SEED_INITIAL)"
|
||||
@echo " GPS_EPHEMERIS_FLASH_BASE=$(GPS_EPHEMERIS_FLASH_BASE)"
|
||||
@echo " GPS_NAV_CONTEXT_ENABLE=$(GPS_NAV_CONTEXT_ENABLE)"
|
||||
@echo " GPS_NAV_CONTEXT_FLASH_BASE=$(GPS_NAV_CONTEXT_FLASH_BASE)"
|
||||
@echo " IMU_SENSOR=$(IMU_SENSOR)"
|
||||
@echo " BSP_CLINT_TIMEBASE_HZ=$(BSP_CLINT_TIMEBASE_HZ)"
|
||||
@echo " BSP_SPI_FLASH_PROFILE=$(BSP_SPI_FLASH_PROFILE)"
|
||||
@echo " GPS_SYSTEM_CLINT_TIMEBASE_HZ=$(GPS_SYSTEM_CLINT_TIMEBASE_HZ)"
|
||||
@echo " GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES=$(GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES)"
|
||||
@echo " BSP_DTIM_BASE=$(BSP_DTIM_BASE)"
|
||||
@@ -62,7 +68,7 @@ help:
|
||||
all: bootloader hello
|
||||
|
||||
bootloader:
|
||||
@make -C bootloader TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/bootloader" APP_FLASH_OFFSET="$(APP_FLASH_OFFSET)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||
@make -C bootloader TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/bootloader" APP_FLASH_OFFSET="$(APP_FLASH_OFFSET)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_SPI_FLASH_PROFILE="$(BSP_SPI_FLASH_PROFILE)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||
|
||||
hello:
|
||||
@make -C hello_uart TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/hello_uart" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||
@@ -77,11 +83,11 @@ steval-mki217v1-test:
|
||||
@make -C steval_mki217v1_test TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/steval_mki217v1_test" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||
|
||||
gps-system:
|
||||
@make -C gps_system TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/gps_system" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" GPS_ESKF_ENABLE="$(GPS_ESKF_ENABLE)" GPS_EPHEMERIS_FLASH_ENABLE="$(GPS_EPHEMERIS_FLASH_ENABLE)" GPS_EPHEMERIS_FLASH_SEED_INITIAL="$(GPS_EPHEMERIS_FLASH_SEED_INITIAL)" GPS_NAV_CONTEXT_ENABLE="$(GPS_NAV_CONTEXT_ENABLE)" IMU_SENSOR="$(IMU_SENSOR)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(GPS_SYSTEM_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(GPS_SYSTEM_CLINT_TIMEBASE_HZ)" IMU_CORRECTED_PUBLISH_EVERY_N_SAMPLES="$(GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||
@make -C gps_system TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/gps_system" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" GPS_ESKF_ENABLE="$(GPS_ESKF_ENABLE)" GPS_EPHEMERIS_FLASH_ENABLE="$(GPS_EPHEMERIS_FLASH_ENABLE)" GPS_EPHEMERIS_FLASH_SEED_INITIAL="$(GPS_EPHEMERIS_FLASH_SEED_INITIAL)" GPS_EPHEMERIS_FLASH_BASE="$(GPS_EPHEMERIS_FLASH_BASE)" GPS_NAV_CONTEXT_ENABLE="$(GPS_NAV_CONTEXT_ENABLE)" GPS_NAV_CONTEXT_FLASH_BASE="$(GPS_NAV_CONTEXT_FLASH_BASE)" IMU_SENSOR="$(IMU_SENSOR)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(GPS_SYSTEM_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(GPS_SYSTEM_CLINT_TIMEBASE_HZ)" BSP_SPI_FLASH_PROFILE="$(BSP_SPI_FLASH_PROFILE)" IMU_CORRECTED_PUBLISH_EVERY_N_SAMPLES="$(GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||
|
||||
app:
|
||||
@test -d "$(APP)"
|
||||
@make -C "$(APP)" TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/$(APP)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" GPS_ESKF_ENABLE="$(GPS_ESKF_ENABLE)" GPS_EPHEMERIS_FLASH_ENABLE="$(GPS_EPHEMERIS_FLASH_ENABLE)" GPS_EPHEMERIS_FLASH_SEED_INITIAL="$(GPS_EPHEMERIS_FLASH_SEED_INITIAL)" GPS_NAV_CONTEXT_ENABLE="$(GPS_NAV_CONTEXT_ENABLE)" IMU_SENSOR="$(IMU_SENSOR)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||
@make -C "$(APP)" TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/$(APP)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" GPS_ESKF_ENABLE="$(GPS_ESKF_ENABLE)" GPS_EPHEMERIS_FLASH_ENABLE="$(GPS_EPHEMERIS_FLASH_ENABLE)" GPS_EPHEMERIS_FLASH_SEED_INITIAL="$(GPS_EPHEMERIS_FLASH_SEED_INITIAL)" GPS_EPHEMERIS_FLASH_BASE="$(GPS_EPHEMERIS_FLASH_BASE)" GPS_NAV_CONTEXT_ENABLE="$(GPS_NAV_CONTEXT_ENABLE)" GPS_NAV_CONTEXT_FLASH_BASE="$(GPS_NAV_CONTEXT_FLASH_BASE)" IMU_SENSOR="$(IMU_SENSOR)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_SPI_FLASH_PROFILE="$(BSP_SPI_FLASH_PROFILE)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||
|
||||
flash-image: app
|
||||
@mkdir -p "$(FLASH_DIR)"
|
||||
|
||||
@@ -14,12 +14,14 @@ MARCH ?= rv64imafdc_zicsr_zifencei
|
||||
MABI ?= lp64d
|
||||
BSP_UART_CLOCK_HZ ?= 100000000
|
||||
BSP_UART_BAUDRATE ?= 460800
|
||||
BSP_CLINT_TIMEBASE_HZ ?= 1000000
|
||||
BSP_SPI_FLASH_PROFILE ?= 1
|
||||
BSP_DTIM_BASE ?= 0x80000000
|
||||
BSP_DTIM_SIZE ?= 0x00100000
|
||||
CONFIG_STAMP := $(BUILD_DIR)/build_config.txt
|
||||
|
||||
# C uses BSP_DTIM_* for bounds checks; linker uses __dtim_* for RAM origin/length.
|
||||
CFLAGS := -march=$(MARCH) -mabi=$(MABI) -mcmodel=medany -Os -ffreestanding -fno-builtin -fno-common -Wall -Wextra -I$(BSP_DIR)/include -DAPP_FLASH_OFFSET=$(APP_FLASH_OFFSET)UL -DBSP_UART_CLOCK_HZ=$(BSP_UART_CLOCK_HZ)UL -DBSP_UART_BAUDRATE=$(BSP_UART_BAUDRATE)UL -DBSP_DTIM_BASE=$(BSP_DTIM_BASE)UL -DBSP_DTIM_SIZE=$(BSP_DTIM_SIZE)UL
|
||||
CFLAGS := -march=$(MARCH) -mabi=$(MABI) -mcmodel=medany -Os -ffreestanding -fno-builtin -fno-common -Wall -Wextra -I$(BSP_DIR)/include -DAPP_FLASH_OFFSET=$(APP_FLASH_OFFSET)UL -DBSP_UART_CLOCK_HZ=$(BSP_UART_CLOCK_HZ)UL -DBSP_UART_BAUDRATE=$(BSP_UART_BAUDRATE)UL -DBSP_CLINT_TIMEBASE_HZ=$(BSP_CLINT_TIMEBASE_HZ)UL -DBSP_SPI_FLASH_PROFILE=$(BSP_SPI_FLASH_PROFILE) -DBSP_DTIM_BASE=$(BSP_DTIM_BASE)UL -DBSP_DTIM_SIZE=$(BSP_DTIM_SIZE)UL
|
||||
LDFLAGS := -T linker.ld -nostdlib -static -Wl,--gc-sections -Wl,--defsym=__dtim_base=$(BSP_DTIM_BASE) -Wl,--defsym=__dtim_size=$(BSP_DTIM_SIZE) -Wl,-Map,$(BUILD_DIR)/$(TARGET).map
|
||||
|
||||
SRCS := start.S main.c
|
||||
@@ -42,6 +44,8 @@ $(CONFIG_STAMP): FORCE | $(BUILD_DIR)
|
||||
'MABI=$(MABI)' \
|
||||
'BSP_UART_CLOCK_HZ=$(BSP_UART_CLOCK_HZ)' \
|
||||
'BSP_UART_BAUDRATE=$(BSP_UART_BAUDRATE)' \
|
||||
'BSP_CLINT_TIMEBASE_HZ=$(BSP_CLINT_TIMEBASE_HZ)' \
|
||||
'BSP_SPI_FLASH_PROFILE=$(BSP_SPI_FLASH_PROFILE)' \
|
||||
'BSP_DTIM_BASE=$(BSP_DTIM_BASE)' \
|
||||
'BSP_DTIM_SIZE=$(BSP_DTIM_SIZE)' > "$$tmp"; \
|
||||
if ! cmp -s "$$tmp" "$@"; then mv "$$tmp" "$@"; else rm "$$tmp"; fi
|
||||
|
||||
@@ -17,17 +17,27 @@
|
||||
#define FLASH_CMD_WRITE_DISABLE 0x04u
|
||||
#define FLASH_CMD_WRITE_ENABLE 0x06u
|
||||
#define FLASH_CMD_READ_CONFIG 0x35u
|
||||
#define FLASH_CMD_CLEAR_STATUS 0x30u
|
||||
#define FLASH_CMD_RESET 0xf0u
|
||||
#define FLASH_CMD_READ_4B 0x13u
|
||||
#define FLASH_CMD_PROGRAM_4B 0x12u
|
||||
#define FLASH_CMD_ERASE_4B 0xdcu
|
||||
|
||||
#define FLASH_STATUS_WIP (1u << 0)
|
||||
#define FLASH_STATUS_WEL (1u << 1)
|
||||
#define FLASH_STATUS_E_ERR (1u << 5)
|
||||
#define FLASH_STATUS_P_ERR (1u << 6)
|
||||
#define FLASH_STATUS_ERROR (FLASH_STATUS_E_ERR | FLASH_STATUS_P_ERR)
|
||||
#define FLASH_STATUS_WIP (1u << 0)
|
||||
#define FLASH_STATUS_WEL (1u << 1)
|
||||
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
#define FLASH_CMD_CLEAR_STATUS 0x30u
|
||||
#define FLASH_CMD_RESET 0xf0u
|
||||
#define FLASH_STATUS_ERROR ((1u << 5) | (1u << 6))
|
||||
#elif BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_MT25QU01G
|
||||
#define FLASH_CMD_RESET_ENABLE 0x66u
|
||||
#define FLASH_CMD_RESET_MEMORY 0x99u
|
||||
#define FLASH_CMD_READ_FLAG_STATUS 0x70u
|
||||
#define FLASH_CMD_CLEAR_FLAG_STATUS 0x50u
|
||||
#define FLASH_FLAG_STATUS_ERROR ((1u << 1) | (1u << 4) | (1u << 5))
|
||||
#elif BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_IS25WP512M
|
||||
#define FLASH_CMD_RESET_ENABLE 0x66u
|
||||
#define FLASH_CMD_RESET_MEMORY 0x99u
|
||||
#endif
|
||||
|
||||
#define FLASH_RESET_DELAY_US 300u
|
||||
#define FLASH_PROGRAM_TIMEOUT_US 100000u
|
||||
@@ -104,6 +114,7 @@ static bool flash_wait_complete(uint32_t timeout_us)
|
||||
|
||||
do {
|
||||
status = bsp_spi_flash_read_status();
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
if ((status & FLASH_STATUS_ERROR) != 0u) {
|
||||
/* S25FL-S deliberately holds WIP high after a program/erase error
|
||||
* until CLSR is issued. Clear the latched failure so a later request
|
||||
@@ -111,7 +122,15 @@ static bool flash_wait_complete(uint32_t timeout_us)
|
||||
flash_cmd(FLASH_CMD_CLEAR_STATUS);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
if ((status & FLASH_STATUS_WIP) == 0u) {
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_MT25QU01G
|
||||
uint8_t flags = flash_read_register(FLASH_CMD_READ_FLAG_STATUS);
|
||||
if ((flags & FLASH_FLAG_STATUS_ERROR) != 0u) {
|
||||
flash_cmd(FLASH_CMD_CLEAR_FLAG_STATUS);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
} while ((bsp_read64(BSP_CLINT_MTIME) - start) < timeout_ticks);
|
||||
@@ -121,11 +140,20 @@ static bool flash_wait_complete(uint32_t timeout_us)
|
||||
|
||||
static bool flash_write_enable(void)
|
||||
{
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
flash_cmd(FLASH_CMD_CLEAR_STATUS);
|
||||
#elif BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_MT25QU01G
|
||||
flash_cmd(FLASH_CMD_CLEAR_FLAG_STATUS);
|
||||
#endif
|
||||
flash_cmd(FLASH_CMD_WRITE_ENABLE);
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
return (bsp_spi_flash_read_status() &
|
||||
(FLASH_STATUS_WIP | FLASH_STATUS_WEL | FLASH_STATUS_ERROR)) ==
|
||||
FLASH_STATUS_WEL;
|
||||
#else
|
||||
return (bsp_spi_flash_read_status() &
|
||||
(FLASH_STATUS_WIP | FLASH_STATUS_WEL)) == FLASH_STATUS_WEL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool flash_verify(uint32_t flash_addr, const uint8_t *expected,
|
||||
@@ -156,7 +184,12 @@ void bsp_spi_flash_init(void)
|
||||
void bsp_spi_flash_reset(void)
|
||||
{
|
||||
spi_select(0);
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
flash_cmd(FLASH_CMD_RESET);
|
||||
#else
|
||||
flash_cmd(FLASH_CMD_RESET_ENABLE);
|
||||
flash_cmd(FLASH_CMD_RESET_MEMORY);
|
||||
#endif
|
||||
flash_delay_us(FLASH_RESET_DELAY_US);
|
||||
}
|
||||
|
||||
@@ -179,7 +212,11 @@ uint8_t bsp_spi_flash_read_status(void)
|
||||
|
||||
uint8_t bsp_spi_flash_read_config(void)
|
||||
{
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
return flash_read_register(FLASH_CMD_READ_CONFIG);
|
||||
#else
|
||||
return 0u;
|
||||
#endif
|
||||
}
|
||||
|
||||
void bsp_spi_flash_read(uint32_t flash_addr, void *dst, uint32_t len)
|
||||
@@ -202,9 +239,13 @@ void bsp_spi_flash_read(uint32_t flash_addr, void *dst, uint32_t len)
|
||||
bool bsp_spi_flash_erase_sector(uint32_t flash_addr)
|
||||
{
|
||||
if ((flash_addr & (BSP_SPI_FLASH_SECTOR_SIZE - 1u)) != 0u ||
|
||||
!flash_range_valid(flash_addr, BSP_SPI_FLASH_SECTOR_SIZE) ||
|
||||
!flash_range_valid(flash_addr, BSP_SPI_FLASH_SECTOR_SIZE)
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
||
|
||||
((flash_addr >= (BSP_SPI_FLASH_SIZE - (2u * BSP_SPI_FLASH_SECTOR_SIZE))) &&
|
||||
((bsp_spi_flash_read_config() & BSP_SPI_FLASH_CONFIG_TBPARM) != 0u))) {
|
||||
((bsp_spi_flash_read_config() & BSP_SPI_FLASH_CONFIG_TBPARM) != 0u))
|
||||
#endif
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
if (!flash_wait_complete(FLASH_PROGRAM_TIMEOUT_US) || !flash_write_enable()) {
|
||||
|
||||
@@ -4,10 +4,29 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define BSP_SPI_FLASH_SIZE 0x02000000UL
|
||||
#define BSP_SPI_FLASH_PROFILE_S25FL256S 1
|
||||
#define BSP_SPI_FLASH_PROFILE_MT25QU01G 2
|
||||
#define BSP_SPI_FLASH_PROFILE_IS25WP512M 3
|
||||
|
||||
#ifndef BSP_SPI_FLASH_PROFILE
|
||||
#define BSP_SPI_FLASH_PROFILE BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
#endif
|
||||
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
#define BSP_SPI_FLASH_SIZE 0x02000000UL
|
||||
#define BSP_SPI_FLASH_JEDEC_ID 0x00010219UL
|
||||
#elif BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_MT25QU01G
|
||||
#define BSP_SPI_FLASH_SIZE 0x08000000UL
|
||||
#define BSP_SPI_FLASH_JEDEC_ID 0x0020bb21UL
|
||||
#elif BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_IS25WP512M
|
||||
#define BSP_SPI_FLASH_SIZE 0x04000000UL
|
||||
#define BSP_SPI_FLASH_JEDEC_ID 0x009d701aUL
|
||||
#else
|
||||
#error "Unsupported BSP_SPI_FLASH_PROFILE"
|
||||
#endif
|
||||
|
||||
#define BSP_SPI_FLASH_PAGE_SIZE 256UL
|
||||
#define BSP_SPI_FLASH_SECTOR_SIZE 0x00010000UL
|
||||
#define BSP_SPI_FLASH_JEDEC_ID 0x00010219UL
|
||||
#define BSP_SPI_FLASH_CONFIG_TBPARM (1u << 2)
|
||||
|
||||
void bsp_spi_flash_init(void);
|
||||
|
||||
@@ -15,12 +15,13 @@ MABI ?= lp64d
|
||||
BSP_UART_CLOCK_HZ ?= 100000000
|
||||
BSP_UART_BAUDRATE ?= 460800
|
||||
BSP_CLINT_TIMEBASE_HZ ?= 1000000
|
||||
BSP_SPI_FLASH_PROFILE ?= 1
|
||||
BSP_DTIM_BASE ?= 0x80000000
|
||||
BSP_DTIM_SIZE ?= 0x00100000
|
||||
CONFIG_STAMP := $(BUILD_DIR)/build_config.txt
|
||||
|
||||
# C sees BSP_DTIM_* while ld sees __dtim_*; both come from the same Makefile knobs.
|
||||
CFLAGS ?= -march=$(MARCH) -mabi=$(MABI) -mcmodel=medany -Os -ffreestanding -fno-builtin -fno-common -Wall -Wextra -I$(BSP_DIR)/include -DBSP_UART_CLOCK_HZ=$(BSP_UART_CLOCK_HZ)UL -DBSP_UART_BAUDRATE=$(BSP_UART_BAUDRATE)UL -DBSP_CLINT_TIMEBASE_HZ=$(BSP_CLINT_TIMEBASE_HZ)UL -DBSP_DTIM_BASE=$(BSP_DTIM_BASE)UL -DBSP_DTIM_SIZE=$(BSP_DTIM_SIZE)UL
|
||||
CFLAGS ?= -march=$(MARCH) -mabi=$(MABI) -mcmodel=medany -Os -ffreestanding -fno-builtin -fno-common -Wall -Wextra -I$(BSP_DIR)/include -DBSP_UART_CLOCK_HZ=$(BSP_UART_CLOCK_HZ)UL -DBSP_UART_BAUDRATE=$(BSP_UART_BAUDRATE)UL -DBSP_CLINT_TIMEBASE_HZ=$(BSP_CLINT_TIMEBASE_HZ)UL -DBSP_SPI_FLASH_PROFILE=$(BSP_SPI_FLASH_PROFILE) -DBSP_DTIM_BASE=$(BSP_DTIM_BASE)UL -DBSP_DTIM_SIZE=$(BSP_DTIM_SIZE)UL
|
||||
LDFLAGS ?= -T $(LINKER_SCRIPT) -nostartfiles -static -Wl,--gc-sections -Wl,--defsym=__dtim_base=$(BSP_DTIM_BASE) -Wl,--defsym=__dtim_size=$(BSP_DTIM_SIZE) -Wl,-Map,$(BUILD_DIR)/$(TARGET).map
|
||||
LDLIBS ?= -Wl,--start-group -lc -lgcc -Wl,--end-group
|
||||
|
||||
@@ -47,6 +48,7 @@ $(CONFIG_STAMP): FORCE | $(BUILD_DIR)
|
||||
'BSP_UART_CLOCK_HZ=$(BSP_UART_CLOCK_HZ)' \
|
||||
'BSP_UART_BAUDRATE=$(BSP_UART_BAUDRATE)' \
|
||||
'BSP_CLINT_TIMEBASE_HZ=$(BSP_CLINT_TIMEBASE_HZ)' \
|
||||
'BSP_SPI_FLASH_PROFILE=$(BSP_SPI_FLASH_PROFILE)' \
|
||||
'BSP_DTIM_BASE=$(BSP_DTIM_BASE)' \
|
||||
'BSP_DTIM_SIZE=$(BSP_DTIM_SIZE)' \
|
||||
'GPS_DEBUG=$(GPS_DEBUG)' \
|
||||
|
||||
@@ -102,7 +102,9 @@ GPS_EPHEMERIS_FLASH_ENABLE ?= 1
|
||||
GPS_EPHEMERIS_STORE_MAX_SLOTS ?= 0
|
||||
GPS_EPHEMERIS_FLASH_FORCE_FORMAT ?= 0
|
||||
GPS_EPHEMERIS_FLASH_SEED_INITIAL ?= 1
|
||||
GPS_EPHEMERIS_FLASH_BASE ?= 0x01fe0000
|
||||
GPS_NAV_CONTEXT_ENABLE ?= 1
|
||||
GPS_NAV_CONTEXT_FLASH_BASE ?= 0x01fc0000
|
||||
GPS_PPS_STATUS_LOG_INTERVAL ?= 10
|
||||
GPS_PPS_DOPPLER_PREDICTOR_ENABLE ?= 1
|
||||
GPS_PPS_DOPPLER_PREDICTOR_AB_UPDATES ?= 0
|
||||
@@ -123,7 +125,9 @@ CFLAGS += $(IMU_BACKEND_CFLAG) \
|
||||
-DGPS_EPHEMERIS_STORE_MAX_SLOTS=$(GPS_EPHEMERIS_STORE_MAX_SLOTS)u \
|
||||
-DGPS_EPHEMERIS_FLASH_FORCE_FORMAT=$(GPS_EPHEMERIS_FLASH_FORCE_FORMAT) \
|
||||
-DGPS_EPHEMERIS_FLASH_SEED_INITIAL=$(GPS_EPHEMERIS_FLASH_SEED_INITIAL) \
|
||||
-DGPS_EPHEMERIS_FLASH_BASE=$(GPS_EPHEMERIS_FLASH_BASE)UL \
|
||||
-DGPS_NAV_CONTEXT_ENABLE=$(GPS_NAV_CONTEXT_ENABLE) \
|
||||
-DGPS_NAV_CONTEXT_FLASH_BASE=$(GPS_NAV_CONTEXT_FLASH_BASE)UL \
|
||||
-DGPS_PPS_STATUS_LOG_INTERVAL=$(GPS_PPS_STATUS_LOG_INTERVAL) \
|
||||
-DGPS_PPS_DOPPLER_PREDICTOR_ENABLE=$(GPS_PPS_DOPPLER_PREDICTOR_ENABLE) \
|
||||
-DGPS_PPS_DOPPLER_PREDICTOR_AB_UPDATES=$(GPS_PPS_DOPPLER_PREDICTOR_AB_UPDATES)
|
||||
|
||||
@@ -144,10 +144,9 @@
|
||||
* 20 ms navigation bit; at a few ppm the 15 minute bound leaves
|
||||
* roughly two orders of magnitude of margin, and broadcast
|
||||
* ephemeris validity caps reuse well before that anyway. */
|
||||
/* Persistent ephemeris cache. The Genesys2 image places the
|
||||
* bitstream at 0 and the application at 0x01800000 on a 32 MiB
|
||||
* S25FL256S, so the last two 64 KiB sectors are free. Keeping the
|
||||
* store at the very top leaves the application region free to grow. */
|
||||
/* Persistent ephemeris cache. Board Makefiles place this store in
|
||||
* two reserved 64 KiB sectors near the top of the selected flash.
|
||||
* The defaults describe the 32 MiB Genesys2 layout. */
|
||||
#ifndef GPS_EPHEMERIS_FLASH_ENABLE
|
||||
#define GPS_EPHEMERIS_FLASH_ENABLE 1
|
||||
#endif
|
||||
@@ -170,8 +169,8 @@
|
||||
/*
|
||||
* Persistent navigation context (almanac, ionosphere model, last
|
||||
* position) in the two 64 KiB sectors immediately below the
|
||||
* ephemeris store. The application image lives at 0x01800000 and
|
||||
* is far smaller than the gap.
|
||||
* ephemeris store. Board Makefiles override both bases together for
|
||||
* larger flash devices.
|
||||
*/
|
||||
#ifndef GPS_NAV_CONTEXT_FLASH_BASE
|
||||
#define GPS_NAV_CONTEXT_FLASH_BASE 0x01FC0000UL
|
||||
|
||||
@@ -16,6 +16,30 @@
|
||||
#include <math.h>
|
||||
#include <string.h>
|
||||
|
||||
#if (GPS_EPHEMERIS_FLASH_ENABLE == 1)
|
||||
_Static_assert((GPS_EPHEMERIS_FLASH_BASE % BSP_SPI_FLASH_SECTOR_SIZE) == 0u,
|
||||
"ephemeris flash base must be sector aligned");
|
||||
_Static_assert(GPS_EPHEMERIS_FLASH_BASE <=
|
||||
(BSP_SPI_FLASH_SIZE - (2u * BSP_SPI_FLASH_SECTOR_SIZE)),
|
||||
"ephemeris store exceeds selected flash");
|
||||
#endif
|
||||
#if (GPS_NAV_CONTEXT_ENABLE == 1)
|
||||
_Static_assert((GPS_NAV_CONTEXT_FLASH_BASE % BSP_SPI_FLASH_SECTOR_SIZE) == 0u,
|
||||
"navigation context flash base must be sector aligned");
|
||||
_Static_assert(GPS_NAV_CONTEXT_FLASH_BASE <=
|
||||
(BSP_SPI_FLASH_SIZE - (2u * BSP_SPI_FLASH_SECTOR_SIZE)),
|
||||
"navigation context store exceeds selected flash");
|
||||
#endif
|
||||
#if ((GPS_EPHEMERIS_FLASH_ENABLE == 1) && (GPS_NAV_CONTEXT_ENABLE == 1))
|
||||
_Static_assert((GPS_NAV_CONTEXT_FLASH_BASE +
|
||||
(2u * BSP_SPI_FLASH_SECTOR_SIZE) <=
|
||||
GPS_EPHEMERIS_FLASH_BASE) ||
|
||||
(GPS_EPHEMERIS_FLASH_BASE +
|
||||
(2u * BSP_SPI_FLASH_SECTOR_SIZE) <=
|
||||
GPS_NAV_CONTEXT_FLASH_BASE),
|
||||
"persistent flash stores overlap");
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
GPS_ISR_EVENT_ACQ_DONE = 0,
|
||||
GPS_ISR_EVENT_TRK_STATUS
|
||||
|
||||
Reference in New Issue
Block a user