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.

[参考译文] TMS320F28377D:有关 FlashAPI 的问题

Guru**** 2552050 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1130312/tms320f28377d-question-about-flashapi

器件型号:TMS320F28377D
主题中讨论的其他器件:C2000WARE

您好的团队:

客户的项目分为引导加载程序和应用程序、  闪存 A-D 中的引导加载程序以及 闪存 E-K 中的应用程序

当使用 JTAG 进行调试时、程序可以正常工作、但是在将程序加载到闪存并运行后、程序无法正常运行。

客户似乎已将代码从闪存复制到 RAM:

memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
memcpy(&RamfuncsFapiRunStart, &RamfuncsFapiLoadStart, (size_t)&RamfuncsFapiLoadSize);

CMD文件:
.TI.ramfuncFapi : {
--library=../F2837xD_flashapi/lib/F021_API_F2837xD_FPU32.lib
}
LOAD = FLASHG,
RUN = RAMD1,
RUN_START(_RamfuncsFapiRunStart),
LOAD_START(_RamfuncsFapiLoadStart),
LOAD_SIZE(_RamfuncsFapiLoadSize),
PAGE = 0, ALIGN(4)

但项目仍然有这个问题。

此致、

绿色

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    其他:

    CCS  版本:11.0.0.00012、SDK 版本: C2000Ware_4_00_00_00

    memcpy 代码

    #ifdef _FLASH
        //
        // Copy time critical code and flash setup code to RAM. This includes the
        // following functions: InitFlash();
        //
        // The RamfuncsLoadStart, RamfuncsLoadSize, and RamfuncsRunStart symbols
        // are created by the linker. Refer to the device .cmd file.
        //
        memcpy(&RamfuncsRunStart,       &RamfuncsLoadStart,     (size_t)&RamfuncsLoadSize);
        memcpy(&RamfuncsFapiRunStart,   &RamfuncsFapiLoadStart, (size_t)&RamfuncsFapiLoadSize);
        memcpy(&RamfuncsFpuRunStart,    &RamfuncsFpuLoadStart,  (size_t)&RamfuncsFpuLoadSize);
        memcpy(&RamfuncsUserRunStart,   &RamfuncsUserLoadStart, (size_t)&RamfuncsUserLoadSize);
    
        //
        // Call Flash Initialization to setup flash waitstates. This function must
        // reside in RAM.
        //
        Flash_initModule(FLASH0CTRL_BASE, FLASH0ECC_BASE, DEVICE_FLASH_WAITSTATES);
    #endif

    闪存初始化并调用 Eras\Write 函数:

    /*
     * BswEep.c
     *
     *  Created on: 2022��4��5��
     *      Author: Thinkpad-T14
     */
    #include "Includes.h"
    
    #pragma CODE_SECTION(BswEep_init, ".User.ramfunc");
    uint16_t BswEep_init(void)
    {
        uint16_t ReturnValue=0;
        Fapi_StatusType oFapi_Status1,oFapi_Status2;
    
        Flash_claimPumpSemaphore(FLASHPUMPSEMAPHORE_BASE, FLASH_CPU1_WRAPPER);
        EALLOW;
        oFapi_Status1 = Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS, DEVICE_SYSCLK_FREQ/1000000);
        Flash_disableECC(FLASH0ECC_BASE);
        oFapi_Status2 = Fapi_setActiveFlashBank(Fapi_FlashBank0);
        Flash_enableECC(FLASH0ECC_BASE);
        EDIS;
    
        if( (oFapi_Status1 != Fapi_Status_Success) || (oFapi_Status2 != Fapi_Status_Success) )
        {
            ReturnValue=0;
        }
        else
        {
            ReturnValue=BswEep_ReadFLSL();
            ReturnValue=ReturnValue & BswEep_ReadFLSM();
            ReturnValue=ReturnValue & BswEep_ReadFLSN();
        }
    
        GeBswEep_Flag_InitReady=ReturnValue;
        return ReturnValue;
    }
    
    #pragma CODE_SECTION(BswEep_ReadFLSL, ".User.ramfunc");
    uint16_t BswEep_ReadFLSL(void)
    {
        uint16_t ReturnValue=0;
        Fapi_StatusType oFapi_Status;
    
        DINT;
    
        EALLOW;
        oFapi_Status = Fapi_doMarginRead((uint32 *)(0x0BA000),(uint32 *)&CeAswNvm_U_EcuInformation,sizeof(GeAswNvm_Type_EcuInformationUnion)/2,Fapi_NormalRead);
        EDIS;
    
        EINT;
    
        if(oFapi_Status == Fapi_Status_Success)
            ReturnValue=1;
        else
            ReturnValue=0;
        return ReturnValue;
    }
    
    #pragma CODE_SECTION(BswEep_ReadFLSM, ".User.ramfunc");
    uint16_t BswEep_ReadFLSM(void)
    {
        uint16_t ReturnValue=0;
        Fapi_StatusType oFapi_Status1,oFapi_Status2;
    
    
        DINT;
    
        EALLOW;
        oFapi_Status1 = Fapi_doMarginRead((uint32 *)(0x0BC000),(uint32 *)&CeAswNvm_U_BoardInformation,sizeof(GeAswNvm_Type_BoardInformationUnion)/2,Fapi_NormalRead);
        oFapi_Status2 = Fapi_doMarginRead((uint32 *)(0x0BC100),(uint32 *)&CeAswNvm_U_CalibInformation,sizeof(GeAswNvm_Type_CalibInformationUnion)/2,Fapi_NormalRead);
        EDIS;
    
        EINT;
    
    
        if( (oFapi_Status1 == Fapi_Status_Success) && (oFapi_Status2 == Fapi_Status_Success)  )
            ReturnValue=1;
        else
            ReturnValue=0;
    
        if(CeAswNvm_U_BoardInformation.NvmData.BoardID<1)
           CeAswNvm_U_BoardInformation.NvmData.BoardID=1;
        else if(CeAswNvm_U_BoardInformation.NvmData.BoardID>100)
           CeAswNvm_U_BoardInformation.NvmData.BoardID=100;
    
        if( (CeAswNvm_U_BoardInformation.NvmData.SciBaudRate == 9600) ||
            (CeAswNvm_U_BoardInformation.NvmData.SciBaudRate == 19200) ||
            (CeAswNvm_U_BoardInformation.NvmData.SciBaudRate == 38400) ||
            (CeAswNvm_U_BoardInformation.NvmData.SciBaudRate == 57600) ||
            (CeAswNvm_U_BoardInformation.NvmData.SciBaudRate == 115200)
            )
        {}
        else
        {
            CeAswNvm_U_BoardInformation.NvmData.SciBaudRate=115200;
        }
    
        if( (CeAswNvm_U_BoardInformation.NvmData.CanBaudRate == 125000) ||
            (CeAswNvm_U_BoardInformation.NvmData.CanBaudRate == 250000) ||
            (CeAswNvm_U_BoardInformation.NvmData.CanBaudRate == 500000) ||
            (CeAswNvm_U_BoardInformation.NvmData.CanBaudRate == 1000000)
            )
        {}
        else
        {
            CeAswNvm_U_BoardInformation.NvmData.CanBaudRate=250000;
        }
    
        return ReturnValue;
    }
    
    
    #pragma CODE_SECTION(BswEep_ReadFLSN, ".User.ramfunc");
    uint16_t BswEep_ReadFLSN(void)
    {
        uint16_t ReturnValue=0;
        Fapi_StatusType          oFapi_Status;
        Fapi_FlashStatusWordType oFapi_FlashStatusWord;
    
        uint16_t tempIndex=0;
        uint16_t LeBswEep_U16_UnionSize=0;  //used to save size of Unions in 16-bits
        uint32_t LeBswEep_U32_TgtAddr=0;    //Command Target Address;
    
    
        DINT;
    
        LeBswEep_U16_UnionSize=sizeof(GeAswNvm_Type_AppInformationUnion);
        for(tempIndex=0;tempIndex<(0x2000/LeBswEep_U16_UnionSize);tempIndex++)
        {
            LeBswEep_U32_TgtAddr=0x0BE000+tempIndex*LeBswEep_U16_UnionSize;
            EALLOW;
            oFapi_Status = Fapi_doBlankCheck((uint32 *)LeBswEep_U32_TgtAddr,LeBswEep_U16_UnionSize/2,&oFapi_FlashStatusWord);
            EDIS;
            if(oFapi_Status == Fapi_Status_Success)
            {
                break;
            }
        }
    
        if ( (tempIndex>=0x2000/LeBswEep_U16_UnionSize) || (tempIndex==0) )
        {
            GeAswNvm_U_AppInformationLocationIndex[1]=0x0BE000;
            GeAswNvm_U_AppInformationLocationIndex[0]=GeAswNvm_U_AppInformationLocationIndex[1]+0x2000-LeBswEep_U16_UnionSize-(0x2000%LeBswEep_U16_UnionSize);
            EALLOW;
            oFapi_Status = Fapi_doMarginRead((uint32 *)GeAswNvm_U_AppInformationLocationIndex[0],(uint32 *)&CeAswNvm_U_AppInformation,LeBswEep_U16_UnionSize/2,Fapi_NormalRead);
            EDIS;
        }
        else
        {
            GeAswNvm_U_AppInformationLocationIndex[1]=0x0BE000+tempIndex*LeBswEep_U16_UnionSize;
            GeAswNvm_U_AppInformationLocationIndex[0]=GeAswNvm_U_AppInformationLocationIndex[1]-LeBswEep_U16_UnionSize;
            EALLOW;
            oFapi_Status = Fapi_doMarginRead((uint32 *) GeAswNvm_U_AppInformationLocationIndex[0],(uint32 *)&CeAswNvm_U_AppInformation,LeBswEep_U16_UnionSize/2,Fapi_NormalRead);
            EDIS;
        }
    
        EINT;
    
    
        if(oFapi_Status == Fapi_Status_Success)
            ReturnValue=1;
        else
            ReturnValue=0;
    
    
        CeAswNvm_U_AppInformation.NvmData.Reserved1=0;
    
    
        return ReturnValue;
    }
    
    
    #pragma CODE_SECTION(BswEep_EraseFLSL, ".User.ramfunc");
    uint16_t BswEep_EraseFLSL(void)
    {
        uint16_t ReturnValue=0;
    
        Fapi_StatusType          oFapi_Status,oFapi_Status1,oFapi_Status2;
        Fapi_FlashStatusType     oFapi_FlashStatus;
        Fapi_FlashStatusWordType oFapi_FlashStatusWord;
    
        DINT;
        SysCtl_disableWatchdog();
    
        EALLOW;
        oFapi_Status = Fapi_doBlankCheck((uint32 *)(0x0BA000),0x1000,&oFapi_FlashStatusWord);
        EDIS;
        if(oFapi_Status !=Fapi_Status_Success)
        {
            EALLOW;
            oFapi_Status1 = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,(uint32 *)(0x0BA000));
            while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
            oFapi_FlashStatus = Fapi_getFsmStatus();
            oFapi_Status2 = Fapi_doBlankCheck((uint32 *)(0x0BA000),0x1000,&oFapi_FlashStatusWord);
            EDIS;
    
    
            if( (oFapi_Status1 != Fapi_Status_Success) || (oFapi_Status2 != Fapi_Status_Success) || (oFapi_FlashStatus!=0) )
                ReturnValue=0;
            else
                ReturnValue=1;
        }
        else
        {
            ReturnValue=1;
        }
    
        SysCtl_enableWatchdog();
        DEVICE_DELAY_US(60000);
        EINT;
    
        return ReturnValue;
    }
    
    #pragma CODE_SECTION(BswEep_EraseFLSM, ".User.ramfunc");
    uint16_t BswEep_EraseFLSM(void)
    {
        uint16_t ReturnValue=0;
        Fapi_StatusType          oFapi_Status,oFapi_Status1,oFapi_Status2;
        Fapi_FlashStatusType     oFapi_FlashStatus;
        Fapi_FlashStatusWordType oFapi_FlashStatusWord;
    
        DINT;
        SysCtl_disableWatchdog();
    
        EALLOW;
        oFapi_Status = Fapi_doBlankCheck((uint32 *)(0x0BC000),0x1000,&oFapi_FlashStatusWord);
        EDIS;
        if(oFapi_Status !=Fapi_Status_Success)
        {
            EALLOW;
            oFapi_Status1 = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,(uint32 *)(0x0BC000));
            while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
            oFapi_FlashStatus = Fapi_getFsmStatus();
            oFapi_Status2 = Fapi_doBlankCheck((uint32 *)(0x0BC000),0x1000,&oFapi_FlashStatusWord);
            EDIS;
    
    
            if( (oFapi_Status1 != Fapi_Status_Success) || (oFapi_Status2 != Fapi_Status_Success) || (oFapi_FlashStatus!=0) )
                ReturnValue=0;
            else
                ReturnValue=1;
        }
        else
        {
            ReturnValue=1;
        }
    
        SysCtl_enableWatchdog();
        DEVICE_DELAY_US(60000);
        EINT;
    
        return ReturnValue;
    }
    
    #pragma CODE_SECTION(BswEep_EraseFLSN, ".User.ramfunc");
    uint16_t BswEep_EraseFLSN(void)
    {
        uint16_t ReturnValue=0;
        Fapi_StatusType          oFapi_Status,oFapi_Status1,oFapi_Status2;
        Fapi_FlashStatusType     oFapi_FlashStatus;
        Fapi_FlashStatusWordType oFapi_FlashStatusWord;
    
        DINT;
        SysCtl_disableWatchdog();
    
        EALLOW;
        oFapi_Status = Fapi_doBlankCheck((uint32 *)(0x0BE000),0x1000,&oFapi_FlashStatusWord);
        EDIS;
        if(oFapi_Status !=Fapi_Status_Success)
        {
            EALLOW;
            oFapi_Status1 = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector,(uint32 *)(0x0BE000));
            while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
            oFapi_FlashStatus = Fapi_getFsmStatus();
            oFapi_Status2 = Fapi_doBlankCheck((uint32 *)(0x0BE000),0x1000,&oFapi_FlashStatusWord);
            EDIS;
    
    
            if( (oFapi_Status1 != Fapi_Status_Success) || (oFapi_Status2 != Fapi_Status_Success) || (oFapi_FlashStatus!=0) )
                ReturnValue=0;
            else
            {
                ReturnValue=1;
                GeAswNvm_U_AppInformationLocationIndex[1]=0x0BE000;
                GeAswNvm_U_AppInformationLocationIndex[0]=GeAswNvm_U_AppInformationLocationIndex[1]+0x2000-sizeof(GeAswNvm_Type_AppInformationUnion)-(0x2000%sizeof(GeAswNvm_Type_AppInformationUnion));
            }
        }
        else
        {
            ReturnValue=1;
            GeAswNvm_U_AppInformationLocationIndex[1]=0x0BE000;
            GeAswNvm_U_AppInformationLocationIndex[0]=GeAswNvm_U_AppInformationLocationIndex[1]+0x2000-sizeof(GeAswNvm_Type_AppInformationUnion)-(0x2000%sizeof(GeAswNvm_Type_AppInformationUnion));
        }
    
        SysCtl_enableWatchdog();
        DEVICE_DELAY_US(60000);
        EINT;
    
        return ReturnValue;
    }
    
    
    #pragma CODE_SECTION(BswEep_WriteFLSL, ".User.ramfunc");
    uint16_t BswEep_WriteFLSL(void)
    {
        uint16_t ReturnValue=0;
    
        Fapi_StatusType          oFapi_Status;
        Fapi_FlashStatusType     oFapi_FlashStatus;
        Fapi_FlashStatusWordType oFapi_FlashStatusWord;
    
        uint16_t tempIndex=0;
        uint16_t LeBswEep_U16_UnionSize=0;  //used to save size of Unions in 16-bits
    
        DINT;
        SysCtl_disableWatchdog();
    
        LeBswEep_U16_UnionSize=sizeof(GeAswNvm_Type_EcuInformationUnion);
        EALLOW;
        oFapi_Status = Fapi_doBlankCheck((uint32 *)(0x0BA000),LeBswEep_U16_UnionSize/2,&oFapi_FlashStatusWord);
        EDIS;
        if(oFapi_Status != Fapi_Status_Success)
        {
            ReturnValue=0;
        }
        else
        {
            oFapi_Status=Fapi_Status_Success;
            oFapi_FlashStatus=0;
    
            for(tempIndex=0; tempIndex<(LeBswEep_U16_UnionSize/4) && (oFapi_Status==Fapi_Status_Success) && (oFapi_FlashStatus==0) ;tempIndex++)
            {
                EALLOW;
                oFapi_Status = Fapi_issueProgrammingCommand((uint32 *)(0x0BA000+tempIndex*4),
                                                            (uint16 *)(&CeAswNvm_U_EcuInformation.FlsBuffer[0]+tempIndex*4),
                                                            4,
                                                            0,
                                                            0,
                                                            Fapi_AutoEccGeneration);
                while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
                oFapi_FlashStatus = Fapi_getFsmStatus();
                EDIS;
            }
    
            EALLOW;
            oFapi_Status = Fapi_doVerify((uint32 *)(0x0BA000),LeBswEep_U16_UnionSize/2,(uint32 *)(&CeAswNvm_U_EcuInformation.FlsBuffer[0]),&oFapi_FlashStatusWord);
            EDIS;
            if( (oFapi_Status != Fapi_Status_Success) )
            {
                ReturnValue=0;
            }
            else
                ReturnValue=1;
        }
    
        SysCtl_enableWatchdog();
        DEVICE_DELAY_US(60000);
        EINT;
    
    
        return ReturnValue;
    }
    
    #pragma CODE_SECTION(BswEep_WriteFLSM, ".User.ramfunc");
    uint16_t BswEep_WriteFLSM(void)
    {
        uint16_t ReturnValue=0;
        Fapi_StatusType          oFapi_Status,oFapi_Status1,oFapi_Status2;
        Fapi_FlashStatusType     oFapi_FlashStatus;
        Fapi_FlashStatusWordType oFapi_FlashStatusWord;
    
        uint16_t tempIndex=0;
        uint16_t LeBswEep_U16_UnionSize=0;  //used to save size of Unions in 16-bits
    
        DINT;
        SysCtl_disableWatchdog();
    
        LeBswEep_U16_UnionSize=sizeof(GeAswNvm_Type_BoardInformationUnion)+sizeof(GeAswNvm_Type_CalibInformationUnion);
        EALLOW;
        oFapi_Status = Fapi_doBlankCheck((uint32 *)(0x0BC000),LeBswEep_U16_UnionSize/2,&oFapi_FlashStatusWord);
        EDIS;
        if(oFapi_Status != Fapi_Status_Success)
        {
            ReturnValue=0;
        }
        else
        {
            oFapi_Status=Fapi_Status_Success;
            oFapi_FlashStatus=0;
            for(tempIndex=0;tempIndex<(sizeof(GeAswNvm_Type_BoardInformationUnion)/4) && (oFapi_Status==Fapi_Status_Success) && (oFapi_FlashStatus==0) ;tempIndex++)
            {
                EALLOW;
                oFapi_Status = Fapi_issueProgrammingCommand((uint32 *)(0x0BC000+tempIndex*4),
                                                            (uint16 *)(&CeAswNvm_U_BoardInformation.FlsBuffer[0]+tempIndex*4),
                                                             4,
                                                             0,
                                                             0,
                                                             Fapi_AutoEccGeneration);
                while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
                oFapi_FlashStatus = Fapi_getFsmStatus();
                EDIS;
            }
    
            oFapi_Status=Fapi_Status_Success;
            oFapi_FlashStatus=0;
            for(tempIndex=0;tempIndex<(sizeof(GeAswNvm_Type_CalibInformationUnion)/4) && (oFapi_Status==Fapi_Status_Success) && (oFapi_FlashStatus==0)  ;tempIndex++)
            {
                EALLOW;
                oFapi_Status = Fapi_issueProgrammingCommand((uint32 *)(0x0BC100+tempIndex*4),
                                                            (uint16 *)(&CeAswNvm_U_CalibInformation.FlsBuffer[0]+tempIndex*4),
                                                             4,
                                                             0,
                                                             0,
                                                             Fapi_AutoEccGeneration);
                while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
                oFapi_FlashStatus = Fapi_getFsmStatus();
                EDIS;
            }
    
            EALLOW;
            oFapi_Status1 = Fapi_doVerify((uint32 *)(0x0BC000),sizeof(GeAswNvm_Type_BoardInformationUnion)/2,(uint32 *)(&CeAswNvm_U_BoardInformation.FlsBuffer[0]),&oFapi_FlashStatusWord);
            oFapi_Status2 = Fapi_doVerify((uint32 *)(0x0BC100),sizeof(GeAswNvm_Type_CalibInformationUnion)/2,(uint32 *)(&CeAswNvm_U_CalibInformation.FlsBuffer[0]),&oFapi_FlashStatusWord);
            EDIS;
    
            if( (oFapi_Status1 != Fapi_Status_Success)  || (oFapi_Status2 != Fapi_Status_Success) )
                ReturnValue=0;
            else
                ReturnValue=1;
        }
    
    
        SysCtl_enableWatchdog();
        DEVICE_DELAY_US(60000);
        EINT;
    
        return ReturnValue;
    }
    
    
    #pragma CODE_SECTION(BswEep_WriteFLSN, ".User.ramfunc");
    uint16_t BswEep_WriteFLSN(void)
    {
        uint16_t ReturnValue=0;
        uint16_t WriteFlag=0;
        Fapi_StatusType          oFapi_Status;
        Fapi_FlashStatusType     oFapi_FlashStatus;
        Fapi_FlashStatusWordType oFapi_FlashStatusWord;
    
        uint16_t tempIndex=0;
        uint16_t LeBswEep_U16_UnionSize=0;  //used to save size of Unions in 16-bits
    
        DINT;
        SysCtl_disableWatchdog();
    
    
        LeBswEep_U16_UnionSize=sizeof(GeAswNvm_Type_AppInformationUnion);
    
        EALLOW;
        oFapi_Status=Fapi_doVerify( (uint32 *)GeAswNvm_U_AppInformationLocationIndex[0],
                                    LeBswEep_U16_UnionSize/2,(uint32 *)(&CeAswNvm_U_AppInformation.FlsBuffer[0]),&oFapi_FlashStatusWord);
        EDIS;
        if(oFapi_Status == Fapi_Status_Success)
        {
            WriteFlag=0;
        }
        else if( (GeAswNvm_U_AppInformationLocationIndex[1]-0x0BE000+LeBswEep_U16_UnionSize)>0x2000)
        {
            WriteFlag=BswEep_EraseFLSN();
        }
        else
        {
            WriteFlag=1;
        }
    
        if(WriteFlag)
        {
            oFapi_Status=Fapi_Status_Success;
            oFapi_FlashStatus=0;
            for(tempIndex=0;tempIndex<(LeBswEep_U16_UnionSize/4) && (oFapi_Status==Fapi_Status_Success) && (oFapi_FlashStatus==0) ;tempIndex++)
            {
                EALLOW;
                oFapi_Status = Fapi_issueProgrammingCommand((uint32 *)(GeAswNvm_U_AppInformationLocationIndex[1]+tempIndex*4),
                                                            (uint16 *)(&CeAswNvm_U_AppInformation.FlsBuffer[0]+tempIndex*4),
                                                             4,
                                                             0,
                                                             0,
                                                             Fapi_AutoEccGeneration);
                while(Fapi_checkFsmForReady() != Fapi_Status_FsmReady){}
                oFapi_FlashStatus = Fapi_getFsmStatus();
                EDIS;
            }
    
            EALLOW;
            oFapi_Status=Fapi_doVerify( (uint32 *)GeAswNvm_U_AppInformationLocationIndex[1],LeBswEep_U16_UnionSize/2,(uint32 *)(&CeAswNvm_U_AppInformation.FlsBuffer[0]),&oFapi_FlashStatusWord);
            EDIS;
            if(oFapi_Status == Fapi_Status_Success)
            {
                ReturnValue=1;
                GeAswNvm_U_AppInformationLocationIndex[0]=GeAswNvm_U_AppInformationLocationIndex[1];
                GeAswNvm_U_AppInformationLocationIndex[1]+=LeBswEep_U16_UnionSize;
            }
            else
            {
                ReturnValue=0;
            }
        }
        else{}
    
        SysCtl_enableWatchdog();
        DEVICE_DELAY_US(60000);
        EINT;
    
        return ReturnValue;
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    绿色环保、

    我将在几天内回顾并返回给您。

    谢谢、此致、

    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    绿色环保、

    请 提供 有关您的陈述的更多详细信息、"但在将程序加载到闪存并运行后、它无法正常运行"。

    您是否可以提供任何特定的错误/状态来进行分析?

    谢谢、此致、
    Vamsi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    其余程序正常运行、与 Fapi 相关的函数将返回错误值。

    例如执行:

    oFapi_Status = Fapi_issueProgrammingCommand (x、x、4、0、0、Fapi_AutoEccGeneration)

    返回值状态为:

    Fapi_Error_Fail=500

    typedef enum
    {
       Fapi_Status_Success=0,           /* Function completed successfully */
       Fapi_Status_FsmBusy,             /* FSM is Busy */
       Fapi_Status_FsmReady,            /* FSM is Ready */
       Fapi_Status_AsyncBusy,           /* Async function operation is Busy */
       Fapi_Status_AsyncComplete,       /* Async function operation is Complete */
       Fapi_Error_Fail=500,             /* Generic Function Fail code */
       Fapi_Error_StateMachineTimeout,  /* State machine polling never returned ready and timed out */
       Fapi_Error_OtpChecksumMismatch,  /* Returned if OTP checksum does not match expected value */
       Fapi_Error_InvalidDelayValue,    /* Returned if the Calculated RWAIT value exceeds 15  - Legacy Error */
       Fapi_Error_InvalidHclkValue,     /* Returned if FClk is above max FClk value - FClk is a calculated from HClk and RWAIT/EWAIT */
       Fapi_Error_InvalidCpu,           /* Returned if the specified Cpu does not exist */
       Fapi_Error_InvalidBank,          /* Returned if the specified bank does not exist */
       Fapi_Error_InvalidAddress,       /* Returned if the specified Address does not exist in Flash or OTP */
       Fapi_Error_InvalidReadMode,      /* Returned if the specified read mode does not exist */
       Fapi_Error_AsyncIncorrectDataBufferLength,
       Fapi_Error_AsyncIncorrectEccBufferLength,
       Fapi_Error_AsyncDataEccBufferLengthMismatch,
       Fapi_Error_FeatureNotAvailable  /* FMC feature is not available on this device */
    }  ATTRIBUTE_PACKED Fapi_StatusType;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    绿色环保、

    他们是否能够成功执行 C2000Ware 中的闪存编程示例?

    谢谢、此致、
    Vamsi