Skip to content

Commit 0cad205

Browse files
committed
hwdef: add MT29FXX WSPI NAND support to DATAFLASH directive
Support 'littlefs:mt29fxx' in DATAFLASH directive for WSPI-connected Micron MT29F SPI NAND flash chips.
1 parent ba49b48 commit 0cad205

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)