SDcard not working when storing params in internal flash

Hi guys. I’ve been trying to get sdcard working. But I kept getting ‘PreArm: Logging failed’. If I add ‘define HAL_USE_EMPTY_STORAGE 1’ to hwdef.dat, then the sdcard works. Any idea why? BTW, I’m using the internal flash of the STM32 to store parameters. My chip is STM32F405RGT6.
Here is my hwdeg.dat.

# MCU class and specific type
MCU STM32F4xx STM32F405xx

# board ID for firmware load
APJ_BOARD_ID 235

# crystal frequency
OSCILLATOR_HZ 8000000

define STM32_ST_USE_TIMER 2
#define CH_CFG_ST_RESOLUTION 16

FLASH_SIZE_KB 1024


PC3 BATT_VOLTAGE_SENS ADC1 SCALE(1)
PC2 BATT_CURRENT_SENS ADC1 SCALE(1)


define HAL_BATT_VOLT_PIN 13
define HAL_BATT_CURR_PIN 12
define HAL_BATT_VOLT_SCALE 10.1
define HAL_BATT_CURR_SCALE 17.0


PC1 RSSI_ADC_PIN ADC1 SCALE(1)
define BOARD_RSSI_ANA_PIN 11


PC8 SDIO_D0 SDIO
PC9 SDIO_D1 SDIO
PC10 SDIO_D2 SDIO
PC11 SDIO_D3 SDIO
PC12 SDIO_CK SDIO
PD2 SDIO_CMD SDIO

# Nnow some defines for logging and terrain data files.
define HAL_BOARD_LOG_DIRECTORY "/APM/LOGS"
define HAL_BOARD_TERRAIN_DIRECTORY "/APM/TERRAIN"

define HAL_USE_EMPTY_STORAGE 1
define HAL_STORAGE_SIZE 15360

# Enable FAT filesystem support (needs a microSD defined via SDIO).
define HAL_OS_FATFS_IO 1

# Now the serial ordering. These map to the SERIALn_ parameter numbers
# If you use a shorter list then HAL_Empty::UARTDriver
# objects are substituted for later UARTs, or you can leave a gap by
# listing one or more of the uarts as EMPTY.
# The normal usage of this ordering is:
# 1) SERIAL0: console (primary mavlink, usually USB)
# 2) SERIAL1: telem1
# 3) SERIAL2: telem2
# 4) SERIAL3: primary GPS
# 5) SERIAL4: GPS2
# 6) SERIAL5: extra UART (usually RTOS debug console)
# order of UARTs (and USB)
SERIAL_ORDER OTG1 USART6 USART1 UART4 USART2 USART3


PA11 OTG_FS_DM OTG1
PA12 OTG_FS_DP OTG1

# USART6, telem1, SERIAL1
PC6 USART6_TX USART6
PC7 USART6_RX USART6

# USART1 telem2, SERIAL2
PA9 USART1_TX USART1
PA10 USART1_RX USART1

# UART4 (GPS), SERIAL3
PA0 UART4_TX UART4 NODMA
PA1 UART4_RX UART4 NODMA

# USART2 SERIAL4
PA2 USART2_TX USART2
PA3 USART2_RX USART2

# USART3 SERIAL5
PB10 USART3_TX USART3 NODMA
PB11 USART3_RX USART3 NODMA


PB6 TIM4_CH1 TIM4 RCININT FLOAT LOW

# debug 
PA13 JTMS-SWDIO SWD
PA14 JTCK-SWCLK SWD

# PWM out pins. Note that channel order follows the ArduPilot motor
# order conventions
PB0 TIM3_CH3 TIM3 PWM(1) GPIO(50)
PB1 TIM3_CH4 TIM3 PWM(2) GPIO(51)
PB4 TIM3_CH1 TIM3 PWM(3) GPIO(52)
PB5 TIM3_CH2 TIM3 PWM(4) GPIO(53)


define STORAGE_FLASH_PAGE 2

# reserve 32k for bootloader and 32k for flash storage
FLASH_RESERVE_START_KB 64

# spi1 bus for IMU-MPU9250
PA5 SPI1_SCK SPI1
PA6 SPI1_MISO SPI1
PA7 SPI1_MOSI SPI1


PB13 SPI2_SCK SPI2
PB14 SPI2_MISO SPI2
PB15 SPI2_MOSI SPI2


PB3 SPL_CS CS
PA15 ICM20602_CS CS
PC4 MPU9250_CS CS

# only one I2C bus
I2C_ORDER I2C1

# only one I2C bus in normal config
PB8 I2C1_SCL I2C1
PB9 I2C1_SDA I2C1

# SPI devices
SPIDEV spl06     SPI2 DEVID1 SPL_CS     MODE3 1*MHZ 1*MHZ
SPIDEV icm20602  SPI2 DEVID2 ICM20602_CS  MODE3 2*MHZ 8*MHZ

# one IMU
IMU Invensense SPI:icm20602 ROTATION_NONE

# one baro
define HAL_BARO_ALLOW_INIT_NO_BARO
BARO SPL06 SPI:spl06

# probe external compasses plus one in 9250
COMPASS IST8310 I2C:ALL_INTERNAL:0x0C true ROTATION_ROLL_180
define HAL_PROBE_EXTERNAL_I2C_COMPASSES
define HAL_I2C_INTERNAL_MASK 0

# 4 PWM available by default
define BOARD_PWM_COUNT_DEFAULT 4


define HAL_MINIMIZE_FEATURES 1

#eliminate EKF2 to save flash size
define HAL_NAVEKF2_AVAILABLE 1

Problem solved, as it turns out, my sdcard is formatted as FAT ,not FAT32.