我是靠谱客的博主 幽默雪碧,最近开发中收集的这篇文章主要介绍TC277的Ovc功能前言Data Access Overlay (OVC)具体应用总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

TC277的Ovc功能

文章目录

  • 前言
  • Data Access Overlay (OVC)<br>
    • 特点和功能概述
    • 数据访问重定向
    • 目标内存地址
      • Online Data Acquisition (OLDA) Space
    • Overlay Memories
      • Local Memory
      • Emulation Memory
      • DSPR & PSPR Memory
    • Global Overlay Control
      • Global Overlay Control Synchronisation
    • Overlay Configuration Change
    • Overlay Control Registers
    • Global overlay control registers
  • 具体应用
  • 总结

前言

在实际开发过程中,我们一般定义标定量为Const属性,以防止意外修改,标定量会被分配到固定的flash区域以便管理。在XCP/CCP标定中,要想实时修改标定量,则标定量应该运行在ram地址。还有一方面,flash区域远大于ram区域,在存在多个车型的不同标定参数时,可以定义多个flash区域,对应同一个ram区域,于是有了OVC-Data Access Overlay功能,提供了目标地址到重定向地址的映射。

Data Access Overlay (OVC)

数据覆盖提供了重定向选择的数据访问覆盖内存的能力。可重定向TriCore对程序Flash、在线数据采集空间或EBU空间的数据访问。覆盖内存可以位于本地内存(如果存在)、仿真内存(仅用于仿真设备)或DPSR/PSPR内存中。例如,覆盖功能可以在程序运行时修改应用程序的测试和标定参数(通常存储在Flash内存中)。注意,只有读和写数据访问被重定向。执行访问重定向不会影响性能。

特点和功能概述

•重定向数据访问地址到程序Flash, OLDA或外部EBU空间。

•支持重定向到覆盖内存位于:-本地内存(LMU)(如果存在)-仿真内存(仅仿真设备)- DSPR或PSPR内存

•支持高达4 MB覆盖内存地址范围;
•最多32覆盖范围(“块”)在每个TriCore实例可用;
•覆盖块大小从32byte到128kbyte;
•最多4 MB重定向空间(32个范围x 128 Kbyte);
•覆盖内存位置和块大小单独选择每个覆盖块;
•一个寄存器写访问可以启用或禁用多个覆盖块;
•DMI中数据缓存的可编程刷新(无效)控件。

•覆盖启动/停止同步数据加载。

•每个处理器核心单独覆盖系统。

数据访问重定向

将数据访问从原始目标内存(“目标地址”)重定向到覆盖内存(“重定向地址”)的原理如下所示。这里的原始内存一般指的就是flash地址,重定向地址为ram地址


数据访问覆盖使用覆盖范围(“覆盖块”)定义。每个overlay
block 定义一个连续的地址空间范围,为访问重定向。每个overlay
block 配置以下参数:

overlay block目标地址-一般为flash起始地址;
•overlay block大小-overlay的flash大小;
•overlay block重定向基址-对应的ram起始地址。
在TC27x中,每个TriCore实例最多可以使用32个overlay范围。
每个overlay block有3个相关的寄存器,用于这些参数的独立配置。overlay参数配置如下:

目标地址(flash地址)由OTARx寄存器配置

overlay block大小由OMASKx寄存器配置

重定向地址(ram地址)由RABRx寄存器配置

overlay memory block的大小可为2^n x 32bytes,n = 0 ~ 12。这使块大小的范围从32 bytes到128kbytes。块的起始地址只能是已编程块大小(自然对齐边界)的整数倍。如果OTAR寄存器值或RABR寄存器值与块大小不一致,则忽略最低有效位值并视为零

重定向base地址由RABRx寄存器中的两个字段确定
•RABRx.OMEM选择overlay内存

•RABRx.OBASE,在此内存中选择base地址

每个overlay block可以通过RABRx.OVEN激活或禁用,overlay block可以独立激活或禁用,通过直接访问RABRx寄存器,或在组中,多个配置块同时激活或禁用

地址重定向过程如下图所示:


对段8H或段AH的任何数据访问都要对照所有激活的overlay blocks进行检查。对于每个激活的overlay blocks,地址位27…5与目标base地址(OTARx)进行比较,这种位比较由OMASKx寄存器的内容限定。如果相应的OMASKx位设置为1,则地址位参与比较。如果当前访问的地址中OMASKx为1的位的值等于OTARx寄存器中的相应位,则访问被重定向

