This includes a basic driver for built-in flash on the Texas Intruments
SimpleLink CC13xx/CC26xx SoC series.
The driver makes use of driverlib HAL from TI's SDK and was tested on
two LaunchXL development boards with CC1352R and CC2652R SoCs:
- CC1352R1 LaunchXL
- CC26x2R1 LaunchXL
Tests were done using:
- flash shell sample (samples/drivers/flash_shell)
- littlefs filesystem sample (samples/subsys/fs/littlefs)*
- MCUboot (bootloader/mcuboot/boot/zephyr)*
* additional changes in DTS for the boards were required (partitions
table) and are not part of this changeset (will be introduced later)
Some additional information about the implementation:
1. TI's Technical Reference Manual for CC13x2 and CC26x2 points out that
"An individual 64-bit word can be programmed to change bits 1 to 0"
but it seems this 'alignment' requirement is handled internally by
the ROM function and thus 'write-block-size' is set to 1.
2. Interrupts, VIMS and line buffers are disabled during flash content
update (write or erase) and restored afterwards as recommended by TI.
3. Only RAM to flash write is supported (source of data to be written to
flash can't point to flash).
4. The driver doesn't take care of flash sector protection disable as
that functionality is handled by CCFG. Write or erase requests which
refer to a protected area will fail.
Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
85 lines
4.1 KiB
CMake
85 lines
4.1 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
zephyr_library()
|
|
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_CC13XX_CC26XX soc_flash_cc13xx_cc26xx.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_TELINK_B91 soc_flash_b91.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SPI_NOR spi_nor.c)
|
|
zephyr_library_sources_ifdef(CONFIG_NORDIC_QSPI_NOR nrf_qspi_nor.c)
|
|
zephyr_library_sources_ifdef(CONFIG_FLASH_SIMULATOR flash_simulator.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SPI_FLASH_AT45 spi_flash_at45.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_ITE_IT8XXX2 flash_ite_it8xxx2.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_NRF soc_flash_nrf.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_NRF_RADIO_SYNC_TICKER soc_flash_nrf_ticker.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_MCUX soc_flash_mcux.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_LPC soc_flash_lpc.c)
|
|
zephyr_library_sources_ifdef(CONFIG_FLASH_PAGE_LAYOUT flash_page_layout.c)
|
|
zephyr_library_sources_ifdef(CONFIG_USERSPACE flash_handlers.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_SAM0 flash_sam0.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_SAM flash_sam.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_NIOS2_QSPI soc_flash_nios2_qspi.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_GECKO flash_gecko.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_RV32M1 soc_flash_rv32m1.c)
|
|
zephyr_library_sources_ifdef(CONFIG_FLASH_STM32_QSPI flash_stm32_qspi.c)
|
|
zephyr_library_sources_ifdef(CONFIG_FLASH_STM32_OSPI flash_stm32_ospi.c)
|
|
zephyr_library_sources_ifdef(CONFIG_FLASH_MCUX_FLEXSPI_MX25UM51345G flash_mcux_flexspi_mx25um51345g.c)
|
|
zephyr_library_sources_ifdef(CONFIG_FLASH_MCUX_FLEXSPI_NOR flash_mcux_flexspi_nor.c)
|
|
zephyr_library_sources_ifdef(CONFIG_FLASH_MCUX_FLEXSPI_HYPERFLASH flash_mcux_flexspi_hyperflash.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_ESP32 flash_esp32.c)
|
|
|
|
if(CONFIG_FLASH_MCUX_FLEXSPI_XIP)
|
|
dt_chosen(chosen_flash PROPERTY "zephyr,flash")
|
|
dt_prop(compat_flash PATH ${chosen_flash} PROPERTY compatible)
|
|
if(compat_flash MATCHES "nxp,imx-flexspi-nor")
|
|
zephyr_code_relocate(flash_mcux_flexspi_nor.c ${CONFIG_FLASH_MCUX_FLEXSPI_XIP_MEM}_TEXT)
|
|
elseif(compat_flash MATCHES "nxp,imx-flexspi-mx25um51345g")
|
|
zephyr_code_relocate(flash_mcux_flexspi_mx25um51345g.c ${CONFIG_FLASH_MCUX_FLEXSPI_XIP_MEM}_TEXT)
|
|
elseif(compat_flash MATCHES "nxp,imx-flexspi-hyperflash")
|
|
zephyr_code_relocate(flash_mcux_flexspi_hyperflash.c ${CONFIG_FLASH_MCUX_FLEXSPI_XIP_MEM}_TEXT)
|
|
endif()
|
|
endif()
|
|
|
|
if(CONFIG_SOC_FLASH_STM32)
|
|
if(CONFIG_SOC_SERIES_STM32H7X)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32H7X flash_stm32h7x.c)
|
|
else()
|
|
zephyr_library_sources(flash_stm32.c)
|
|
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_FLASH_STM32_V1 flash_stm32_v1.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32F2X flash_stm32f2x.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32F4X flash_stm32f4x.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32F7X flash_stm32f7x.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32L4X flash_stm32l4x.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32L5X flash_stm32l5_u5.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32WLX flash_stm32l4x.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32WBX flash_stm32wbx.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32G0X flash_stm32g0x.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32G4X flash_stm32g4x.c)
|
|
zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_STM32U5X flash_stm32l5_u5.c)
|
|
endif()
|
|
endif()
|
|
|
|
zephyr_library_include_directories_ifdef(
|
|
CONFIG_FLASH_MCUX_FLEXSPI_NOR
|
|
${ZEPHYR_BASE}/drivers/memc
|
|
)
|
|
|
|
zephyr_library_include_directories_ifdef(
|
|
CONFIG_FLASH_MCUX_FLEXSPI_MX25UM51345G
|
|
${ZEPHYR_BASE}/drivers/memc
|
|
)
|
|
|
|
zephyr_library_include_directories_ifdef(
|
|
CONFIG_FLASH_MCUX_FLEXSPI_HYPERFLASH
|
|
${ZEPHYR_BASE}/drivers/memc
|
|
)
|
|
|
|
zephyr_library_include_directories_ifdef(
|
|
CONFIG_SOC_FLASH_NRF_RADIO_SYNC_TICKER
|
|
${ZEPHYR_BASE}/subsys/bluetooth
|
|
${ZEPHYR_BASE}/subsys/bluetooth/controller/ll_sw/nordic
|
|
)
|
|
|
|
zephyr_library_sources_ifdef(CONFIG_FLASH_SHELL flash_shell.c)
|
|
zephyr_library_sources_ifdef(CONFIG_FLASH_JESD216 jesd216.c)
|