英飞凌TC3xx-Overlay

news2025/2/26 20:06:26

目录

1.数据访问重定向

2.寄存器说明

3.Overlay功能配置

3.1 确认用于重定向的CPU

3.2 配置重定向Block大小

3.3 配置目标地址和重定向地址

4.结果验证

5.小结


        今天说要开个专栏讲讲XCP标定,但在将标定之前,先把英飞凌专门为标定功能设计overlay功能讲解清楚。                

        英飞凌的overlay全称叫做Data Access Overlay,其作用是 redirect selected data access to the OVERLAY memory(意味着通过overlay memory来访问数据?)对于Trcicore系列来说,通过CPU访问PFlash、Online Data Acquisition space或者EBU可以被重定向;OVERLAY memory可以分配到Local memory、Emulation Memory或者DPSR/PSPR。

        Overlay功能可以在程序运行时在线实时修改标定参数(这些参数通常存放在Flash中)。注意,overlay仅对数据访问有效;且Overlay机制是针对CPU对数据的访问重定向,一定要注意这点。

1.数据访问重定向

        我们首先来看overlay原理图。

对于一个overlay block有三个非常重要的参数:

  1. Target Base Address --需要被重定向的目标起始地址(一般为Flash);
  2. Block Size -- 需要被重定向的块大小;
  3. Redirection Base Address -- 重定向块的起始地址(一般为RAM);

对于这三个参数,都有相应的寄存器来配置:

  1. Target Base Address -- OTARx;
  2. Block Size  -- OMASKx;
  3. Redirection Base Address -- RABRx

根据芯片手册,TC3xx有32个block用于overlay功能,且size可配置(32byte~128KB)。

2.寄存器说明

  • OTARx(i=0-31)

        该寄存器只有一个参数可配置,TBASE;

        该参数的有效性受OMASK寄存器控制;而所谓target base是指的源地址(通俗将即flash地址,这容易混淆)

  • OMASKi(i=0~31)

        OMASK位域用于设置overlay block size。

        需要注意是,OMASK 只有当bit设置为0时才会参与block大小的配置,例如,当OMASK配置为000时,也即全部12bit有效,因此block size = 2^12 * 32 = 131082byte = 128KB;那么当我需要配置1024byte时,2^n*32 = 1024 ,n= 5,OMASK = 1111 1110 0000 = 0xFE0;

        当bit为1时,OMASK中置1 的位用于地址比较。

  • RABRi(i= 0~31)

        OVEN--Overlay 使能

        OMEM -- 选取overlay memory

        OBASE -- Overlay memory基地址

         看到这里我想大家明白我说TBASE容易搞混淆的原因,按正常想法,我们都是从源地址overlay到目标地址,即访问flash但实际访问到的是ram;英飞凌不一样,他说目标地址overlay到overlay memory。

  • OVCENABLE

        这个寄存器用于使能核的overlay功能,所以大家这里就要搞明白,为什么overlay是放在CPU这一章节;后面我会做一个验证,通过debug口看到的数据和开启overlay的cpu看到的数据其实是不一样的。

  • OVCCON

        Overlay control register,用于控制某个核的overlay功能

CSELx -- 用于选择某个核使能overlay

OVSTRT -- 如果CPU选择了overlay,那么OVCx_OSEL选择的block会被激活;

OVSTP -- 对于CSEL选择的CPU,所有的overlay block会被失效;OVCx_RABRy.OVEN会被清除。

OVCONF -- overlay configured;置1,overlay block control寄存器已经配置好,并且已经为overlay start做好准备。

DCINVAL -- Data Cache Invalidate ;Data Cache Lines使能。

3.Overlay功能配置

        有了上述寄存器认识后,下面来看寄存器配置是如何实现重定向功能:

        假设我们现在想把PFlash0(0x8000 1000)(128byte)重定向到CPU0DSPR,那么我们要考虑三个关键因素,目标地址、映射block大小、重定向地址;

        很明显:目标地址即要重定向的flash地址:0x80001000(提问:可不可以不指定地址,让编译器随意分配地址?)

        Block大小:128byte即可;

        重定向地址:CPU0DSPR 0x70011000

        那么如何来配置寄存器呢?

3.1 确认用于重定向的CPU

        根据datasheet,通过核访问PFlash等可以被重定向;所以这里我们选择CPU0开启overlay功能。

        OVCCON.CSEL0 = 1,因为每个CPU都有至少32个可重定向的block,因此这里我们选取block0用于定向到CPU0DSPR,CPU0_OSEL.SHOVEN0=1

3.2 配置重定向Block大小

        Block大小为128byte,那么根据芯片手册,配置为0的为有效位,因此根据公式计算2^n * 32 = 128 ,得出n=2,也即OMASK 位域 = 0x 1111 1111 1100 (0xFFC)

