前言
本文为NXP S32K144 基于EB Tresos Fls模块的简单代码分析,描述了使用Fls模块写入数据的大致流程。
三个函数分析
Fls_Init
Fls_Init()
{
……
Fls_eJobResult = MEMIF_JOB_OK;
……
}
说明:
Fls_Init函数在正确初始化后,会将Fls_eJobResult 状态切换为 MEMIF_JOB_OK,这是Fls_Erase和Fls_Write正常运行的前提条件。
Fls_ Erase
Fls_Erase()
{
……
if( MEMIF_JOB_PENDING == Fls_eJobResult )
{
u8RetVal = (Std_ReturnType)E_NOT_OK;
}
Else// Fls_eJobResult == MEMIF_JOB_OK;
{
Fls_eJob = FLS_JOB_ERASE;
Fls_u8JobStart = 1U;
Fls_eJobResult = MEMIF_JOB_PENDING;
}
……
}
说明:
Fls_Erase函数主要用于设置ERASE擦除指令,并设置Fls_MainFunction函数会用到的三个参数Fls_eJob, Fls_u8JobStart, Fls_eJobResult。
Fls_MainFunction
Fls_MainFunction()
{
……
if( MEMIF_JOB_PENDING == Fls_eJobResult )
{
if( 1U == Fls_u8JobStart )
{
Fls_u8JobStart = 0U;
/* Clear result of hardware job */
Fls_LLDClrJobResult();
Fls_IPW_AbortSuspended();
switch( Fls_eJob )
{
case FLS_JOB_ERASE:
eWorkResult = Fls_DoJobErase();
break;
case FLS_JOB_WRITE:
eWorkResult = Fls_DoJobDataTransfer( Fls_eJob, Fls_u32MaxWrite );
break;
}
……
}
说明:
Fls_MainFunction函数是执行Fls_Erase和Fls_Write的实体,函数运行时会清除硬件的结果,然后运行擦除操作,实际执行擦除的是Fls_DoJobErase函数完成,同理实际执行Flash写的是Fls_DoJobDataTransfer函数完成。
Fls_Write
Fls_Write()
{
……
if( MEMIF_JOB_PENDING == Fls_eJobResult )
{
u8RetVal = (Std_ReturnType)E_NOT_OK;
}
Else// Fls_eJobResult == MEMIF_JOB_OK;
{
Fls_eJob = FLS_JOB_WRITE;
Fls_u8JobStart = 1U;
Fls_eJobResult = MEMIF_JOB_PENDING;
}
……
}
说明:
Fls_Write函数主要用于设置WRITE写入指令,并设置Fls_MainFunction函数会用到的三个参数Fls_eJob, Fls_u8JobStart, Fls_eJobResult。
使用Fls模块写入数据的流程
- Fls_Init函数初始化
- Fls_Erase函数设置ERASE指令及相关参数
- 循环调用Fls_MainFunction函数执行Fls的Erase操作
- Fls_Write函数设置WRITE指令及相关参数
- 循环调用Fls_MainFunction函数执行Fls的Write操作
总结
三个函数Fls_Init, Fls_Erase及Fls_MainFunction的具体作用
使用Fls模块写入数据的流程。