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.

[参考译文] TMS320F28374S:F28374S 在线升级失败

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1247694/tms320f28374s-f28374s-online-upgrade-failed

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

当 F28374S 在线升级时、升级将失败。 具体过程如下:

F28374S 引导程序说明:

1) F021_API_F2837xS_FPU32.lib 被分配到引导 RAM 区域。

2)应用和引导的系统时钟均为200MHz。

3)目前,当定位升级失败时,程序运行到 Fapi_setActiveFlashBank()函数,并且 Fapi_setActiveFlashBank 的返回值不等于 Fapi_Status_Success ,导致引导程序执行终止。

4) 4) Init_Flash_sectors 函数会分配给引导 RAM 区域。

启动代码如下:

void initial_Boot (void)

{  

 BootInitialSystem();

 init_Flash_sectors ();

 BootFlashUpdate();

 

静态空 BootInitialSystem (void)

{

    Volatile UINT16 temp;

    UINT16 I;

    易失性结构 SCI_REGS * pBootComSciRegs;

    pBootComSciRegs =&ScicRegs;

    //禁用看门狗模块

    Dint;

  EALLOW;

  Temp = WdRegs.WDCR.All & 0x0007;

  WdRegs.WDCR.all = 0x0068 | temp;

    EDIS;

 

    Example_Memcopy (&FlashAPILoadStart、&FlashAPILoadEnd、&FlashAPIRunStart);

   

BootInitSysPll (XTAL_OSC、IMULT_20、FMULT_0、PLLCLK_BY_2);

    BootInitPeripheralClocks();

 

    BootInitGpio();

 

    BootGPIO_SetupPinMux (43、GPIO_MUX_CPU1、0);

    BootGPIO_SetupPinOptions (43、GPIO_output、GPIO_PushPull);

  GpioDataRegs.GPBCLEAR .bit.GPIO43 = 1;

 

    BootGPIO_SetupPinMux (90、GPIO_MUX_CPU1、6);

    BootGPIO_SetupPinOptions (90、GPIO_input、GPIO_PushPull);

    BootGPIO_SetupPinMux (89、GPIO_MUX_CPU1、6);

    BootGPIO_SetupPinOptions (89、GPIO_output、GPIO_ASYNC);

 

    BootGPIO_SetupPinMux (94、GPIO_MUX_CPU1、6);

    BootGPIO_SetupPinOptions (94、GPIO_input、GPIO_PushPull);

    BootGPIO_SetupPinMux (93、GPIO_MUX_CPU1、6);

    BootGPIO_SetupPinOptions (93、GPIO_output、GPIO_ASYNC);

 

    pBootComSciRegs->SCIFFTX.ALL = 0xA000;

    pBootComSciRegs->SCIFFRX.ALL = 0x201F;//启用 SCIB_RXINT、FIFO 级别为1

    pBootComSciRegs->SCIFFCT.all = 0;

 

    pBootComSciRegs->SCICTL1.bit.SWRESET =0;

    for (I=0;I<20;I++);

    pBootComSciRegs->SCICTL1.bit.SWRESET = 1;

 

    //对 sci 进行初始化

    // 1个停止位,无奇偶校验,8位字符

    //无回送

  pBootComSciRegs->SCICCR.all =0x0007; // 1个停止位、 无回送

    //无奇偶校验,8个字符位,

    //异步模式,空闲线协议

  pBootComSciRegs->SCICTL1.all =0x0003; //启用 TX、RX、内部 SCICLK、

    //禁用 RX ERR、睡眠、TXWAKE

  pBootComSciRegs->SCICTL2.all = 0;

 

  pBootComSciRegs->SCIHBAUD.all = 0; //频带= 38400

  pBootComSciRegs->SCILBAUD.all = 64;//ARM_BAUD&0x00ff;

  pBootComSciRegs->SCICTL1.all =0x0023;  //从复位中撤回 SCI

 

 

//

// Init_Flash_Sectors -初始化闪存扇区

//

静态空 Init_Flash_Sectors (void)

{

  Fapi_StatusType oReturnCheck;

  EALLOW;

  Flash0EccRegs.ECC_ENABLE_bit.enable = 0x0;

  oReturnCheck = Fapi_initializeAPI (F021_CPU0_W0_BASE_ADDRESS、200);

  if (oReturnCheck!= Fapi_Status_Success)

  {

   __ asm (" ESTOP0"  );

  }

  oReturnCheck = Fapi_setActiveFlashBank (Fapi_FlashBank0);

  if (oReturnCheck!= Fapi_Status_Success)

  {

   __ asm (" ESTOP0"  );

  }

  Flash0EccRegs.ECC_ENABLE_bit.enable = 0xA;

  EDIS;

 

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

    您好、

    这是我的客户、我想提供更多信息。

    在应用程序版本更新期间发生了此类情况、他们需要支持实时更新。

    所以有两个应用、应用 A 和应用 B、他们尝试了很多次、发现在对应用 B 进行编程后、无法对应用 A 和应用 B 进行重新编程。

    引导和应用程序正在共享项目。 它们从应用程序引导、如果有更新命令出现、则会跳转到引导加载程序、在固件更新后会复位器件。

    其他信息:  

    CCS 版本

    6.2.0.00050

    编译器版本

    C2000_15.12.3.LTS

    F021_API_F2837xS_FPU32.lib 版本

    C2000Ware_4_03_00_00

    它们使用 SCI 作为第二个引导加载程序方法、

    引导+应用程序(A)/引导+应用程序(B)均为200MHz

    引导没有任何操作系统、应用程序使用 uCOS。

    存储器使用:

    闪存扇区

    起始地址

    结束地址

    内容

    闪存扇区0

    0x0008 0000

    0x0008 1FFF

    应用闪存

    闪存扇区1

    0x0008 2000

    0x0008 3FFF

    闪存扇区2

    0x0008 4000

    0x0008 5FFF

    闪存扇区3

    0x0008 6000

    0x0008 7FFF

    闪存扇区4

    0x0008 8000

    0x0008 FFFF

    闪存扇区5

    0x0009 0000

    0x0009 7FFF

    闪存扇区6

    0x0009 8000

    0x0009 FFFF

    闪存扇区7

    0x000A 0000

    0x000A 7FFF

    闪存扇区8

    0x000A 8000

    0x000A FFFF

    闪存扇区9

    0x000B 0000

    0x000B 1FFF

    引导闪存

    它们为两个项目提供存储器映射、在两个项目之间、我发现 c_int00位于不同的地址。 但我认为这不会导致此问题。

    您好想看一下并就下一次调试给我一些想法吗?

    e2e.ti.com/.../project_5F00_A.map

    e2e.ti.com/.../project_5F00_B.map

    Br

    爱玛