OMASKi.OMASK = 0xFFC,OMASK.U = 0x0FFFFF800

3.3 配置目标地址和重定向地址

        目标地址寄存器为OTAR,重定向寄存器为RABR,该寄存器配置的难点在于:RABR.OBASE仅有17bit,OTAR.TBASE仅有23bit,如何把目标地址和重定向地址放进去?就需要参考下图:

        再来回顾 PF地址0x80001000,DSPR 0x70011000,OMASK 0x0FFFF800。

        首先我们来看,Destination有两种来源,一种是Original Address,一种是redirected;那么根据实际情况来看,什么时候选择原始地址,什么时候选择重定向地址,很明显要看左边比较的结果。

        根据芯片手册,需要A和TBASE所有参与比较的bit都相同,才会使用重映射地址;参考下图:

        源地址绿色部分(bit27:bit7)会参与地址比较,也即OTAR要装绿色部分一样的数据才会使用重映射地址;很明显,要比较的位域位置一样,因此要填到TBASE的值就为Target >> 5。

        OTAR - 0x00001000

        那么RABR寄存器该如何配置;

        我们知道,要定向的ram地址为0x70011000 = Base1+Base2+offset

        其中Base1 = b1000 0000 00,Offset = b00000

        很明显,需要把绿色部分填进OBASE,因此也是重定向地址 >>5,

        故RABR = 0x80011000

        配置完成后,来看结果

4.结果验证

        Overlay是针对CPU的,由于debug是走bypass功能,因此如果直接去memory看overlay flash值,必定还是原flash的值。因此在代码上做如下工作:

        首先在0x70011000 定义一个数组Test_Map_Cal_Ram,值如下:

        在0x80001000(flash)定义一个数组Test_Map_Cal_Flash,值如下:

        为了验证overlay功能,还需要一个中间变量来承接,定为Test_Algo_Update = 0;

上电时,我们首先看Test_Algo_Update,此时应该为0

Flash值为:

Ram值为:

现在开启overlay功能,

        要达到的效果为:通过cpu0读取flash的值,但实际上应该读的是ram的值,如下

        Debug看,确实是通过访问flash实际读取的ram的值

        从上图就可以看出,CPU0把数组Test_Map_Cal_Flash赋给了数组Update,如果overlay功能没有奏效,那这个时候应该Update  = {0,1,2,3....};

        但实际上我们可以看到Update = {20,21,22....},说明CPU0是把Cal_Ram的值赋给了Update,overlay奏效了。

5.小结

        通过上面验证,我们就可以用这个功能来做标定啦;标定量A存在PFlash地址0x80004000,使用overlay时,上位机就直接download 该变量的flash地址即可完成标定,不用再做flash和ram的映射了,特别是当有多块标定数据要做标定时,这个功能简直丝滑。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

应用RFID标签实现工业智能制造生产线的可视化管理

随着自动化和信息化的不断推广,工业智能化成为了备受关注的话题,对于企业来说,生产线上的工艺流程和各个环节的信息是至关重要的,在物联网感知层中,RFID作为重要的核心组成部分,通过非接触式的无感知识别和…

WebSocket协议在java中的应用

文章目录 一、WebSocket介绍1.Http和WebSocket比较:2.应用场景 二、WebSocket使用步骤1.客户端搭建2.导入maven坐标3.导入WebSocket服务端组件WebSocketServer,用于和客户端通信1.ServerEndpoint2.OnOpen3.OnMessage4.OnClose 4.导入配置类WebSocketConf…

直流高压发生器技术特点

武汉凯迪正大直流高压发生器产品技术特点: 1、体积更小、重量更轻、更美观、更可靠、操作简便、功能齐全,便于野外使用。 2、采用PWM中频脉宽调制技术、脉冲串逻辑阵列调制,采用大功率IGBT器件和电压大反馈,从而使输出高压稳定度…

【C语法学习】8 - puts()函数

文章目录 1 函数原型2 参数3 返回值4 输出机制5 示例 1 函数原型 puts():将str指向的内存空间中存储的字符串发送至标准输出流stdout,函数原型如下: int puts(const char *str)2 参数 puts()函数的参数只有一个str: str是一个…

MySQL数据库连接工具—MySQL Workbench

关于 MySQL Workbench 设计 MySQL Workbench 是数据库架构师、开发人员和 DBA 的统一可视化工具。MySQL Workbench 为服务器配置、用户管理、备份等提供了数据建模、SQL 开发和全面的管理工具。MySQL Workbench 可在 Windows、Linux 和 Mac OS X 上使用。 开发 MySQL Workb…

修复国产电脑麒麟系统开机出现initramfs 问题

