打印

各位版主,各位DSP大神,能不能帮忙找一个6472多核demo???

[复制链接]
5289|44
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lelee007|  楼主 | 2013-6-1 09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 blacksword 于 2013-6-4 15:51 编辑

C6472的多核引导启动的demo?

照datasheet里边讲的置位boot_complete_stat等等一系列操作,没搞定,所以怀疑自己理解的有问题

想找个demo参照一下,发现能找到的都是在6472上跑单核的,没有多核引导启动的demo

我说的多核引导启动是指0核启动之后,去解复位1、2、3、4、5核,然后引导这些核启动的

多谢先!!!

相关帖子

沙发
lelee007|  楼主 | 2013-6-1 09:56 | 只看该作者
单核引导的流程我已经弄明白了,多核的也可以说明白了吧,不过可能我理解的有问题

所以希望能找个demo来对齐一下我的理解

使用特权

评论回复
板凳
zhangmangui| | 2013-6-1 10:14 | 只看该作者
建议:先把单核I2C的boot过程搞明白;再看MAD的多核boot资料

使用特权

评论回复
地板
zhangmangui| | 2013-6-1 10:16 | 只看该作者
网上找的看看  具体demo没有
想自己验证一下6472多核引导的过程,谁知道一直没有成功,下面把思路和操作描述一下,请大神们帮忙看看哪个环节有问题

平台:EVMC6472

引导方式:boot mode配的0b'0010,即下图红色框中的引导方式

               

我是用“evm6472\bootloader_package\EEPROM_flash_image_gen”里边的工具把使用EMULATOR在0核上调试OK的.out转成IIC EEPROM

烧写文件之后,使用I2C_EEPROM_writer工程将文件烧写到IIC ROM中去执行的,烧写是成功的,开发板上电之后,0核执行也是没问题的。

我的疑问是:我在0核上通过软件将0核L2 SRAM中的程序copy到其他5个核的L2 SRAM上去,代码如下:

        /* 为1、2、3、4、5核复制代码 */
          for(uiIndex = 1; uiIndex < 5; uiIndex++)
          {
             memcpy((void *)(CORE0_L2SRAM_IN_OTHER_CORES + uiIndex * 0x1000000), (void *)CORE0_L2SRAM, 608 * 1024);
          }

然后将其他5个核对应的引导地址寄存器DSP_BOOT_ADDRx配置为“main”,代码如下:

  *DSP1_BOOT_ADDR = (UINT32)main;
  *DSP2_BOOT_ADDR = (UINT32)main;
  *DSP3_BOOT_ADDR = (UINT32)main;
  *DSP4_BOOT_ADDR = (UINT32)main;
  *DSP5_BOOT_ADDR = (UINT32)main;

这些配置完之后,通过0核将其他5个核的BOOT_COMPLETE_STAT对应位域置位,使其他5个核开始引导启动。

这样,应该6个核都能跑起来的吧,但是我在程序里边加了点LED的代码,发现只有0核点了0核对应的LED,其他5个核没有点亮LED

结论:这个过程中其他5个核的引导过程存在问题,导致其他5个核没有正常跑到main函数里边去,所以没有点亮其他5个核对应的LED

问题:这个过程中,除了0核外,其他5个核的引导过程,应该是这样的:0核置位其他5个核的BOOT_COMPLETE_STAT对应位域后,

其他5个核就开始从各自DSP_BOOT_ADDRx寄存器中配置的地址开始执行!关于这点,是我理解的有问题么?如果没问题,那其他5个核应该直接就从main开始运行了,但是通过点LED观察,发现,其他5个核没有运行main里边的函数

有两点意见你可以参考:
1)引导的地址不应该是main,而是_c_int00函数,main函数是无法直接启动的;
2)确定你所有的有效代码是在L2中,而且都是0x008*****的地址空间;
如果这样还不行,那么就加JTAG看看其余Core的PC指针在什么位置,如果不在ROM空间,那么肯定就是启动成功了,只是代码有些问题;如果还在ROM的地址空间,那么就去查各个核的BOOT_ADDR地址是否写入了有效值,并且确定从核的引导方式是否正确。



使用特权

评论回复
5
lelee007|  楼主 | 2013-6-1 12:56 | 只看该作者
哥,这是我在TI官网论坛发的求助帖子阿,照那个试过,不行的阿

不过还是谢谢版主了,哈哈,今天问问以前做过6472的一哥们吧,呵呵

使用特权

评论回复
6
zhangmangui| | 2013-6-1 17:12 | 只看该作者
lelee007 发表于 2013-6-1 12:56
哥,这是我在TI官网论坛发的求助帖子阿,照那个试过,不行的阿

不过还是谢谢版主了,哈哈, ...

我们解决不了的问题会咨询TI相关技术  上面回帖来自TI官方论坛  
已解决问题为目的   

使用特权