上面的话可能不太好理解,举个例子,我们设定的flash base地址为0x80180000,size为0xc00,对应的mask位5-16位的值110000000000,当访问的内存地址为0x80180004,此时为1的位都相等(15,16位都为0),会进行重定向,当访问的内存地址为0x80189000时,mask为1的位不相等(当前访问的15位为1,设定的为0),不会进行重定向

重定向地址位分配如下:

•地址位31…22根据overlay memory选择(RABRx.OMEM)和原始地址的缓存能力设置。

•对于地址位21…5:—如果设置了对应的OMASKx位,则地址位值取自RABRx.OBASE;—如果没有设置对应的OMASKx位,则地址位值从原地址中取。

•地址位4…0总是直接从原始地址取。

如果没有重定向,则使用原地址进行访问。

同样的,我们举个例子帮助理解,目标地址和size设置同上,我们设置重定向base地址为0x60008000(为core1的ram,需要设置RABRx.OMEM为1),设置RABRx.OBASE为0x400,若访问的内存为0x80180004,则重定向地址最高位为6(core1 DSPR/PSPR),重定向地址为0x60080004

寄存器OMASK.OMASK位为1时,从RABRx.OBASE取值,为0时从OTARx.TBASE中取值。因为最低5位一直为0,所以size最小为32byte,OMASKx.OMASK为0的个数表示size大小,例如OMASKx.OMASK为110000000000(0xc00)时,size大小为0-111111111111111(0-0x7FFF),为32kbytes

被激活的overlay block的目标地址范围不应该重叠,否则可能会出现异常。

目标内存地址

对8H段或AH段内任何内存的数据访问可能被重定向到overlay内存。特别是,访问以下内存可能被重定向:

•Program Flash;
•Data Flash;
•OLDA space
•External EBU space

Online Data Acquisition (OLDA) Space

标定支持虚拟OLDA memory range. The base address
of the virtual OLDA memory range is A/8FE7 0000H.

Overlay Memories

以下是可以选择的overlay内存。通过RABRx.OMEM选择使用的内存。

Local Memory

如果存在,本地内存(LMU)可以选择overlay。如果RABRx.OMEM值为6,则选择本地内存用于overlay block x重定向。LMU的基址为B/9000 0000H。在地址转换过程中,将前10位设置为B0H00B(目标段AH)或90H00B(目标段8H)。

Emulation Memory

如果存在,仿真内存(EMEM)可以选择overlay。如果RABRx.OMEM值为7,则为overlay block x重定向选择仿真内存。仿真内存的基址是B/9F00 0000H。在进行地址转换时,将前10位设置为BFH00B(目标段AH)或9FH00B(目标段8H)。

DSPR & PSPR Memory

Data Scratch Memory(DSPR)或Program Scratch Memory(PSPR)从core0,1或2可以选择overlay。如果RABRx.OMEE取值为0、1或2,overlay block x重定向选择DSPR或PSPR。基址为7000 0000H、6000 0000H或5000 0000H。在进行地址转换时,将地址位的前10位设置为70H00B、60H00B或50H00B。取决于RABRx.OBASE中设置的值,可以使用DSPR内存(从偏移量0H开始)或PSPR内存(从偏移量100000h开始)。

Global Overlay Control

Overlay可以为每个Core单独禁用或启用,使用OVCENABLE寄存器实现。如果OVCENABLE.OVENx位被清除后,无论剩下的寄存器设置如何,Core x上都不允许地址重定向。写入OVCENABLE寄存器不会改变任何剩余的寄存器值。

而每个覆盖块可以通过写入RABRx.OVEN位,一个专门的功能提供了并发激活和停用多个块,这在跨多个内存区域维护数据一致性方面很有用。通过使能不同的block来实现不同标定量参数到同一ram地址的映射。为了实现并行激活和取消激活的目的,overlay block分为两个阶段选择:
激活和取消激活的单个块是用OVCx_OSEL寄存器选择的,每个核心x是独立的;
•使用OVCCON.CSEL 选择内核集。

可以使用OVCCON.OVSTRT同时激活或禁用多个overlay block。当OVCCON.OVSTRT位为1时:

①如果OVCCON.CSELx位设置为1,OVCx_OSEL.SHOVENy位设置位1,overlay block y in core x被激活且 OVCx_RABRy.OVEN 位被设置

②如果OVCCON.CSELx位设置为1,OVCx_OSEL.SHOVENy位设置位0,overlay block y in core x禁止激活且 OVCx_RABRy.OVEN 位被清除

③如果OVCCON.CSELx位设置为0,不影响Core x的overlay配置。

