mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-15 04:51:37 +08:00
199 lines
6.8 KiB
C
199 lines
6.8 KiB
C
/****************************************************************************
|
|
* config/imxrt1060-evk/src/imxrt_flexspi_nor_flash.c
|
|
*
|
|
* Copyright (C) 2018 Gregory Nutt. All rights reserved.
|
|
* Authors: Ivan Ucherdzhiev <ivanucherdjiev@gmail.com>
|
|
* David Sidrane <david_s5@nscdg.com>
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in
|
|
* the documentation and/or other materials provided with the
|
|
* distribution.
|
|
* 3. Neither the name NuttX nor the names of its contributors may be
|
|
* used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
****************************************************************************/
|
|
|
|
/*******************************************************************************
|
|
* Included Files
|
|
******************************************************************************/
|
|
|
|
|
|
#include "imxrt_flexspi_nor_flash.h"
|
|
|
|
/*******************************************************************************
|
|
* Public Data
|
|
******************************************************************************/
|
|
|
|
#if defined (CONFIG_NXP_FMURT1062_V3_HYPER_FLASH)
|
|
__attribute__((section(".boot_hdr.conf")))
|
|
const struct flexspi_nor_config_s g_flash_config = {
|
|
.mem_config =
|
|
{
|
|
.tag = FLEXSPI_CFG_BLK_TAG,
|
|
.version = FLEXSPI_CFG_BLK_VERSION,
|
|
.read_sample_clksrc = FLASH_READ_SAMPLE_CLK_EXTERNALINPUT_FROM_DQSPAD,
|
|
.cs_hold_time = 3u,
|
|
.cs_setup_time = 3u,
|
|
.column_address_width = 3u,
|
|
|
|
/* Enable DDR mode, Word addassable, Safe configuration, Differential clock */
|
|
|
|
.controller_misc_option = (1u << FLEXSPIMISC_OFFSET_DDR_MODE_EN) |
|
|
(1u << FLEXSPIMISC_OFFSET_WORD_ADDRESSABLE_EN) |
|
|
(1u << FLEXSPIMISC_OFFSET_SAFECONFIG_FREQ_EN) |
|
|
(1u << FLEXSPIMISC_OFFSET_DIFFCLKEN),
|
|
.sflash_pad_type = SERIAL_FLASH_8PADS,
|
|
.serial_clk_freq = FLEXSPI_SERIAL_CLKFREQ_133MHz,
|
|
.sflash_a1size = 64u * 1024u * 1024u,
|
|
.data_valid_time = {16u, 16u},
|
|
.lookup_table =
|
|
{
|
|
/* Read LUTs */
|
|
|
|
FLEXSPI_LUT_SEQ(CMD_DDR, FLEXSPI_8PAD, 0xA0, RADDR_DDR, FLEXSPI_8PAD, 0x18),
|
|
FLEXSPI_LUT_SEQ(CADDR_DDR, FLEXSPI_8PAD, 0x10, DUMMY_DDR, FLEXSPI_8PAD, 0x06),
|
|
FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_8PAD, 0x04, STOP, FLEXSPI_1PAD, 0x0),
|
|
},
|
|
},
|
|
.page_size = 512u,
|
|
.sector_size = 256u * 1024u,
|
|
.blocksize = 256u * 1024u,
|
|
.is_uniform_blocksize = 1,
|
|
};
|
|
|
|
#elif defined (CONFIG_NXP_FMURT1062_V3_QSPI_FLASH)
|
|
__attribute__((section(".boot_hdr.conf")))
|
|
const struct flexspi_nor_config_s g_flash_config = {
|
|
.mem_config =
|
|
{
|
|
.tag = FLEXSPI_CFG_BLK_TAG,
|
|
.version = FLEXSPI_CFG_BLK_VERSION,
|
|
.read_sample_clksrc = FLASH_READ_SAMPLE_CLK_LOOPBACK_FROM_SCKPAD,
|
|
.cs_hold_time = 3u,
|
|
.cs_setup_time = 3u,
|
|
.column_address_width = 0u,
|
|
.device_type = FLEXSPI_DEVICE_TYPE_SERIAL_NOR,
|
|
.sflash_pad_type = SERIAL_FLASH_4PADS,
|
|
.serial_clk_freq = FLEXSPI_SERIAL_CLKFREQ_60MHz,
|
|
.sflash_a1size = 8u * 1024u * 1024u,
|
|
.data_valid_time = {16u, 16u},
|
|
.lookup_table =
|
|
{
|
|
/* LUTs */
|
|
/* 0 Fast read Quad IO DTR Mode Operation in SPI Mode (normal read)*/
|
|
|
|
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xED, RADDR_DDR, FLEXSPI_4PAD, 0x18),
|
|
FLEXSPI_LUT_SEQ(DUMMY_DDR, FLEXSPI_4PAD, 0x0C, READ_DDR, FLEXSPI_4PAD, 0x08),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
|
|
/* 1 Read Status */
|
|
|
|
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x1),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
|
|
/* 2 */
|
|
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
|
|
/* 3 */
|
|
|
|
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
|
|
/* 4 */
|
|
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
|
|
/* 5 Erase Sector */
|
|
|
|
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xD7, RADDR_SDR, FLEXSPI_1PAD, 0x18),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
|
|
/* 6 */
|
|
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
|
|
/* 7 */
|
|
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
|
|
/* 8 */
|
|
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
|
|
/* 9 Page Program */
|
|
|
|
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02, RADDR_SDR, FLEXSPI_1PAD, 0x18),
|
|
FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0x8, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
|
|
/* 10 */
|
|
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
0x00000000,
|
|
|
|
/* 11 Chip Erase */
|
|
|
|
FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xC7, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x0, STOP, FLEXSPI_1PAD, 0x0),
|
|
|
|
},
|
|
},
|
|
|
|
.page_size = 256u,
|
|
.sector_size = 4u * 1024u,
|
|
.blocksize = 32u * 1024u,
|
|
.is_uniform_blocksize = false,
|
|
};
|
|
#else
|
|
# error Boot Flash type not chosen!
|
|
#endif
|