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

作者: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,经验证,芯片可顺利完成引导程序,从而执行应用程序。


耐静水压测试仪的实验原理是怎样的
能源统一监管格局形成 有利新能源并网
全球首款无人预警机试验成功
凌壹科技ITX-GX420TA-D8嵌入式主板介绍
石墨是锂电池电芯中最主要的负极材料
F28004x在线调试复位后程序无法运行怎么办
微软官方确认未来将提供隐藏传统的控制面板的功能
怎样用纺织传感器制作手套控制器
专访星思半导体陈正磊:聚焦5G基带芯片,以创新和专注打磨极致产品
激光雷达不可或缺部分-陶瓷电路板
荣耀V40系列通过工信部与国家3C认证
三星逃离中国,九月将关闭国内最后一家工厂
AcrelEMS-EV汽车工业能效管理平台助力能源管理体系的建立和实施
特斯拉工厂突发火灾 尚不清楚会给特斯拉量产带来什么影响
华为VR Glass今日首售,采用超短焦光学模组,70/90Hz刷新率
福田汽车对工业互联网的探索及实践经验
华晨中华新款V3最新消息:3分钟带你了解新车变化,新车将于明日(7月27日)正式上市!
FPGA有哪些优质的带源码的IP开源网站?
带软开启功能的MOS管电源开关电路
华为真无线耳机FreeBuds 4i在京东开售