Skip to content

Commit 7abcfc4

Browse files
tu-brianMaureenHelm
authored andcommitted
drivers: flash: bug fix select correct erase address mode
SPI / QSPI flash with density above 16MB must use 4 byte addressing mode also on sector erase. This patch selects the right addressing mode and opcode when 4 byte addressing mode is selected Signed-off-by: Brian Juel Folkmann <bju@trackunit.com>
1 parent 66f8ab5 commit 7abcfc4

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

drivers/flash/flash_stm32_ospi.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,10 +1006,15 @@ static int flash_stm32_ospi_erase(const struct device *dev, off_t addr,
10061006
cmd_erase.Instruction = bet->cmd;
10071007
} else {
10081008
/* Use the default sector erase cmd */
1009-
cmd_erase.Instruction =
1010-
(dev_cfg->data_mode == OSPI_OPI_MODE)
1011-
? SPI_NOR_OCMD_SE
1012-
: SPI_NOR_CMD_SE; /* Erase sector size 4K-Bytes */
1009+
if (dev_cfg->data_mode == OSPI_OPI_MODE) {
1010+
cmd_erase.Instruction = SPI_NOR_OCMD_SE;
1011+
} else {
1012+
cmd_erase.Instruction =
1013+
(stm32_ospi_hal_address_size(dev) ==
1014+
HAL_OSPI_ADDRESS_32_BITS)
1015+
? SPI_NOR_CMD_SE_4B
1016+
: SPI_NOR_CMD_SE;
1017+
}
10131018
cmd_erase.AddressMode =
10141019
(dev_cfg->data_mode == OSPI_OPI_MODE)
10151020
? HAL_OSPI_ADDRESS_8_LINES
@@ -1018,10 +1023,7 @@ static int flash_stm32_ospi_erase(const struct device *dev, off_t addr,
10181023
(dev_cfg->data_rate == OSPI_DTR_TRANSFER)
10191024
? HAL_OSPI_ADDRESS_DTR_ENABLE
10201025
: HAL_OSPI_ADDRESS_DTR_DISABLE;
1021-
cmd_erase.AddressSize =
1022-
(dev_cfg->data_mode == OSPI_OPI_MODE)
1023-
? stm32_ospi_hal_address_size(dev)
1024-
: HAL_OSPI_ADDRESS_24_BITS;
1026+
cmd_erase.AddressSize = stm32_ospi_hal_address_size(dev);
10251027
cmd_erase.Address = addr;
10261028
/* Avoid using wrong erase type,
10271029
* if zero entries are found in erase_types

drivers/flash/spi_nor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#define SPI_NOR_CMD_PP_1_4_4 0x38 /* Quad Page program (1-4-4) */
3737
#define SPI_NOR_CMD_RDCR 0x15 /* Read control register */
3838
#define SPI_NOR_CMD_SE 0x20 /* Sector erase */
39+
#define SPI_NOR_CMD_SE_4B 0x21 /* Sector erase 4 byte address*/
3940
#define SPI_NOR_CMD_BE_32K 0x52 /* Block erase 32KB */
4041
#define SPI_NOR_CMD_BE 0xD8 /* Block erase */
4142
#define SPI_NOR_CMD_CE 0xC7 /* Chip erase */

0 commit comments

Comments
 (0)