This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于DSP6748的内部RAM和BOOT的相关疑问

本人最近在帧DSP6748的Bootload,向咨询一下6748内部有多少可供用户使用的RAM?BOOT代码到底放在那里?查了一下6748的数据手册,如下图:

且对于ROM有下面的解释,说明ROM是用于存放BOOT的

我的疑问是:

1,手册的memory map中RAM分别在 三个不同的地址,即是不连续的空间,那么到底那一段是用来运行程序的呢?在DSP的内部,到底有多少的空间供给用户运行程序,是将三个地址空间直接加起来吗?如果我要写一个用户boot程序,应该把用户代码从flash中搬运到内部ram的哪个地址处,还是上面的任意地址都可以?

2,上面的DSP L1P RAM地址为0x00E00000 ~ 0x00E07FFF和0x11E00000 ~ 0x11E07FFF两个部分,每个部分为32K,是不是意味着有62K的RAM?这两个部分的RAM有什么不同吗?还有TI在设计DSP的时候,为什么要把他分在两个不连续的地址里,直接分一个64K的连续地址多好?

3,从上面的memory map中可以看到两个DSP L2 ROM 的区域,地址分别为0x11700000 ~ 0x117FFFFF和0x00700000 ~ 0x007FFFFF,每个区域有1M的空间,从手册中可知,该段区域是用于存放bootload的,我的疑问是,为什么会有两个区域,难道说有两套boot程序分别存放在了这两端不同的区域?还是只有一套boot程序,但是程序大于1M,分开存放了?上电复位后,到底执行哪个地址处的boot?

4,上电复位后调用boot程序,该段boot程序最大能搬运多少用户的程序到地址0处?或者说,当用户程序大于多少kb的时候,用户boot(二级boot)才是必须的?

  • 芯片内部的L2 ram都可以运行用户的程序。用户boot程序,可以把用户代码从flash中搬运到内部L2 ram,任意地址都可以。而L1 ram一般配置为cache来使用。

  • 上面的两部分L2 RAM,也是有区别的。第一部分是DSP核专有的,而第二部分的L2 RAM则看做是Shared RAM,它不仅可以被dsp核访问,也可以被其他master访问。之所以分开也是这个原因,比如在OMAPL138中(C6748完全兼容),第二部分的L2 RAM就是两个核的Shared RAM。

  • 1.那内部地址L2的大小到底是256KB还是256+256=512KB呢?这款6748芯片内部最大可运行多大的程序呢?是256KB还是512KB?
    2.如果用户程序大于256KB,假如是300KB,能把程序的前256放在第一个部分,剩下的放在第二部分的RAM里面吗?这样程序分开存放会不会影响程序的正常执行呢?
    3.为什么上图中的BOOT段也分两个段?第二段也是shared吗?BOOT段不是固定死的吗,把第二段shared出去干什么,难道允许用户修改?还是芯片里面有两端BOOT?
    4.DSP本生的Boot能从外部的FLASH里面搬运多大的用户程序到内部RAM里面呢?

  • 1,内部L2 256K

    2,如果256K L2不够用还可以用128K片内RAM

    3,L2ROM是DSP固件所在位置,你是改不了的

    4,受限于片内RAM的大小

  • 那请问6748的BOOT一次能搬运多大的程序呢,是知道吧内部RAM塞满为止吗?

  • 1.在地址0x00800000~0x0083FFFF为256K的DSP L2 RAM,在地址0x11800000~0x1183FFFF又是256K的DSP L2 RAM,在地址0x80000000~0x8001FFFF有128K的On-chip RAM,这是不是意味着内部的可用RAM大小为256K+256K+128K=640K呢?即用户可以使用的为640K呢?因为我把测试发现我把代码搬运到上述任何一个区域都是能运行的!唉手册中的MEMORY MAP表示看不懂啊!

    2.您上面提到boot搬运程序的大小受限与片内RAM的大小,到底是受限与那一段的RAM啊,可以看出内部的RAM空间共有三个不同的区域,两个DSP L2 RAM和一个On-chip RAM,boot到底是吧程序搬运到那里了,是0x00800000~0x0083FFFF的DSP L2 RAM?还是0x11800000~0x1183FFFF的DSP L2 RAM?还是0x80000000~0x8001FFFF的On-chip RAM?

  • 那请问6748的BOOT一次能搬运多大的程序呢,是知道吧内部RAM塞满为止吗? 1.在地址0x00800000~0x0083FFFF为256K的DSP L2 RAM,在地址0x11800000~0x1183FFFF又是256K的DSP L2 RAM,在地址0x80000000~0x8001FFFF有128K的On-chip RAM,这是不是意味着内部的可用RAM大小为256K+256K+128K=640K呢?即用户可以使用的为640K呢?因为我把测试发现我把代码搬运到上述任何一个区域都是能运行的!唉手册中的MEMORY MAP表示看不懂啊! 2.您上面提到boot搬运程序的大小受限与片内RAM的大小,到底是受限与那一段的RAM啊,可以看出内部的RAM空间共有三个不同的区域,两个DSP L2 RAM和一个On-chip RAM,boot到底是吧程序搬运到那里了,是0x00800000~0x0083FFFF的DSP L2 RAM?还是0x11800000~0x1183FFFF的DSP L2 RAM?还是0x80000000~0x8001FFFF的On-chip RAM?

  • 从下面这张图来解释,L1, L2是CPU的一部分,CPU访问L2是从CPU内部走的路径1,编移地址为0x0080 0000.

    而CPU之外的系统中的其它master访问L2,是从CPU与外部的SDMA端口进来的,路径2,这个编移地址是0x1180 0000。所以这两块地址是同样的物理地址。

    而系统中的128Kbyte的shareRAM不是CPU内部的,是在系统总线上的,所以只有一个地址了0x8000 0000.

  • 太完美了,一语惊醒梦中人。

  • 你好!关于RAM的问题,我也想在此基础上问几个问题。

    1.当C6748启动自身boot程序时,这段程序占用的RAM空间是L2RAM吗?如果是大概是多少K?

    2.编写cmd文件时,如果想将程序运行在L2RAM中,应该避开boot程序所占RAM区域是吧?

    3.ShareRAM也是C6748自带的一部分RAM是吧?它与L2RAM上有运行速度的差异吗?感觉在DDR2外扩RAM中,运行速度还是差异很大的。

    谢谢!

  • 这个问题很好,麻烦重启一个贴子,以便更多人看到。

  • tony哥,按照你说的绝对地址:

    我写了两个boot程序,程序1要跳转到程序2,那么程序1和程序2的cmd文件里面,如果程序1的段分配一段从0x0080 0000开始分配,而程序2的段分配从0x1180 0000开始分配的话,很有可能会导致程序间被覆盖导致板子起不来?

  • 是的。因为0x0080 0000与0x1180 0000物理上是同一个地址。