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.

C6678 烧写NAND中的问题



• 我在C6678 烧写应用程序到NAND中遇到一点困难,请详细指教。

•  我使用的软硬件是:mcsdk_02_00_09_21   ;ccs_base_5.0.03;  evm6678L

•  在烧写这个过程中我的步骤是:

1. 把文件xxx 到文件夹

mcsdk_2_00_01_12\tools\writer\nand\evmc6678l\bin 下,并改其名字为

app.bin

2. 修改该文件夹下的文件nand_writer_input.txt,默认为

file_name = app.bin

start_addr = 16384

3. EVM 上boot 模式设置为 no boot/EMIF16 模式

4. 打开CCSv5,

5. 打开evmc66xx emulator target configuration

6. 连接core 0

7. 加载(确保evmc66xxl.gel 已执行,DDR 已初始化)

mcsdk_2_00_09_21\tools\writer\nand\evmc6678l\bin\

nandwriter_evm6678l.out

8. 打开 memory view( CCSv5 里 view->Memory Browser),查看内存地

址0x80000000

9. 把app.bin 下载到0x80000000 处

10. 执行

11. 当烧写完成时,终端显示NAND programming completed successfully,

错误时也有错误提示

编译步骤

工程文件位置

mcsdk_2_00_01_12\tools\writer\nand\evmc6678l

clean nandwriter 工程

build

完成后,生成的文件位于

mcsdk_2_00_01_12\writer\nand\evmc66xxl\bin

• nandwriter_evm66xxl.out 和nandwriter_evm66xxl.map

最后查看运行结果是: 0x70000000之后的地址范围(对应Block 0)值均为0xE0E0E0E0,

理论上应该都是0Xffffffff,,擦除没有成功。自然也写不进去任何数据。难道是系统擦除程序:

