@@ -744,6 +744,13 @@ def has_dataflash_spi(self):
744744 return True
745745 return False
746746
747+ def has_dataflash_wspi (self ):
748+ '''check for dataflash connected to wspi (quadspi/octospi) bus'''
749+ for dev in self .wspidev :
750+ if dev [0 ] == 'dataflash' :
751+ return True
752+ return False
753+
747754 def has_sdcard_spi (self ):
748755 '''check for sdcard connected to spi bus'''
749756 for dev in self .spidev :
@@ -888,8 +895,10 @@ def write_mcu_config(self, f):
888895 f .write ('#define HAL_STDOUT_SERIAL %s\n \n ' % self .get_config ('STDOUT_SERIAL' ))
889896 f .write ('// baudrate used for stdout (printf)\n ' )
890897 f .write ('#define HAL_STDOUT_BAUDRATE %u\n \n ' % self .get_config ('STDOUT_BAUDRATE' , type = int ))
891- if len (self .dataflash_list ) > 0 :
892- # we only support dataflash OR sdcard, so prioritize dataflash if its been explicitly configured
898+ # Check if any dataflash uses block-based logging (not littlefs)
899+ has_block_dataflash = any (d [0 ].startswith ('block' ) for d in self .dataflash_list )
900+ if has_block_dataflash :
901+ # block-based dataflash conflicts with FATFS, so disable it
893902 f .write ('#define HAL_USE_FATFS FALSE\n \n ' )
894903 f .write ('#define HAL_USE_SDC FALSE\n ' )
895904 self .build_flags .append ('USE_FATFS=no' )
@@ -1548,10 +1557,13 @@ def write_WSPI_table(self, f):
15481557 def write_WSPI_config (self , f ):
15491558 '''write SPI config defines'''
15501559 # only the bootloader must run the hal lld (and QSPI clock) otherwise it is not possible to
1551- # bootstrap into external flash
1552- for t in list (self .bytype .keys ()) + list (self .alttype .keys ()):
1553- if (t .startswith ('QUADSPI' ) or t .startswith ('OCTOSPI' )) and not self .is_bootloader_fw ():
1554- f .write ('#define HAL_XIP_ENABLED TRUE\n ' )
1560+ # bootstrap into external flash. Skip if HAL_XIP_ENABLED is explicitly defined in hwdef.
1561+ xip_already_defined = any ('HAL_XIP_ENABLED' in line for line in self .all_lines )
1562+ if not xip_already_defined :
1563+ for t in list (self .bytype .keys ()) + list (self .alttype .keys ()):
1564+ if (t .startswith ('QUADSPI' ) or t .startswith ('OCTOSPI' )) and not self .is_bootloader_fw ():
1565+ f .write ('#define HAL_XIP_ENABLED TRUE\n ' )
1566+ break
15551567
15561568 if len (self .wspidev ) == 0 :
15571569 # nothing else to do
@@ -1615,10 +1627,10 @@ def write_AIRSPEED_config(self, f):
16151627
16161628 def write_DATAFLASH_config (self , f ):
16171629 '''write dataflash config defines'''
1618- # DATAFLASH block|littlefs:<w25nxx|jedec_nor>
1630+ # DATAFLASH block|littlefs:<w25nxx|jedec_nor|wspi_nand|mt29f1 >
16191631 seen = set ()
16201632 for dev in self .dataflash_list :
1621- if not self .has_dataflash_spi ():
1633+ if not self .has_dataflash_spi () and not self . has_dataflash_wspi () :
16221634 self .error ("Missing DATAFLASH device: %s" % self .seen_str (dev ))
16231635 if self .seen_str (dev ) in seen :
16241636 self .error ("Duplicate DATAFLASH: %s" % self .seen_str (dev ))
@@ -1638,7 +1650,14 @@ def write_DATAFLASH_config(self, f):
16381650 f .write ('#define AP_FILESYSTEM_LITTLEFS_FLASH_TYPE AP_FILESYSTEM_FLASH_W25NXX\n ' )
16391651 elif len (a ) > 1 and a [1 ].startswith ('jedec_nor' ):
16401652 f .write ('#define AP_FILESYSTEM_LITTLEFS_FLASH_TYPE AP_FILESYSTEM_FLASH_JEDEC_NOR\n ' )
1641- self .build_flags .append ('USE_FATFS=no' )
1653+ elif len (a ) > 1 and (a [1 ].startswith ('wspi_nand' ) or a [1 ].startswith ('mt29fxx' )):
1654+ # WSPI-connected NAND flash (Micron MT29F family: 1G/2G/4G/8G)
1655+ f .write ('#define AP_FILESYSTEM_LITTLEFS_FLASH_TYPE AP_FILESYSTEM_FLASH_WSPI_NAND\n ' )
1656+ f .write ('#define AP_FILESYSTEM_LITTLEFS_MT29FXX_ENABLED 1\n ' )
1657+ # Only disable FATFS if there's no SDMMC or SPI-connected SD card
1658+ has_sdmmc = any (k .startswith ('SDMMC' ) for k in self .bytype )
1659+ if not self .has_sdcard_spi () and not has_sdmmc :
1660+ self .build_flags .append ('USE_FATFS=no' )
16421661 self .env_vars ['WITH_LITTLEFS' ] = "1"
16431662
16441663 def write_board_validate_macro (self , f ):
0 commit comments