Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 29 additions & 5 deletions bsp/stm32/libraries/HAL_Drivers/drivers/drv_qspi.c
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
/*
* Copyright (c) 2006-2023, RT-Thread Development Team
* Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-11-27 zylx first version
* Date Author Notes
* 2018-11-27 zylx first version
* 2025-12-14 LinuxMint-User resolve QSPI interface type mismatch
*/

#include "board.h"
Expand Down Expand Up @@ -146,6 +147,7 @@ static void qspi_send_cmd(struct stm32_qspi_bus *qspi_bus, struct rt_qspi_messag
{
Cmdhandler.InstructionMode = QSPI_INSTRUCTION_4_LINES;
}

if (message->address.qspi_lines == 0)
{
Cmdhandler.AddressMode = QSPI_ADDRESS_NONE;
Expand All @@ -162,6 +164,7 @@ static void qspi_send_cmd(struct stm32_qspi_bus *qspi_bus, struct rt_qspi_messag
{
Cmdhandler.AddressMode = QSPI_ADDRESS_4_LINES;
}

if (message->address.size == 24)
{
Cmdhandler.AddressSize = QSPI_ADDRESS_24_BITS;
Expand All @@ -170,6 +173,7 @@ static void qspi_send_cmd(struct stm32_qspi_bus *qspi_bus, struct rt_qspi_messag
{
Cmdhandler.AddressSize = QSPI_ADDRESS_32_BITS;
}

if (message->qspi_data_lines == 0)
{
Cmdhandler.DataMode = QSPI_DATA_NONE;
Expand Down Expand Up @@ -323,8 +327,27 @@ rt_err_t rt_hw_qspi_device_attach(const char *bus_name, const char *device_name,
goto __exit;
}

qspi_device->enter_qspi_mode = enter_qspi_mode;
qspi_device->exit_qspi_mode = exit_qspi_mode;
/* Safe type conversion to resolve interface contract mismatch.
* Caller ensures the function pointer is compatible via adapter pattern.
*/
if (enter_qspi_mode != RT_NULL)
{
qspi_device->enter_qspi_mode = (void (*)(struct rt_qspi_device *))enter_qspi_mode;
}
else
{
qspi_device->enter_qspi_mode = RT_NULL;
}

if (exit_qspi_mode != RT_NULL)
{
qspi_device->exit_qspi_mode = (void (*)(struct rt_qspi_device *))exit_qspi_mode;
}
else
{
qspi_device->exit_qspi_mode = RT_NULL;
}

qspi_device->config.qspi_dl_width = data_line_width;

#ifdef BSP_QSPI_USING_SOFTCS
Expand Down Expand Up @@ -377,3 +400,4 @@ INIT_BOARD_EXPORT(rt_hw_qspi_bus_init);

#endif /* BSP_USING_QSPI */
#endif /* RT_USING_QSPI */

Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
CONFIG_RT_USING_DFS=y
CONFIG_DFS_USING_POSIX=y
CONFIG_DFS_USING_WORKDIR=y
CONFIG_DFS_FD_MAX=16
CONFIG_RT_USING_DFS_V1=y
CONFIG_DFS_FILESYSTEMS_MAX=4
CONFIG_DFS_FILESYSTEM_TYPES_MAX=4
CONFIG_RT_USING_DFS_ELMFAT=y
CONFIG_RT_DFS_ELM_CODE_PAGE=437
CONFIG_RT_DFS_ELM_WORD_ACCESS=y
CONFIG_RT_DFS_ELM_USE_LFN_3=y
CONFIG_RT_DFS_ELM_USE_LFN=3
CONFIG_RT_DFS_ELM_LFN_UNICODE_0=y
CONFIG_RT_DFS_ELM_LFN_UNICODE=0
CONFIG_RT_DFS_ELM_MAX_LFN=255
CONFIG_RT_DFS_ELM_DRIVES=2
CONFIG_RT_DFS_ELM_MAX_SECTOR_SIZE=4096
CONFIG_RT_DFS_ELM_REENTRANT=y
CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000
CONFIG_RT_USING_DFS_DEVFS=y

CONFIG_RT_USING_SPI=y
CONFIG_RT_USING_SPI_ISR=y
CONFIG_RT_USING_QSPI=y
CONFIG_RT_USING_SFUD=y
CONFIG_RT_SFUD_USING_SFDP=y
CONFIG_RT_SFUD_USING_FLASH_INFO_TABLE=y
CONFIG_RT_SFUD_USING_QSPI=y
CONFIG_RT_SFUD_SPI_MAX_HZ=50000000
CONFIG_BSP_USING_QSPI_FLASH=y
CONFIG_BSP_USING_QSPI=y
17 changes: 12 additions & 5 deletions bsp/stm32/stm32l475-atk-pandora/board/ports/drv_qspi_flash.c
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
* Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-11-27 zylx first version
* Date Author Notes
* 2018-11-27 zylx first version
* 2025-12-14 LinuxMint-User resolve QSPI compilation error
*/

#include <board.h>
Expand All @@ -19,6 +20,9 @@
#include "dev_spi_flash.h"
#include "dev_spi_flash_sfud.h"

#define QSPI_BUS_NAME "qspi1"
#define QSPI_DEVICE_NAME "qspi10"

char w25qxx_read_status_register2(struct rt_qspi_device *device)
{
/* 0x35 read status register2 */
Expand Down Expand Up @@ -62,16 +66,18 @@ void w25qxx_enter_qspi_mode(struct rt_qspi_device *device)

static int rt_hw_qspi_flash_with_sfud_init(void)
{
rt_hw_qspi_device_attach("qspi1", "qspi10", RT_NULL, 4, w25qxx_enter_qspi_mode, RT_NULL);
rt_hw_qspi_device_attach(QSPI_BUS_NAME, QSPI_DEVICE_NAME, RT_NULL, 4,
(void (*)(void))w25qxx_enter_qspi_mode, RT_NULL);

/* init w25q128 */
if (RT_NULL == rt_sfud_flash_probe("W25Q128", "qspi10"))
if (RT_NULL == rt_sfud_flash_probe("W25Q128", QSPI_DEVICE_NAME))
{
return -RT_ERROR;
}

return RT_EOK;
}

INIT_COMPONENT_EXPORT(rt_hw_qspi_flash_with_sfud_init);

#if defined(RT_USING_DFS_ELMFAT) && !defined(BSP_USING_SDCARD_FATFS)
Expand Down Expand Up @@ -108,3 +114,4 @@ INIT_ENV_EXPORT(mnt_init);

#endif /* defined(RT_USING_DFS_ELMFAT) && !defined(BSP_USING_SDCARD_FATFS) */
#endif /* BSP_USING_QSPI_FLASH */