请教:C6657 SPI nor flash 一直不能正常工作

Hello 您好,

最近一直用C6657 的spi nor flash烧写程序一直没有成功,加载的gel 是在 C:\ti\mcsdk_2_01_02_06\tools\writer\nor\下的相关 gel 文件。

最近一直没有弄成功,请教是否因为下列问题:

1. PLL 初始化不成功(在 gel 文件)

2. DDR3 初始化不成功()在 gel 文件)。

3. SPI nor flash 用这个工程烧写C:\ti\mcsdk_2_01_02_06\tools\writer\nor\evmc6657l spi nor flash.
,SPI接口是否需要初始化在 gel 文件
5. SPI nor flash 是否需要ibl. norwriter 工程是否需要做SPI nor flash初始化。我看网上有的说有需要 ibl,有的说没有不需要,现在那个更大众一点,用的最广泛。 mcsdk的例程是 带 ibl 还是不带ibl的
6. norwriter 用这个工程操作必须在 no uboot mode下?

或者您那有更好的指导连接及文档,非常感谢。最早的时候有个 Andy Yin的连接关于spi nor flash的现在找不到了。

如果spi nor flash有ibl 和 非ibl两种模式,能否提供这两个的相应例程,非常感谢

3 个回复

  • C665x没有PLL bug,可以不用IBL,直接从spi nor flash启动,请参考下面wiki网站上的例程,带DDR初始化的。例程里的SPIboot_with_DDR_UserGuide.docx文档有详细的步骤说明。
    C6657 EVM SPI boot example with DDR initialization
    processors.wiki.ti.com/.../KeystoneI_Bootloader_Resources_and_FAQ
  • 回复 Shine Zhang:

    Hello Shine,

    非常感谢您的回复。

    根据您的回复已经完成了烧写工作,但是boot起来后打印出来的数据是乱码,打印的是串口输出,而且数据的个数不对。

    这个大概是什么原因。

    另外我们的板子和评估板不同,需要注意那些方面? 特别是DDR3参数的设置,都需要注意那几些参数,这些参数在那个文件修改?

    另外在 nysh.SPI.map 中的参数都是給SPI 进行参数配置,与DDR3 配置无关?

    另外,关于DDR3  The DDR configuration table location defined by Boot ROM:

    C6678: 0x00873500
    C6657: 0x008FFD20

    这两个地址是固定的吗,还是自定义的? 我看了memory map 发现boot rom的地址不是这个地址,是否我理解有误?

    我们目前的DDR3 输入基准时钟是 100Mhz,DDR3 是1333Mhz,修改PLLmult = 39, pllpostDiv =2 是否就可以保证是1333Mhz DDR3?

    谢先!


    BRS,
    Meng

  • 回复 Shine Zhang:

    Hello Shine,

    根据您提供的连接,下载了最新的 非IBL的 直接 SPI nor flash  工程 C6657_directROM_Boot_example.zip
    仔细看nor flash 的相关的代码,并执行操作,有以下问题请教:

    1) 在emif4Cfg 表格中, pllPrediv 是否需要设置,PLL最新文档说,这一位已经没有?

    2) 另外,我的外接时钟 是 100Mhz,DDR3 1333Mhz,pllMult 和 pllPostDiv 是 设置为 39和2,还是设置成 40和3?

    0, /* pllPrediv */
    39, /* pllMult */
    2, /* pllPostDiv */

    3) spi boot.rmd 中的 memwidth = 32, romwidth = 32
    两个宽度分别 指的谁的宽度,DDR3,还是 EEPROM,FLASH的?

    我们用的 NOR Flash 是 N25Q128A11ESE40F,DDR3 是MT41J128M16HA-15EIT,DDR3提供的基本时钟是
    100Mh

    下表 是我们DDR3 参数设置,在CCS已经验证这些参数,可以正常初始化 DDR3,但是 根据文档及其操作,显示烧写成功,但是NOr flash一直不能正常启动,打开CCS 输入0x8000 0000地址,然后给DDR3 写数据,没有成功过

    #pragma DATA_SECTION (emif4Cfg, ".emif4Cfg")
    const BOOT_EMIF4_TBL_T emif4Cfg = {

    BOOT_EMIF4_ENABLE_MSW_pllCtl | \
    BOOT_EMIF4_ENABLE_MSW_sdRamTiming1 | \
    BOOT_EMIF4_ENABLE_MSW_sdRamTiming2 | \
    BOOT_EMIF4_ENABLE_MSW_sdRamTiming3 | \
    BOOT_EMIF4_ENABLE_MSW_ddrPhyCtl1 | \
    BOOT_EMIF4_ENABLE_MSW_sdRamRefreshCtl | \
    BOOT_EMIF4_ENABLE_MSW_sdRamOutImpdedCalCfg | \
    BOOT_EMIF4_ENABLE_MSW_sdRamConfig,

    BOOT_EMIF_ENABLE_SLSW_config0 | \
    BOOT_EMIF_ENABLE_SLSW_config6 | \
    BOOT_EMIF_ENABLE_SLSW_config7 | \
    BOOT_EMIF_ENABLE_SLSW_config8 | \
    BOOT_EMIF_ENABLE_SLSW_config9 | \
    BOOT_EMIF_ENABLE_SLSW_config10 | \
    BOOT_EMIF_ENABLE_SLSW_config18 | \
    BOOT_EMIF_ENABLE_SLSW_config19 | \
    BOOT_EMIF_ENABLE_SLSW_config20 | \
    BOOT_EMIF_ENABLE_SLSW_config22 | \
    BOOT_EMIF_ENABLE_SLSW_config12 | \
    BOOT_EMIF_ENABLE_SLSW_config23 | \
    BOOT_EMIF_ENABLE_SLSW_config21, /* Config select slsw */
    0, /* Config select lsw */

    0, /* pllPrediv */
    39, /* pllMult */
    2, /* pllPostDiv */

    0x63066AB2, /* sdRamConfig,0x62477AB2 */
    0, /* sdRamConfig2, dont care*/
    0x00001458, /* sdRamRefreshCtl,0x0000144F,0x80005161,0x00005161 */
    0x1113783C, /* sdRamTiming1,0x1333780C*/
    0x30717FE3, /* sdRamTiming2,0x30717FE3 */
    0x55BF86AF, /* sdRamTiming3,0x559F86AF*/

    0, /* lpDdrNvmTiming, dont care */
    0, /* powerManageCtl, dont care */
    0, /* iODFTTestLogic, dont care */
    0, /* performCountCfg, dont care */
    0, /* performCountMstRegSel, dont care */
    0, /* readIdleCtl, dont care */
    0x00081020, /* sysVbusmIntEnSet, dont care */
    0x70073DBB, /* sdRamOutImpdedCalCfg, 0x70074c1f,dont care */
    0, /* tempAlterCfg, dont care */

    0x0010010A, /* ddrPhyCtl1,0x0010010F,0x0010010D */

    0, /* ddrPhyCtl2, dont care */
    0x80005500, /* priClassSvceMap, dont care */
    0, /* mstId2ClsSvce1Map, dont care */
    0, /* mstId2ClsSvce2Map, dont care */
    0, /* eccCtl, dont care */
    0, /* eccRange1, dont care */
    0, /* eccRange2, dont care */
    0x0000070F, /* rdWrtExcThresh, dont care */

    0, 0, 0x6C, 0x6C, 0x7A, 0x73, 0, 0,
    0, 0, 0x5C, 0, 0, 0, 0xB0, 0xB0,
    0xBD, 0x03, 0, 0, 0, 0, 0xA4, 0,
    0, 0, 0, 0, 0, 0, 0, 0,

    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0t
    };

    4)是否我们烧写程序时,必须用该工程的norwriter_evm6657l.out ,而不是 用mcsdk 下面的norwriter 工程烧写?还有,这个norwriter_evm6657l.out 是针对     C6657 来操作的,能够可以用到C6655 SPI nor flash的烧写(不做改动)

    5)另外,如何烧写应用程序,刚才这个应该是启动程序?


    请给予帮助,谢谢