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.

[参考译文] CCS/TMDSICE3359:从 SPI 闪存运行工程时出现问题

Guru**** 2559950 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/612155/ccs-tmdsice3359-issue-running-project-from-spi-flash

器件型号:TMDSICE3359

工具/软件:Code Composer Studio

您好!

我将从 Sitara 和 TI-RTOS 开始。

 使用 RTOS PDK 1.0.6、我开发了一个使用 UART 控制板载 LED 的简单项目。 当我 使用 CCS 6通过 USB 加载时、它工作正常、但在 SPI 存储器上刷写时遇到一些问题。

我已执行的步骤:

  1. 启用 GNU objcopy 实用程序以生成项目的.bin 输出
  2. 使用 tiimage.exe 从{pdk_path}\packages/ti\starterware\tools\ti_image 将此.bin 转换为_ti.bin 文件。 基于 ti_image wiki

    运行:tiimage.exe 0x8000000 none path_TO_my_project\debug\MyProject.bin path_TO_my_project\debug\MyProject_ti.bin  

  3. 使用 CCS、在 电路板上加载{pdk_path}\packages/ti\starterware\tools\flash_writer\spi_flash_writer_am335X.out。 如 SDK RTOS 启动 wiki 中所述
    1. 将偏移量0x0中的"bootloader_boot_boot_mcspi_a8host_release_ti.bin"从 {pdk_path}\packages\ti\starterware\binary\bootloader\bin\AM335x-evm\gcc 刷写为"bootloader_boot_boot_release_ti.bin"
    2. 闪存"MyProject_ti.bin "、偏移量0x20000

在此过程之后、UART 输出为:

StarterWare 引导加载程序
BOARDInit 状态[0x0]
SoC:[AM335X]
磁芯:[A8]
检测到电路板:[ICE Ver2]
基板版本:[未知]
子卡版本:[未知]
GPIO 实例编号:0
引脚编号:18
MCSPI 实例编号:0
通道/芯片选择编号:0
实例地址为48030000

正在复制图像的标题
将映像从闪存复制到 DDR
跳转到 StarterWare 应用程序...

但我的程序从未开始运行...

我已使用 SPI_FLASH_writer_AM335X.OUT 成功刷写{pdk_path}\packages/ti\starterware\binary 中的二进制文件、因此我猜 "myProject_ti.bin"会出现问题。

请告诉我我所遵循的流程是否正确?

我已经了解到、有时需要包含 GEL 文件代码来初始化电路板。 这是我缺少的吗? 如果是、如何将其添加到我的项目中?

如何修改引导加载程序以打印认为是 UART 的更多信息?

我还尝试使用"bootloader_boot_boot_mmcsd_a8host_release_ti.bin"、并再次 使用"MyProject_ti.bin "从 SD 卡引导它、串行输出为:

*** StarterWare 引导加载程序。 Build - 1.0.4-NOR 引导
将应用程序映像从 MMCSD 复制到 RAM
无法从 MMCSD 打开应用程序文件 

 当我尝试使用示例.bin 而不是我的项目时、会出现相同的输出。 这是否是一个错误、意味着 MLO 文件是正确的、应用程序也是问题所在??

谢谢。

刷写过程:

[CortxA8] AM335X 器件被检测到。
SF:得到代码 ef 40 17
检查是否可以使用 Winbond 闪存写入器..
SF:检测到 W25Q64、页面大小为256、总共为8388608字节
闪存页大小:256字节
闪存扇区大小:4096字节
启动 SPIWriter。

选择操作:
输入1--->以刷写映像
输入2 -->擦除闪存
输入3 -->退出

1
输入文件名

C:\ti\pdk_am335x_1_0_6\packets\ti\starterware\binary\bootloader\bin\am335x-evm\gcc\bootloader_boot_mcspi_a8host_release_ti.bin
输入以字节(十六进制)为单位的偏移量
0x0
擦除字节偏移处的闪存:0、字节长度:36864
SE:CMD ={0x20 0x000000}
SE:CMD ={0x20 0x001000}
SE:CMD ={0x20 0x002000}
SE:CMD ={0x20 0x003000}
SE:CMD ={0x20 0x004000}
SE:CMD ={0x20 0x005000}
SE:CMD ={0x20 0x006000}
SE:CMD ={0x20 0x007000}
SE:CMD ={0x20 0x008000}
SF:已成功擦除36864字节@ 0x9000
在页偏移处写入闪存:0、页数:134

