0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

F28004x在线调试复位后程序无法运行怎么办

电子设计 来源:电子设计 作者:电子设计 2022-01-13 17:05 次阅读

作者:TI 工程师 Aki Li, Ricky Zhang

问题描述:F28004x在线调试,如果利用CCS进行reset复位后,点击run/resume程序将停留在0x3FB02A 而无法继续运行, 而需先点击restart,程序方可正常运行。原因在于F28004x在仿真状态下的引导模式(Emulation Boot)尚未配置,因而无法顺利完成引导过程,而CCS的restart功能可以屏蔽芯片的引导过程,使得程序自动跳到main()函数入口。具体分析此问题之前,有必要了解下芯片在复位后的引导过程。下面以F28004x为例介绍C2000芯片的引导过程,老版本的芯片可参考《TMS320x2803x Piccolo Boot ROM reference guide》,基本过程还是一致的。

当芯片重上电或者收到复位信号时,芯片都需要执行引导程序,选择程序入口地址或者通过外设加载程序(bootloader),后续才会运行应用程序。复位后,芯片会从地址0x3FFFC0处运行复位向量,从而跳转至Boot ROM里开始执行InitBoot功能。芯片会判断当前是否连接仿真器,进入不同的引导流程,如图1和图2分别给出了芯片在脱机模式和仿真调试模式的引导过程。

(1) 若芯片没有连接仿真器,系统进入脱机模式的引导过程。F28004x在出厂时默认通过引导模式选择引脚(Boot Mode Select Pin, BMPS) GPIO24和GPIO32的电平状态组合选择不同的引导模式,如表1所示。但与F2803x等老版本芯片不同,F28004x也可以支持用户自定义BMPS和引导模式,分别通过改写DCSM OTP中的 Z1-OTP-BOOTPIN-CONFIG和Z1-OTP-BOOTDEF对应的值实现自定义引导功能,支持最多3个BMPS引脚和8种引导模式。

具体过程:若Z1-OTP-BOOTPIN-CONFIG.Key=0x5A,则进入自定义引导模式,

芯片根据Z1-OTP-BOOTPIN-CONFIG.BMPSx设定的BMPS引脚及其电平状态,判断要执行的引导模式(对应的引导模式通过Z1-OTP-BOOTDEF.BOOTDEFx进行设置)。否则,芯片将根据GPIO24和GPIO32的电平状态选择默认的引导模式。

(2) 若芯片没有连接仿真器,则进入仿真调试的引导模式,通过读取EMU-BOOTPIN-CONFIG和EMU_BOOTDEF的值,从而执行特定的引导模式。值得注意的是,上述的自定义模式配置在OTP中的修改是一次性的,无法再次擦写。因此,系统提供了EMU-BOOTPIN-CONFIG和EMU_BOOTDEF用于仿真模拟自定义的引导过程,用于真正修改DCSM OTP之前的参考。

具体过程:若EMU-BOOTPIN-CONFIG.Key=0x5A,则选择自定义模式进行引导过程,芯片根据EMU-BOOTPIN-CONFIG.BMPSx设定的BMPS引脚及其电平状态,判断要执行的引导模式。值得注意的是,若EMU-BOOTPIN-CONFIG.Key=0xA5,则意味着芯片可在仿真器连接的情况下,进入脱机运行模式下对应的引导过程,即根据Z1-OTP-BOOTPIN-CONFIG和Z1-OTP-BOOTDEF对应的值进行引导;该模式与F2803x在连接仿真器时将EMU_BMODE配置成GetMode()原理一致。而如果EMU-BOOTPIN-CONFIG.Key的值没有正确配置,芯片将进入Wait Boot 模式,会处于循环等待状态而无法完成引导过程。

若芯片顺利完成引导模式,芯片会通过外设进行加载程序,或者直接跳转至引导模式对应的程序入口地址开始运行应用程序,即main()。比如,如果是boot to Flash,则跳转至地址0x80000(此时需在CMD文件中配置“codestart” section链接至对应的Flash 空间地址)。

基于以上关于F28004x芯片引导流程的介绍,再回头分析下芯片在连接仿真器进行调试时的复位问题。以C2000ware提供的LED程序为例,(C:\ti\c2000\C2000Ware_DigitalPower_SDK_1_02_00_00\c2000ware\device_support\f28004x\examples\led ),烧写程序。根据表 2给出的Boot ROM 寄存器地址,可通过在Memory Browser 窗口查看EMU_BOOTPIN_CONFIG.Key值(高8位),结果如图 3所示,即由于EMU-BOOTPIN-CONFIG.Key = 0xEE, 因此芯片将进入Wait Boot 模式,如果进行reset后直接运行,通过反汇编Disassembly 窗口可知程序停在了0x3FB02A,处于ESTOP0循环等待状态,正是在Wait Boot 的运行地址范围内(0x3FAD74 – 0x3FB0CD),如图 4所示。

因此,如果要实现复位后点resume直接运行,解决方法就是要正确配置仿真状态下的引导模式。以boot to flash 为例(F28004x TRM手册中的4.3.3.1), 有以下两种思路:

1) 在EMU_BOOTPIN_CONFIG地址写入0x5AFFFFFF,同时在EMU_BOOTDEF_LOW地址对应的低8位写入0x03(BOOTDEF.BOOTDEF0=0x03)

2) 如果芯片在单机时可正常运行,例如GPIO24和GPIO32电平都为高(默认进入boot to flash),则在EMU_BOOTPIN_CONFIG地址0xD00写入0xA5FFFFFF即可。

