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.

[参考译文] TMS570LS1227:FEE 驱动器和引导加载程序的预取错误

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1466418/tms570ls1227-prefetch-error-with-fee-driver-and-bootloader

器件型号:TMS570LS1227
主题中讨论的其他器件:HALCOGEN

工具与软件:

您好!

我使用的应用程序带有引导加载程序、 在不使用 FEE 驱动器的情况下、引导加载程序和应用程序代码运行正常、没有任何错误。 当我添加 FEE Driver 并在没有应用程序代码的情况下使用它时、它也能无问题运行。 到目前为止没有任何问题。 但是、当我将引导加载程序和我的应用程序与 FEE 驱动器一起使用时、它会导致预取错误。

当我调试代码时、在一些试用之后、我意识到该TI_Fee_WriteAsync函数会导致预取错误。 当我在应用程序代码中注释掉该函数时、一切都正常。 我将共享.cmd引导加载程序和应用程序代码的文件。 有什么解决此问题的建议吗? 谢谢。

引导加载程序.cmd文件:

/*                                                                            */
/*----------------------------------------------------------------------------*/
/* USER CODE BEGIN (0) */
/* USER CODE END */


/*----------------------------------------------------------------------------*/
/* Linker Settings                                                            */

--retain="*(.intvecs)"

/* USER CODE BEGIN (1) */
/* USER CODE END */

/*----------------------------------------------------------------------------*/
/* Memory Map                                                                 */

MEMORY
{

    VECTORS (X)  : origin=0x00010000 length=0x00000020
    FLASH0  (RX) : origin=0x00010020 length=0x0012FFE0
    STACKS  (RW) : origin=0x08000000 length=0x00001500
    RAM     (RW) : origin=0x08001500 length=0x0002EB00

/* USER CODE BEGIN (2) */
/* USER CODE END */
}

/* USER CODE BEGIN (3) */
/* USER CODE END */

/*----------------------------------------------------------------------------*/
/* Section Configuration                                                      */

SECTIONS
{
    .intvecs : {} > VECTORS

       flashAPI:
    {
    	.\source\bl_flash.obj(.text)
    	--library=F021_API_CortexR4_BE.lib(.text)
    }palign=8 load=FLASH0, run=RAM, LOAD_START(apiLoadStart), RUN_START(apiRunStart), SIZE(apiLoadSize)

    .text    : {} > FLASH0
    .const   : {} > FLASH0
    .cinit   : {} > FLASH0
    .pinit   : {} > FLASH0
    .bss     : {} > RAM
    .data    : {} > RAM
    .sysmem  : {} > RAM

    FEE_TEXT_SECTION : {} > FLASH0
    FEE_CONST_SECTION : {} > FLASH0
    FEE_DATA_SECTION : {} > RAM

/* USER CODE BEGIN (4) */
/* USER CODE END */
}

/* USER CODE BEGIN (5) */
/* USER CODE END */


/*----------------------------------------------------------------------------*/
/* Misc                                                                       */

/* USER CODE BEGIN (6) */
/* USER CODE END */
/*----------------------------------------------------------------------------*/

应用 cmd 文件:

/*                                                                            */
/*----------------------------------------------------------------------------*/
/* USER CODE BEGIN (0) */
/* USER CODE END */


/*----------------------------------------------------------------------------*/
/* Linker Settings                                                            */

--retain="*(.intvecs)"

/* USER CODE BEGIN (1) */
/* USER CODE END */

/*----------------------------------------------------------------------------*/
/* Memory Map                                                                 */

MEMORY
{
    VECTORS (X)  : origin=0x00000000 length=0x00000020
    FLASH0  (RX) : origin=0x00000020 length=0x0013FFE0  // OD length=0x0013FFE0 -->> length=0x0000FFFF
    STACKS  (RW) : origin=0x08000000 length=0x00001500
    RAM     (RW) : origin=0x08001500 length=0x0002EB00

/* USER CODE BEGIN (2) */
/* USER CODE END */
}

/* USER CODE BEGIN (3) */
/* USER CODE END */


/*----------------------------------------------------------------------------*/
/* Section Configuration                                                      */

SECTIONS
{
    .intvecs : {} > VECTORS

       flashAPI:
    {
    	.\fapi\\source\Fapi_UserDefinedFunctions.obj(.text)
    	.\source\bl_flash.obj(.text)
    	--library=F021_API_CortexR4_BE.lib(.text)
    }palign=8 load=FLASH0, run=RAM, LOAD_START(apiLoadStart), RUN_START(apiRunStart), SIZE(apiLoadSize)

    .text    : {} > FLASH0 
    .const   : {} > FLASH0 
    .cinit   : {} > FLASH0 
    .pinit   : {} > FLASH0 
    .bss     : {} > RAM
    .data    : {} > RAM
    .sysmem  : {} > RAM
    

/* USER CODE BEGIN (4) */
/* USER CODE END */
}

/* USER CODE BEGIN (5) */
/* USER CODE END */


/*----------------------------------------------------------------------------*/
/* Misc                                                                       */

/* USER CODE BEGIN (6) */
/* USER CODE END */
/*----------------------------------------------------------------------------*/

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

    尊敬的 Alper:

    如果我将引导加载程序和我的应用程序与 FEE 驱动程序一起使用、则会导致预取错误

    请给我一些关于费驱动程序的详细信息:

    1.您在哪里启用收费驱动程序? 它位于引导加载程序中吗?

    2.使用这种收费驱动程序,你在内存中写入数据? 它是否位于闪存组7中?

    3、您打算何时使用 FEE 写入数据? POR 之后、内核将首先执行引导加载程序、然后它应该跳转到应用程序、以及何时会发生这种费用写入?

    ——
    谢谢、此致、
    Jagadish。

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

    尊敬的 Jagadish:

    感谢您的答复。  下面的提供了更多详细信息。 如果有更多信息、我可以尽量回复。

    1.在应用程序代码中启用 FEE 驱动器。 启用代码如下:

    Fapi_setActiveFlashBank(Fapi_FlashBank7);
        TI_Fee_Init();
        do
        {
            TI_Fee_MainFunction();
            delay();
            Status = TI_Fee_GetStatus(0);
        }
        while (Status != IDLE);
    

    2.是的,我正在用 FEE 驱动器将数据写入闪存组7。 我们使用 Halcogen 进行配置。 只有8字节数据被写入闪存组7、并且只使用第一个块。

    3.在应用程序代码中使用费用。 它的使用独立于引导加载程序。 在下面的代码中、你可以看到我使用 FEE 写入内存的函数。 即使未在我的应用程序代码(但它位于编译中)中调用此函数、在引导加载程序完成将应用程序代码写入闪存并跳转到应用程序代码后、也会导致预取错误。 在应用程序代码的_c_int00的_TI_auto_init ()中出现预取错误。 但是、当我注释掉 WritingEEPROM 函数的 内容时、不会提供预取错误、并且应用程序代码开始。

    void WriteEEPROM(uint8 *SpecialRamBlock)
    {
        uint16 u16JobResult, Status;
        unsigned int BlockNumber;
    
        /* Write the block into EEP Asynchronously. Block size is configured in ti_fee_cfg.c file. Default Block size is
         8 bytes */
        BlockNumber = 0x1;
        TI_Fee_WriteAsync(BlockNumber, &SpecialRamBlock[0]);
        do
        {
            TI_Fee_MainFunction();
            delay();
            Status = TI_Fee_GetStatus(0);
        }
        while (Status != IDLE);
    }
    

    ——

    谢谢、此致、