TI C66x DSP 四种内存保护问题 -之- 针对CPU访问外存(DDR3 or MSM)时的内
2019-07-13 09:46发布
生成海报
在代码维护中遇到过这种问题,CPU访问了corePac的外部内存空间0x75510C55地址,即CPU向corePac的L2内存控制器发起了对该内存的访问,然后L2内存控制器将该请求发给corePac的XMC模块,XMC模块根据配置好的寄存器(即32bit虚拟地址到36位物理地址的映射与内存权限寄存器,每个大小为16M的内存段用一个寄存器设置,每个CPU均有同样的多个此种寄存器)检查该地址是否合法,发现该地址没有在任何一个这样的寄存器中设置,即XMC将该内存视为非法地址,然会会通过L2内存控制器上报非法地址访问,L2内存控制器通过system
event 0x6E = 110来上报该错误(event 110与该类内存非法访问MDMAError映射是固定的,参考corePac user guide 9.3节),用户可以在注册给event 110的exception处理函数中做些自己的事情(如一般是主动将DSP的其他CPU也crash掉等,使整个DSP停止工作,这样保存了现场,易于问题的调查),系统会设置MDMAError寄存器,将错误类型在寄存器中显示给用户,如图中MDMAErr
= 0x40000302,LSB 0x02就表示privilege error,即CPU对0x75510C55地址无权限访问。
上述的检查机制由硬件实现。
下面解释下0x75510C55内存地址,当CPU要访问corePac外部内存时,CPU发起的访问均是32bit的虚拟地址,所以要想真正访问到外部内存(如DDR)的物理地址,必须由前面提到的XMC模块映射为36bit物理地址。这里的0x75510C55就是CPU发起的32位虚拟地址,XMC会检测到该地址非法。同时由最后一张图可知(见TI C66x data manual table 2-2
Memory Map Summary,实际上该地址是reserved的,即CPU以及任何外设是不能够访问reserved地址的,用户也不能拿这些reserved地址映射到物理地址上。当CPU访问了这些reserved的地址,会报上面的错误的。所以这里用户在XMC寄存器中没用映射0x75510C55地址,当然XMC检测时会认为是非法地址。
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