Skip to content

Commit 5fe4daf

Browse files
authored
Merge pull request #14221 from macronix/macronix_rww
Enable the RWW function of Macronix Flash MX25LW51245G in OSPI block device driver
2 parents 045c48d + 6d90674 commit 5fe4daf

File tree

6 files changed

+316
-38
lines changed

6 files changed

+316
-38
lines changed

storage/blockdevice/COMPONENT_OSPIF/include/OSPIF/MX25LM51245G_config.h

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#ifndef MBED_OSPI_FLASH_MX25LM51245G_H
1818
#define MBED_OSPI_FLASH_MX25LM51245G_H
1919

20-
2120
#define OSPI_FLASH_CHIP_STRING "macronix MX25LM51245G"
2221

2322
// This is a workaround,
@@ -26,20 +25,13 @@
2625
// The code below can be removed when users test with the new flash.
2726
#define NEED_DEFINE_SFDP_PARA
2827

29-
#ifdef NEED_DEFINE_SFDP_PARA
30-
uint8_t _sfdp_head_table[32] = {0x53, 0x46, 0x44, 0x50, 0x06, 0x01, 0x02, 0xFF, 0x00, 0x06, 0x01,
31-
0x10, 0x30, 0x00, 0x00, 0xFF, 0xC2, 0x00, 0x01, 0x04, 0x10, 0x01,
32-
0x00, 0xFF, 0x84, 0x00, 0x01, 0x02, 0xC0, 0x00, 0x00, 0xFF
33-
};
34-
uint8_t _sfdp_basic_param_table[64] = {0x30, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF,
35-
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x14, 0xEC,
36-
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0x20,
37-
0x10, 0xDC, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
38-
0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
39-
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
40-
0xFF, 0x50, 0xF9, 0x80
41-
};
42-
uint8_t _sfdp_4_byte_inst_table[8] = {0x7F, 0xEF, 0xFF, 0xFF, 0x21, 0x5C, 0xDC, 0x14};
43-
#endif
28+
#define OSPIF_CR2_OPI_EN_ADDR 0x00000000
29+
30+
#define MX_FLASH_BLOCK_SIZE 0x10000 /* 1024 blocks of 64 KBytes */
31+
#define MX_FLASH_SECTOR_SIZE 0x1000 /* 16384 sectors of 4 kBytes */
32+
#define MX_FLASH_PAGE_SIZE 0x100 /* 262144 pages of 256 bytes */
33+
#define MX_FLASH_CHUNK_SIZE 0x10 /* 16 bytes */
34+
#define MX_FLASH_BANK_SIZE 0x01000000 /* 16 MBytes */
35+
#define MX_FLASH_BANK_SIZE_MASK ~(MX_FLASH_BANK_SIZE - 1) /* 0xFF000000 */
4436

4537
#endif // MBED_OSPI_FLASH_MX25LM51245G_H
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/* mbed Microcontroller Library
2+
* Copyright (c) 2020 ARM Limited
3+
* SPDX-License-Identifier: Apache-2.0
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
#ifndef MBED_OSPI_FLASH_MX25LW51245G_H
18+
#define MBED_OSPI_FLASH_MX25LW51245G_H
19+
20+
#define OSPI_FLASH_CHIP_STRING "macronix MX25LW51245G"
21+
22+
// This is a workaround,
23+
// The sfdp parameter values in Macronix old octaflash(include the MX25LW51245G on L4R9I_DISCO) are all 0xFF,
24+
// so we need to define the parameter values by software to support SFDP parsing.
25+
// The code below can be removed when users test with the new flash.
26+
#define NEED_DEFINE_SFDP_PARA
27+
28+
#define MX_FLASH_SUPPORT_RWW 1
29+
30+
// Configuration Register2 address
31+
#define OSPIF_CR2_OPI_EN_ADDR 0x00000000
32+
#define OSPIF_CR2_BANK_STATUS_ADDR 0xc0000000
33+
#define OSPIF_CR2_RWWDI ((uint8_t)0x00) /*!< No active program or erase operation */
34+
#define OSPIF_CR2_RWWDS ((uint8_t)0x01) /*!< Program/erase in other bank */
35+
#define OSPIF_CR2_RWWBS ((uint8_t)0x03) /*!< program/erase operation in addressed bank */
36+
37+
#define MX_FLASH_BLOCK_SIZE 0x10000 /* 1024 blocks of 64 KBytes */
38+
#define MX_FLASH_SECTOR_SIZE 0x1000 /* 16384 sectors of 4 kBytes */
39+
#define MX_FLASH_PAGE_SIZE 0x100 /* 262144 pages of 256 bytes */
40+
#define MX_FLASH_CHUNK_SIZE 0x10 /* 16 bytes */
41+
#define MX_FLASH_BANK_SIZE 0x01000000 /* 16 MBytes */
42+
#define MX_FLASH_BANK_SIZE_MASK ~(MX_FLASH_BANK_SIZE - 1) /* 0xFF000000 */
43+
44+
#endif // MBED_OSPI_FLASH_MX25LW51245G_H

storage/blockdevice/COMPONENT_OSPIF/include/OSPIF/OSPIFBlockDevice.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222
#include "blockdevice/BlockDevice.h"
2323
#include "platform/Callback.h"
2424

25+
#if defined(TARGET_MX25LM51245G)
26+
#include "MX25LM51245G_config.h"
27+
#endif
28+
29+
#if defined(TARGET_MX25LW51245G)
30+
#include "MX25LW51245G_config.h"
31+
#endif
32+
2533
#ifndef MBED_CONF_OSPIF_OSPI_IO0
2634
#define MBED_CONF_OSPIF_OSPI_IO0 NC
2735
#endif
@@ -381,6 +389,10 @@ class OSPIFBlockDevice : public mbed::BlockDevice {
381389
// Detect 4-byte addressing mode and enable it if supported
382390
int _sfdp_detect_and_enable_4byte_addressing(uint8_t *basic_param_table_ptr, int basic_param_table_size);
383391

392+
#ifdef MX_FLASH_SUPPORT_RWW
393+
bool _is_mem_ready_rww(bd_addr_t addr, uint8_t rw);
394+
#endif
395+
384396
private:
385397
enum ospif_clear_protection_method_t {
386398
OSPIF_BP_ULBPR, // Issue global protection unlock instruction
@@ -449,6 +461,16 @@ class OSPIFBlockDevice : public mbed::BlockDevice {
449461

450462
uint32_t _init_ref_count;
451463
bool _is_initialized;
464+
#ifdef MX_FLASH_SUPPORT_RWW
465+
enum wait_flag {
466+
NOT_STARTED, // no wait is started
467+
WRITE_WAIT_STARTED, // write wait is started
468+
ERASE_WAIT_STARTED, // erase wait is started
469+
};
470+
uint32_t _busy_bank; // Current busy bank
471+
wait_flag _wait_flag; // wait flag
472+
PlatformMutex _busy_mutex;
473+
#endif
452474
};
453475

454476
#endif

0 commit comments

Comments
 (0)