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.

C6748 与 OMAP138 NAND 程序烧写

Other Parts Discussed in Thread: OMAP-L138

有几个问题咨询:

1 C6748 与 OMAP138 pin to pin兼容,在软硬件设计一致的情况下,两款芯片的程序烧写流程与细节是否完全一致,包括AIS工程将out生成bin,在由OMAP-L138_FlashAndBootUtils_2_40下NANDWriter烧写到flash内这些操作?

2 现在程序在omap138开发板SMART GRID (Revision E)上通过仿真器下载可正常执行(功能是通过串口循环打印固定语句)。具体流程如下:
   2.1 仿真模式下生成out文件
   2.2 AIS工具转换为bin文件(EVMC6748_AISGen_Config.cfg,将版本换位008)
   2.3 OMAP-L138_FlashAndBootUtils_2_40下NANDWriter烧写到NANA FLASH BLOCK1
   2.4 将boot开关S2切换到nand8模式后,程序无反应

   几点怀疑:
   1 仿真状态下的pringf语句在烧写后是否会影响程序正常运行?
   2 AIS工具NANDFLASH模式下,是否要配置PSC模块使能EMIFA等相关模块,EVMC6748_AISGen_Config.cfg内并没有相关操作,类似的还有PINMUX的配置?

  • 1,基本一致,注意6748要做DSP版本的BIN,138是ARM的

    2,仿真器下的PRINTF是从控制台打印出,如果代码里没有写PRINTF到串口,烧进去是不能用的

    需要配PSC模块,如果cfg文件里没有也可在代码里面配置

  • countryhotel 说:
       2 AIS工具NANDFLASH模式下,是否要配置PSC模块使能EMIFA等相关模块,EVMC6748_AISGen_Config.cfg内并没有相关操作,类似的还有PINMUX的配置?

      不需要,因为bootloader会根据bootmode做相应的初始化,也就是说在读配置之前,EMIF已经配置好了,否则bootloader怎么能从flash读AIS文件的配置呢。timing可以配,但不要配EMIF的pinmux。

    你是不是在L138板子上做从DSP boot啊?

  • @tony,是的,我们选型的是C6748,但现在手上只有omap138,先在这上面弄些底层的东西,等自己的板子出来好加速移植。

    另外,在omap138上从DSP BOOT,AIS中“DEVICE TYPE”也是需要按 说的选择“ARM”吗?

  • @tony

    “timing可以配,”,这里emif的时序的配置仅仅是提高boot的速度吧?不配置使用默认的最慢时序应该也可以保证boot功能的正确性,只是从NAND FLASH读取速度慢,拉长整个启动周期。

  • @tony

    另外看了应用文档“OMAP-L138SOC的启动详解.pdf”里的“ARM 启动DSP 的步骤”和“DSP 启动文件配置与格式”,不是很理解,是需要在我们自己的应用程序中添加对应的代码吗?

    我们现在用OMAP-L138开发板SMART GRID (Revision E),但是吧omap138作为C6748用。只用到DSP核。

  • countryhotel 说:

    @tony,是的,我们选型的是C6748,但现在手上只有omap138,先在这上面弄些底层的东西,等自己的板子出来好加速移植。

    另外,在omap138上从DSP BOOT,AIS中“DEVICE TYPE”也是需要按 说的选择“ARM”吗?

    L138只能从ARM boot,不能直接从DSP boot。

  • countryhotel 说:
    “timing可以配,”,这里emif的时序的配置仅仅是提高boot的速度吧?不配置使用默认的最慢时序应该也可以保证boot功能的正确性,只是从NAND FLASH读取速度慢,拉长整个启动周期。

    是的,timing只是提高速度,对实现boot逻辑上没有关系。

  • @ tony,你好,今天下载了Boot_DSP_on_SOC_V0.1,阅读了其中的代码与文档,下面是我对OMAP 138中arm启动dsp流程的理解,麻烦你们看看是否正确:

    在例子“OMAPL138_ARMbootDSPCoff”中,有DSP与ARM两份程序,其中ARM端代码会将DSP的程序文件搬运至指定位置,并使能复位DSP。

    1 entry_point = LoadDSP(filename);该函数作用是将DSP的程序文件搬运至指定运行位置并返回程序入口位置(entry_point),其内部实现应根据DSP程序数据具体格式(out,ais等)及存储介质(nand flash,nor flash等)来做区分实现。

    2 下面这一段代码就是arm使能,复位,启动dsp模块的代码,最后的延时时给dsp模块完成芯片初始化的时间;

    3 最后是arm在dsp完成初始化后通过CHIPINT2中断触发dsp执行中断函数

    基于上面的程序结构,对omap138 arm启动dsp程序的烧写流程整理如下:

    1 将DSP端程序编译生成DSP.out文件;

    2 将DSP.out文件加载到指定存储介质中,本实例为spi flash);

    3 将ARM端LoadDSP调整为能解析OUT格式并通过SPI读取FLASH内DSP.out数据;

    4 将ARM端程序按AIS工具指定方法生成BIN文件并烧写到FLASH内,本实例为nand flash 8;

    5 将boot mode设置为nand flash 8,则应该可正常启动dsp;

    6 感觉“OMAPL138DemoInterrupt”内arm端代码的CHIPINT2中断触发dsp执行中断函数不是必须的,可根据实际应用删减;

     

    找到的一些参考资料有:Boot_DSP_on_SOC_V0.1和OMAP-L138SOC的启动详解.pdf

  • 我想你误解了我这个总结的目的。

    #1. 我这个总结主要是让人明白ARM boot DSP的流程

    #1.1 即ARM使能DSP的模块时钟

    #1.2 加载DSP的代码,这个DSP的代码格式根据你自己的方式,这里为了同时说明COFF文件格式,所以直接解释.out文件。而实际当中,看你自己的喜好。

    #1.3 ARM写入DSP的entry point到HOST1CFG寄存器

    #1.4 ARM释放DSP local reset,DSP开始运行。

    而最后ARM与DSP发中断,只是为了在这个例子里同时做一个ARM与DSP通讯的例子,因为老是有人问ARM与DSP怎么通信啊~~~

  • 通过你给的例程能比较形象地了解启动与通信过程,感谢。