最后,对比下老版本的F28035芯片的引导过程。如图 5所示,可知该芯片已默认配置成GET_BOOT模式(EMU_BMODE= 0x0003),进一步去判断OTP_KEY的值,该值不等于0x55AA,因此引导模式为boot to flash,经验证,芯片可顺利完成引导程序,从而执行应用程序。


审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式处理
    +关注

    关注

    0

    文章

    341

    浏览量

    9990
收藏 人收藏

    评论

    相关推荐

    电机控制系统绝对值编码器正交分频输出Abs2QEP PTO基于F28004x的软件实现

    电子发烧友网站提供《电机控制系统绝对值编码器正交分频输出Abs2QEP PTO基于F28004x的软件实现.pdf》资料免费下载
    发表于 10-31 10:28 0次下载

    TMS320F28004x实时微控制器

    电子发烧友网站提供《TMS320F28004x实时微控制器.pdf》资料免费下载
    发表于 10-31 10:26 0次下载

    C2000 F28004x系列MCU PLL锁相失败问题解决方案

    电子发烧友网站提供《C2000 F28004x系列MCU PLL锁相失败问题解决方案.pdf》资料免费下载
    发表于 09-27 11:24 0次下载
    C2000 <b class='flag-5'>F28004x</b>系列MCU PLL锁相失败问题解决方案

    电机控制系统绝对值编码器正交分频输出Abs2QEP PTO(Pulse Train Output)基于F28004x的软件实现

    电子发烧友网站提供《电机控制系统绝对值编码器正交分频输出Abs2QEP PTO(Pulse Train Output)基于F28004x的软件实现.pdf》资料免费下载
    发表于 09-27 10:15 0次下载
    电机控制系统绝对值编码器正交分频输出Abs2QEP PTO(Pulse Train Output)基于<b class='flag-5'>F28004x</b>的软件实现

    ddos造成服务器瘫痪怎么办

    在服务器遭受DDoS攻击,应立即采取相应措施,包括加强服务器安全、使用CDN和DDoS防御服务来减轻攻击的影响。rak小编为您整理发布ddos造成服务器瘫痪怎么办
    的头像 发表于 08-15 10:08 229次阅读

    TMS320F28004x实时微控制器数据表

    电子发烧友网站提供《TMS320F28004x实时微控制器数据表.pdf》资料免费下载
    发表于 08-01 14:08 0次下载
    TMS320<b class='flag-5'>F28004x</b>实时微控制器数据表

    STM32F1 IAP操作读保护选项字节设置,APP使用系统复位跳转无法运行IAP的原因?

    读保护。我现在有一个问题,APP使用系统复位跳转无法运行IAP,需要断一次电才行,IAP升级结束也是一样跳转不出IAP,需要断电
    发表于 05-13 08:09

    STM32F051使用J-flash烧录完固件文件,按键复位(NRST脚)程序总是卡在Delay()的原因?

    我使用的是STM32F051,使用J-flash烧录完固件文件,按键复位(NRST脚)程序总是卡在Delay(),
    发表于 04-07 07:03

    Stm32断电无法正常运行的原因?怎么解决?

    自己设计的STM32板子刚开始可以烧录代码运行舵机,然后断电再供电就没反应了,再次烧录也不行,但是烧录LED灯的代码,灯可以正常闪烁,请这种情况怎么办
    发表于 03-12 06:42

    MCU不复位调试的小技巧

    01 前言 在产品开发时,经常会碰到在测试过程中或设备出厂才发现程序异常,但当重新对设备仿真调试时却复现不出现场的问题,或者只能通过保存的日志信息艰难分析代码运行到了何处而导致的异常
    发表于 02-26 11:30 858次阅读
    MCU不<b class='flag-5'>复位</b><b class='flag-5'>调试</b>的小技巧

    linux用gdb调试遇到函数调用怎么办

    linux用gdb调试遇到函数调用怎么办? 在Linux上使用GDB调试时,遇到函数调用是一个常见的情况。函数调用可能涉及到多个函数、多个文件,这就需要我们仔细审查代码,理解函数之间的关系和参数传递
    的头像 发表于 01-31 10:33 669次阅读

    wifi无互联网连接怎么办?解决wifi无法访问互联网怎么办的方法

    wifi无互联网连接怎么办?解决wifi无法访问互联网怎么办的方法  在现代社会中,WiFi已经成为了我们生活中必不可少的一部分。然而,有时我们可能会遇到WiFi无法访问互联网的问题,
    的头像 发表于 01-17 11:17 3.3w次阅读

    GD32 MCU进入低功耗模式导致无法再进行程序下载怎么办

    很多朋友在调试GD32 MCU的低功耗模式时会遇到一个问题:程序中让MCU进入了Sleep、Deepsleep或者Standby模式,之后MCU就无法再下载程序了。这是因为在低功耗模式
    的头像 发表于 01-12 09:41 3116次阅读
    GD32 MCU进入低功耗模式导致<b class='flag-5'>无法</b>再进行<b class='flag-5'>程序</b>下载<b class='flag-5'>怎么办</b>?

    风机轴磨损怎么办

    电子发烧友网站提供《风机轴磨损怎么办.docx》资料免费下载
    发表于 01-07 11:04 0次下载

    pcb钻孔偏孔了怎么办

    pcb钻孔偏孔了怎么办
    的头像 发表于 11-22 11:10 3165次阅读
    pcb钻孔偏孔了<b class='flag-5'>怎么办</b>?