评论回复
7
lelee007|  楼主 | 2013-6-1 17:56 | 只看该作者
可以找他们提供个demo不?

你找的那个帖子,就是我前两周在TI官方论坛发的求助帖,不过问题没解决啊

我看了datasheet和bootloader的两篇文档,感觉没理解错阿,可是代码编译链接之后,烧到EVM板上,只有0核起来了在跑,其他5个核没像我预期的那样跑起来啊

试了很多思路,都验证过了,实在没招了,所以咧,想找个demo来分析一下,看看到底是哪儿理解错了

版主能跟TI要个DEMO不?嘿嘿

使用特权

评论回复
8
zhangmangui| | 2013-6-2 14:46 | 只看该作者
lelee007 发表于 2013-6-1 17:56
可以找他们提供个demo不?

你找的那个帖子,就是我前两周在TI官方论坛发的求助帖,不过问题没解决啊

我试试

使用特权

评论回复
9
zhangmangui| | 2013-6-3 17:12 | 只看该作者
TI技术支持给的链接  你可以参考一下  
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/5340.aspx

使用特权

评论回复
10
biechedan| | 2013-6-3 23:27 | 只看该作者
去德州仪器在线支持看看的。、

使用特权

评论回复
11
biechedan| | 2013-6-3 23:28 | 只看该作者
那里的应该有例程的。

使用特权

评论回复
12
blacksword| | 2013-6-4 15:49 | 只看该作者
这篇贴子我们可以重点探讨一下。  作为我即将离任本版版主前与大家最后一次大互动吧。

使用特权

评论回复
13
blacksword| | 2013-6-4 15:52 | 只看该作者
大家想一下一个CPU的基本启动流程是什么样的。
明天晚上我将在这里讨论CPU的基本启动流程是怎么样的。并逐渐跟大家一起看文档并找出怎么启动6472上的其他核!

使用特权

评论回复
14
lelee007|  楼主 | 2013-6-5 00:00 | 只看该作者
磊哥V587

我先抛砖引玉了哈,其他一些单片机、ARM我比较熟悉,DSP最底层的具体细节我不太清楚,简单说下我对6472引导加载的理解,其他不瞎说

先说说普通单片或者ARM的引导加载流程

这类机器架构一般都是这样,有个向量表,而且向量表是从内存地址的0地址开始部署

向量表的第一个入口往往对应的是reset入口,这个即可作为软件reset异常时的处理入口,也可以机器启动时的软件入口

通常这类机器的baremental系统应用都没有专门的引导加载程序,不像linux内核有uboot或者grub之类的专用引导程序来引导加载

这类系统在应用时需要把源码编译主来的ELF镜像文件提取出代码的纯二进制文件烧写0地址开始处(链接镜像的时候还要确保镜像的entry在最开始处,这样才能保证烧写到0地址开始处的文件在运行时机器能从正确的入口进入)

这中应用适合像8051那样硬件结构相对简单的系统,像arm这种复杂的系统往往就不会再做的这么死,后续话题比较复杂,今天时间晚了,明天回来再接着唠

使用特权

评论回复
15
lelee007|  楼主 | 2013-6-5 20:50 | 只看该作者
到了ARM之后,基本上在硬件上,机器启动时还是从0地址,不过基于ARM的系统绝大多数不会想8051那样,在0地址处部署ROM或者nor flash之类的非易失性存储器,要么通过配置系统的重映射,要么部署其他的专用电路来让0地址处在上电启动时有可寻址的存储空间,这样才能在0地址处存放代码,让系统上电之后能开始运行程序。

但是这种结构在应用中往往都不会在0地址处部署太多的存储空间,基本上绝大多数都是很小很小一段小空间,仅仅能存放一些比较小的应用,太大的应用镜像往往不可能全部直接存在从0地址开始的地方,上电后直接运行。

加之DDR技术的发展,高性能系统中,不可能让程序一直放在ROM这种慢速器件中来运行,所以一系列的原因,导致基于ARM的实际系统使用中会需要使用引导程序。引导程序的目的就是为了可以在0地址处部署一个相对很小的非易失性存储器,来存放一个简单的小程序,而该程序可以把更大的应用程序从慢速的非易失性存储器中搬移到高速易失性存储器中,并且能正常运行。

以上叙述的只是基本原理,具体的引导加载技术需要把ELF结构剖析清楚

使用特权

评论回复
16
lelee007|  楼主 | 2013-6-5 22:41 | 只看该作者
磊哥磊哥,今天怎么还么又出现???

呼唤你磊哥,come on!!!

使用特权

评论回复
17
blacksword| | 2013-6-6 09:19 | 只看该作者
磊哥是谁?

使用特权

评论回复
18
blacksword| | 2013-6-6 10:11 | 只看该作者
先不管磊哥了,我们接着来说CPU的启动问题。

我们知道CPU的老祖其实是我们天朝的算盘。