上述设置需要同时执行,否则不会更改overlay的配置。使用此功能,可以直接从一组overlay block切换到另一组overlay block

可以使用OVCCON.OVSTP同时停用多个overlay blocks.当OVCCON.OVSTP位写1时:

①•如果OVCCON。CSELx位用1写入,core x中的所有overlay blocks禁止激活,所有OVCx_RABRy.OVEN位被清除。

②•如果OVCCON。CSELx位用0写入,不影响Core x的overlay配置。

上述设置需要同时执行,否则不会更改overlay的配置。

注意:如果使用RABRx.OVEN启用了任何block,则不应使用global OVCENABLE寄存器启用或禁用overlay。相反,如果需要启用或禁用并发块,则应使用OVSTRT或OVSTP。

OVCCON.DCINVAL位写1时,所选内核中所有未修改的(clean)数据缓存线都无效。包含已修改(dirty)数据的数据缓存行不受影响。没有选择OVCCON.CSEL的Core不受影响。数据缓存失效可以与OVSTRT或OVSTP操作结合使用。此功能有助于确保在激活或停用overlay block后,CPU可以访问新数据.

注意:OVCCON.CSEL位需要和OVSTRT, OVSTP and DCINVAL 一起写入。且该寄存器不会保留写入值,读取始终为0.

OVCCON.OVCONF提供用户控制位,与OVCCON.POVCONF保护位一起使用。这些位不会影响overlay功能

当OVCCON寄存器被写入CSELx集合和OVSTRT或OVSTP集合时,同时OVCx_RABRy寄存器被写入,OVCx_RABRy.OVEN的结果值位未定义。应避免这种同时访问的可能性

当TriCore处于空闲IDLE状态时,不执行OVSTRT、OVSTP和DCINVAL动作

Global Overlay Control Synchronisation

当OVSTRT、OVSTP或DCINVAL动作被请求时,其执行可能被延迟,以防止在正在进行的数据加载期间更改覆盖配置。

在一项行动请求之后,在请求另一项行动之前,应留出足够的时间。如果在上一个操作仍然未决(由于与CPU负载同步)的情况下请求了新操作,则可能会丢失一些操作。

Overlay Configuration Change

在修改OTARx、OMASKx或RABRx寄存器时,需要disable Overlay block(通过清除RABRx.OVEN位。否则,可能会发生意外的访问重定向。只有在目标地址、覆盖内存选择、重定向地址和掩码都已用预期值配置时,才应启用overlay block

注意:Overlay Control不会防止错误配置转换逻辑。特别是,不阻止重定向到未实现或禁止的地址范围。一旦出现该情况,程序会跑飞。

如果需要数据一致性,则需要特别注意将覆盖重定向更改同步到执行的指令流。

外部访问可以缓冲在CPU中。尚未完成的外部访问仍可能受到覆盖配置更改的影响。因此,建议在激活或停用任何覆盖范围之前,确保完成所有未决访问(例如,通过执行DSYNC指令)。

当覆盖块被启用并且相同的存储器位置通过目标地址空间写入并通过重定向的地址空间读取时,或者反之亦然,需要强制执行访问同步(如果适用,使用DSYNC和数据缓存写回)。

Overlay Control Registers

参考寄存器文章

Global overlay control registers

两个寄存器全局控制所有核心的覆盖操作:
•覆盖启用寄存器OVCENABLE,可用于禁用或启用每个核心的数据访问覆盖;
•覆盖控制寄存器OVCCON,可用于对所选核心集执行以下操作:
–同时启用/禁用所选覆盖块,
–同时禁用覆盖块,
-使数据缓存无效。
具体寄存器参考寄存器文章

具体应用

1.使用OVCENABLE.OVENx位使能对应CPU的Overlay功能

2.使能OVCCON.OVCONF配置,OVCCON.CSEL设置使用的CPU,置位OVSTRT位。

3.memcopy对应目标地址及大小到对应重定向地址,保证初始值对应。
4.利用OSEL,RABR,OTAR,OMASK寄存器确定使用的block,及目标地址,block大小,重定向地址。

扩展:通过配置不同block,实现多个flash对应同一个ram,利用OSEL配置选择切换不同的block。

总结

OVC功能主要为XCP服务,且方便了不同标定参数的切换。


若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~
你的鼓励是对小弟的最大支持~~~

建了一个WX公众h,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新

最后

以上就是幽默雪碧为你收集整理的TC277的Ovc功能前言Data Access Overlay (OVC)具体应用总结的全部内容,希望文章能够帮你解决TC277的Ovc功能前言Data Access Overlay (OVC)具体应用总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部