正在刷新...
正在验证... 成功。

检测到 AM335x 器件。
SF:得到代码 ef 40 17
检查是否可以使用 Winbond 闪存写入器..
SF:检测到 W25Q64、页面大小为256、总共为8388608字节
闪存页大小:256字节
闪存扇区大小:4096字节
启动 SPIWriter。

选择操作:
输入1--->以刷写映像
输入2 -->擦除闪存
输入3 -->退出
1
输入文件名

C:\ti\blink_ice_test\UART_Output_Test\Debug\Uart_Output_Test_ti.bin
输入以字节(十六进制)为单位的偏移量

0x20000
擦除字节偏移处的闪存:131072、字节长度:274432
SE:CMD ={0x20 0x020000}
SE:CMD ={0x20 0x021000}
SE:CMD ={0x20 0x022000}
SE:CMD ={0x20 0x023000}
SE:CMD ={0x20 0x024000}
SE:CMD ={0x20 0x025000}
SE:CMD ={0x20 0x026000}
SE:CMD ={0x20 0x027000}
SE:CMD ={0x20 0x028000}
SE:CMD ={0x20 0x029000}
SE:CMD ={0x20 0x02a000}
SE:CMD ={0x20 0x02b000}
SE:CMD ={0x20 0x02c000}
SE:CMD ={0x20 0x02d000}
SE:CMD ={0x20 0x02e000}
SE:CMD ={0x20 0x02f000}
SE:CMD ={0x20 0x030000}
SE:CMD ={0x20 0x031000}
SE:CMD ={0x20 0x032000}
SE:CMD ={0x20 0x033000}
SE:CMD ={0x20 0x034000}
SE:CMD ={0x20 0x035000}
SE:CMD ={0x20 0x036000}
SE:CMD ={0x20 0x037000}
SE:CMD ={0x20 0x038000}
SE:CMD ={0x20 0x039000}
SE:CMD ={0x20 0x03a000}
SE:CMD ={0x20 0x03b000}
SE:CMD ={0x20 0x03c000}
SE:CMD ={0x20 0x03d000}
SE:CMD ={0x20 0x03e000}
SE:CMD ={0x20 0x03f000}
SE:CMD ={0x20 0x040000}
SE:CMD ={0x20 0x041000}
SE:CMD ={0x20 0x042000}
SE:CMD ={0x20 0x043000}
SE:CMD ={0x20 0x044000}
SE:CMD ={0x20 0x045000}
SE:CMD ={0x20 0x046000}
SE:CMD ={0x20 0x047000}
SE:CMD ={0x20 0x048000}
SE:CMD ={0x20 0x049000}
SE:CMD ={0x20 0x04a000}
SE:CMD ={0x20 0x04b000}
SE:CMD ={0x20 0x04c000}
SE:CMD ={0x20 0x04d000}
SE:CMD ={0x20 0x04e000}
SE:CMD ={0x20 0x04f000}
SE:CMD ={0x20 0x050000}
SE:CMD ={0x20 0x051000}
SE:CMD ={0x20 0x052000}
SE:CMD ={0x20 0x053000}
SE:CMD ={0x20 0x054000}
SE:CMD ={0x20 0x055000}
SE:CMD ={0x20 0x056000}
SE:CMD ={0x20 0x057000}
SE:CMD ={0x20 0x058000}
SE:CMD ={0x20 0x059000}
SE:CMD ={0x20 0x05a000}
SE:CMD ={0x20 0x05b000}
SE:CMD ={0x20 0x05c000}
SE:CMD ={0x20 0x05d000}
SE:CMD ={0x20 0x05e000}
SE:CMD ={0x20 0x05f000}
SE:CMD ={0x20 0x060000}
SE:CMD ={0x20 0x061000}
SE:CMD ={0x20 0x062000}
SF:已成功擦除274432字节@ 0x63000
在页偏移处写入闪存:512、页数:1065