目录预览 一、问题描述二、原因分析三、解决方案四、知识点呀initramfsBusyBox 五、参考链接 一、问题描述 国产麒麟系统出现 initramfs 模式 二、原因分析 一般在拷贝卡顿过程【强制关机】或者电【脑异常断电】的情况下概率性导致系统分区损坏,重启后大概率就会进…

体制内一定要懂“偷懒”,太努力的人走不远

体制内永远有写不完的材料,写的头疼,还要一直改改改!家人们谁懂啊?? 真心建议体制内需要写材料的姐妹!狠狠用这个写材料工具,保你写的又快又好还对你竖大拇指! 介个工具嘎嘎好使&a…

ROSE65 R2蓝牙5.2双模热插拔PCB

键盘使用说明索引(均为出厂默认值) 软件支持(驱动的详细使用帮助)一些常见问题解答(FAQ)请认真阅读本说明首次使用步骤蓝牙配对规则(重要)蓝牙和USB切换键盘默认层默认触发层0的FN键…

MASK-RCNN tensorflow环境搭建

此教程默认你已经安装了Anaconda,且tensorflow 为cpu版本。为什么不用gpu版本,原因下面解释。 此教程默认你已经安装了Anaconda。 因为tensorflow2.1后的gpu版,不支持windows。并且只有高版本的tensorflow才对应我的CUDA12.2; 而…

重拾线形代数的记忆

关于这里面上下为什么相等起了疑惑(线形代数还给老师了): 证明: I是单位阵,u是列向量,加撇表共轭转置。 考虑U u u’ 的特征系统: u ⟂ x时,U x 0 0 x。u ∥ x 时,…

【k8s】pod集群调度

调度约束 Kubernetes 是通过 List-Watch **** 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。…

项目管理>时间管理

某项目包括A、B、C、D四道工序,各道工序之间的衔接关系。正常进度下各工序所需的时间和直接费用、赶工进度下所需的时间和直接费用如下表所示。该项目每天需要的间接费用为4.5万元。根据此表,以最低成本完成该项目需要( )天。 这…

4.5 Object类

思维导图: 4.5 Object类笔记总结 1. 定义和重要性 Java提供的Object类是所有Java类的根类。直接或间接,所有的Java类都继承自Object类。它被称为超类。 2. 默认行为 当创建一个新的类且没有显式地使用extends关键字指定一个父类时,该类默认…

C++核心编程之类和对象--C++运算符重载

目录 一、运算符重载 二、加号运算符重载 三、左移运算符重载 将类中的成员设置为私有属性,将全局函数设置为友元访问类中的成员 四、递增运算符 五、赋值运算符重载 六、关系运算符重载 七、函数调用运算符重载 一、运算符重载 对已有的运算符进行重新定义…

So-vits-SVC4.1

So-vits-SVC官方项目地址:https://github.com/svc-develop-team/so-vits-svc 中文版:https://github.com/SUC-DriverOld/so-vits-svc-Chinese-Detaild-Documents 教程:https://www.bilibili.com/video/BV1Hr4y197Cy/ 音频处理 1.转mp4/mp…

java修仙基石篇->instanceof子父类检查

instanceof检查子父类(或者是否能被强转) 作用1:检查某对象是否是某类的子类 如:儿子类继承了父亲类。 检查儿子类对象是否属于父亲类 作用2:检查两个对象是否可以强转 语法: 子类对象 instanceof 父…

相册里的视频怎么提取音频?帮你整理了几个必备的!

有的时候视频中的音频包含重要信息,如对话、旁白、音乐等。提取音频不仅可以节省存储空间,还方便对这些信息进行单独处理和利用。那么如何提取音频呢?下面介绍了3种方法~ 方法一:直接使用手机相册自带功能 1、打开手机相册&#…

【前端】JQ插件实现打印功能

1、准备工作 下载三个js文件:jquery.jqprint-0.3.js、jquery-migrate-1.2.1.min.js、jquery-1.11.3.min.js, 下载地址:https://download.csdn.net/download/qq_25285531/88492425 2、实现效果 点击“打印指导单”,调起打印机&a…

麻醉科常用评估量表汇总,建议收藏!

根据麻醉科医生的量表使用情况,笔者整理了10个麻醉科常用量表,可在线评测直接出结果,可转发使用,可生成二维码使用,可创建项目进行数据管理,有需要的小伙伴赶紧收藏! 1.维持液体计算 维持液体是…

网络安全专业大学生一定要考的证书

在数字经济时代,网络安全成为了至关重要的一环,社会对网络安全技术人才的需求也在不断增长。网络安全行业以其独特的薪酬、福利和发展机遇吸引了众多优秀人才。 在市场上,大多数国家认可的证书都需要一定的工作经验才能获得。然而&#xff0c…