add IPL
This commit is contained in:
213
IPL/Customer/Mobis/Gen4_ICUMX_Loader/ip/rpc/spiflash2drv.c
Normal file
213
IPL/Customer/Mobis/Gen4_ICUMX_Loader/ip/rpc/spiflash2drv.c
Normal file
@@ -0,0 +1,213 @@
|
||||
/*******************************************************************************
|
||||
* DISCLAIMER
|
||||
* This software is supplied by Renesas Electronics Corporation and is only
|
||||
* intended for use with Renesas products. No other uses are authorized. This
|
||||
* software is owned by Renesas Electronics Corporation and is protected under
|
||||
* all applicable laws, including copyright laws.
|
||||
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
|
||||
* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
|
||||
* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
|
||||
* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
|
||||
* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
|
||||
* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
|
||||
* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
|
||||
* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
* Renesas reserves the right, without notice, to make changes to this software
|
||||
* and to discontinue the availability of this software. By using this software,
|
||||
* you agree to the additional terms and conditions found by accessing the
|
||||
* following link:
|
||||
* http://www.renesas.com/disclaimer
|
||||
* Copyright 2020-2022 Renesas Electronics Corporation All rights reserved.
|
||||
*******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
* DESCRIPTION : QSPI Flash driver for S25FS512S
|
||||
******************************************************************************/
|
||||
/******************************************************************************
|
||||
* @file spiflash2drv.c
|
||||
* - Version : 0.04
|
||||
* @brief QSPI Flash driver for S25FS512S.
|
||||
* .
|
||||
*****************************************************************************/
|
||||
/******************************************************************************
|
||||
* History : DD.MM.YYYY Version Description
|
||||
* : 15.10.2021 0.01 First Release
|
||||
* : 23.03.2022 0.02 Modify command for QSPI Flash to refer to
|
||||
* : command table.
|
||||
* : 01.04.2022 0.03 Modify magic number to definition.
|
||||
* : 09.11.2022 0.04 License notation change.
|
||||
*****************************************************************************/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include <spiflash2drv.h>
|
||||
#include <rpcqspidrv.h>
|
||||
#include <rpc.h>
|
||||
#include <log.h>
|
||||
|
||||
#include "dma2.h"
|
||||
|
||||
#define QSPI_PARAM_SEC_SIZE (0x1000U)
|
||||
#define QSPI_PARAM_SEC_MASK (0xFFFFF000U)
|
||||
|
||||
void fast_rd_qspi_flash(uint32_t sourceSpiAdd, uint32_t destinationAdd, uint32_t byteCount)
|
||||
{
|
||||
uint32_t sourceAdd;
|
||||
|
||||
init_rpc_qspi_flash_4fastread_ext_mode();
|
||||
|
||||
sourceAdd = SPI_IOADDRESS_TOP + sourceSpiAdd;
|
||||
|
||||
// dma_trans_start(destinationAdd, sourceAdd, byteCount);
|
||||
// dma_trans_end_check();
|
||||
// dma2_init();
|
||||
dma2_start(destinationAdd, sourceAdd, byteCount, DMA_MODE_SRC_INC);
|
||||
dma2_end();
|
||||
}
|
||||
/* End of function fast_rd_qspi_flash */
|
||||
|
||||
/* Qspi:Sector Erase */
|
||||
/* 4SE DCh */
|
||||
void sector_erase_NNNkb_qspi_flash_s25s512s(uint32_t addr)
|
||||
{
|
||||
uint32_t status;
|
||||
|
||||
/* WRITE ENABLE */
|
||||
write_command_qspi_flash((gp_qspi_cmd_tbl -> write_enable) << DRCMR_SMCMR_CMD_SHIFT);
|
||||
|
||||
sector_erase_4byte_qspi_flash(addr);
|
||||
|
||||
while(1)
|
||||
{
|
||||
read_status_qspi_flash(&status);
|
||||
if( check_Erase_Fail(status) )
|
||||
{
|
||||
// put_str("Erase Error", CRLF_OFF);
|
||||
ERROR("Erase Error!!\n");
|
||||
break;
|
||||
}
|
||||
read_wip_status_register(&status);
|
||||
if( !(status & BIT0) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* End of function sector_erase_NNNkb_qspi_flash_s25s512s */
|
||||
|
||||
/* Qspi:Parameter 4-kB Sector Erase */
|
||||
/* 4P4E 21h */
|
||||
void parameter_sector_erase_4kb_qspi_flash_s25s512s(uint32_t addr)
|
||||
{
|
||||
uint32_t status;
|
||||
|
||||
/* WRITE ENABLE */
|
||||
write_command_qspi_flash((gp_qspi_cmd_tbl -> write_enable) << DRCMR_SMCMR_CMD_SHIFT);
|
||||
|
||||
parameter_sector_erase_4kb_qspi_flash(addr);
|
||||
|
||||
while(1)
|
||||
{
|
||||
read_status_qspi_flash(&status);
|
||||
if( check_Erase_Fail(status) )
|
||||
{
|
||||
ERROR("Erase Error!!\n");
|
||||
break;
|
||||
}
|
||||
read_wip_status_register(&status);
|
||||
if( !(status & BIT0) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* End of function parameter_sector_erase_4kb_qspi_flash_s25s512s */
|
||||
|
||||
/* Qspi:Page Program (4PP:12h) */
|
||||
void page_program_with_buf_qspi_flash_s25s512s(uint32_t addr, uint32_t source_addr)
|
||||
{
|
||||
uint32_t status;
|
||||
|
||||
/* WRITE ENABLE */
|
||||
write_command_qspi_flash((gp_qspi_cmd_tbl -> write_enable) << DRCMR_SMCMR_CMD_SHIFT);
|
||||
|
||||
write_data_4pp_with_buf_qspi_flash(addr,source_addr); /* 4PP */
|
||||
|
||||
/* Add */
|
||||
while(1)
|
||||
{
|
||||
read_wip_status_register(&status);
|
||||
if( !(status & BIT0) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/* End of function page_program_with_buf_qspi_flash_s25s512s */
|
||||
|
||||
/* Qspi:Clear Block Protection of SR1V */
|
||||
void clear_bp_qspi_flash(void)
|
||||
{
|
||||
uint32_t statusReg;
|
||||
while(1)
|
||||
{
|
||||
read_wip_status_register(&statusReg);
|
||||
if( !(statusReg & BIT0) )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* End of function clear_bp_qspi_flash */
|
||||
|
||||
void save_data_with_buf_qspi_flash(uint32_t srcAdd,uint32_t svFlashAdd,uint32_t svSize)
|
||||
{
|
||||
uint32_t flashAdd;
|
||||
uint32_t writeDataAdd;
|
||||
|
||||
/* WRITE ENABLE */
|
||||
write_command_qspi_flash((gp_qspi_cmd_tbl -> write_enable) << DRCMR_SMCMR_CMD_SHIFT);
|
||||
|
||||
writeDataAdd = srcAdd;
|
||||
|
||||
for(flashAdd=svFlashAdd; flashAdd<(svFlashAdd+svSize); flashAdd += RPC_WRITE_BUF_SIZE)
|
||||
{ /* 256byte:RPC Write Buffer size */
|
||||
page_program_with_buf_qspi_flash_s25s512s(flashAdd, writeDataAdd);
|
||||
writeDataAdd = writeDataAdd + RPC_WRITE_BUF_SIZE;
|
||||
}
|
||||
}
|
||||
/* End of function save_data_with_buf_qspi_flash */
|
||||
|
||||
void sector_erase_qspi_flash(uint32_t EraseStatAdd,uint32_t EraseEndAdd)
|
||||
{
|
||||
uint32_t sectorAd;
|
||||
uint32_t SectorStatTopAdd;
|
||||
uint32_t SectorEndTopAdd;
|
||||
|
||||
SectorStatTopAdd = EraseStatAdd & FLASH_SECTOR_MASK;
|
||||
SectorEndTopAdd = EraseEndAdd & FLASH_SECTOR_MASK;
|
||||
|
||||
for(sectorAd = SectorStatTopAdd; sectorAd <= SectorEndTopAdd; sectorAd += FLASH_SECTOR_SIZE)
|
||||
{
|
||||
sector_erase_NNNkb_qspi_flash_s25s512s(sectorAd);
|
||||
}
|
||||
}
|
||||
/* End of function sector_erase_qspi_flash_s25s512s */
|
||||
|
||||
void parameter_sector_erase_qspi_flash(uint32_t EraseStatAdd,uint32_t EraseEndAdd)
|
||||
{
|
||||
uint32_t sectorAd;
|
||||
uint32_t SectorStatTopAdd;
|
||||
uint32_t SectorEndTopAdd;
|
||||
|
||||
SectorStatTopAdd = EraseStatAdd & QSPI_PARAM_SEC_MASK;
|
||||
SectorEndTopAdd = EraseEndAdd & QSPI_PARAM_SEC_MASK;
|
||||
|
||||
for(sectorAd = SectorStatTopAdd; sectorAd <= SectorEndTopAdd; sectorAd += QSPI_PARAM_SEC_SIZE)
|
||||
{
|
||||
parameter_sector_erase_4kb_qspi_flash_s25s512s(sectorAd);
|
||||
}
|
||||
}
|
||||
/* End of function parameter_sector_erase_qspi_flash */
|
||||
Reference in New Issue
Block a user