问题描述: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) 若芯片没有连接仿真器,系统进入脱机模式的引导过程。F28004x在出厂时默认通过引导模式选择引脚(Boot Mode Select Pin, BMPS) GPIO24和GPIO32的电平状态组合选择不同的引导模式。但与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:tic2000C2000Ware_DigitalPower_SDK_1_02_00_00c2000waredevice_supportf28004xexamplesled ),烧写程序。根据表 2给出的Boot ROM 寄存器地址,可通过在Memory Browser 窗口查看EMU_BOOTPIN_CONFIG.Key值(高8位),即由于EMU-BOOTPIN-CONFIG.Key = 0xEE, 因此芯片将进入Wait Boot 模式,如果进行reset后直接运行,通过反汇编Disassembly 窗口可知程序停在了0x3FB02A,处于ESTOP0循环等待状态,正是在Wait Boot 的运行地址范围内(0x3FAD74 – 0x3FB0CD)。
因此,如果要实现复位后点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芯片的引导过程。可知该芯片已默认配置成GET_BOOT模式(EMU_BMODE= 0x0003),进一步去判断OTP_KEY的值,该值不等于0x55AA,因此引导模式为boot to flash,经验证,芯片可顺利完成引导程序,从而执行应用程序。
审核编辑:郭婷
-
芯片
+关注
关注
457文章
51345浏览量
428277 -
寄存器
+关注
关注
31文章
5377浏览量
121398 -
仿真器
+关注
关注
14文章
1019浏览量
83984
发布评论请先 登录
相关推荐
基于F28004x的C2000芯片引导过程
TMS320F28004X微控制器的详细英文数据手册详细概述(免费下载)
![TMS320<b class='flag-5'>F28004X</b>微控制器的详细英文数据手册详细概述(免费下载)](https://file.elecfans.com/web1/M00/52/2C/pIYBAFsQsNGAZxQIAAEwAo74LO8415.png)
项目笔记: STM32G4 软件复位后程序无法运行的原因分析和解决
![项目笔记: STM32G4 软件<b class='flag-5'>复位</b><b class='flag-5'>后</b><b class='flag-5'>程序</b><b class='flag-5'>无法</b><b class='flag-5'>运行</b>的原因<b class='flag-5'>分析</b>和解决](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32下载后无法自动复位,需手动复位 下载程序时,勾选reset and run后仍不可自动复位
![STM32下载<b class='flag-5'>后</b><b class='flag-5'>无法</b>自动<b class='flag-5'>复位</b>,需手动<b class='flag-5'>复位</b> 下载<b class='flag-5'>程序</b>时,勾选reset and run<b class='flag-5'>后</b>仍不可自动<b class='flag-5'>复位</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
不复位MCU直接调试运行程序
C2000 F28004x系列MCU PLL锁相失败问题解决方案
![C2000 <b class='flag-5'>F28004x</b>系列MCU PLL锁相失败问题解决方案](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
电机控制系统绝对值编码器正交分频输出Abs2QEP PTO(Pulse Train Output)基于F28004x的软件实现
![电机控制系统绝对值编码器正交分频输出Abs2QEP PTO(Pulse Train Output)基于<b class='flag-5'>F28004x</b>的软件实现](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
评论