TI C66x DSP 四种内存保护问题 -之- 针对CPU访问外存(DDR3 or MSM)时的内存保护问题

来源:互联网 发布:华劲集团待遇知乎 编辑:程序博客网 时间:2024/05/19 16:35

本文讲解针对CPU访问外存(DDR3 or MSM)时的内存保护问题;外设(如SRIO,QM,FFTC等)对外存访问的内存保护问题有另一套机制实现,以后讲解;CPU对自己所属corePac内部资源(L1,L2内存)访问时的内存保护问题,由各自的内存控制器实现,这个比较简单。

DSP访问外存时内存保护的问题,原因是CPU访问了自己没有访问权限的外部内存(如share memory即MSM或者DDR3,相对于corePac内部的L1,L2内存而言),如CPU访问DDR3中的无权限内存时(即在当前CPU的配置中,没有设置对该内存的访问权限),硬件会触发MDMA bus error event(VbusM error event 110,CPU访问corePac内部资源L1,L2时的内存保护问题由各自的内存控制器实现,并由各自所属的event上报内存保护问题。见之前讲过的event映射表),从而引起异常(CPU有一个EXCEP输入端口)。MDMA表示CPU作为master,发起对外存MSM或者DDR3内存的访问。

在C66x corePac中,当CPU访问它所在corePac外部的内存,访问请求是由L2内存控制器发出,当发生了内存保护的问题时,L2内存控制器将会接收并处理MDMA bus error错误,记住这里error并不是由XMC处理的,XMC不处理来自系统的MDMA bus error,而XMC本身可以向L2控制器上报bus error,如CPU访问了外部无权限内存,XMC就会上报错误给L2内存控制器(XMC的功能是当CPU访问外存时,扩展corePac内部所用32bit逻辑内存到外部MSM或DDR3 36位物理内存;当内存保护出现问题时,XMC就会上报错误给L2内存控制器,具体可以参考TI C66x corePac文档,因为CPU访问外存的内存合法性检查是由XMC实现的。

L2内存控制器实现了两个寄存器MDMAERR / MDMAERRCLR用于上报(通过event 110)/清除MDMA bus error。当硬件检测到MDMA bus error,MDMA bus error event将会产生,error info将会存储在MDMAERR寄存器,以后的error将会忽略,不会产生MDMA bus error event。一旦写1到MDMAERRCLR寄存器,将会清除MDMAERR寄存器,以后的error就能记录下来。

Address              Acronym                    Register Description Section
0x01846020h    MDMAERR                MDMA Bus Error Register
0x01846024h    MDMAERRCLR        MDMA Bus Error Clear Register

An example when MDMAERREVT error can occur. The MPAX(属于XMC硬件) unit will report memory protection violations on accesses to the programmed segments (based on the  access privilege settings in the XMPAXLnsegment registers). If theincoming logical address(CPU访问的外存的内存地址,由L2内存控制器发出) does not match any of the segments (这些段可在各自的CPU上设置,通过XMC硬件的一系列寄存器实现,主要是设置段的长度与针对当前CPU的访问权限,but is within the MDMA space), the XMC controller will consider this as an access with no permissions and report this back to the L2 controller, which will flag it as the MDMAERREVT event and report it in the MDMAERR register.

C66x DSPcorePac以及CPU访问MSM或DDR3线路图:

 

1 0