Part Number: TDA4AEN-Q1
FLS APP INDAC example is not showing performance numbers on SDK 11.0. How to get performance numbers similar to other jacinto devices ?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Part Number: TDA4AEN-Q1
FLS APP INDAC example is not showing performance numbers on SDK 11.0. How to get performance numbers similar to other jacinto devices ?
The default example doesn't have PERF TEST enabled for J722S.
/*
*
* Copyright (C) 2024 Texas Instruments Incorporated
*
* All rights reserved not granted herein.
*
* Limited License.
*
* Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
* license under copyrights and patents it now or hereafter owns or controls to make,
* have made, use, import, offer to sell and sell ("Utilize") this software subject to the
* terms herein. With respect to the foregoing patent license, such license is granted
* solely to the extent that any such patent is necessary to Utilize the software alone.
* The patent license shall not apply to any combinations which include this software,
* other than combinations with devices manufactured by or for TI ("TI Devices").
* No hardware patent is licensed hereunder.
*
* Redistributions must preserve existing copyright notices and reproduce this license
* (including the above copyright notice and the disclaimer and (if applicable) source
* code license limitations below) in the documentation and/or other materials provided
* with the distribution
*
* Redistribution and use in binary form, without modification, are permitted provided
* that the following conditions are met:
*
* * No reverse engineering, decompilation, or disassembly of this software is
* permitted with respect to any software provided in binary form.
*
* * any redistribution and use are licensed by TI for use only with TI Devices.
*
* * Nothing shall obligate TI to provide you with source code for the software
* licensed and provided to you in object code.
*
* If software source code is provided to you, modification and redistribution of the
* source code are permitted provided that the following conditions are met:
*
* * any redistribution and use of the source code, including any resulting derivative
* works, are licensed by TI for use only with TI Devices.
*
* * any redistribution and use of any object code compiled from the source code
* and any resulting derivative works, are licensed by TI for use only with TI Devices.
*
* Neither the name of Texas Instruments Incorporated nor the names of its suppliers
*
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* DISCLAIMER.
*
* THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "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 TI AND TI'S LICENSORS 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.
*
*/
/**
* \file FlsApp.c
*
* \brief This file contains the Fls Test App
*
*/
#include "Std_Types.h"
#if defined (SOC_J721E) || defined (SOC_J7200) || defined (SOC_J721S2) || defined (SOC_J784S4) || defined (SOC_J742S2)
#include <ti/board/board.h>
#include <ti/board/board_cfg.h>
#endif
#include "stdio.h"
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include "EcuM_Cbk.h"
#include "app_utils.h"
#include "Fee.h"
#include "string.h"
#include "stdio.h"
#include "stdarg.h"
#include "stdlib.h"
#include "Det.h"
#include "Dem.h"
#include "Os.h"
#include "Fls_Cfg.h"
#include "Fls.h"
#include "Fls_Ospi.h"
#include "FlsApp_Startup.h"
#include "SchM_Fls.h"
#include "EcuM_Cbk.h"
#include "Fls_Cbk.h"
#include <hw_include/arch/lld_arch.h>
#include <hw_include/soc.h>
#include <hw_include/lldr.h>
#include "app_utils.h"
/* Interrupt Registrations */
#if defined (SOC_J721E) || defined (SOC_J7200) || defined (SOC_J721S2) || defined (SOC_J784S4) || defined (SOC_J742S2)
#include <ti/osal/osal.h>
#include <ti/drv/udma/udma.h>
#else
#include <kernel/dpl/ClockP.h>
#endif
#include "nor_spi_patterns.h"
/**********************************************************************
************************** Macros ************************************
**********************************************************************/
#define APP_NAME "FLS_APP_INDAC"
#if defined (SOC_J721E) || defined (SOC_J7200) || defined (SOC_J721S2) || defined (SOC_J784S4) || defined (SOC_J742S2) || defined (SOC_J722S)
#define PERF_TEST /* enable flag to log performance data*/
#endif
/**********************************************************************
************************** Global Variables **************************
**********************************************************************/
volatile uint32 Fls_JobDoneSuccess;
volatile uint32 Fls_JobDoneError;
volatile uint8 expectFail = FALSE;
volatile uint8 testPass = TRUE;
#if defined (SOC_AM275X) || defined (SOC_J7200) || defined (SOC_J721E) || defined (SOC_J721S2) || defined (SOC_J784S4) || defined (SOC_J742S2)
#define DATA_SIZE_TEST 0x100000U
#else
#define DATA_SIZE_TEST 0x200000U
#endif
#define DATA_VALUE 0xABU
uint32 offset = 0x00U;
uint32 Total_datasize;
uint32 numOfSectorsOrBlocks;
uint32 CfgSectorOrBlockSize;
uint32 numofseccfg;
#if defined (SOC_J7200) || defined (SOC_J721S2) || defined (SOC_J784S4) || defined (SOC_J742S2)
#define TEST_TUNE_PATTERN_OFFSET 0x3fc0000/*NOR_TUNING_DATA_OFFSET*/
#define DATA_SIZE_TEST_TUNE 0x100U /*NOR_ATTACK_VECTOR_SIZE*/
uint32 offset_tune = TEST_TUNE_PATTERN_OFFSET;
#endif /*SOC_J7200 SOC_J721S2 SOC_J784S4*/
/* Buffer containing the known data that needs to be written to flash */
uint8 txBuf_test[DATA_SIZE_TEST];
/* Buffer containing the received data */
uint8 rxBuf_test[DATA_SIZE_TEST];
#ifdef PERF_TEST
uint64 startTime; /* start time stamp in usec */
uint64 elapsedTime; /* elapsed time in usec */
float xferRate;
uint32 xferRateInt;
#endif
/**********************************************************************
************************** Function Declarations **************************
**********************************************************************/
void main_handling()
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Job Processing in Progress.\n");
while (1U)
{
Fls_MainFunction();
if ( Fls_JobDoneSuccess == 1U)
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Job Ends: SUCCESS\n");
if (expectFail == TRUE)
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": However job should've failed\n");
testPass = FALSE;
expectFail = FALSE;
}
break;
}
if ( Fls_JobDoneError == 1U)
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Job Ends: ERROR\n");
if (expectFail == FALSE)
testPass = FALSE;
else
expectFail = FALSE;
break;
}
}
Fls_JobDoneSuccess = 0U;
Fls_JobDoneError = 0U;
return;
}
void main_cancel_handling()
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Cancel job Processing in Progress.\n");
#if ( STD_ON == FLS_CANCEL_API)
Fls_Cancel();
#endif
while (1U)
{
Fls_MainFunction();
//Only error Notification for Cancelled Job
if ( Fls_JobDoneError == 1U)
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Error is expected as we are cancelling the operation. \n");
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Job Ends: ERROR\n");
break;
}
}
Fls_JobDoneError = 0U;
return;
}
void run_erase(uint32 ofs, uint32 size, uint8 yesCancel)
{
while (1U)
{
Std_ReturnType job_accepted = Fls_Erase(ofs, size);
if (E_OK == job_accepted)
break;
}
if (yesCancel == TRUE)
main_cancel_handling();
else
main_handling();
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL," \n");
}
void run_read(uint32 ofs, uint32 size, uint8 *rxBuf, uint8 yesCancel)
{
while (1U)
{
Std_ReturnType job_accepted = Fls_Read(ofs, &rxBuf[0], size);
if (E_OK == job_accepted)
break;
}
#ifdef PERF_TEST
/* Get start time stamp for the write performance measurement */
startTime = ClockP_getTimeUsec();
#endif
if (yesCancel == TRUE)
main_cancel_handling();
else
main_handling();
#ifdef PERF_TEST
elapsedTime = ClockP_getTimeUsec() - startTime;
/* calculate the write transfer rate in Kbps */
xferRate = (float) (((float) (size * 8)) / elapsedTime) * 1000U;
xferRateInt = (uint32)xferRate;
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": \n Read %d bytes at transfer rate %d Kbps \n", size, xferRateInt);
#endif
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL," \n");
}
void run_write(uint32 ofs, uint32 size, uint8 *txBuf, uint8 yesCancel)
{
while (1U)
{
Std_ReturnType job_accepted = Fls_Write(ofs, &txBuf[0], size);
if (E_OK == job_accepted)
break;
}
#ifdef PERF_TEST
/* Get start time stamp for the write performance measurement */
startTime = ClockP_getTimeUsec();
#endif
if (yesCancel == TRUE)
main_cancel_handling();
else
main_handling();
#ifdef PERF_TEST
elapsedTime = ClockP_getTimeUsec() - startTime;
/* calculate the write transfer rate in Kbps */
xferRate = (float) (((float) (size * 8)) / elapsedTime) * 1000U;
xferRateInt = (uint32)xferRate;
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": \n Write %d bytes at transfer rate %d Kbps \n", size, xferRateInt);
#endif
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL," \n");
}
#if ( STD_ON == FLS_COMPARE_API)
void run_compare(uint32 ofs, uint32 size, uint8 *txBuf, uint8 yesCancel)
{
while (1U)
{
Std_ReturnType job_accepted = Fls_Compare(ofs, &txBuf[0], size);
if (E_OK == job_accepted)
break;
}
if (yesCancel == TRUE)
main_cancel_handling();
else
main_handling();
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL," \n");
}
#endif
#if ( STD_ON == FLS_BLANK_CHECK_API)
void run_blankCheck(uint32 ofs, uint32 size, uint8 yesCancel)
{
while (1U)
{
Std_ReturnType job_accepted = Fls_BlankCheck(ofs, size);
if (E_OK == job_accepted)
break;
}
if (yesCancel == TRUE)
main_cancel_handling();
else
main_handling();
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL," \n");
}
#endif
/* Reminder that QSPI does not have Phy Tuning support in DAC mode yet so below is unnecessary*/
#if defined (SOC_J7200) || defined (SOC_J721S2) || defined (SOC_J784S4) || defined (SOC_J742S2) || defined (SOC_J742S2)/* Use INDAC mode to write PHY tune data for J7200/J721S2/J784S4 */
void write_phy()
{
/* PHY Tuning Data Write */
uint8 *pBuf;
pBuf = nor_attack_vector;
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ":\n*****************Writing PHY Tune Data to last sector in memory*****************\n");
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Erasing \n");
run_erase(offset_tune, DATA_SIZE_TEST_TUNE, FALSE);
#if ( STD_ON == FLS_BLANK_CHECK_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Blank checking \n");
run_blankCheck(offset_tune, DATA_SIZE_TEST_TUNE, FALSE);
#endif /*STD_OFF == FLS_BLANKCHECK*/
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Writing \n");
run_write(offset_tune, DATA_SIZE_TEST_TUNE, pBuf, FALSE);
#if ( STD_ON == FLS_COMPARE_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Comparing \n");
run_compare(offset_tune, DATA_SIZE_TEST_TUNE, pBuf, FALSE);
#endif /*STD_ON == FLS_COMPARE_API*/
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ":\n*************************Writing PHY Tune Data complete*************************\n\n");
}
#endif
/*
* ======== test function ========
*/
void spi_test_init()
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": FLS spi_test Initiating and Starting.\n");
#if (STD_ON == FLS_PRE_COMPILE_VARIANT)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Variant - Pre Compile being used !!!\n");
Fls_Init((const Fls_ConfigType *) NULL_PTR);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Configuring Clocks.\n");
sint32 Clk_retVal = Fls_OSPI_configClk(FLS_INIT_CONFIG_PC.ospiClkSpeed);
if (Clk_retVal != LLD_PASS)
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Configuring Clocks : Failed.\n");
testPass = FALSE;
}
else
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Clock Configured at %dHz\n", FLS_INIT_CONFIG_PC.ospiClkSpeed);
}
#else
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Variant - Post Build being used !!!\n");
Fls_Init(&FlsConfigSet);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Configuring Clocks.\n");
sint32 Clk_retVal = Fls_OSPI_configClk(FlsConfigSet.ospiClkSpeed);
if (Clk_retVal != LLD_PASS)
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Configuring Clocks : Failed.\n");
testPass = FALSE;
}
else
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Clock Configured at %dHz\n", FlsConfigSet.ospiClkSpeed);
}
#endif
#if (STD_ON == FLS_VERSION_INFO_API)
Std_VersionInfoType versioninfo;
/* Get and print version */
Fls_GetVersionInfo(&versioninfo);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL," \n");
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,"FLS MCAL Version Info\n");
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,"---------------------\n");
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,"Vendor ID : %d\n", versioninfo.vendorID);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,"Module ID : %d\n", versioninfo.moduleID);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,"SW Major Version : %d\n", versioninfo.sw_major_version);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,"SW Minor Version : %d\n", versioninfo.sw_minor_version);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,"SW Patch Version : %d\n", versioninfo.sw_patch_version);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL," \n");
#endif /* #if (FLS_VERSION_INFO_API == STD_ON) */
/* FLS driver should be free now - check */
#if ( STD_ON == FLS_GET_STATUS_API)
MemIf_StatusType status;
status = Fls_GetStatus();
if (status != MEMIF_IDLE)
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": FLS driver is not IDLE!!\n");
testPass = FALSE;
}
#endif
}
void spi_test()
{
volatile uint32 idx;
volatile uint8 *txPtr_test = txBuf_test;
volatile uint8 *rxPtr_test = rxBuf_test;
/* Reminder that QSPI does not have Phy Tuning support in DAC mode yet so below is unnecessary*/
#if defined (SOC_J7200) || defined (SOC_J721S2) || defined (SOC_J784S4) || defined (SOC_J742S2) /* Use INDAC mode to write PHY tune data for J7200/J721S2/J784S4 */
/*SDR mode only support 3 byte addressing
phy data resides 4 byte addresses*/
if (FlsConfigSet.dtrEnable)
{
write_phy();
}
#endif /*SOC_J7200 SOC_J721S2 SOC_J784S4*/
#if defined (SOC_J7200) || defined (SOC_J721S2) || defined (SOC_J784S4) || defined (SOC_J742S2)
for (numofseccfg = 1; numofseccfg < FLS_NUMBER_OF_SECTOR_CFG; numofseccfg++)
#else
for (numofseccfg = 0; numofseccfg < FLS_NUMBER_OF_SECTOR_CFG - 1U; numofseccfg++)
#endif
{
CfgSectorOrBlockSize = FlsConfigSet.sectorList[numofseccfg].sectorSize;
numOfSectorsOrBlocks = FlsConfigSet.sectorList[numofseccfg].numberOfSectors;
Total_datasize = numOfSectorsOrBlocks * CfgSectorOrBlockSize;
offset = FlsConfigSet.sectorList[numofseccfg].sectorStartaddress;
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ":Executing Sector configuration number : %d \n\r", numofseccfg + 1);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ":Number of sector/blocks to erase/read/write: %d \n\r", numOfSectorsOrBlocks);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ":Total data size: 0x%X \n\r", Total_datasize);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ":Offset is 0x%X \n\r", offset);
txPtr_test = txBuf_test;
rxPtr_test = rxBuf_test;
for (idx = 0U; idx < Total_datasize; idx++)
{
*txPtr_test++ = (uint8)(DATA_VALUE + idx);
*rxPtr_test++ = (uint8)0U;
}
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Erasing \n");
run_erase(offset, Total_datasize, FALSE);
#if ( STD_ON == FLS_BLANK_CHECK_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Blank Checking \n");
run_blankCheck(offset, Total_datasize, FALSE);
#endif /*STD_ON == FLS_BLANK_CHECK_API*/
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Writing \n");
run_write(offset, Total_datasize, txBuf_test, FALSE);
#if ( STD_ON == FLS_CANCEL_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Cancel while Erasing \n");
run_erase(offset, Total_datasize, TRUE);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Cancel while Writing \n");
run_write(offset, Total_datasize, txBuf_test, TRUE);
#endif //Cancel
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Erasing \n");
run_erase(offset, Total_datasize, FALSE);
#if ( STD_ON == FLS_COMPARE_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Comparing.Expected to fail as data is erased. \n");
expectFail = TRUE;
run_compare(offset, Total_datasize, txBuf_test, FALSE);
#endif/*STD_ON == FLS_COMPARE_API*/
#if ( STD_ON == FLS_CANCEL_API)
#if ( STD_ON == FLS_COMPARE_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Cancel while Comparing.Expected to fail as data is erased. \n");
run_compare(offset, Total_datasize, txBuf_test, TRUE);
#endif/*STD_ON == FLS_COMPARE_API*/
#endif //Cancel
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Writing to compare again \n");
run_write(offset, Total_datasize, txBuf_test, FALSE);
#if ( STD_ON == FLS_COMPARE_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Comparing \n");
run_compare(offset, Total_datasize, txBuf_test, FALSE);
#endif/*STD_ON == FLS_COMPARE_API*/
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Reading \n");
run_read(offset, Total_datasize, rxBuf_test, FALSE);
#if ( STD_ON == FLS_CANCEL_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Cancel while Reading \n");
run_read(offset, Total_datasize, rxBuf_test, TRUE);
#endif //Cancel
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": \n .......................Changing mode to DAC....................... \n");
Fls_SwitchMode(TRUE, FALSE);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Reading \n");
run_read(offset, Total_datasize, rxBuf_test, FALSE);
#if ( STD_ON == FLS_COMPARE_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Comparing \n");
run_compare(offset, Total_datasize, txBuf_test, FALSE);
#endif /*STD_ON == FLS_COMPARE_API*/
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": \n ....................Changing mode to INDAC..................... \n");
Fls_SwitchMode(FALSE, FALSE);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Erasing \n");
run_erase(offset, Total_datasize, FALSE);
#if ( STD_ON == FLS_BLANK_CHECK_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Blank Checking \n");
run_blankCheck(offset, Total_datasize, FALSE);
#endif /*STD_ON == FLS_BLANK_CHECK_API*/
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Writing \n");
run_write(offset, Total_datasize, txBuf_test, FALSE);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Reading \n");
run_read(offset, Total_datasize, rxBuf_test, FALSE);
#if ( STD_ON == FLS_COMPARE_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Comparing \n");
run_compare(offset, Total_datasize, txBuf_test, FALSE);
#endif /*STD_ON == FLS_COMPARE_API*/
#if ( STD_ON == FLS_CANCEL_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Cancel Erase Job\n");
run_erase(offset, Total_datasize, TRUE);
#if ( STD_ON == FLS_BLANK_CHECK_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Blank Checking after erase cancel-----Expect to fail\n");
expectFail = TRUE;
run_blankCheck(offset, Total_datasize, FALSE);
#endif /*STD_ON == FLS_BLANK_CHECK_API*/
#endif //Cancel
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Erasing again \n");
run_erase(offset, Total_datasize, FALSE);
#if ( STD_ON == FLS_BLANK_CHECK_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Blank Checking after erase again\n");
run_blankCheck(offset, Total_datasize, FALSE);
#endif /*STD_ON == FLS_BLANK_CHECK_API*/
#if ( STD_ON == FLS_CANCEL_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Cancel after Writing \n");
run_write(offset, Total_datasize, txBuf_test, TRUE);
#if ( STD_ON == FLS_COMPARE_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Comparing after write cancel---Expect to fail\n");
expectFail = TRUE;
run_compare(offset, Total_datasize, txBuf_test, FALSE);
#endif
#endif //Cancel
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Writing again. Will pass\n");
run_write(offset, Total_datasize, txBuf_test, FALSE);
#if ( STD_ON == FLS_COMPARE_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Comparing.Expected to pass since write passed. \n");
run_compare(offset, Total_datasize, txBuf_test, FALSE);
#endif
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Erasing \n");
run_erase(offset, Total_datasize, FALSE);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Writing.\n");
run_write(offset, Total_datasize, txBuf_test, FALSE);
#if ( STD_ON == FLS_CANCEL_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Cancel while Reading \n");
run_read(offset, Total_datasize, rxBuf_test, TRUE);
#endif //Cancel
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Reading again\n");
run_read(offset, Total_datasize, rxBuf_test, FALSE);
#if ( STD_ON == FLS_COMPARE_API)
#if ( STD_ON == FLS_CANCEL_API)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Cancel while Comparing \n");
run_compare(offset, Total_datasize, txBuf_test, TRUE);
#endif //Cancel
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Comparing again\n");
run_compare(offset, Total_datasize, txBuf_test, FALSE);
#endif /*STD_ON == FLS_COMPARE_API*/
#if (STD_ON == OSPI_REGISTER_READBACK_API)
CSL_ospi_flash_cfgRegs RegReadback, *RegRbPtr;
RegRbPtr = &RegReadback;
Std_ReturnType retVal = Ospi_RegisterReadback(RegRbPtr);
if (retVal != E_OK)
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": OSPI configuration Register Readback Failed!!\n");
testPass = FALSE;
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Some tests have failed for sector configuration index %u :( \n",
numofseccfg);
}
else
{
/* TESTS DONE FOR CURRENT SECTOR CONFIGURATION */
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ":FLS SPI Test Passed for sector configuration index %u \n",
numofseccfg);
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": Ospi configuration Register Readback values \n" );
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": CONFIG_REG : 0x%x\n", RegRbPtr->CONFIG_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": DEV_INSTR_RD_CONFIG_REG : 0x%x\n", RegRbPtr->DEV_INSTR_RD_CONFIG_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": DEV_INSTR_WR_CONFIG_REG : 0x%x\n", RegRbPtr->DEV_INSTR_WR_CONFIG_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": DEV_DELAY_REG : 0x%x\n", RegRbPtr->DEV_DELAY_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": DEV_SIZE_CONFIG_REG : 0x%x\n", RegRbPtr->DEV_SIZE_CONFIG_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": SRAM_PARTITION_CFG_REG : 0x%x\n", RegRbPtr->SRAM_PARTITION_CFG_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": DMA_PERIPH_CONFIG_REG : 0x%x\n", RegRbPtr->DMA_PERIPH_CONFIG_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": MODE_BIT_CONFIG_REG : 0x%x\n", RegRbPtr->MODE_BIT_CONFIG_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": TX_THRESH_REG : 0x%x\n", RegRbPtr->TX_THRESH_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": RX_THRESH_REG : 0x%x\n", RegRbPtr->RX_THRESH_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, APP_NAME
": PHY_CONFIGURATION_REG : 0x%x\n", RegRbPtr->PHY_CONFIGURATION_REG);
AppUtils_Printf( APP_UTILS_PRINT_MSG_NORMAL, "\n");
}
#endif /* (STD_ON == OSPI_REGISTER_READBACK_API) */
}
}
/*
* ======== main ========
*/
int main(void)
{
/* Call board init functions */
#if defined (SOC_J721E) || defined (SOC_J7200) || defined (SOC_J721S2) || defined (SOC_J784S4) || defined (SOC_J742S2)
Board_initCfg boardCfg;
boardCfg = BOARD_INIT_PLL | BOARD_INIT_PINMUX_CONFIG |
BOARD_INIT_MODULE_CLOCK |
BOARD_INIT_UART_STDIO;
Board_init(boardCfg);
#elif defined (SOC_AM62X) || defined (SOC_AM62AX) || defined (SOC_AM62DX) || defined (SOC_AM62PX) || defined (SOC_J722S) || defined (SOC_AM275X)
System_init();
#endif
#ifdef UART_ENABLED
AppUtils_Init();
#if defined (SOC_AM62X) || defined (SOC_AM62AX) || defined (SOC_AM62PX) || defined (SOC_J722S) || defined (SOC_AM62DX) || defined (SOC_AM275X)
Drivers_open();
#endif
#endif
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": \n------------------FLS Sample Application - STARTS !!! ------------------\n");
#if defined (SOC_J7200)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ": \n Running on J7 VCL \n");
#elif defined (SOC_J721E)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ": \n Running on J7 ES \n");
#elif defined (SOC_J721S2)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ": \n Running on J7 AEP \n");
#elif defined (SOC_J784S4) || defined (SOC_J742S2)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ": \n Running on J7 AHP \n");
#elif defined (SOC_AM62X)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ": \n Running on AM62X\n");
#elif defined (SOC_AM62AX)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ": \n Running on AM62AX\n");
#elif defined (SOC_AM62DX)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ": \n Running on AM62DX\n");
#elif defined (SOC_AM275X)
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ": \n Running on AM275X\n");
#endif
spi_test_init();
if (testPass)
{
spi_test();
}
else
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, "\n");
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, APP_NAME ": spi_test_init() failed, skip main spi_test\n");
}
/*ALL TESTS DONE*/
if (testPass)
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": All tests have passed! \n");
}
else
{
AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL,
APP_NAME ": Some tests have failed :( \n");
}
return 0;
}
The FlsApp.c file has been modified to run with Performance numbers on J722S
| Core | READ | WRITE | ERASE | |
| MCU_R5 (Example ONLY) | 150ms | 1.8s | 3.6s |
Regards
Tarun Mukesh