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.

[参考译文] CCS/TMS320F28.0049万M:TMS320F28.0049万:如何设置"零启动模式选择引脚"

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/655051/ccs-tms320f280049m-tms320f280049-how-to-set-zero-boot-mode-select-pins

部件号:TMS320F28.0049万M

工具/软件:Code Composer Studio

尊敬的TI团队:

文档sprui33a.pdf (TMS320F2.8004万x_Technical Reference Manual)的4.3 部分 。3.1 零启动模式选择引脚

请告诉我如何按以下方式配置(章节4.3 。3.1 零启动模式选择引脚),我想在没有任何外部上拉引脚的情况下启动到闪存。

1.在OTP中对BOOTPIN_CONFIG位置进行如下编程:
•将BOOTPIN_CONFIG.BMSP0设置为0xFF
•将BOOTPIN_CONFIG.BMSP1设置为0xFF
•将BOOTPIN_CONFIG.BMSP2设置为0xFF
•将引导ROM的BOOTPIN_CONFIG.KEY设置为0x5A,以将这些寄存器位视为有效。
2.对设备的BOOTDEF位置选项进行编程。 这实际上是设置特定于设备的引导
模式表。
•将BOOTDEF.BOOTDEF0设置为0x03以引导模式值0引导至闪存
•(可选)将BOOTDEF.BOOT_DEF0_ALT_OPTIONS设置为不同的值以切换到其中一个
可用的闪存入口点替代方案。

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


    1)编程用户OTP地址0x7800C = 0xFFFF &编程用户OTP地址0x7800D = 0x5AFF

    2)编程用户OTP地址0x7801C = 0xFF03

    此致,
    Manoj
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的Manoj:
    请帮助检查我的步骤,如下所示(由我添加),此功能相同,不起作用:

    1.在.asm文件中添加代码
    ***************
    *函数:codegstart部分
    *
    *说明:从分支到代码起点
    ***************

    .sect "codegot"(代码开始)
    .sect "ota_key" ;由我添加
    int 0x5AFF ;由我添加
    .sect "OT_BMODE";由我添加
    内部0xFFFF ;由我添加
    .sect "OTP_Boot" ;由我添加
    int 0xFF03 ;由我添加
    代码开始:
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //============================================================================================================================================================================================================================

    2.在.cmd文件中添加代码

    内存

    第0页:
    /* BEGIN用于“引导至闪存”引导加载程序模式*/

    开始 :原点= 0x8万,长度= 0x0.0002万
    RAMM0 :原点= 0x0000F5,长度= 0x0.003万B

    RAMLS0 :原点= 0x0.8万,长度= 0x0.08万
    RAMLS1 :原点= 0x0.88万,长度= 0x0.08万
    RAMLS2 :原点= 0x0.9万,长度= 0x0.08万
    RAMLS3 :原点= 0x0.98万,长度= 0x0.08万
    RAML4 :原点= 0x00A000,长度= 0x0.08万
    重置 :原点= 0x3FFFC0,长度= 0x0.0002万

    OTP_BMODE :原始= 0x0.78万C,长度= 0x0.0001万 /*由我添加*/
    ota_key :原始= 0x0.78万D,长度= 0x0.0001万 /*由我添加*/
    ota_boot :源站= 0x0.7801万C,长度= 0x0.0001万 /*由我添加*/
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否在sections指令中添加了以下定义?

             章节
             {

         OTP_BMODE:> OTP_BMODE,PAGE =0

         otp_key:> otp_key,page =0

         OTP_Boot::> OTP_Boot, page =0

    }

    此致,

    Manoj

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

    尊敬的 Manoj:

    否,我不是在节,

    我本周不在办公室,

    我将在下星期一试用,非常感谢您的建议。

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

    尊敬的Manoj:

    在 各节中添加定义后,

    我也不能 进入闪存模式。

    请帮助我查看我的"2.8004万x_generic_flash_lnk.cmd"和"f2.8004万x_codestartbranch.ASM"源代码,如下所示:

    1. 2.8004万x_generic_flash_lnk.cmd ================================================================ >>

    内存

    第0页:
    /* BEGIN用于“引导至闪存”引导加载程序模式*/

    BEGIN:Origin = 0x8万,length = 0x0.0002万
    RAMM0:原点= 0x0000F5,长度= 0x0.003万B

    RAMLS0:原点= 0x0.8万,长度= 0x0.08万
    RAMLS1:原点= 0x0.88万,长度= 0x0.08万
    RAMLS2:原点= 0x0.9万,长度= 0x0.08万
    RAMLS3:原点= 0x0.98万,长度= 0x0.08万
    RAMLS4:原点= 0x00A000,长度= 0x0.08万
    重置:原始= 0x3FFFC0,长度= 0x0.0002万

    OTP_BMODE :原始= 0x0.78万C,长度= 0x0.0001万 /*由我添加*/
    ota_key : origin = 0x0.78万D,长度= 0x0.0001万 /*由我添加*/
    ota_boot :源站= 0x0.7801万C,长度= 0x0.0001万 /*由我添加*/


    /*闪存扇区*/
    /*气缸组0 */
    FLASH_BANK0_SEC0:原点= 0x8.0002万,长度= 0x000FFE /*片上闪存*/
    FLASH_BANK0_SEC1:原点= 0x8.1万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_sec2:原点= 0x8.2万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC3:原点= 0x8.3万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC4:原点= 0x8.4万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC5:原点= 0x8.5万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC6:原点= 0x8.6万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC7:原点= 0x8.7万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC8:原点= 0x8.8万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC9:原点= 0x8.9万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC10:原点= 0x08A000,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC11:原点= 0x08B000,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC12:原点= 0x08C000,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC13:原点= 0x08D000,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC14:原点= 0x08E000,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK0_SEC15:原点= 0x08F000,长度= 0x0.1万 /*片上闪存*/


    /*气缸组1 */
    FLASH_BANK1_SEC0:Origin = 0x9万,length = 0x0.1万 /*片上闪存*/
    FLASH_BANK1_SEC1:原点= 0x9.1万,长度= 0x0.1万 /*片上闪存*/
    Flash_Bank1_sec2:Origin = 0x9.2万,length = 0x0.1万 /*片上闪存*/
    FLASH_BANK1_SEC3:原点= 0x9.3万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK1_SEC4:原点= 0x9.4万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK1_SEC5:原点= 0x9.5万,长度= 0x0.1万 /*片上闪存*/
    FLASH_BANK1_SEC6:原点= 0x9.6万,长度= 0x0.1万 /*片上闪存*/
    Flash_Bank1_sec7:原始= 0x9.7万,长度= 0x0.1万 /*片上闪存*/
    Flash_Bank1_SEC8:Origin = 0x9.8万,长度= 0x0.1万 /*片上闪存*/
    Flash_Bank1_SEC9:Origin = 0x9.9万,length = 0x0.1万 /*片上闪存*/
    Flash_Bank1_SEC10:Origin = 0x09A000,length = 0x0.1万 /*片上闪存*/
    Flash_Bank1_SEC11:Origin = 0x09B000,length = 0x0.1万 /*片上闪存*/
    Flash_Bank1_SEC12:Origin = 0x09C000,length = 0x0.1万 /*片上闪存*/
    Flash_Bank1_SEC13:Origin = 0x09D000,length = 0x0.1万 /*片上闪存*/
    Flash_Bank1_SEC14:Origin = 0x09E000,length = 0x0.1万 /*片上闪存*/
    Flash_Bank1_SEC15:Origin = 0x09F000,length = 0x0.1万 /*片上闪存*/

    第1页:

    BOOT_RSVD:Origin = 0x0.0002万,length = 0x0000F3 /* M0的一部分,boot ROM将使用此堆栈*/
    RAMM1:原点= 0x0.04万,长度= 0x0.04万 /*片上RAM块M1 */

    RAMLS5:原点= 0x00A800,长度= 0x0.08万
    RAMLS6:原点= 0x00B000,长度= 0x0.08万
    RAMLS7:原点= 0x00B800,长度= 0x0.08万

    RAMGS0:原点= 0x00C000,长度= 0x0.2万
    RAMGS1:原点= 0x00E000,长度= 0x0.2万
    RAMGS2:原点= 0x1万,长度= 0x0.2万
    RAMGS3:原点= 0x1.2万,长度= 0x0.2万
    }


    章节

    codegstart:> begin,page =0,align(4)
    text :>>FLASH_BANK0_SEC1 | FLASH_BANK0_SEC2 | FLASH_BANK0_SEC3,page =0,align(4)
    .cinit :> flash_BANK0_SEC1, page =0,align(4)
    .Pinit:> FLASH_BANK0_SEC1,PAGE =0,align(4)(页= 0,对齐(4))
    .switch :> flash_BANK0_SEC1, page =0,align(4)
    .reset:> reset,page =0,type = DSECT /* not used,*/

    OTP_BMODE :> OTP_BMODE, page =0/*由ME*/添加
    otp_key:> otp_key,页=0 /*由我添加*/
    OTP_Boot ::> OTP_Boot, page =0/*由我添加*/

    CIO:> RAMLS0,页=0
    .stack:> RAMM1,页= 1
    .ebss:> RAMLS5,页面=1
    esysmem:> RAMLS5,页面= 1
    econst :> flash_BANK0_SEC4,page =0,align(4)

    ramgs0:> RAMGS0,页=1
    ramgs1:> RAMGS1,页= 1.

    .TI.ramfunc : load = flash_BANK0_SEC1,
    RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3,
    load_start(_RamfuncsLoadStart),
    load_size (_RamfuncsLoadSize),
    load_end (_RamfuncsLoadEnd),
    run_start(_RamfuncsRunStart),
    Run_Size (_RamfuncsRunSize),
    Run_End(_RamfuncsRunEnd),
    页面= 0,对齐(4)

    }

    f2.8004万x_codestartbranch.asm =========================================================== >>

    ***************

    wd_disable .set 0;设置为1禁用wd,否则设置为0

    .ref _c_int00
    .global code_start

    ***************
    *函数:codegstart部分
    *
    *说明:从分支到代码起点
    ***************

    .sect "codegot"(代码开始)

    .sect "ota_key"
    int 0x5AFF

    .sect "OTP_BMODE"
    内部0xFFFF

    .sect "OTP_Boot"
    int 0xFF03


    代码开始:

    如果wd_disable == 1
    LB wd_disable;分支到看门狗禁用代码
    否则
    LB _c_int00;从Branch启动RTS库中的._asm
    endif

    ;结束代码开始部分

    ***************
    *功能:wd_disable
    *
    *说明:禁用看门狗计时器
    ***************
    如果wd_disable == 1

    文本
    WD_禁用:
    SETC OBJMODE;为28x对象代码设置OBJMODE
    EALLOW;启用EALLOW保护的寄存器访问
    MOVZ DP,#7029h>>6;设置WDCR寄存器的数据页
    MOV @7029h,#0068h;在WDCR中设置WDDIS位以禁用WD
    EDIS;禁用EALLOW保护的寄存器访问
    LB _c_int00;从Branch启动RTS库中的._asm

    endif

    ;结束wd_disable

    结束

    ;//
    ;//文件结束。
    ;//

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

    我浏览了您的代码。 除了下面的行之外,我没有看到.cmd /.asm文件有任何重大问题。 但是,实际上很难逐行查看客户代码。

    OTP_Boot ::> OTP_Boot, page =0/*由我添加*/

    应该是这样

    OTP启动:> OTP启动,页面= 0 /*由ME*/添加

    您是否确保OTP位置以正确的预期数据开始编程?

    此致,
    Manoj
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的Manoj:
    好的,非常感谢您的帮助,
    现在就可以工作了。