C2000上电引导模式解析------【TI FAE 经验分享】

2023-11-03 20:32

本文主要是介绍C2000上电引导模式解析------【TI FAE 经验分享】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在使用C2000的时候,经常遇到工程师说芯片仿真能够运行,但是单机跑却不能跑起来;或者在调试时,复位芯片 > run,发现程序不能跑起来。这其中的原因主要是没有了解C2000的引导模式设置。另外当我们想通过其他方式去引导芯片启动的时候,往往也需要清楚知道C2000的引导是怎么设置的。因此,在这里跟大家分享一下我对C2000引导模式的理解,希望对各位理解芯片从上电到跑到main这一段芯片运行情况有所帮助。

以C2000 Piccolo系列的引导模式为例,delfino稍微有点区别,concerto系列的引导则更复杂。但理解了Piccolo的引导原理对我们理解后面两个系列的芯片有非常大的帮助。

1.首先我们根据图1来看一下芯片上电后的代码执行流程,当芯片在接收到一个复位信号后,会到0x3FFFC0去复位向量,该复位向量跳到BootROM 0x3FF75C中去执行bootloader的程序,这里主要有initboot, 和SelectBootMode, 以及一些外设引导的函数。SeleteBootMode根据芯片的硬件或软件设置来判断芯片该去哪里寻找程序入口,直接目的是如何找到main,然后执行应用程序。

                               图1. 芯片的复位流程图

我们最常用到的主要有两种引导模式:

一种是boot to RAM,即跳到0x000000的RAM中,去开始执行指令,主要针对程序加载在RAM的仿真模式;另外一种是boot to Flash,则跳到0x3F7FF6中去开始执行代码。

相应的,程序会这两个入口地址0x000000, 0x3F7FF6放一条跳转指令,在codestart.asm源文件中,原因是在Flash的入口地址处只有两个单元的空间,后面是CSM模块,所以需要跳转;而在RAM中之所以也需要跳转,主要是因为在跳转到main之前,需要执行一小段代码_c_int00,该代码会使用0x000003之后的一段RAM,如果代码放在那里,在执行_c_int00之后会损坏代码。

另外就是一些外设引导模式,如SCI引导以及SPI引导等,像我们常使用的C2PROG软件就支持SCI引导,然后通过串口下载程序。

2. 那么芯片的SelectBootMode函数是如何来判断芯片的引导模式(boot mode)呢?

从图2中我们可以看到,首先会判断芯片是否连接仿真器,根据TRST引脚的状态来判断。

如果是仿真器连接,则进入仿真引导(Emulation Boot),这时候芯片的引导主要是靠2个RAM的单元来判断,即EMU_BMODE和EMU_KEY,地址是0xD01和0xD00,所以我们在连接仿真器后,可以首先修改这两个EMU_BMODE和EMU_KEY来设置引导模式;

如果没有连接仿真器,则进入单机跑模式(stand alone), 这时候芯片的引导主要靠GPIO34和GPIO37的状态,以及两个OTP存储单元的值来判断。不过我们经常没有使用OTP这两个单元,用GPIO的状态就已经够了。

                                            图2. 两种状态下的引导模式

3. 仿真器连接时的引导模式配置

  

当带仿真器的时候,芯片会根据EMU_BMODE和EMU_KEY这两个单元的值来判断引导模式,比如我们带仿真器最常用的就是引导到RAM,即需要设置EMU_KEY = 0X55AA, EMU_BMODE = 0X000A。当我们在仿真的时候,程序load到Flash的时候,就需要设置EMU_KEY = 0X55AA, EMU_BMODE = 0X000B,如果EMU_BMODE = 0x0003的话,由于我们没有对OTP单元进行操作,即OTP的值为0xFFFF,所以这种情况下也是boot to flash。

在带仿真器跑程序的时候,我们发现即使我们不配置引导模式,程序也能够跑到main,这主要是因为CCS的功能,在程序load到芯片的时候,或是reset > restart,CCS会自动屏蔽bootloader的过程,自动跳到main函数入口。如果我们只选择reset CPU,则需要配置引导模式,即对0x0d01, 0x0d00这两个单元在memory window进行写相应的值,或是在script的菜单中选择引导模式,程序才能够跑到main中。


4. 单机跑是引导模式配置

单机跑的时候,我们最常用的是跑到Flash中,这时候则需要配置GPIO34和GPIO37的引脚为高电平,由于Piccolo系列芯片这几个引导都有上电默认内部上拉使能,所以即使不用加上拉电阻也可以。这时候的引导模式是GetMode,由于我们没有去配置OTP两个单元,所以这两个单元默认为0xFFFF,所以芯片的引导模式最终为boot to Flash。

5. 其他外设的引导模式

从上面这几张图中可以看到还有许多外设引导的功能,以SCI引导为例,带仿真器和单机跑的时候,都要配置相应的存储单元以及GPIO口状态,使之配置为SCI boot mode。然后芯片会SCI boot 函数,准备接收串口的代码,上位机要根据SCI boot的通信协议,生成SCI boot的数据流格式,将数据通过串口发送给芯片,芯片的bootloader会接收该代码,接收完后会根据该数据流中的起始运行地址去开始执行从SCI下载的代码。

参考文献:

TMS320x2803x Piccolo Boot ROM reference guide

2766.sprugo0a.pdf

Eric


这篇关于C2000上电引导模式解析------【TI FAE 经验分享】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/340709

相关文章

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

RabbitMQ工作模式中的RPC通信模式详解

《RabbitMQ工作模式中的RPC通信模式详解》在RabbitMQ中,RPC模式通过消息队列实现远程调用功能,这篇文章给大家介绍RabbitMQ工作模式之RPC通信模式,感兴趣的朋友一起看看吧... 目录RPC通信模式概述工作流程代码案例引入依赖常量类编写客户端代码编写服务端代码RPC通信模式概述在R

Mybatis Plus JSqlParser解析sql语句及JSqlParser安装步骤

《MybatisPlusJSqlParser解析sql语句及JSqlParser安装步骤》JSqlParser是一个用于解析SQL语句的Java库,它可以将SQL语句解析为一个Java对象树,允许... 目录【一】jsqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Java 关键字transient与注解@Transient的区别用途解析

《Java关键字transient与注解@Transient的区别用途解析》在Java中,transient是一个关键字,用于声明一个字段不会被序列化,这篇文章给大家介绍了Java关键字transi... 在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。当一个对象被序列化时,被

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、