正在刷新...  
正在验证... 成功。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否在这里n`t 您的测试文件(.out、.map 和二进制文件)、以便我可以在我的末尾重现此问题。创建应用程序时、请确保您没有使用引导加载程序正在使用的 OCMC 存储器区域。

    OCMCRAM      开始:0x402f0400     长度:0x0001fbff

    最近、在我们的一个内部培训课程中、我们使用了以下二进制文件来演示此平台上的 SPI 引导、您可以尝试使用这些二进制文件。 在这种情况下、该应用是 Processor SDK RTOS 中提供的该平台的 GPIO LED 闪烁示例。

    e2e.ti.com/.../Bootloader.zip

    请尝试一下、如果他们为您服务、请告知我们。

    仅当您将映像刷写到闪存中时、才需要 GEL 文件、而不是在引导时。 让我创建一个文档供您关注

    此器件上的 SD MMC 引导仅在 SPI 闪存完全擦除时工作、这是由于 EVM 上的引导序列造成的

    引导顺序:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rahul、

    感谢您的快速回复!

    我将尝试使用您的文件进行引导、并返回结果。

    同时、我会附加用于引导程序的.out、.map、.bin 和_ti.bin 文件。 Memory config 如下所示:

    存储器配置
    名称       起点       长度       属性
    SRAM       0x402f0400     0x0000fc00
    L3OCMC0      0x40300000     0x00010000
    M3SHUMEM     0x44d00000     0x00004000
    M3SHDMEM     0x44d80000     0x00002000
    DDR0       0x80000000     0x40000000
    SRAM_LO      0x402f0000     0x00000400     Xrw
    SRAM_HI      0x402f0400     0x0000fc00     Xrw
    OCMC_SRAM    0x40300000     0x00010000     Xrw
    DDR3       0x80000000     0x20000000
    *默认值*    0x00000000     0xFFFFFFFF
    我的 SRAM 的定义与您提到的完全相同、但我的 OCMC_SRAM 不是这样。 这两者之间的推理是什么?

    我确定这是一个基本问题、但我是初学者、此文件信息对我来说不是很清楚。 是否有解释.map 文件组织和段的文档? 我想很好地理解该文件的内容。

    仅当您将映像刷写到闪存中时、才需要 GEL 文件、而不是在引导时。 让我创建一个文档供您关注 

    将来、我想在不使用 CCS 的情况下将程序刷写到 SPI 存储器中、可能需要使用 SD 卡或其他 SPI 闪存写入器程序。 在这种情况下、需要包含 GEL 文件、对吧?

    我期待您的解释文件!

    谢谢!

    e2e.ti.com/.../Output_5F00_files.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rahul、

    我又来了一些消息

    首先、我成功地将程序刷写到 SPI 存储器中! 问题与内存配置有关。 正如您在我的旧.map 中看到的、内存区域是重复的、因此我猜这会导致一些冲突。 感谢您对此的提示!

    我找到了包含存储器区域定义的文件"AM335x.lds"、我将其从构建中排除并完成! 我的新内存配置如下所示:

    存储器配置
    名称       起点       长度       属性
    SRAM_LO      0x402f0000     0x00000400     Xrw
    SRAM_HI      0x402f0400     0x0000fc00     Xrw
    OCMC_SRAM    0x40300000     0x00010000     Xrw
    DDR3       0x80000000     0x20000000
    *默认值*    0x00000000     0xFFFFFFFF

    现在我的问题是:这些定义在哪里? 如果我想定制此映射、我应该修改哪个文件?

    另一方面、我已经尝试了您发送给我的引导加载程序+应用程序文件。

    SPI 引导工作正常、但从 SD 卡引导时仍然存在一些问题。

    我获得的输出与使用"bootloader_boot_boot_mmcsd_a8host_release_ti.bin"作为 MLO 文件的输出不同。 现在、复制映像成功、但应用程序从未执行(我几乎尝试过所有应用程序)。  

    *** StarterWare 引导加载程序。 Build - 1.0.4- NOR 引导

    将应用程序映像从 MMCSD 复制到 RAM

     

    复制到 RAM 成功完成

    映像复制成功、正在执行应用程序。

    对此有任何建议吗?

    此 MLO 与 Starterware 中提供的 MLO 有何区别? 我可以使用源代码吗?

    再次感谢您!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于引导加载程序构建、使用 AM335x_boot.lds 文件。 这是定义所有引导加载程序存储器段的位置。 您需要确保引导加载程序和应用程序存储器部分之间没有重叠。 若要进行自定义、您需要修改应用程序和引导加载程序的.lds 文件中的段。

    要使 SD 引导在 ICEAM3359上正常工作、您需要擦除闪存并确保创建 SD 卡并将其格式化为 FAT 格式。 要确认已引导、您可以看到 LED 闪烁或连接到内核、并通过在 CCS 中使用"Register"视图查看 ARM 的程序计数器(PC)来查看内核正在 OCMC 存储器中执行。

    此致、
    Rahul