话说当年天朝出了个算盘
然后某一天来了一个可**波罗的红毛小子,来天朝旅游。
丫在天朝游玩时发现,吃喝玩乐付帐时,甚至是进行货币兑换时,天朝的掌柜们都会拿出来一排排串珠拨一拨,找零和兑换都非常快。

小样觉得这是个好东西呀。
就买了一个带了回国。
回去拿来用就傻B的,什么三下五去二什么的,口诀丫不会。

不过丫国还真有能折腾的,楞倒饬倒饬的,最后搞出来了个手摇计算器。

再后来有个叫疯了一晚(冯诺伊曼)什么的一拨人,觉得摇起来也太累。不知道怎么搞呀搞,搞出了个电子计算器。由于这个玩意儿太大个,就像相大机器,干脆就被他们叫成了计算机。

话说这个计算机吧,其实最开始也只有计算功能,而且只能算两个数的+-*/什么的。反正就是全在卡片上打上洞,计算机就打出光来,不能透光的位置就是0,能透光的位置就是1吧。反正就能从你的打也卡片上认出什么叫二进制的数来。然后就可以拿这个数做+-*/,再把得数给你打到卡片上。据说最开始,算完一个数,下一个数的计算你得手工把卡片往前推到光的下面。还有当年什么负责打卡,并往前推卡片的人都是各大单位抢着引进的高级人才。

  后来这帮高级人才太牛了,工资越要越高。这些个计算机使用单位就又找到疯了一晚他们,委托他们再疯一晚。结果他们又疯了一晚,就搞了个自动往前挪卡片的装置,再后来又疯了一晚,搞了个什么内存什么的东西出来。
  
  不管怎么搞的,反正后来计算机能算得越来越复杂了,能成批计算了。
  
  后来搞着搞着,你的东西正算着,大老板说他有个东西更重要,要插队。于是需要把你的数据在内存里的个地方暂存着,把大老板的数据读到另一块,先帮他算。这就需要能不按顺序使用内存,也就有了随机寻址。

  反正后来越算越复杂,双有了同时算的需要,两个都是大老板,都想插队。于是有了操作系统。


  那我们看一下有操作系统以后CPU是怎么算的呢。

  CPU先跑到CPU的开始位置看一眼,好家伙里面写的东西已经不再是2+1这样的东西
  新的东西是什么呢,Load xxx,Load xxx
    再下面是什么,我也不懂了
  反正据说是新的CPU上有一个叫定时器的什么玩意,这玩意一从1数到1024或是别的什么数。它就会强行的把CPU访问内存的地址设成Int_Timer函数的地址。反正神奇的Int_timer函数就能一会再将CPU要访问的地址设成李老板算的数**算式上,下出数到数时还能设成王老板的数**算式上。
  反正后来越来越复杂,能做的事情越来越多。

  但不管怎么复杂,要想系统能开工
  上电以后,CPU要干的第一件是都只能是访问地址设成0x0或是别的什么固定的值。
  那么你要想让这个机器真的能用。就要在它对应地址0x0的存储器里面烧写上相应的程序。
  如果你烧的程序是一个专用的程序,那么你的整个系统就是专用的。
  如果你烧的程序是一个操作系统,那么你的系统就可以通过这个操作系统再加载很多其他任务。

  再后来,计算机搞得更复杂了,你会发现能硬盘启,也能从U盘启。其实这只是你看到的而已。为了能让你从各种不同的地方启动,计算机里面实际上已经有了一个叫BIOS的芯片,CPU上电后其实还是跑到了0X0什么的地址上,只不这次0x0地址是BIOS而已。

  再后来,大家都玩嵌入式系统了。其实也没什么不一样的,只不过没有固定的BIOS了,那个0x0地址对应到芯片内部了ROM了。里面有基本的一个小程序,这个程序可以帮你加载Flash或是SD卡什么上面的系统了。
  在TI的DSP上也一样,但由于ROM里的程序太简陋了,它只能从FLASH里读2K代码到内存里,或是从SD卡上读不超过多大的一个文件到内存里。于是如果你的程序大于2K的话,它就无能为力了。好在工程师都是很聪明的,自已的这个2K程序干脆还不让它干活,2K程序被用来把大于2K的程序加载到内存里。这就叫二次引导。
  程序越写越复杂了,二次引导来的程序是一个操作系统了。 正式的程序由操作系统来负责引导。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
kakaxi_t + 3 风趣+专业
19
zhangmangui| | 2013-6-6 10:18 | 只看该作者
blacksword 发表于 2013-6-6 10:11
先不管磊哥了,我们接着来说CPU的启动问题。

我们知道CPU的老祖其实是我们天朝的算盘。

期待继续分析

使用特权

评论回复
20
lelee007|  楼主 | 2013-6-6 19:35 | 只看该作者
blacksword 发表于 2013-6-6 09:19
磊哥是谁?

乌龙,呵呵,我把您当成陈磊了:P

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

170

主题

8562

帖子

3

粉丝