“mcsdk_2_00_09_21\tools\writer\nand\evmc6678l\bin\nandwriter_evm6678l.out”有问题?还是我什么地方使用的不对?请高手指点!多谢了!

  • 注意在mcsdk_02_00_09_21 烧写的地址是在0x0c000000,不是0x80000000

  • 烧写NAND前需要将ibl烧写到EPPROM中吗?为什么?

  • 烧写NAND前,不需要将ibl烧写到EPPROM中,烧写是由单独例程分别烧写的。唯独,boot的时候有关系。

  • 非常感谢你的答复!

    我查过了在mcsdk_02_00_09_21 烧写的地址是在0x80000000,不是在0x0c000000。

    即使把烧写的数据放在0x0c000000中,烧写的结果仍然是:0xE0E0E0E0

  • NAND FLASH是无法直接访问的!你查看的内容当然也不正确.

  • 既然工程可以运行通过,建议单步运行一下,看看NAND的烧写数值,和读取结果校验数值。

  • 怎么查看NAND FLASH烧写内容?

  • 工程中不是有这段程序:

    * Read a block of data */

           if(platform_device_read(p_device->handle,

                                   block*nandWriterInfo.blockSizeBytes,

                                   scrach_block,

                                   nandWriterInfo.blockSizeBytes) != Platform_EOK)

  • 将nand flash 的内容读到内存中来访问,具体怎么读法可以参考ibl里的nand flash 驱动!

  • 非常感谢你的答复!

    我在跟踪调试时,确实看到数据已经烧写到0X70000000中。

       NandCmdSet(NAND_LO_PAGE); // First cycle send 0

            platform_delay(10);

         NandAleSet((uiAddr >>  0u) & 0xFF);   // A0-A7  1st Cycle;  column addr

         NandAleSet((uiAddr >>  9u) & 0xFF);   // A9-A16 2nd Cycle;  page   addr & blk

         NandAleSet((uiAddr >> 17u) & 0xFF);   // A17-A24 3rd Cycle; Block addr

         NandAleSet((uiAddr >> 25u) & 0x1);    // A25-A26  4th Cycle;  Plane addr

        执行完上述程序后,0X70000000中为烧写的数据。

         platform_delay(EMIF16_WAIT_PIN_POLL_ST_DLY);执行完这条语句后0X70000000中的内容就为“0”了。

      我有点想不通BOOT ROM   0X20B00000-0X20B1FFFF的内容为什么可以直接访问?NAND的内容

      为什么无法直接访问?

  • NAND FLASH的访问不是并行的,分别由commands, address, and data.,并且只能以块方式存取,它的访问和RAM、片内ROM完全不同。

  • 建议你重新烧写下程序按以下步骤:

    以下步骤都是boot 模式为 no boot/EMIF16 模式,请先核对拨码开关!!!

    1.将<MCSDK INSTALLDIR>tools\writer\eeprom\src目录下的eepromwriter.c中的第64行

    #define WRITE_DATA_ADDRESS     0x0c000000

    改为:

    #define WRITE_DATA_ADDRESS     0x80000000

    然后重新编译eepromwrite生成.out文件,拷进\mcsdk_2_00_09_21\tools\writer\eeprom\evmc6678l\bin文件夹中将原文件替代。

    按照烧写IBL的过程重新烧写EEPROM

    2.按照你之前的步骤将你的工程.out文件烧写进Nandflash(这个如果有错请把错贴出来)

    3.文件\mcsdk_2_00_09_21\tools\boot_loader\ibl\src\make\bin中的i2cparam_0x51_c6678_le_0x500.out烧写IBL configuration

    方法如下:

    a. 确保boot 模式为 no boot/EMIF16 模式

    b. 打开CCSv5, evmc66xx emulator target configuration, 并连接到core 0

    c. 加载i2cparam_0x51_c6678_le_0x500.out 到CCS

    d. 运行,CCS 终端上将显示Run the GEL for the device to be configured,

    press return to program the I2C

    e. 加载i2cConfig.gel

    f. 运行脚本EVM c6678 IBL"->setConfig_c6678_main,这将设置好从

    NOR/NAND/Ethernet 启动的默认参数

    g.在CCS 终端参数中按Enter 键,把boot 的参数表写入到EEPROM 中,一旦成

    功将显示信息I2c table write complete

    以上三步完成后更改拨码开关更改boot模式为nandflash且image为0,重新复位即可!

    如果有问题请继续跟贴!

  • 按你说的我做了一遍,目标板无法正常工作:

    [C66xx_0] EEPROM Writer Utility Version 01.00.00.05

    [C66xx_0]

    [C66xx_0] Writing 52064 bytes from DSP memory address 0x80000000 to EEPROM bus address 0x0051 starting from device address 0x0000 ...

    [C66xx_0] Reading 52064 bytes from EEPROM bus address 0x0051 to DSP memory address 0x80010000 starting from device address 0x0000 ...

    [C66xx_0] Verifying data read ...

    [C66xx_0] Failure at byte 4, expected 0x00000000, read 0x00000000

    [C66xx_0] EEPROM read verify failed

    烧写IBL失败

    打开CCSv5, evmc66xx emulator target configuration, 连接core 0报错::

    C66xx_0: GEL Output: Setup_Memory_Map...

    C66xx_0: GEL Output: Setup_Memory_Map... Done.

    C66xx_0: GEL Output:

    Connecting Target...

    C66xx_0: GEL Output: DSP core #0

    C66xx_0: GEL Output: No initialization performed since bootmode = 0x00000005

    C66xx_0: GEL Output: You can manually initialize with GlobalDefaultSetup

    目标板无法正常工作。

    我按原来的修改回去,烧写IBL成功:

    [C66xx_0] EEPROM Writer Utility Version 01.00.00.05

    [C66xx_0]

    [C66xx_0] Writing 52064 bytes from DSP memory address 0x0c000000 to EEPROM bus address 0x0051 starting from device address 0x0000 ...

    [C66xx_0] Reading 52064 bytes from EEPROM bus address 0x0051 to DSP memory address 0x0c010000 starting from device address 0x0000 ...

    [C66xx_0] Verifying data read ...

    [C66xx_0] EEPROM programming completed successfully

    打开CCSv5, evmc66xx emulator target configuration, 连接core 0报错:

    C66xx_0: GEL Output: Setup_Memory_Map...

    C66xx_0: GEL Output: Setup_Memory_Map... Done.

    C66xx_0: GEL Output:

    Connecting Target...

    C66xx_0: GEL Output: DSP core #0

    C66xx_0: GEL Output: No initialization performed since bootmode = 0x00000005

    C66xx_0: GEL Output: You can manually initialize with GlobalDefaultSetup

  • 你好,

    请你核对两点

    1.你的boot模式开关设置的对吗?

    2.你是按照Texas Instruments\mcsdk_2_00_09_21\tools\writer\eeprom\docs中的text文档做的吗?

    我有做了一遍,我这是可以的

    请你仔细核对下

    谢谢

  • 谢谢你的帮助! 现在对了!

  • 好的,有问题,欢迎继续交流

  • 你说"更改拨码开关更改boot模式为nandflash且image为0",其中"image"指什么?

  • 是镜像nand支持两个镜像

  • Yue Cao你好!

    按你说的我做了一遍EEPROM烧写,目标板无法正常工作:

    打开CCSv5, evmc66xx emulator target configuration, 连接core 0时总报如下错误:

    Connecting Target...

    C66xx_0: GEL Output: DSP core #0

    C66xx_0: GEL Output: No initialization performed since bootmode = 0x00000005

    C66xx_0: GEL Output: You can manually initialize with GlobalDefaultSetup

    过去没有出现过这种问题.请问你是在北京吗?我的手机号:13611301908,你能给我回个短信吗?

    我现在不知道是什么问题.很着急!标连都目板无法初使花了.

  • 你好,

    请按照我所说的步骤,继续做下尝试。

    实验例程请参见processors.wiki.ti.com/.../BIOS_MCSDK_2.0_User_Guide%E4%B8%AD%E7%9A%84led_play%E4%BE%8B%E7%A8%8B

    如有问题请继续跟贴

    谢谢

  • 怎么确保image=0,在哪可以定义,没找到

  • guizhen wang 说:

    非常感谢你的答复!

    我在跟踪调试时,确实看到数据已经烧写到0X70000000中。

       NandCmdSet(NAND_LO_PAGE); // First cycle send 0

            platform_delay(10);

         NandAleSet((uiAddr >>  0u) & 0xFF);   // A0-A7  1st Cycle;  column addr

         NandAleSet((uiAddr >>  9u) & 0xFF);   // A9-A16 2nd Cycle;  page   addr & blk

         NandAleSet((uiAddr >> 17u) & 0xFF);   // A17-A24 3rd Cycle; Block addr

         NandAleSet((uiAddr >> 25u) & 0x1);    // A25-A26  4th Cycle;  Plane addr

        执行完上述程序后,0X70000000中为烧写的数据。

         platform_delay(EMIF16_WAIT_PIN_POLL_ST_DLY);执行完这条语句后0X70000000中的内容就为“0”了。

      我有点想不通BOOT ROM   0X20B00000-0X20B1FFFF的内容为什么可以直接访问?NAND的内容

      为什么无法直接访问?

    哥们,我跟你遇到了一样的问题,也是0x70000000那里是e0e0,请问你最后是怎么解决的吗?我最近烧录也是问题不断,能交流一下吗?多谢!

  • Xinhai Chen 说:

    将nand flash 的内容读到内存中来访问,具体怎么读法可以参考ibl里的nand flash 驱动!

    你好,我想问下参考IBL里的nand flash驱动,这些参考资料是在那个文件夹里,可以说下吗?

  • 麻烦问一下,为何IBL烧写至EEPROM时,地址必须是0x80000000,在0xc000000中为什么不可以?没有找到相关资料说明,谢谢

  • 您好,按照您说的步骤,一步一步的做了,每个过程也没有出现错误,但是还是没有boot成功,复位后没有反应,板子是我们自己做的,但是电路和evm的一样,这个还有可能是什么情况,求指教