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.
我们按照说明编译、加载和使用 C6657 EVM 的 IBL、并能够将应用程序加载到电路板上并启动应用程序。
[ https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1057566/faq-tms320c6657-how-to-flash-the-ibl-intermediate-boot-loader-into-eeprom-and-how-to-flash-the-application-binary-into-nor-how-to-boot-the-ibl-application-binary]
我们现在正在逐步升级到我们自己的定制硬件。 我们的初始硬件具有与 EVM 相似的存储器映射(即 I2C EEPROM、SPI 闪存、DDR3)。 主要区别在于、DDR3存储器需要不同的 DDR3配置设置才能正常运行。
第一步是 修改 EVM GEL 文件以正确配置我们的硬件。 通过这些更改、我们正确配置了 DDR3存储器、并验证了处理器正在运行、并且能够调试应用。
下一步是修改 IBL/RBL 配置以使用这些更改。 我们正在尝试仿真 EVM 的启动特性。 (即从 I2C EERPOM 加载 IBL、并从 SPI 闪存加载应用。) 但是、我们正在努力确定在何处/如何完成此任务。
Bras、
问题:
下一步是修改 IBL/RBL 配置以使用这些更改。 我们正在尝试仿真 EVM 的启动特性。 (即从 I2C EERPOM 加载 IBL、并从 SPI 闪存加载应用。) 但是、我们正在努力确定在何处/如何完成此任务。
答案:
1.可以,可以修改 IBL。 请访问此处、以修改和重新构建 IBL。
4.d)如何构建 IBL–
2.我想您的问题是在没有 IBL 的情况下从 SPI 引导。
是的、这也是可能的。 https://www.ti.com/lit/an/spracn2/spracn2.pdf
页码: 2.
2个直接引导示例(不带 IBL) TI C66xx EVM 在上电复位后始终实现中间引导加载程序。 EVM 上的 FPGA 固件将内核重定向到 EEPROM 上刷写的 IBL、然后将其定向到所需的引导模式。 但是、在定制设计中、由于成本和尺寸原因、添加额外的 EEPROM 来实现 IBL 可能不切实际。 C667x PG 2.0芯片解决了 PLL 锁定问题、不再需要在定制电路板上实现 IBL; C665x PG 1.0器件不存在 PLL 锁定问题、因此也不需要在定制板上实现 IBL。 为了证明硬件可以直接从 ROM 引导加载程序引导而不使用 IBL、创建了一些示例、可用于在 EVM 硬件上验证此流程。
下面介绍的两个示例分别是 C6678上的 SPI 引导和 C6657上的 NAND 引导。 每个示例都有一个 readme.txt 或文档、指导用户完成创建这些引导映像的处理。
•C6678 EVM SPI 引导示例
•具有 DDR 初始化功能的 C6657 EVM SPI 引导示例
•C6657 EVM NAND 启动示例
请注意、指向"C6657 EVM SPI 引导示例"的链接似乎已断开。 让我在这里搜索并上传
此致
Shankari G
感谢您的快速响应。 我一直在查看 C:\ti\pdk_c665x_2_0_16\packages/ti\boot\IBL 目录中的代码。 但是、由于该 IBL 支持多个处理器、并且不是 IDE 支持的 CCS 工程。 我很想确定 IBL 的流程以及在哪里进行必要的更改以支持定制硬件。 此外、我不确定 IBL 是否需要更改。
1) 1)是否有说明 IBL 操作的文档?
2) 2)我在找对的地方吗? (即 需要对 IBL 进行更改以支持我的系统的不同 DDR3内存。
3) 3)在哪里可以找到您的响应中提到的示例代码/项目
[引用 userid="489828" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4210573 #4210573"]具有 DDR 初始化功能的 C6657 EVM SPI 引导示例[/quot]谢谢、
Brad
Brad、
我可以在以下方面为您提供帮助 (如果您的要求是随 IBL 一起启动应用程序....)
1.如何构建 IBL。
如何将 IBL 刷写到 EEPROM 中
3.如何将应用二进制文件刷写到 SPI-NOR 中。
--
如前所述,“具有 DDR 初始化功能的 C6657 EVM SPI 引导示例”(没有 IBL)示例项目的链接已断开。
我将很快在链接上更新您,我们可以在其中下载 SPI 引导示例的源代码(不带 IBL)
--
请告诉我您的选择、以便我可以指导您朝这个方向前进。
有 IBL 还是没有 IBL?
此致
Shankari G
我们的定制硬件通过 I2C EEPROM、SPI NOR 闪存和 DDR3存储器复制了 EVM 的配置。
我们当前的目标是让我们的定制硬件从 I2C EEPROM 存储器引导、并将应用从 SPI NOR 闪存加载到 DDR3存储器中。 为此、我的初始目标是使用 IBL。
正如我看到的、修改和加载该过程的步骤是:
我的延伸目标是直接从 SPI NOR 闪存完成应用的负载。 正如您在前面的注释中所述、代码链接显示了如何断开直接从 SPI 闪存链接加载处理器的操作。 我想回顾一下这个代码、看看我将来如何实现这个引导模式。
总之、我的问题是:
提前感谢您的帮助、
Brad
Bras 说:
--------
总之、我的问题是:
--
答案:
让我看一下它、然后返回 EOD。
2.我已将下载示例的链接断开、转交给问题部门。 我们可能必须等到他们作出答复。
此致
Shankari G
Bras、
给你。
2.答案
我已上传 “C6657 EVM SPI boot example with DDR initialization”的源代码: e2e.ti.com/.../2781.C6657_5F00_directROM_5F00_Boot_5F00_example.zip
1.答案:
当我搜索 IBL 源时、我可以找到如下 DDR3实例:
逐个浏览。 仅关注"C665x"
此致
Shankari G
在查看直接 SPI 引导的示例代码时、用户似乎需要使用硬件所需的寄存器配置来配置 emif4Cfg 结构。 我正在翻译一个工作配置(从 GEL 文件)以填写此结构。 但是、我不明白结构中的某些值来自哪里。 此帖子底部是我的当前配置。
问题:
谢谢、
Brad
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_SDRamOutImpedCalCfg |\
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、 //配置选择 slw *
0、 /*配置选择 lsw */
3、 /* pllPrediv */
79、 //(originalvalue) 40、 // pllMult */
2、 //(originalvalue) 2、 // pllPostDiv */
0x63026AB2、 //(originalvalue) 0x62477AB2、 // sdRamConfig *
0、 /* sdRamConfig2、 无关*/
0x00001458、 //(originalvalue) 0x0000144F、 // sdRamRefreshCtl *
0x1113783C、 //(originalvalue) 0x1333780C、 // sdRamTiming1 */
0x30B37FE3、 //(originalvalue) 0x30717FE3、 // sdRamTiming2 *
0x559F8ADF、 //(原始值) 0x559F86AF、 // sdRamTiming3 *
0、 /* lpDdrNvmTiming、 无关*/
0、 //* powerManageCtl, 无关*/
0、 /* iODFTTestLogic、 无关*/
0、 /* performCountCfg、 无关*/
0、 //* performCountMstRegSel,无关*/
0、 /* readIdleCtl、 无关*/
0、 //* sysVbusmIntEnSet, 无关*/
0x70074c1f、 /* sdRamOutImpedCalCfg 、无关*
0、 /* tempAlterCfg、 无关*/
0x0010010F、 /* ddrPhyCtl1 *
0、 //* ddrPhyCtl2、 无关*/
0、 /* priClassSvceMap、 不用考虑*/
0、 /* mstId2ClsSvce1地图, 无关*/
0、 /* mstId2ClsSvce2Map、 无关*/
0、 /* eccCtl、 无关*/
0、 //* eccRange1, 无关*/
0、 /* eccRange2、 无关*/
0、 /*读数 WrtExcelThresh、 无关*/
0x87A0047F、0、0、0、0、 0、0x33、0x3A、
0x2C、0x2C、0x21、0、0xAF00002、 0、0、0、
0、0、0xB7、0xB1、0xA4、 0xA4、0x98、0x200、
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
};
Brad、
这里是节日季。
很抱歉耽误你的时间。
让我看看它并返回。
此致
Shankari G
这些64是 tiboot.h 中 typedef struct bootEmif4Tbl_s 内的 chipConfig " uint32 chipConfig[64];"的值
将 " DDR3配置0寄存器(DDR3_CONFIG_0)的值更改为 DDR3配置60寄存器(DDR3_CONFIG_60)、它们保留在数组 UINT32芯片配置[64]中;
有关更多详细信息、请参阅"Keystone 架构 DDR3存储器控制器用户指南"- https://www.ti.com/lit/ug/sprugv8e/sprugv8e.pdf
第88至117页,第4.31至4.89节
----------------------
typedef 结构体 bootEmif4Tbl_s{
uint32 configSelect_msw;/*位映射定义要设置的寄存器*/
uint32 configSelect_slsw;/*位映射定义要设置的寄存器*/
uint32 configSelect_LSW;/*位映射定义要设置的寄存器*/
uint32 pllPrediv;/*所有0的值将禁用 PLL */
uint32 pllMult;
uint32 pllPostDiv;
uint32 sdRamConfig;//由 configSelect_msw 的位1控制
uint32 sdRamConfig2;//位2 *
uint32 sdRamRefreshCtl;//位3 *
uint32 sdRamTiming1;//位4 *
uint32 sdRamTiming2;//位5 *
uint32 sdRamTiming3;//位6 *
uint32 lpDdrNvmTiming;//位7 */
uint32 powerManageCtl;//位8 *
uint32 iODFTTestLogic;/*位9 *
uint32 performCountCfg;/* bit 10 */
uint32 performCountMstRegSel;//位11 *
uint32 readIdleCtl;//位12 *
uint32 sysVbusmIntEnSet;//位13 *
uint32 sdRamOutImpedCalCfg;/*位14 *
uint32 tempAlterCfg;//位15 *
uint32 ddrPhyCtl1;//位16 *
uint32 ddrPhyCtl2;/*位17 *
uint32 priClassSvceMap;//位18 *
uint32 mstId2ClsSvce1Map;//位19 */
uint32 mstId2ClsSvce2Map;//位20 *
uint32 eccCtl;//位21 *
uint32 eccRange1;//位22 *
uint32 eccRange2;/*位23 */
uint32读数 WrtExcelThresh;//位24 */
uint32芯片配置[64];
} BOOT_EMIF4_TBL_T;
----
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4354816 #4354816"]我的工作 GEL 文件具有 DataX_WRLVL_INT_Ratio 和 DataX_GTLVL_INIT_Ratio 的值。 应将这些值添加到配置结构的何处?[/quot]请上传您使用的 GEL 文件。 因为在 TI 提供的标准 GEL 文件中、如 evmc6657l.gel、我找不到"DataX_WRLVL_INT_Ratio"
----
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4354816 #4354816"] 其中值(3、 // pllPrediv *) 源自?这是源自系统时钟的外设时钟。
请参阅
https://www.ti.com/lit/ds/symlink/tms320c6657.pdf 页码:83 - 85 -章节:6.6.1 主 PLL 控制器特定于器件的信息6.6.1.1内部时钟和最大工作频率
SYSCLK3:用于为 MSMC、超链接、和 DDR EMIF 计时的1/2速率时钟
https://www.ti.com/lit/ug/sprugv2i/sprugv2i.pdf
此致
Shankari G
感谢您的回答。
对 SPRUGV8E 的引用清除了我的几个问题、并提出了更多问题。
谢谢、
Brad
Brad、
转至 KeyStone I DDR3初始化指南- https://www.ti.com/lit/an/sprabl2e/sprabl2e.pdf
并下载 http://www.ti.com/lit/zip/sprabl2。位于第1页。
对于定制板、我们必须使用以下扩展表来计算 DDR3寄存器和进行配置。
--
e2e.ti.com/.../5164.DDR3-PHY-Calc-v11.xlsx
e2e.ti.com/.../5417.DDR3-Register-Calc-v4.xlsx
此处使用的器件的一些示例值是 K4B2G1646C (1333)- DRAM 芯片
对于定制板,您必须使用这些扩展表,这些扩展表将自动为您提供要在 GEL 文件和 软件源文件中使用的 DDR3寄存器值....
DDR3时钟时序 | ||
设计值 | 单位 | |
DDR3输出时钟频率 | 666.667 | MHz |
双倍数据速率时钟 | 1333.333 | MHz |
DDR3输出时钟周期 | 1.500 | ns |
器件和速度等级 | K4B2G1646C (1333) |
此处使用的器件的一些示例值是 K4B2G1646C (1333)- DRAM 芯片
寄存器 | 地址 | 十六进制值 | 十进制值 |
Data0_WRLVL_INIT_Ratio | 0x0262040C | 00000099 | 153. |
Data1_WRLVL_INIT_Ratio | 0x02620410 | 00000099 | 153. |
Data2_WRLVL_INIT_Ratio | 0x02620414 | 00000099 | 153. |
Data3_WRLVL_INIT_Ratio | 0x02620418 | 0000008D | 141. |
Data4_WRLVL_INIT_Ratio | 0x0262041C | 00000075 | 117 |
Data5_WRLVL_INIT_Ratio | 0x02620420 | 00000077 | 119 |
DATA6_WRLVL_INIT_Ratio | 0x02620424 | 00000062 | 98 |
DATA7_WRLVL_INIT_Ratio | 0x02620428 | 0000005E | 94 |
DATA8_WRLVL_INIT_Ratio | 0x0262042C | 00000080 | 128 |
寄存器 | 地址 | 十六进制值 | 十进制值 |
Data0_GTLVL_init_Ratio | 0x0262043C | 000000DF | 223. |
Data1_GTLVL_INIT_Ratio | 0x02620440 | 000000DF | 223. |
Data2_GTLVL_INIT_Ratio | 0x02620444 | 000000C2 | 194. |
Data3_GTLVL_INIT_Ratio | 0x02620448 | 000000CE | 206. |
Data4_GTLVL_INIT_Ratio | 0x0262044C | 000000AE | 174. |
--
由于 C6657、C6678、KeyStone -II 器件(例如 K2E、K2H 等)使用相同的代码库、因此有时可能无法更新源代码中的注释。 另外、请注意、这是一个7年前的代码。
最好坚持阅读文档。
--
如果 C6657 EVM 可用,请尝试以下操作.....
首先,使用 Readme.txt---尝试直接引导示例(仅二进制文件)在 C6657 EVM 上工作。 >位于"C6657_directROM_Boot_Example.zip\c6657\SPIboot_DDR\docs"
如果成功,作为下一步,重建二进制文件,并尝试使用位于 C6657_directROM_Boot_Examples\C6657\SPIboot_DDR_UserGuide.docx 的"SPIboot_With DDR_UserGuide.DOCK"-->加载和检查
如果成功,我们将深入了解更多详细信息...深入了解 芯片配置值
请分享您的想法
--
一般注意事项:您可以在产品文件夹- https://www.ti.com/product/TMS320C6657#tech-docs 下找到所有必要的技术文档
"KeyStone I DDR3 Initialization"指南是82个技术文档中的一个。
--
我在这里专门创建了一个关于 DDR3寄存器计算的常见问题解答页面: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1096375/faq-66ak2e05-how-to-calculate-the-ddr3-interface-registers-for-keystone-ii-devices-and-test-debug-on-keystone-ii-evm
但这适用于 Keystone - II (两个- K2H 和 K2E)器件。 但是对于 KeyStone (一个器件- C6657和 C6678),此过程仍然相同,只是电子表格必须从“KeyStone I DDR3 Initialization guide”下载....
此致
Shankari G
在我解决查找和处理 TI 提供的信息的问题时、感谢您的理解。
我知道该示例是旧的、开发为许多处理器的常见示例、错误确实会进入示例。 由于我对这个主题不是很了解、我希望这些示例足够正确、能够指导我完成初始开发。
我似乎需要重新开始讨论和工作,从简单到复杂。 为此、我已经编写了一个示例 、该示例应该可以在 EVM 和我的定制硬件上运行。 这里的最终目标是能够从 SPI NOR 闪存启动处理器、并让 RBL 将代码加载到 DDR3存储器中并启动程序。 为此、需要介绍几个步骤。
为了完成下面的操作、我详细介绍了创建可验证的良好 SPI NOR 映像的当前步骤以及将该映像加载到定制硬件的过程。
void main(void) { volatile uint32_t *BOOT_COMPLETE = (volatile uint32_t *)0x0262013C; volatile uint32_t *PIN_CONTROL_0 = (volatile uint32_t *)0x02620580; volatile uint32_t *GPIO_C6657_DIR = (volatile uint32_t *)(0x02320000 + 0x10); volatile uint32_t *GPIO_C6657_OUT_DATA = (volatile uint32_t *)(0x02320000 + 0x14); uint32_t loop_cnt = 0; *BOOT_COMPLETE = 0x00000003;// Set BootComplete 0 and 1 *PIN_CONTROL_0 = 0x00200000; *GPIO_C6657_DIR = 0xFFDFFFFF;// GPIO21 Output for (loop_cnt = 0; loop_cnt < 0x0FFFFFFF; loop_cnt++) { uint32_t x; for (x=0; x<0x1fffffe;x++) { *GPIO_C6657_OUT_DATA = 0x00200000;// GPIO21 High } for (x=0; x<0x1fffffe;x++) { *GPIO_C6657_OUT_DATA = 0x0; // GPIO21 Low } } // asm(" IDLE"); }
spiboot.obj -c -a -stack 0x400 MEMORY { DDR_CFG : origin = 0x8ffd20, length = 0x180 L2MAGIC : origin = 0x8ffffc, length = 0x4 DDR : origin = 0x80000000, length = 0x2000 L2_DATA : origin = 0x800000, length = 0xff000 } SECTIONS { .emif4Cfg > DDR_CFG .stack > L2_DATA .msmc > L2_DATA .data > L2_DATA .far > L2_DATA .text > L2_DATA .const > L2_DATA .cinit > L2_DATA .lmagic > L2MAGIC }
注: 我认为代码正在加载到内部 L2 RAM 中、因此此时 DDR 存储器的设置不会出现任何问题。
在等待您的回答时、我将 读取/重新读取您引导我的 DDR3资源、并在设备可以从 SPI 引导后提出更多问题。
提前感谢您的帮助。
Brad
Brad、
好的。 让我检查您的所有步骤。
此致
Shankari G
Brad、
您的所有步骤似乎都是正确的。
你总结的很好… 太好了。
我正在通过 C6657 EVM 实验和验证您的步骤, 我手头有该 EVM。
将在一天或两天内告知我的结果。
此致
Shankari G
Brad、
1.我已验证 C6657 EVM 上的直接引导示例(使用 NOR 编写器的 SPI-NOR 与 DDR)、并可以验证直接引导是否成功。
2、让我在明天通过屏幕截图和视频发布这些步骤。
(我想、您可能已经离开了这个步骤-在 CCS 中打开 app.dat、并将 0x1F 偏移处的值编辑为00。 它将为0x51。) 除此之外、您的所有步骤都应该正确
您使用的 DIP 开关设置正确:
SW3{引脚0 - PIN8)= 10110000 (0开、1关) SW5 (引脚0 - PIN8)= 00100000。 (与 C6657 EVM 上用于 ROM SPI 引导的 I 相同)
此致
Shankari G
正如我在上一篇文章中尝试解释的那样、我能够创建两个应用、即 EVM、它们可以加载到 SPI 或闪存中、并且能够正常运行。 通过监控 TXD 线(配置为 GPIO 输出)在低电压和高电压之间的切换来验证这一点。 第一个加载到外部 DDR3 存储器中、第二个加载到内部 L2_DATA 存储器中。
注意: 这些应用均已通过 EVM 硬件验证为可正常运行!! (即切换的 GPIO 线路)
因此、通过这次测试、应用二进制文件的创建被证明是正确的构建!!!
因为我的定制硬件与 EVM 非常非常相似
除了调试器能够连接、加载和 调试代码外、我唯一可以想象的问题是与引导模式引脚不同的问题。
为此,我要明确重申我在上一篇文章中提出的问题。
我 一直在努力与您合作、并尝试解决此问题超过三周!!!
由于该处理器不会从闪存引导、因此它现在正在影响我们的产品开发。 需要快速解决此问题!!!
注意:我们的定制硬件还包含 I2C EEPROM (如 EVM)。 如果使用此命令启动处理器、则可以更快地实现目标、我愿意切换到使用 C6657从 I2C 引导。 无论我需要什么、都可以让该处理器尽快从非易失性存储器引导。
提前感谢您的帮助。
Bard
Brad、
现在、您对 IBL 有什么疑问?
到目前为止、我们正在尝试在没有 IBL 的情况下直接执行引导? 。 直接 SPI-boot 示例具有如下引导流程:- RBL -->在 SPI-NOR 上的应用-->不使用 IBL!。
--
1. RBL 是 ROM 引导加载程序--这不能修改。
IBL 是中间引导加载程序--这也称为次级引导加载程序。
3. app.dat 是被刷写到非易失性存储器中并被执行的二进制文件。
请注意:- IBL 从不调用 RBL。
--
引导方法只有两种。
RBL + IBL + app.bin
2. RBL + app.dat ->直接引导示例。
--
对于第一种方法、
1. RBL + IBL + app.bin -这是唯一可靠的文档: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1057566/faq-tms320c6657-how-to-flash-the-ibl-intermediate-boot-loader-into-eeprom-and-how-to-flash-the-application-binary-into-nor-how-to-boot-the-ibl-application-binary
2. RBL + app.dat -->直接启动示例-->我尚未将其作为常见问题发布。
让我知道您要以哪种方式/方法继续?
--
以下是有关引导加载程序和引导模式的文档。
https://www.ti.com/lit/ug/sprugy5c/sprugy5c.pdf - KeyStone 架构文献编号:SPRUGY5C 2013年7月 DSP 引导加载程序用户指南
3. https://www.ti.com/lit/an/spracn2/spracn2.pdf -引导加载程序常见问题解答。
--
此致
Shankari G
Brad、
现在、您对 IBL 有什么疑问?
到目前为止、我们正在尝试在没有 IBL 的情况下直接执行引导? 。 直接 SPI-boot 示例具有如下引导流程:- RBL -->在 SPI-NOR 上的应用-->不使用 IBL!。
--
1. RBL 是 ROM 引导加载程序--这不能修改。
IBL 是中间引导加载程序--这也称为次级引导加载程序。
3. app.dat 是被刷写到非易失性存储器中并被执行的二进制文件。
请注意:- IBL 从不调用 RBL。
RBL 调用 IBL、不能相反。
--
引导方法只有两种。
RBL + IBL + app.bin
2. RBL + app.dat ->直接引导示例。
--
对于第一种方法、
1. RBL + IBL + app.bin -这是唯一可靠的文档: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1057566/faq-tms320c6657-how-to-flash-the-ibl-intermediate-boot-loader-into-eeprom-and-how-to-flash-the-application-binary-into-nor-how-to-boot-the-ibl-application-binary
2. RBL + app.dat -->直接启动示例-->我尚未将其作为常见问题发布。
让我知道您要以哪种方式/方法继续?
--
以下是有关引导加载程序和引导模式的文档。
https://www.ti.com/lit/ug/sprugy5c/sprugy5c.pdf - KeyStone 架构文献编号:SPRUGY5C 2013年7月 DSP 引导加载程序用户指南
3. https://www.ti.com/lit/an/spracn2/spracn2.pdf -引导加载程序常见问题解答。
--
此致
Shankari G
好的、我的 IBL 的内部操作信息一定是错误的。
正确的方法是、我们的最终目标(以及我迄今为止一直在努力的内容)是直接从 SPI NOR 闪存引导 C6657、而不使用 IBL。 我提出了这样一个事实、即我们也可以尝试使用 IBL、因为我似乎没有使用直接引导方法。
RBL+IBL+app.bin
我之前已在 EVM 上阅读并复制了 IBL 示例。 即、我已重新编译 IBL 代码并将其加载到 EVM 上、并且能够获得该版本的 IBL 来引导 EVM。 但是、这就是链接显示的所有内容。 在哪里以及如何修改 IBL 以与定制硬件配合使用时、不会出现问题。 (这是我的需求)
RBL+app.dat
我已经阅读 了2781.C6657_directROM_Boot_example.zip 文档 、并已将其用于创建已成功加载到 EVM 上的应用。
但是、这两个示例都没有讨论在引导 DSP 时将 BOOTMODE[12..0]引脚设置为什么。
EVM 讨论
从我所读过的 EVM 中、FPGA 将 C6657的引导模式引脚配置为某种("我不知道引脚设置为什么")、从而使 C6657从 I2C 引导。 IBL 之前已加载到 I2C EEPROM 中。 此时 C6657开始执行 IBL。 IBL 配置 DDR 存储器、然后向 FPGA 查询 EVM SW3和 SW5设置的用户配置。 然后、IBL 根据这些配置为该引导模式配置、然后加载处理器。
我想要/需要知道的内容
要继续调试自定义硬件、我需要确认是否已为 SPI 引导正确配置了引导模式引脚。 这不是 directROM_Boot_example 中的直接地址。 显示的设置适用于 EVM 引导模式开关设置。
我想知道的是:
请在下一次答复中回答这两个问题。
提前感谢您、
Brad
Brad、
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4365775 #4365775"]要继续调试自定义硬件、我需要确认是否已为 SPI 引导正确配置了引导模式引脚。 这不是 directROM_Boot_example 中的直接地址。 显示的设置适用于 EVM 引导模式开关设置。
我想知道的是:
===========================
问题[1]的答案:
===========================
DEVSTAT 的值会显示值:,表示为 SPI-boot。
请在内存浏览器窗口中查看 DEVSTAT 寄存器值的值:如果可以将其与数据表映射、我可以解码为 SPI-boot。
在您的定制电路板设置中、请检查它显示的值...
Devstat 值- 0x40D = 0100 0000 1101 =解码、数据表 https://www.ti.com/lit/ds/symlink/tms320c6657.pdf 中的页码为205
===
1101 -
===
0th 位 -->显示系统是在大端模式还是小端模式下运行的状态。 •
值0 =系统在大端模式下运行
值1 =系统在小端模式下运行
因此、.dat 是 LE 格式-小端字节序格式-我们构建为"spirom_le_swap.dat"
----
Devstat - 位[1:13]= bootmode[12:0] --> 110 -- SPIBOOT (此处,devstat 中的引导模式值与引导模式和 SW3开关5432匹配,为0110)
Devstat [1:3]=引导模式[0:2]
这里的值是110。
Devstat 1:3 =引导模式0:2
===========================
问题[2]的答案:
===========================
https://www.einfochips.com/wp-content/uploads/2016/04/C6657-Lite-EVM_TechnicalReferenceManual.pdf
2.2 EVM 引导模式和引导配置开关设置 C6657 Lite EVM 具有三个配置开关 SW3、SW5和 SW9、这些开关在释放 RESET 时锁存18个值。 当电路板通电、用户按下 FULL_RESET 按钮或 MMC 请求 POR 复位后、会发生这种情况。 SW3、SW5和 SW9决定了通用 DSP 配置、小端或大端模式和引导器件选择、DSP 引导器件配置、CorePac PLL 设置以及 PCIe 模式选择和启用。 有关默认开关设置和每个开关的详细信息、请参阅本文档的第3.3节。 有关 DSP 支持的引导模式的更多信息、请参阅 TMS320C6657数据表和 C66x 引导加载程序用户指南。
由于 EVM 是 Advantech 的制造、有关其他文档、请参阅此网站 :https://www.einfochips.com/partnerships-and-alliances/device-partnerships/texas-instruments/tms320c6657-evm/ 的"资源-列"下
--
我理解您的观点。
让我们逐个、多地逐个选择。
将尝试很少的技术来分析或调试直接引导、然后让我们进入 RBL+IBL +app。
--
让我们检查以下内容并逐一缩小... (在定制硬件方面,耐心将对像我们这样的人起到关键作用。)
直接引导示例的大小似乎为25KB。 在 NOR 存储器上刷写到定制板中的.dat 文件的大小是多少。
2.在存储器字段的长度部分的"加载存储器选项"期间设置的长度值是多少?
3.让我将这些步骤发布到我验证为直接引导示例的内容上。
然后、请尝试在 EVM 和定制硬件上重复此操作、并观察行为。 然后让我们尝试从那里获取它。。
--
此致
Shankari G
从您的问题列表开始...
/* Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include <stdio.h> #include <string.h> #include <stdint.h> #include "tiboot.h" #include "platform.h" #pragma DATA_SECTION (emif4Cfg, ".emif4Cfg") #ifdef BHS_CUSTOM_BOARD 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 */ 2, //(originalvalue)3, /* pllPrediv */ 79, //(originalvalue)40, /* pllMult */ 2, //(originalvalue)2, /* pllPostDiv */ 0x63026AB2, //(originalvalue)0x62477AB2, /* **sdRamConfig */ 0, /* sdRamConfig2, dont care*/ 0x00001458, //(originalvalue)0x0000144F, /* **sdRamRefreshCtl */ 0x1113783C, //(originalvalue)0x1333780C, /* **sdRamTiming1 */ 0x30B37FE3, //(originalvalue)0x30717FE3, /* **sdRamTiming2 */ 0x559F8ADF, //(originalvalue)0x559F86AF, /* **sdRamTiming3 */ 0, /* lpDdrNvmTiming, dont care */ 0, /* powerManageCtl, dont care */ 0, /* iODFTTestLogic, dont care */ 0, /* performCountCfg, dont care */ 0, /* performCountMstRegSel, dont care */ 0, /* readIdleCtl, dont care */ 0, /* sysVbusmIntEnSet, dont care */ 0x70074c1f, /* sdRamOutImpdedCalCfg, dont care */ 0, /* tempAlterCfg, dont care */ 0x0010010F, /* **ddrPhyCtl1 */ 0, /* ddrPhyCtl2, dont care */ 0, /* priClassSvceMap, dont care */ 0, /* mstId2ClsSvce1Map, dont care */ 0, /* mstId2ClsSvce2Map, dont care */ 0, /* eccCtl, dont care */ 0, /* eccRange1, dont care */ 0, /* eccRange2, dont care */ 0, /* rdWrtExcThresh, dont care */ 0x87A0047F, /* **DDR3_CONFIG_0 [CMD_PHY_CTRL_SLAVE_RATIO and CMD_PHY_DLL_LOCK_DIFF] */ 0, /* DDR3_CONFIG_1 [PHY_DQ_OFFSET]*/ 0x5A, /* **DDR3_CONFIG_2 [DATA0_PHY_WRLVL_INIT_RATIO]*/ 0x5B, /* **DDR3_CONFIG_3 [DATA1_PHY_WRLVL_INIT_RATIO]*/ 0x44, /* **DDR3_CONFIG_4 [DATA2_PHY_WRLVL_INIT_RATIO]*/ 0x44, /* **DDR3_CONFIG_5 [DATA3_PHY_WRLVL_INIT_RATIO]*/ 0, /* **DDR3_CONFIG_6 [NA for C665x]*/ 0, /* **DDR3_CONFIG_7 [NA for C665x]*/ 0, /* **DDR3_CONFIG_8 [NA for C665x]*/ 0, /* **DDR3_CONFIG_9 [NA for C665x]*/ 0, /* **DDR3_CONFIG_10 [DATA8_PHY_WRLVL_INIT_RATIO]*/ 0, /* DDR3_CONFIG_11 [NA]*/ 0x0800000, /* **DDR3_CONFIG_12 [CMD_PHY_INVERT_CLKOUT & USE_RANK0_DELAYS]*/ 0, /* DDR3_CONFIG_13 [NA]*/ 0x81, /* **DDR3_CONFIG_14 [DATA0_PHY_GATELVL_INIT_RATIO]*/ 0x80, /* **DDR3_CONFIG_15 [DATA1_PHY_GATELVL_INIT_RATIO]*/ 0x79, /* **DDR3_CONFIG_16 [DATA2_PHY_GATELVL_INIT_RATIO]*/ 0x79, /* **DDR3_CONFIG_17 [DATA3_PHY_GATELVL_INIT_RATIO]*/ 0, /* **DDR3_CONFIG_18 [NA for C665x]*/ 0, /* **DDR3_CONFIG_19 [NA for C665x]*/ 0, /* **DDR3_CONFIG_20 [NA for C665x]*/ 0, /* **DDR3_CONFIG_21 [NA for C665x]*/ 0, /* **DDR3_CONFIG_22 [DATA8_PHY_GATELVL_INIT_RATIO]*/ 0x08d13434, /* **DDR3_CONFIG_23 [WR_DATA_SLAVE_RATIO, WR_DQS_SLAVE_RATIO, RD_DQS_SLAVE_RATIO]*/ 0, /* **DDR3_CONFIG_24 [NA for C665x]*/ 0, /* DDR3_CONFIG_25 [DATA0_FIFO_WE_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_26 [DATA0_FIFO_WE_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_27 [DATA0_FIFO_WE_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_28 [DATA0_FIFO_WE_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_29 [NA for C665x]*/ 0, /* DDR3_CONFIG_30 [NA for C665x]*/ 0, /* DDR3_CONFIG_31 [NA for C665x]*/ 0, /* DDR3_CONFIG_32 [NA for C665x]*/ 0, /* DDR3_CONFIG_33 [DATA_ECC_FIFO_WE_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_34 [DATA0_WR_DATA_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_35 [DATA0_WR_DATA_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_36 [DATA0_WR_DATA_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_37 [DATA0_WR_DATA_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_38 [NA for C665x]*/ 0, /* DDR3_CONFIG_39 [NA for C665x]*/ 0, /* DDR3_CONFIG_40 [NA for C665x]*/ 0, /* DDR3_CONFIG_41 [NA for C665x]*/ 0, /* DDR3_CONFIG_42 [DATA_ECC_WR_DATA_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_43 [DATA0_WR_DQS_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_44 [DATA1_WR_DQS_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_45 [DATA2_WR_DQS_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_46 [DATA3_WR_DQS_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_47 [NA for C665x]*/ 0, /* DDR3_CONFIG_48 [NA for C665x]*/ 0, /* DDR3_CONFIG_49 [NA for C665x]*/ 0, /* DDR3_CONFIG_50 [NA for C665x]*/ 0, /* DDR3_CONFIG_51 [DATA_ECC_WR_DQS_SLAVE_RATIO]*/ 0, /* **DDR3_CONFIG_52 [DATA0_RD_DQS_SLAVE_RATIO]*/ 0, /* **DDR3_CONFIG_53 [DATA1_RD_DQS_SLAVE_RATIO]*/ 0, /* **DDR3_CONFIG_54 [DATA2_RD_DQS_SLAVE_RATIO]*/ 0, /* **DDR3_CONFIG_55 [DATA3_RD_DQS_SLAVE_RATIO]*/ 0, /* **DDR3_CONFIG_56 [NA for C665x]*/ 0, /* **DDR3_CONFIG_57 [NA for C665x]*/ 0, /* **DDR3_CONFIG_58 [NA for C665x]*/ 0, /* **DDR3_CONFIG_59 [NA for C665x]*/ 0, /* **DDR3_CONFIG_60 [DATA_ECC_RD_DQS_SLAVE_RATIO]*/ 0, /* DDR3_CONFIG_61 [NA]*/ 0, /* DDR3_CONFIG_62 [NA]*/ 0 /* DDR3_CONFIG_63 [NA]*/ }; #else 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 */ 3, /* pllPrediv */ 40, /* pllMult */ 2, /* pllPostDiv */ 0x62477AB2, /* sdRamConfig */ 0, /* sdRamConfig2, dont care*/ 0x0000144F, /* sdRamRefreshCtl */ 0x1333780C, /* sdRamTiming1 */ 0x30717FE3, /* sdRamTiming2 */ 0x559F86AF, /* sdRamTiming3 */ 0, /* lpDdrNvmTiming, dont care */ 0, /* powerManageCtl, dont care */ 0, /* iODFTTestLogic, dont care */ 0, /* performCountCfg, dont care */ 0, /* performCountMstRegSel, dont care */ 0, /* readIdleCtl, dont care */ 0, /* sysVbusmIntEnSet, dont care */ 0x70074c1f, /* sdRamOutImpdedCalCfg, dont care */ 0, /* tempAlterCfg, dont care */ 0x0010010F, /* ddrPhyCtl1 */ 0, /* ddrPhyCtl2, dont care */ 0, /* priClassSvceMap, dont care */ 0, /* mstId2ClsSvce1Map, dont care */ 0, /* mstId2ClsSvce2Map, dont care */ 0, /* eccCtl, dont care */ 0, /* eccRange1, dont care */ 0, /* eccRange2, dont care */ 0, /* rdWrtExcThresh, dont care */ 0x87A0047F, 0, 0, 0, 0, 0, 0x33, 0x3A, 0x2C, 0x2C, 0x21, 0, 0xAF00002, 0, 0, 0, 0, 0, 0xB7, 0xB1, 0xA4, 0xA4, 0x98, 0x200, 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 }; #endif void main(void) { volatile uint32_t *BOOT_COMPLETE = (volatile uint32_t *)0x0262013C; volatile uint32_t *PIN_CONTROL_0 = (volatile uint32_t *)0x02620580; volatile uint32_t *GPIO_C6657_DIR = (volatile uint32_t *)(0x02320000 + 0x10); volatile uint32_t *GPIO_C6657_OUT_DATA = (volatile uint32_t *)(0x02320000 + 0x14); uint32_t loop_cnt = 0; *BOOT_COMPLETE = 0x00000003;// Set BootComplete 0 and 1 *PIN_CONTROL_0 = 0x00200000; *GPIO_C6657_DIR = 0xFFDFFFFF;// GPIO21 Output for (loop_cnt = 0; loop_cnt < 0x0FFFFFFF; loop_cnt++) { uint32_t x; for (x=0; x<0x1fffffe;x++) { *GPIO_C6657_OUT_DATA = 0x00200000;// GPIO21 High } for (x=0; x<0x1fffffe;x++) { *GPIO_C6657_OUT_DATA = 0x0; // GPIO21 Low } } // asm(" IDLE"); }
此文件已成功加载到 EVM 并引导。 该文件基本上只是以 DMM 可监控的速率切换 GPIO21/UARTTXD 引脚。 这是我要加载到我们的定制硬件上的文件。
在存储器字段的长度部分中、在"加载存储器选项"期间设置的长度值是多少?
在本对话的前面部分、我完成了创建此示例所使用的步骤、并且在 EVM 和自定义硬件上加载了示例、包括 DEVSTAT 寄存器的值。
请参阅我关于此帖子的讨论。
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4360409 #4360409"]在自定义硬件上运行内部 RAM 示例[/quot]希望这能解答您的问题。
Brad
--
40D 在 DEVSTAT 中匹配。
让我们重点介绍 DEVSTAT - 0x00018 -
--
14至15位-- 10b =根复合体模式下的 PCIe
第16位---- 1 = PCIe 模块被启用
--
不应怀疑值00018影响 SPI 引导模式。
但是、是否可以禁用 PCIe 模块? 暂时? 并检查它是否启动?
--
接下来,让我给出一些要插入到 SPI-Direct 引导代码中的代码行的示例...
此致
Shankari G
我已经修改了定制板、使 PCIe 配置线路全部连接到低电平。 我尝试从 SPI 引导处理器、但仍然没有成功。 然后、我连接了调试器并验证了 DEVSTAT 寄存 器(DEVSTAT = 0x0000040D 引导模式= 0x00000006)。
然后、我继续验证应用程序是否正确加载将起作用。 我通过以下方式完成了此操作:连接调试器后、我加载了 spidboot.out 文件并运行程序。 在我的硬件上、启动完成行被激活、 GPIO21/UARTTXD 切换。 (如预期)。
您还想让我尝试什么?
Brad、
让我们在 C6657 EVM 以及您的定制硬件上执行一次简单/类似的测试。
===================================================================================================
情况(1): 在 C6657 EVM 上使用"无引导模式"- CCS + XDS + GEL (观看下面的视频)
===================================================================================================
引导模式:"无引导"
1.下载下面给出的 spidboot.c。 (不修改任何代码)
/* Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include <stdio.h> #include <string.h> #include <stdint.h> #include "tiboot.h" #include "platform.h" #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 */ 3, /* pllPrediv */ 40, /* pllMult */ 2, /* pllPostDiv */ 0x62477AB2, /* sdRamConfig */ 0, /* sdRamConfig2, dont care*/ 0x0000144F, /* sdRamRefreshCtl */ 0x1333780C, /* sdRamTiming1 */ 0x30717FE3, /* sdRamTiming2 */ 0x559F86AF, /* sdRamTiming3 */ 0, /* lpDdrNvmTiming, dont care */ 0, /* powerManageCtl, dont care */ 0, /* iODFTTestLogic, dont care */ 0, /* performCountCfg, dont care */ 0, /* performCountMstRegSel, dont care */ 0, /* readIdleCtl, dont care */ 0, /* sysVbusmIntEnSet, dont care */ 0x70074c1f, /* sdRamOutImpdedCalCfg, dont care */ 0, /* tempAlterCfg, dont care */ 0x0010010F, /* ddrPhyCtl1 */ 0, /* ddrPhyCtl2, dont care */ 0, /* priClassSvceMap, dont care */ 0, /* mstId2ClsSvce1Map, dont care */ 0, /* mstId2ClsSvce2Map, dont care */ 0, /* eccCtl, dont care */ 0, /* eccRange1, dont care */ 0, /* eccRange2, dont care */ 0, /* rdWrtExcThresh, dont care */ 0x87A0047F, 0, 0, 0, 0, 0, 0x33, 0x3A, 0x2C, 0x2C, 0x21, 0, 0xAF00002, 0, 0, 0, 0, 0, 0xB7, 0xB1, 0xA4, 0xA4, 0x98, 0x200, 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 }; #define GPIO_BASE (0x2320000) #define GPIO_DIR_OFFSET (0x10) #define GPIO_SETDATA_OFFSET (0x18) #define GPIO_CLEARDATA_OFFSET (0x1C) void main(void) { volatile uint32_t *reg_val; reg_val = (volatile uint32_t *)(GPIO_BASE + GPIO_DIR_OFFSET); // configure as output pin -- write 0 to the Direction register *reg_val &= ~ (1 << 8); reg_val = (volatile uint32_t *) (GPIO_BASE + GPIO_SETDATA_OFFSET); // Write value 1 in the set data register, so that Out data register will be 1 *reg_val |= (1 << 8); while (1) { asm(" IDLE"); } }
2.下载下面提供的 spidboot.cmd。 (不修改任何代码)
spiboot.obj -c -a -stack 0x400 MEMORY { DDR_CFG : origin = 0x8ffd20, length = 0x180 L2MAGIC : origin = 0x8ffffc, length = 0x4 DDR : origin = 0x80000000, length = 0x2000 } SECTIONS { .emif4Cfg > DDR_CFG .stack > DDR .msmc > DDR .data > DDR .far > DDR .text > DDR .const > DDR .cinit > DDR .lmagic > L2MAGIC }
3.使用"gmake"构建 spidboot.c 并获取 spidboot.out。
3.1 -->请注意 spidboot.out 文件的大小为60KB ( 稍后,此值可能有助于比较自定义硬件的实际应用程序二进制文件的大小,同时从 SPI-NOR 加载和引导)
4.将 C6657 EVM 与 CCS +XDS 连接并启动目标配置文件。 执行"connect target"并让其运行 GEL 文件并在控制台上生成输出。 (向我共享 GEL 文件输出消息)
5.使用 spiboot.out 加载内核0并运行。
观察输出:
6.转至 CCS 中的寄存器视图选项并点击"DDR3"。 将寄存器值导出到文档中。 (分享给我)。
请注意 DDR3已配置。。。[请在运行 GEL 文件、加载 spidboot.out 之前以及加载并运行 spidboot.out 之后比较 DDR3值)
7.进入内存浏览器窗口,将 GPIO 寄存器地址作为“0x2320000”输入。 (如下面所示,将其分享给我)。
请注意 、该值将在 GPIO_bank 寄存器_out_data 中更改为"00000100"。
视频:
e2e.ti.com/.../C6657_5F00_spiboot_5F00_no_5F00_bootmode.mp4
====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
情况(2): 在使用 NOR 写入器刷写到 NOR 存储器后,使用“SPI 引导模式”的 C6657 EVM 上。 (开始测试之前,请查看下面的视频)
====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
1.相同的 spidboot.c (不修改任何代码)
2.相同的 spidboot.cmd (不修改任何代码)
3.使用"gmake"构建 spidboot.c 并获取 spidboot.out。
4.将.out 转换为 app.dat 并将 app.dat 的大小记录为"12KB"
5.在 CCS 中打开 app.dat 并将偏移值51修改为00 -如 SPIboot_with_DDR_UserGuide.docx 中给出的那样
5.使电路板处于“无引导模式”。 连接到 CCS、启动 cXML、加载 NOR 写入器.out。 使用存储器加载选项、找到 app.dat、选择二进制文件作为"TI 数据"。 单击"下一步"选项、选择地址"0x8000000000 "、长度为"0x4000"或0xC000"
6.记下如下所示的控制台消息。
7。现在、将引导模式更改为 SW3{引脚0 - PIN8)= 10110000 (0 - ON、1 - OFF) SW5 (引脚0 - PIN8)= 00100000。
8.给电路板加电
9.连接到 XDS。 启动 cXML。 连接目标。 它将在控制台中将引导模式值显示为"6"。
9.转到寄存器视图-将 DDR3的值与 spiboot.c 中的值进行比较
7.进入内存浏览器窗口,将 GPIO 寄存器地址作为“0x2320000”输入。 (如下面所示,将其分享给我)。
请注意 、该值将在 GPIO_bank 寄存器_out_data 中更改为"00000100"。
此屏幕截图值应与上述案例(1)步骤7屏幕截图匹配。
这将证明 SPIBOOT 在 spidboot.c 的 main()内工作并执行代码
e2e.ti.com/.../direct_5F00_boot_5F00_flashing_5F00_booting.mp4
--
================================================================================
案例3:在您的自定义硬件上使用"不启动"模式
================================================================================
不修改 spidboot.c 和 spidboot.cmd
2.按照自定义硬件情况(1)中给出的步骤重复相同的测试
~~~~~~~~~~~~~~μ A
要做的事情列表:-比较案例(1)与案例(3)
~~~~~~~~~~~~~~~μ A
1.比较 C6657 EVM 的 GEL 文件和定制硬件的 GEL。 分析差异。
2.比较 CCS 寄存器窗口中的 DDR3寄存器值- C6657 EVM 与定制硬件-分析差异。
3.比较 GPIO 寄存器值的屏幕截图- C6657 EVM 与定制硬件-分析差异。
如果输出相同、则 DDR3、GPIO 在定制硬件中正常工作。
请告诉我您在案例(3)以及中的观察结果
-在 CCS 中分享 GPIO 输出屏幕截图
-从 CCS 导出 DDR3寄存器值 并共享。
-共享定制硬件的 GEL 源代码
-共享 GEL 输出
========================================================================================
案例4:在使用 NOR 写入器刷写到 NOR 存储器后、使用"SPI-boot mode"在定制硬件上。
================================================================================
不修改 spidboot.c 和 spidboot.cmd
2.按照自定义硬件情况(2)中给出的步骤重复相同的测试
~~~~~~~~~~~~~~μ A
要执行的操作列表:
~~~~~~~~~~~~~~~μ A
1. 将 GEL 控制台输出消息与步骤9中发布的屏幕截图进行比较-案例(2)
2.比较 CCS 寄存器窗口中的 DDR3寄存器值-与您的情况(3) DDR3值-分析差异。
3.将 CCS 寄存器窗口中的 DDR3寄存器值与 spiboot.c 中的 DDR3 emif4Cfg 值进行比较
4.将 GPIO 寄存器值的屏幕截图 与您的案例(3)进行比较(此屏幕截图应为您的所有案例(1、2、3和4)提供相同的输出
请告诉我您在案例(4)中的观察结果
-在 CCS 中分享 GPIO 输出屏幕截图
-从 CCS 导出 DDR3寄存器值 并共享。
- 与引导模式值共享 GEL 输出
================================================================================
此致
Shankari G
回答您的问题。
注意:在以下响应中、我尝试导出 DDR3寄存器。 但是 、当尝试这样做时、控制台窗口中报告了错误、 "无法保存寄存器 DDR3_"、并且未将任何数据保存到.txt 文件中。
案例1:使用"NoBoot"的 EVM
案例2:使用"SPI-Boot"的 EVM
案例3:自定义硬件"无法引导"
案例4:定制硬件"SPI-Boot"
测试结果:
看来、我在实现直接为 SPI 或存储器启动处理器的目标方面没有取得任何进展。
关于 此站点的其他研究的问题。
我一直在搜索您的站点以获得更多信息、并在 https://e2e.ti.com/support/processors-group/processors/f/processors-forum/832349/tms320c6657-bootloader-for-c6657上发布这篇文章 似乎表明 TI 不建议使用 ROM 引导加载 程序来配置 DDR3并将程序直接加载到 DDR3存储器中。 这是真的吗?
谢谢、
Brad
Brad、
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4369350 #4369350">我在您的站点上搜索了其他信息、并在这篇文章 https://e2e.ti.com/support/processors-group/processors/f/processors-forum/832349/tms320c6657-bootloader-for-c6657 上看到、TI 似乎表示不建议使用 ROM 引导加载程序 来配置 DDR3并将程序直接加载到 DDR3存储器中。 这是真的吗? [/报价]是的、在 RBL 中、DDR3配置受到限制。
这就是为什么在 spiboot.c 中、我们要完成 DDR3的配置。 直接引导示例不是 RBL。
RBL 将使用 DDR 配置调用直接引导 SPI 示例。 我们的方法是正确的。
案例2:
===
NOR 编写器消息的控制台似乎被重新检查? 当我们将长度馈入0x4000时、它会显示3780?
它应该以某种方式显示 3780字节的数据(检查我的视频-案例2)
案例4:
====
NOR 编写器消息的控制台似乎被重新检查? 当我们将长度馈入0x4000时、它会显示3780?
它应该以某种方式显示 3780字节的数据(检查我的视频-案例2)
--
请告诉我、您观察到了哪些差异、
================================================================
1.在 EVM 的 GEL 源代码与定制硬件中。 逐一列出;
2. 在 EVM 的 GEL 输出中与定制硬件的关系。 逐一列出;
3. EVM 的 DDR3寄存器值与定制硬件的比较。 逐一列出;
让我们了解每种差异的重要性。
此致
Shankari G
案例2:
===
NOR 编写器消息的控制台似乎被重新检查? 当我们将长度馈入0x4000时、它会显示3780?
它应该以某种方式显示 3780字节的数据(检查我的视频-案例2)
案例4:
====
NOR 编写器消息的控制台似乎被重新检查? 当我们将长度馈入0x4000时、它会显示3780?
它应该以某种方式显示 3780字节的数据(检查我的视频-案例2)
[/报价]我使用 的是 C:\ti\pdk_c665x_2_0_16\packages/ti\boot\writer\nore\evmc6657l\bin 目录中的 NOR 编写器实用程序版本01.00.04、而您使用 的是 C:\ti\2781.C6657_directrom_Boot_example\SP6600.03目录中的 NOR 编写器实用程序版本01.00.00.03。 我已经尝试过两个版本的 NOR 编写器、它们都产生了完全相同的结果。
[引用 userid="489828" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4369845 #4369845]1. 与定制硬件相比、您的 EVM 的 GEL 源代码。 逐条列出;[/报价]我已经为 EVM 和自定义硬件使用了相同的 GEL 文件 Saratoga_1313.gel (文件包含在上面的聊天中)、以建立连接并正确配置 DDR3存储器。 因此、这两个硬件之间没有差异。
[引用 userid="489828" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4369845 #4369845"]2. 与定制硬件的比较。 逐条列出;[/报价]运行相同 GEL 文件时的唯一区别 是引导引脚。 定制硬件的 DEVSTAT = 0x00000401 且 EVM 的 DEVSTAT = 0x00000001。 由于我们使用上拉和下拉来配置引导引脚、并且 EVM 使用 FPGA 的可编程输出、因此存在这种差异。
使用 Saratoga_1313.gel 文件连接到定制硬件和 EVM 后。 我转储了 DDR3寄存器并进行了比较。 唯一的区别是 perf_cnt_Tim 与(定制板值 0xA08CEAC7和 EVM 的0x04E77E50)之间的区别。
定制硬件 | EVM | |||
DDR3 EMIF 存储器控制器配置(DDR3) | ||||
EMIF_mod_id_rev | 0x40466400 | 0x40466400 | 匹配 | |
状态 | 0x40000004 | 0x40000004 | 匹配 | |
SDRAM_CONFIG | 0x63026AB2 | 0x63026AB2 | 匹配 | |
SDRAM_CONFIG_2 | 0x00000000 | 0x00000000 | 匹配 | |
SDRAM_ref_ctrl | 0x00001458 | 0x00001458 | 匹配 | |
SDRAM_ref_Ctrl_Shdw | 0x000061A8 | 0x000061A8 | 匹配 | |
SDRAM_TIM_1 | 0x1113783C | 0x1113783C | 匹配 | |
SDRAM_TIM_1_Shdw | 0x1557B9AC | 0x1557B9AC | 匹配 | |
SDRAM_TIM_2 | 0x30B37FE3 | 0x30B37FE3 | 匹配 | |
SDRAM_TIM_2_Shdw | 0x6E5F7FED | 0x6E5F7FED | 匹配 | |
SDRAM_TIM_3. | 0x559F8ADF | 0x559F8ADF | 匹配 | |
SDRAM_TIM_3_Shdw | 0x007FE57F | 0x007FE57F | 匹配 | |
LPDDR2_NVM_TIM | 0x00000000 | 0x00000000 | 匹配 | |
LPDDR2_NVM_TIM_Shdw | 0x00000000 | 0x00000000 | 匹配 | |
PWR_mgmt_ctrl | 0x00000000 | 0x00000000 | 匹配 | |
PWR_mgmt_Ctrl_Shdw | 0x00000000 | 0x00000000 | 匹配 | |
LPDDR2_MODE_REG_DATA | 0x00000000 | 0x00000000 | 匹配 | |
LPDDR2_MODE_REG_cfg | 0x00000000 | 0x00000000 | 匹配 | |
vbusm_config | 0x00FFFFFF | 0x00FFFFFF | 匹配 | |
vbusm_cfg_val_1 | 0xC0071410 | 0xC0071410 | 匹配 | |
vbusm_cfg_val_2 | 0x00021616 | 0x00021616 | 匹配 | |
周期 ft_tlgc | 0x00002011 | 0x00002011 | 匹配 | |
iodft_ctrl_misr_rslt | 0x00000000 | 0x00000000 | 匹配 | |
碘 Ft_addr_Misr_rslt | 0x00000000 | 0x00000000 | 匹配 | |
iodft_data_Misr_rslt_1 | 0x00000000 | 0x00000000 | 匹配 | |
iodft_data_Misr_rslt_2 | 0x00000000 | 0x00000000 | 匹配 | |
iodft_data_Misr_rslt_3 | 0x00000000 | 0x00000000 | 匹配 | |
iodft_data_Misr_rslt_4 | 0x00000000 | 0x00000000 | 匹配 | |
iodft_data_Misr_rslt_5 | 0x00000000 | 0x00000000 | 匹配 | |
perf_cnt_1 | 0x00000000 | 0x00000000 | 匹配 | |
perf_cnt_2 | 0x00000000 | 0x00000000 | 匹配 | |
perf_cnt_cfg | 0x00010000 | 0x00010000 | 匹配 | |
perf_cnt_sel | 0x00000000 | 0x00000000 | 匹配 | |
PERF_CNT_TIM | 0xA08CEAC7 | 0x04E77E50 | 差动 | |
READ_IDLE_Ctrl | 0x00050000 | 0x00050000 | 匹配 | |
READ_IDLE_CTRL_Shdw | 0x00050000 | 0x00050000 | 匹配 | |
irqstatus_raW_sys | 0x00000000 | 0x00000000 | 匹配 | |
irqstatus_sys | 0x00000000 | 0x00000000 | 匹配 | |
irqenable_set_sys | 0x00000000 | 0x00000000 | 匹配 | |
irqenable_clr_sys | 0x00000000 | 0x00000000 | 匹配 | |
zq_config | 0x70073214 | 0x70073214 | 匹配 | |
temp_alert_config | 0x00000000 | 0x00000000 | 匹配 | |
vbusm_err_log | 0x00000000 | 0x00000000 | 匹配 | |
rdwr_lvl_rmp_win | 0x00000000 | 0x00000000 | 匹配 | |
rdwr_lvl_rmp_ctrl | 0x80000000 | 0x80000000 | 匹配 | |
rdwr_lvl_ctrl | 0x00000000 | 0x00000000 | 匹配 | |
DDR_phy_Ctrl_1 | 0x0010010F | 0x0010010F | 匹配 | |
DDR_phy_CTRL_1_Shdw | 0x0010010A | 0x0010010A | 匹配 | |
DDR_phy_Ctrl_2 | 0x00000000 | 0x00000000 | 匹配 | |
PRI_COS_MAP | 0x00000000 | 0x00000000 | 匹配 | |
mstitd_cos_1_map | 0x00000000 | 0x00000000 | 匹配 | |
mstitd_cos_2_map | 0x00000000 | 0x00000000 | 匹配 | |
ECC_Ctrl | 0x00000000 | 0x00000000 | 匹配 | |
ecc_addr_rng_1 | 0x00000000 | 0x00000000 | 匹配 | |
ecc_addr_rng_2 | 0x00000000 | 0x00000000 | 匹配 | |
RD_wr_exec_thrsh | 0x00000305 | 0x00000305 | 匹配 |
根据 SPRUGV8E、这只是一个计数器、用于报告复位后的 DDR/2时钟周期数。
所以... 重要说明自定义硬件和 EVM 之间没有区别。
您是否有任何其他建议可用于收集有关此问题的其他信息?
让我们回到这里、分析我们执行的所有测试...
在后面的对话中、我将通过一组测试1)创建一个应用、该应用将从 EVM 上的 DDR3存储器加载并运行。 2) 2)修改了此应用 、仅使用内部存储器(从而消除了 DDR3配置问题)。 此应用在 EVM 上工作、但在定制硬件上不工作。 因此、在我看来、当前的问题是 SPI 引导通信、 而不是 DDR3存储器。 你同意吗? 我的问题是 :当处理器从 SPI 引导时、SPI 时钟速率是多少?
Brad、
请在进入 SPI 时钟之前稍等。 (这实际上也是一个重要的因素,我们会在一段时间内看一下……)
--
首先、
DEVSTAT 寄存器的 DIFF 值很重要。
在非引导模式下 、自定义硬件的 DEVSTAT 值为0x00000401;而在 EVM 中为 0x00000001。
使用 Devstat[13-1]=bootmode[12:0]-页码:205 https://www.ti.com/lit/ds/symlink/tms320c6657.pdf 对该值进行解码。
如果引导模式的第9位为1、则表示 SPI 引导模式的"Addr Width..."
--> SPI 地址宽度配置
•0 =使用16位地址值
•1 =使用24位地址值
分析一下、由于这是自定义硬件、为什么在 使用 GEL 文件+ CCS 时 DEVSTAT 不提供0x00000001?????
由于处于非引导模式、第9位值是保留的... 但是、闪存后、重要的是、何时针对 SPI 引导模式更改引导引脚、对吧?
在第4种情况下,DEVSTAT 的值是多少? --重新检查--在内存浏览器中,地址为“0x02620020”
我的 DEVSTAT 值为 - 0000040D
----
其次、
在您的案例(4)测试中,检查程序计数器值并将其与 spidboot.map 映射
按照以下视频操作。
1.布置 PC 计数器值
2.发布 spidboot.map。
3.请在您的案例4上发布视频-程序计数器值和内存浏览器中的 GPIO 地址访问....
如果我们可以在该映射中找到 PC 地址、那么 SPI_Boot-Direct 示例很可能会由 RBL 运行和执行。
----
在 CAe4的快照中、
第三、将 EVM 中使用的 SPI-NOR 闪存器件与定制硬件进行比较。
最重要的是、检查可用模式的数量。
例如、在 EVM 中 使用了 N25Q032A、支持的模式有两种。
表7:SPI 模式注1适用于整个表
SPI 模式 时钟极性
CPOL = 0、CPHA = 0 C 保持为0 (CPOL = 0、CPHA = 0)
CPOL = 1、CPHA = 1 C 保持为1表示(CPOL = 1、CPHA = 1)
----
此致
Shankari G
Brad、
请在进入 SPI 时钟之前稍等。 (这实际上也是一个重要的因素,我们会在一段时间内看一下……)
--
首先、
DEVSTAT 寄存器的 DIFF 值很重要。
在非引导模式下 、自定义硬件的 DEVSTAT 值为0x00000401;而在 EVM 中为 0x00000001。
使用 Devstat[13-1]=bootmode[12:0]-页码:205 https://www.ti.com/lit/ds/symlink/tms320c6657.pdf 对该值进行解码。
如果引导模式的第9位为1、则表示 SPI 引导模式的"Addr Width..."
--> SPI 地址宽度配置
•0 =使用16位地址值
•1 =使用24位地址值
分析一下、由于这是自定义硬件、为什么在 使用 GEL 文件+ CCS 时 DEVSTAT 不提供0x00000001?????
由于处于非引导模式、第9位值是保留的... 但是、闪存后、重要的是、何时针对 SPI 引导模式更改引导引脚、对吧?
在第4种情况下,DEVSTAT 的值是多少? --重新检查--在内存浏览器中,地址为“0x02620020”
我的 DEVSTAT 值为 - 0000040D
----
其次、
下载 spidboot.c -下面给定的并重复情况(4),以确认 RBL 是否调用直接 SPI 引导示例。
在您的案例(4)测试中,检查程序计数器值并将其与 spidboot.map 映射
my spidboot.c - e2e.ti.com/.../spiboot.c
按照以下视频操作。
1.布置 PC 计数器值
2.发布 spidboot.map。
3.请在您的案例4上发布视频-程序计数器值和内存浏览器中的 GPIO 地址访问....
如果我们可以在该映射中找到 PC 地址、那么 SPI_Boot-Direct 示例很可能 会由 RBL 运行和执行。
e2e.ti.com/.../case4_5F00_output.mp4
----
在案例4的快照中、
第三、将 EVM 中使用的 SPI-NOR 闪存器件与定制硬件进行比较。
最重要的是、检查可用模式的数量。
例如、在 EVM 中 使用了 N25Q032A、支持的模式有两种。
表7:SPI 模式注1适用于整个表
SPI 模式 时钟极性
CPOL = 0、CPHA = 0 C 保持为0 (CPOL = 0、CPHA = 0)
CPOL = 1、CPHA = 1 C 保持为1表示(CPOL = 1、CPHA = 1)
----
此致
Shankari G
Brad、
请在进入 SPI 时钟之前稍等。 (这实际上也是一个重要的因素,我们会在一段时间内看一下……)
--
首先、
DEVSTAT 寄存器的 DIFF 值很重要。
在非引导模式下 、自定义硬件的 DEVSTAT 值为0x00000401;而在 EVM 中为 0x00000001。
使用 Devstat[13-1]=bootmode[12:0]-页码:205 https://www.ti.com/lit/ds/symlink/tms320c6657.pdf 对该值进行解码。
如果引导模式的第9位为1、则表示 SPI 引导模式的"Addr Width..."
--> SPI 地址宽度配置
•0 =使用16位地址值
•1 =使用24位地址值
分析一下、由于这是自定义硬件、为什么在 使用 GEL 文件+ CCS 时 DEVSTAT 不提供0x00000001?????
由于处于非引导模式、第9位值是保留的... 但是、闪存后、重要的是、何时针对 SPI 引导模式更改引导引脚、对吧?
在第4种情况下,DEVSTAT 的值是多少? --重新检查--在内存浏览器中,地址为“0x02620020”
我的 DEVSTAT 值为 - 0000040D
----
其次、
下载 spidboot.c -下面给定的并重复情况(4),以确认 RBL 是否调用直接 SPI 引导示例。
在您的案例(4)测试中,检查程序计数器值并将其与 spidboot.map 映射
my spidboot.c - e2e.ti.com/.../spiboot.c
按照以下视频操作。
1.布置 PC 计数器值
2.发布 spidboot.map。
3.请在您的案例4上发布视频-程序计数器值和内存浏览器中的 GPIO 地址访问....
如果我们可以在该映射中找到 PC 地址、那么 SPI_Boot-Direct 示例很可能 会由 RBL 运行和执行。
e2e.ti.com/.../case4_5F00_output.mp4
----
在案例4的快照中、
第三、将 EVM 中使用的 SPI-NOR 闪存器件与定制硬件进行比较。
最重要的是、检查可用模式的数量。
例如、在 EVM 中 使用了 N25Q032A、支持的模式有两种。
表7:SPI 模式注1适用于整个表
SPI 模式 时钟极性
CPOL = 0、CPHA = 0 C 保持为0 (CPOL = 0、CPHA = 0)
CPOL = 1、CPHA = 1 C 保持为1表示(CPOL = 1、CPHA = 1)
----
此致
Shankari G
由于处于非引导模式、第9位值是保留的... 但是、闪存后、重要的是、何时针对 SPI 引导模式更改引导引脚、对吧?
在第4种情况下,DEVSTAT 的值是多少? --重新检查--在内存浏览器中,地址为“0x02620020”
我的 DEVSTAT 值为 - 0000040D
[/报价]如对话前面所示、当引导配置设置为 SPI 引导时、EVM 和定制硬件的 DEVSTAT 寄存器的值是相同的。 在您提出请求后、我们修改了所有行、以匹配 EVM 的 SPI 引导配置。
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4366540 #4366540"] 我尝试从 SPI 引导处理器,但仍然没有成功。 然后、我连接了调试器并验证了 DEVSTAT 寄存器(DEVSTAT = 0x0000040D 引导模式= 0x00000006)。[/引用]如前所述、我们的定制硬件使用上拉和下拉电阻器来配置大多数引导配置线路。 我们确定、在开发期间、我们需要配置硬件以实现无引导、我们包括了用于 BOOTMODE[2:0]的开关。 让我完全清楚地说明这一点。 BOOTMODE[2:0]可 从高电平轻松更改为低电平、但 BOOTMODE[12:3]需要修改电路板(例如 添加/移除电阻器)以从高电平更改为低电平。
使用修订版 spidboot.c...进行测试
由于我们使用 ITAR 相关材料、我正在与我们的出口管制部门合作、以获得批准和限制、允许从我们的工作站发布屏幕截图视频。 到目前为止,我没有这种批准。 如果允许、我将开始添加这种类型的信息。
问题:
在所有这些测试中、我开始相信 NOR SPI-writer 程序不会将正确的数据写入我的定制硬件上的闪存中。 写入器是否有配置选项可将要从 SPI 存储器中写入和读取的数据从 UART 端口传输出去? 这样我就可以验证预期的数据是否已正确写入 SPI 存储器并进行验证/读取?
我们定制硬件的 SPI 接口说明。
我们使用 N25Q064A11ESEA0F SPI 存储器(应该是 EVM 上存储器的较大版本)。 在 SPI 存储器之间、连接到 SN74AVC4T774缓冲器以缓冲信号(6nS 的延迟)、然后在每个信号连接到 C6657之前内联一个10欧姆电阻器。 因此、EVM 上的任何工作都应在定制硬件上工作。 我已利用范围来利用这些行、并验证它们在某种预期的庄园中正在改变状态。 (基本上我不认为 SPI 硬件存在问题、但谁知道。) 这两个板之间唯一的另一个区别是、我们将 W#/Vpp/DQ2连接到高电平、在 EVM 上、该线路由 FPGA 驱动到高电平。
Brad、
正如我已经请求的、在我之前的帖子中、
对于定制板上的情况(4)、
1.发布您的 PC 计数器值-(如果没有视频,请将其设为快照...)
2.发布 spidboot.map。 -(以文本格式加载)
--
1.您的第二个快照是否在您的定制硬件上? 使用随机 PC 地址(不是 spidboot.map 的应用程序),请发布 spidboot.map,否则,我无法验证.....
2.您的第三个快照是否在 C6657 EVM 上、而不是在您的定制硬件上、对吧? 该 PC 地址正按预期指向 spidboot.map 中的 test func()!!
--
这是 什么是... 引导我思考…
由于 SPI-NOR 写入器工作正常、它甚至说"成功读取和欺骗"、这意味着它在 NOR 存储器上正确写入。
它甚至读回并验证数据....
-->重要的是, “定制硬件”中的 CCS GEL 文件+ NOR 编写程序知道与 SPI 正确通信....
---- >但 自定义硬件中的 RBL + Direct boot-SPI 程序中缺少相同的配置?? (我想,这不是问题,因为使用相同的 RBL +直接 SPI 在 EVM 中工作,对吧?)
---- >但 C6657EVM 中的 RBL +直接引导 SPI 程序中存在相同的配置!! ??
因此,您的自定义硬件上的引导模式引脚及其配置可能需要更多关注....
最后、它可能是一个硬件问题、因为我们验证了软件中的所有可能。
----
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4373390 #4373390"]在所有这些测试中、我开始相信 NOR SPI 写入器程序不会将正确的数据写入我的定制硬件上的闪存中。 写入器是否有配置选项可将要从 SPI 存储器中写入和读取的数据从 UART 端口传输出去? 这样我就可以验证预期数据是否已从 SPI 存储器正确写入和验证/读取?不确定、值得花时间在编写器上、在"UART"上添加内存输出。 因为,我对作者没有任何怀疑。。 因为它会验证数据....
此致
Shankari G
Brad、
在第二个快照中,值为20B11B52的 PC 计数器表示.... 保留在 RBL https://www.ti.com/lit/ds/symlink/tms320c6657.pdf 上
第166页。
因此、DDR3配置似乎未针对您的定制板正确完成。
参考 定制硬件的 GEL 文件(Saratoga_1313.gel)、 const boot_EMIF4_TBL_T emif4Cfg 的值必须在 spidboot.c 中匹配和更新
当我看到 C6657evm.gel 和您 的 Saratoga_133.gel 之间的差异时、 您的定制板有很多 DDR3时序参数和自动调平参数更改。
--
此外、
1.通过 在 spiboot.c 和 spiboot.cmd 中完全删除 DDR3、在内部 memory-L2_data 中刷写并运行相同的程序-请参阅以下内容
2.检查程序计数器并张贴它--重要
现在、您的定制板应该在没有 DDR3的情况下启动。
=========== spiboot.c====
删除整个结构。
#pragma DATA_SECTION (emif4Cfg、".emif4Cfg")
const boot_EMIF4_TBL_T emif4Cfg
=================== Spiboot.cmd============
spidboot.obj
-c
-A
-stack 0x400
存储器
{
L2MAGIC:origin = 0x8ffc,length = 0x4
L2_data:origin = 0x800000,length = 0x6000
}
部分
{
.stack > L2_data
.mSMC > L2_data
.data > L2_data
.far > L2_data
.text > L2_data
.const > L2_data
.cinit > L2_data
.lmagic > L2MAGIC
}
此致
Shankari G
从您的第一次答复开始:
[引用 userid="489828" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4373725 #43725"]1.您的第二个快照是否在您的定制硬件上? 使用随机 PC 地址(不是 spidboot.map 的应用程序),请发布 spidboot.map,否则,我无法验证.....
2.您的第三个快照是否在 C6657 EVM 上、而不是在您的定制硬件上、对吧? 该 PC 地址正按预期指向 spidboot.map 中的 test func()!!
[/报价]您的假设是正确的。 包括第一个屏幕截图、以显示 NOR 编写器程序在定制硬件上按预期完成。 包含第二个屏幕截图、以显示重新配置自定义硬件以进行 SPI 引导后的结果。 包含了第三个屏幕截图、以显示代码已正确创建并在 EVM 硬件上按预期运行。
[引用 userid="489828" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4373725 #43725"]这是 什么是... 引导我思考…
由于 SPI-NOR 写入器工作正常、它甚至说"成功读取和欺骗"、这意味着它在 NOR 存储器上正确写入。
它甚至读回并验证数据....
-->重要的是, “定制硬件”中的 CCS GEL 文件+ NOR 编写程序知道与 SPI 正确通信....
---- >但 自定义硬件中的 RBL + Direct boot-SPI 程序中缺少相同的配置?? (我想,这不是问题,因为使用相同的 RBL +直接 SPI 在 EVM 中工作,对吧?)
---- >但 C6657EVM 中的 RBL +直接引导 SPI 程序中存在相同的配置!! ??
因此,您的自定义硬件上的引导模式引脚及其配置可能需要更多关注....
最后、它可能是一个硬件问题、因为我们验证了软件中的所有可能。
[/报价]我同意这些发言。
对于处理器仍在 RBL 中执行的信息、这必须意味着 RBL 没有获得正确的引导信息。 现在、我认为至少有三件事情会导致定制硬件出现此问题。
a) NORwriter 工具未正确地将数据写入存储器、或
b)引导后、SPI 存储器会出现某种问题、 或
c) RBL 未正确配置、或
d)存在其他类型的电路板问题。
我对 NORwriter 工具提出质疑、因为在自定义硬件上运行应用程序时、NORwriter 完成写入和验证所需的时间要长得多。 (即 EVM 在5秒内快速完成、定制硬件在20-30秒内完成)
我想有条不紊地完成这些选项、以确认或消除这些选项、将其作为我的问题的根源。 我想验证闪存存储器是否可以读取。 我想验证 EVM 和定制硬件之间存储器中的信息是否相同。
第二次答复...
[引用 userid="489828" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4374115 #4374115"]参考 定制硬件的 GEL 文件(Saratoga_1313.gel)、 const boot_EMIF4_TBL_T emif4Cfg 的值必须在 spidboot.c 中匹配和更新
当我看到 C6657evm.gel 和您 的 Saratoga_133.gel 之间的差异时、 您的定制板有很多 DDR3时序参数和自动调平参数更改。
[/报价]我同意、这些值需要更改、定制硬件才能正确访问 DDR 存储器。 (这就是我尝试引导至内部存储器的原因、因为似乎问题在于将正确的信息放入要引导的器件中。)
****************************************************************************** TMS320C6x Linker PC v7.4.24 ****************************************************************************** >> Linked Wed Oct 19 08:17:55 2022 OUTPUT FILE NAME: <spiboot.out> ENTRY POINT SYMBOL: "_c_int00" address: 00000000 MEMORY CONFIGURATION name origin length used unused attr fill ---------------------- -------- --------- -------- -------- ---- -------- L2MAGIC 008ffffc 00000004 00000000 00000004 RWIX DDR 80000000 00002000 00000000 00002000 RWIX SEGMENT ALLOCATION MAP run origin load origin length init length attrs members ---------- ----------- ---------- ----------- ----- ------- 00000000 00000000 0000000c 0000000c rw- 00000000 00000000 0000000c 0000000c rw- .fardata 00000000 00000000 0000001d 0000001d r-- 00000000 00000000 0000001d 0000001d r-- .cinit 00000000 00000000 00000400 00000000 rw- 00000000 00000000 00000400 00000000 rw- .stack 00000000 00000000 00000920 00000920 r-x 00000000 00000000 00000920 00000920 r-x .text SECTION ALLOCATION MAP output attributes/ section page origin length input sections -------- ---- ---------- ---------- ---------------- .fardata 0 00000000 0000000c FAILED TO ALLOCATE .cinit 0 00000000 0000001d FAILED TO ALLOCATE .stack 0 00000000 00000400 FAILED TO ALLOCATE .text 0 00000000 00000920 FAILED TO ALLOCATE LINKER GENERATED COPY TABLES __TI_cinit_table @ 00000008 records: 1, size/record: 8, table size: 8 .fardata: load addr=00000010, load size=0000000d bytes, run addr=00000000, run size=0000000c bytes, compression=rle LINKER GENERATED HANDLER TABLE __TI_handler_table @ 00000000 records: 2, size/record: 4, table size: 8 index: 0, handler: __TI_decompress_rle24 index: 1, handler: __TI_decompress_none GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name address name -------- ---- 000003a0 C$$EXIT 00000008 __TI_CINIT_Base 00000010 __TI_CINIT_Limit 00000000 __TI_Handler_Table_Base 00000008 __TI_Handler_Table_Limit UNDEFED __TI_INITARRAY_Base UNDEFED __TI_INITARRAY_Limit 00000400 __TI_STACK_END 00000400 __TI_STACK_SIZE 00000000 __TI_STATIC_BASE UNDEFED __TI_TLS_BLOCK_SIZE UNDEFED __TI_TLS_INIT_Base UNDEFED __TI_TLS_INIT_Limit UNDEFED __TI_TLS_MAIN_THREAD_Base 00000001 __TI_args_main 00000660 __TI_cpp_init 00000080 __TI_decompress_none 00000380 __TI_decompress_rle 00000180 __TI_decompress_rle24 00000008 __TI_enable_exit_profile_output ffffffff __TI_pprof_out_hndl ffffffff __TI_prof_data_size ffffffff __TI_prof_data_start 000008e0 __TI_tls_block_size 00000820 __TI_tls_init 00000800 __TI_tls_main_thread_base 000000a0 __TI_zero_init ffffffff __binit__ 000007c0 __c6xabi_get_addr 00000900 __c6xabi_get_tp ffffffff __c_args__ 00000520 _args_main 00000560 _auto_init_elf 00000000 _c_int00 00000000 _cleanup_ptr 00000004 _dtors_ptr 00000000 _stack 000003a0 abort ffffffff binit 000006c0 copy_in 000003c0 exit 000001a8 main 00000480 memcpy 000001a0 testfunc GLOBAL SYMBOLS: SORTED BY Symbol Address address name -------- ---- 00000000 __TI_Handler_Table_Base 00000000 __TI_STATIC_BASE 00000000 _c_int00 00000000 _cleanup_ptr 00000000 _stack 00000001 __TI_args_main 00000004 _dtors_ptr 00000008 __TI_CINIT_Base 00000008 __TI_Handler_Table_Limit 00000008 __TI_enable_exit_profile_output 00000010 __TI_CINIT_Limit 00000080 __TI_decompress_none 000000a0 __TI_zero_init 00000180 __TI_decompress_rle24 000001a0 testfunc 000001a8 main 00000380 __TI_decompress_rle 000003a0 C$$EXIT 000003a0 abort 000003c0 exit 00000400 __TI_STACK_END 00000400 __TI_STACK_SIZE 00000480 memcpy 00000520 _args_main 00000560 _auto_init_elf 00000660 __TI_cpp_init 000006c0 copy_in 000007c0 __c6xabi_get_addr 00000800 __TI_tls_main_thread_base 00000820 __TI_tls_init 000008e0 __TI_tls_block_size 00000900 __c6xabi_get_tp ffffffff __TI_pprof_out_hndl ffffffff __TI_prof_data_size ffffffff __TI_prof_data_start ffffffff __binit__ ffffffff __c_args__ ffffffff binit UNDEFED __TI_INITARRAY_Base UNDEFED __TI_INITARRAY_Limit UNDEFED __TI_TLS_BLOCK_SIZE UNDEFED __TI_TLS_INIT_Base UNDEFED __TI_TLS_INIT_Limit UNDEFED __TI_TLS_MAIN_THREAD_Base [44 symbols]
我剩下的唯一问题是闪存未正确写入或未正确读取。
感谢您的任何帮助。
我一直在尝试重建 PDK 中包含的 NOR 闪存写入器、但无法使 makefile 正常运行。 我不太熟悉用于配置/运行编译器/链接器的命令行环境。 您是否有关于如何重建 NOR 闪存写入器的说明?
sut@KCK /c/ti/pdk_c665x_2_0_16/packages $ source pdksetupenv.sh /c/ti/pdk_c665x_2_0_16/packages /c/ti/pdk_c665x_2_0_16/packages ************************************************************************** Environment Configuration: ************************************************************************** SDK_INSTALL_PATH : /c/ti PDK_INSTALL_PATH : /c/ti/pdk_c665x_2_0_16/packages PDK_SOC : c665x PDK_VERSION : 2_0_16 RULES_MAKE : /c/ti/pdk_c665x_2_0_16/packages/ti/build/Rules.make ************************************************************************** sut@KCK /c/ti/pdk_c665x_2_0_16/packages $ cd C:/ti/pdk_c665x_2_0_16/packages/ti/boot/writer/nor/evmc6657l/build sut8@KCK /c/ti/pdk_c665x_2_0_16/packages/ti/boot/writer/nor/evmc6657l/build $ gmake gmake: *** No rule to make target '/oe/bld/build-CORTEX_1/arago-tmp-external-arm-toolchain/work/c665x_evm-linux-gnueabi/flashwriters-rtos/git-r11/recipe-sysroot-native/usr/share/ti/cgt-c6x/include/stdlib.h', needed by 'src/norwriter.obj'. Stop. sut@KCK /c/ti/pdk_c665x_2_0_16/packages/ti/boot/writer/nor/evmc6657l/build $
谢谢、
Brad、
第1点:1
在 spidboot.map 中,它仍然显示了 DDR.... 这意味着、在 spiboot.cmd 中、DDR 未被完全移除...
DDR 80000000 00002000 00000000 00002000 RWIX
--
第2点
L2_data:origin = 0x800000,length = 0xx6000 --.cmd 中也缺少此内存段
----
第3点
入口点符号:"_c_int00" 地址:00000000 -入口地址不能为零... 它应该指向 L2存储器...
--
第4点
在 spidboot.map 中,它未能将段分配到–???... 它应该在 L2_data 存储器中分配.text、.stack、.fardata 等段、对吧?
部分分配映射
输出属性/
段页原点长度输入段
---- -------- ------ --------
.fardata 0 00000000 0000000c 分配失败
.cinit 0 00000000 0000001d 无法分配
.stack 0 00000000 00000400无法分配
.text 0 00000000 00000920分配失败
----------------------------------------------------
在内部存储器中运行时、请发布 SPIboot.cmd。
2.请发布 spidboot.map
2.请为您的案例发布 spidboot.c 4.
--
使用 定制板上的 spidboot.cmd (下面给出)和 spidboot.c (下面给出)重新执行测试。
这次、您的自定义硬件应使用 L2内部存储器成功引导。
spiboot.obj -c -a -stack 0x400 MEMORY { L2MAGIC : origin = 0x8ffffc, length = 0x4 L2_DATA : origin = 0x800000, length = 0xff000 } SECTIONS { .stack > L2_DATA .msmc > L2_DATA .data > L2_DATA .far > L2_DATA .text > L2_DATA .const > L2_DATA .cinit > L2_DATA .lmagic > L2MAGIC }
此致
Shankari G
很抱歉、由于我重新创建测试以记录结果、我错过了编译中的错误。 (从命令行工作不再是我的首选、我更喜欢在 开发环境中工作(例如、问题部分中的红色标记引起了我的注意)
请尝试两次以演示您请求的数据。
spiboot.obj -c -a -stack 0x400 MEMORY { L2MAGIC : origin = 0x8ffffc, length = 0x4 L2_DATA : origin = 0x800000, length = 0xff000 } SECTIONS { // .emif4Cfg > DDR_CFG .stack > L2_DATA .msmc > L2_DATA .data > L2_DATA .far > L2_DATA .text > L2_DATA .const > L2_DATA .cinit > L2_DATA .lmagic > L2MAGIC }
/* Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/ * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include <stdio.h> #include <string.h> #include <stdint.h> #include "tiboot.h" #include "platform.h" #if 0 #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 */ 3, /* pllPrediv */ 40, /* pllMult */ 2, /* pllPostDiv */ 0x62477AB2, /* sdRamConfig */ 0, /* sdRamConfig2, dont care*/ 0x0000144F, /* sdRamRefreshCtl */ 0x1333780C, /* sdRamTiming1 */ 0x30717FE3, /* sdRamTiming2 */ 0x559F86AF, /* sdRamTiming3 */ 0, /* lpDdrNvmTiming, dont care */ 0, /* powerManageCtl, dont care */ 0, /* iODFTTestLogic, dont care */ 0, /* performCountCfg, dont care */ 0, /* performCountMstRegSel, dont care */ 0, /* readIdleCtl, dont care */ 0, /* sysVbusmIntEnSet, dont care */ 0x70074c1f, /* sdRamOutImpdedCalCfg, dont care */ 0, /* tempAlterCfg, dont care */ 0x0010010F, /* ddrPhyCtl1 */ 0, /* ddrPhyCtl2, dont care */ 0, /* priClassSvceMap, dont care */ 0, /* mstId2ClsSvce1Map, dont care */ 0, /* mstId2ClsSvce2Map, dont care */ 0, /* eccCtl, dont care */ 0, /* eccRange1, dont care */ 0, /* eccRange2, dont care */ 0, /* rdWrtExcThresh, dont care */ 0x87A0047F, 0, 0, 0, 0, 0, 0x33, 0x3A, 0x2C, 0x2C, 0x21, 0, 0xAF00002, 0, 0, 0, 0, 0, 0xB7, 0xB1, 0xA4, 0xA4, 0x98, 0x200, 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 }; #endif #define GPIO_BASE (0x2320000) #define GPIO_DIR_OFFSET (0x10) #define GPIO_SETDATA_OFFSET (0x18) #define GPIO_CLEARDATA_OFFSET (0x1C) void testfunc(); void testfunc() { while (1) { asm(" IDLE"); } } void main(void) { volatile uint32_t *reg_val; reg_val = (volatile uint32_t *)(GPIO_BASE + GPIO_DIR_OFFSET); // configure as output pin -- write 0 to the Direction register *reg_val &= ~ (1 << 8); reg_val = (volatile uint32_t *) (GPIO_BASE + GPIO_SETDATA_OFFSET); // Write value 1 in the set data register, so that Out data register will be 1 *reg_val |= (1 << 8); testfunc(); }
****************************************************************************** TMS320C6x Linker PC v7.4.24 ****************************************************************************** >> Linked Thu Oct 20 01:59:07 2022 OUTPUT FILE NAME: <spiboot.out> ENTRY POINT SYMBOL: "_c_int00" address: 00800680 MEMORY CONFIGURATION name origin length used unused attr fill ---------------------- -------- --------- -------- -------- ---- -------- L2_DATA 00800000 000ff000 00000d4c 000fe2b4 RWIX L2MAGIC 008ffffc 00000004 00000000 00000004 RWIX SEGMENT ALLOCATION MAP run origin load origin length init length attrs members ---------- ----------- ---------- ----------- ----- ------- 00800000 00800000 00000920 00000920 r-x 00800000 00800000 00000920 00000920 r-x .text 00800920 00800920 00000400 00000000 rw- 00800920 00800920 00000400 00000000 rw- .stack 00800d20 00800d20 0000000c 0000000c rw- 00800d20 00800d20 0000000c 0000000c rw- .fardata 00800d30 00800d30 00000020 00000020 r-- 00800d30 00800d30 00000020 00000020 r-- .cinit SECTION ALLOCATION MAP output attributes/ section page origin length input sections -------- ---- ---------- ---------- ---------------- .text 0 00800000 00000920 00800000 00000180 rts6600_elf.lib : copy_decompress_rle.obj (.text:__TI_decompress_rle_core) 00800180 00000100 : autoinit.obj (.text:_auto_init_elf) 00800280 00000100 : cpy_tbl.obj (.text:copy_in) 00800380 000000e0 : copy_zero_init.obj (.text:decompress:ZI:__TI_zero_init) 00800460 000000c0 : exit.obj (.text:exit) 00800520 000000c0 : tls.obj (.text:tls:init:__TI_tls_init) 008005e0 000000a0 : memcpy64.obj (.text:memcpy) 00800680 00000080 : boot.obj (.text:_c_int00) 00800700 00000060 : cpp_init.obj (.text:__TI_cpp_init) 00800760 00000060 spiboot.obj (.text) 008007c0 00000040 rts6600_elf.lib : args_main.obj (.text:_args_main) 00800800 00000040 : tls.obj (.text:tls:get_addr:__c6xabi_get_addr) 00800840 00000020 : exit.obj (.text:abort) 00800860 00000020 : copy_decompress_none.obj (.text:decompress:none:__TI_decompress_none) 00800880 00000020 : copy_decompress_rle.obj (.text:decompress:rle24:__TI_decompress_rle24) 008008a0 00000020 : copy_decompress_rle.obj (.text:decompress:rle:__TI_decompress_rle) 008008c0 00000020 : tls.obj (.text:tls:block_size:__TI_tls_block_size) 008008e0 00000020 : tls_get_tp.obj (.text:tls:get_tp) 00800900 00000020 : tls.obj (.text:tls:main_base:__TI_tls_main_thread_base) .stack 0 00800920 00000400 UNINITIALIZED 00800920 00000008 rts6600_elf.lib : boot.obj (.stack) 00800928 000003f8 --HOLE-- .fardata 0 00800d20 0000000c 00800d20 0000000c rts6600_elf.lib : exit.obj (.fardata) .cinit 0 00800d30 00000020 00800d30 0000000d (.cinit..fardata.load) [load image, compression = rle] 00800d3d 00000003 --HOLE-- [fill = 0] 00800d40 00000008 (__TI_handler_table) 00800d48 00000008 (__TI_cinit_table) LINKER GENERATED COPY TABLES __TI_cinit_table @ 00800d48 records: 1, size/record: 8, table size: 8 .fardata: load addr=00800d30, load size=0000000d bytes, run addr=00800d20, run size=0000000c bytes, compression=rle LINKER GENERATED HANDLER TABLE __TI_handler_table @ 00800d40 records: 2, size/record: 4, table size: 8 index: 0, handler: __TI_decompress_rle24 index: 1, handler: __TI_decompress_none GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name address name -------- ---- 00800840 C$$EXIT 00800d48 __TI_CINIT_Base 00800d50 __TI_CINIT_Limit 00800d40 __TI_Handler_Table_Base 00800d48 __TI_Handler_Table_Limit UNDEFED __TI_INITARRAY_Base UNDEFED __TI_INITARRAY_Limit 00800d20 __TI_STACK_END 00000400 __TI_STACK_SIZE 00000000 __TI_STATIC_BASE UNDEFED __TI_TLS_BLOCK_SIZE UNDEFED __TI_TLS_INIT_Base UNDEFED __TI_TLS_INIT_Limit UNDEFED __TI_TLS_MAIN_THREAD_Base 00000001 __TI_args_main 00800700 __TI_cpp_init 00800860 __TI_decompress_none 008008a0 __TI_decompress_rle 00800880 __TI_decompress_rle24 00800d28 __TI_enable_exit_profile_output ffffffff __TI_pprof_out_hndl ffffffff __TI_prof_data_size ffffffff __TI_prof_data_start 008008c0 __TI_tls_block_size 00800520 __TI_tls_init 00800900 __TI_tls_main_thread_base 00800380 __TI_zero_init ffffffff __binit__ 00800800 __c6xabi_get_addr 008008e0 __c6xabi_get_tp ffffffff __c_args__ 008007c0 _args_main 00800180 _auto_init_elf 00800680 _c_int00 00800d20 _cleanup_ptr 00800d24 _dtors_ptr 00800920 _stack 00800840 abort ffffffff binit 00800280 copy_in 00800460 exit 00800768 main 008005e0 memcpy 00800760 testfunc GLOBAL SYMBOLS: SORTED BY Symbol Address address name -------- ---- 00000000 __TI_STATIC_BASE 00000001 __TI_args_main 00000400 __TI_STACK_SIZE 00800180 _auto_init_elf 00800280 copy_in 00800380 __TI_zero_init 00800460 exit 00800520 __TI_tls_init 008005e0 memcpy 00800680 _c_int00 00800700 __TI_cpp_init 00800760 testfunc 00800768 main 008007c0 _args_main 00800800 __c6xabi_get_addr 00800840 C$$EXIT 00800840 abort 00800860 __TI_decompress_none 00800880 __TI_decompress_rle24 008008a0 __TI_decompress_rle 008008c0 __TI_tls_block_size 008008e0 __c6xabi_get_tp 00800900 __TI_tls_main_thread_base 00800920 _stack 00800d20 __TI_STACK_END 00800d20 _cleanup_ptr 00800d24 _dtors_ptr 00800d28 __TI_enable_exit_profile_output 00800d40 __TI_Handler_Table_Base 00800d48 __TI_CINIT_Base 00800d48 __TI_Handler_Table_Limit 00800d50 __TI_CINIT_Limit ffffffff __TI_pprof_out_hndl ffffffff __TI_prof_data_size ffffffff __TI_prof_data_start ffffffff __binit__ ffffffff __c_args__ ffffffff binit UNDEFED __TI_INITARRAY_Base UNDEFED __TI_INITARRAY_Limit UNDEFED __TI_TLS_BLOCK_SIZE UNDEFED __TI_TLS_INIT_Base UNDEFED __TI_TLS_INIT_Limit UNDEFED __TI_TLS_MAIN_THREAD_Base [44 symbols]
您是否有关于如何重建 NOR 闪存写入器的说明?
Brad、
使用 CCS、当 EVM 使用 NOR_writer 刷写 NOR 存储器时执行寄存器转储-< 5秒
2. 使用 CCS、当定制硬件使用 NOR 写入器刷写 NOR 存储器时执行寄存器转储- 20 - 30秒
3.比较1和2并确定寄存器组值的差异,这些值特别适用于 SPI 相关、PLL 等
尝试修改 Saratoga_1313.gel 中的特定寄存器值(根据自定义硬件中使用的 SPI 部件),并检查时间是否从20秒缩短到30秒。
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4375684 #4375684)]您是否有关于如何重建 NOR 闪存写入器的说明? [/报价]
我必须检查。
我从未重建过 NOR 编写器、因为在 EVM 上正常工作时、这种必要性永远也不会出现。
此致
Shankari G
Brad、
以下是重新构建 NOR 编写器的步骤
此致
Shankari G
Brad、
我能够构建 NOR 编写器。 这些步骤将被捕获并发布在我的上一篇文章中、在上面...
您是否能够成功重建 NOR 编写器?
--
如果是,下一步 就是:-->修改定制硬件的 NOR_writer 代码
在 NOR 编写器源代码中、使用的 SPI-NOR 部件为"platform_DevID_NORN25Q128"。 检查并更改您的定制硬件中使用的相应 SPI_NOR 部件。
2.在 NOR-Writer-Source 代码中--> NOR-init ()--> evmc665x_NOR.c 在 platform_lib_evmc6657l/src 中---根据您的定制硬件修改 SPI 接口部分和 NOR 存储器部分
NOR_STATUS nor_init ( void ) { NOR_STATUS ret; uint8_t idcode[3]; /* Initialize the SPI interface */ /* Claim the SPI controller */ spi_claim(SPI_NOR_CS, SPI_MAX_FREQ); /* Read the ID codes */ ret = spi_cmd(SPI_NOR_CMD_RDID, idcode, sizeof(idcode)); if (ret) { IFPRINT (platform_write( "nor_init: Error in reading the idcode\n")); spi_release(); platform_errno = PLATFORM_ERRNO_NOR; return NOR_EFAIL; } IFPRINT (platform_write("SF: Got idcode %02x %02x %02x\n", idcode[0], idcode[1], idcode[2])); if ((idcode[0] != SPI_NOR_MANID_MICRON) && (idcode[0] != SPI_NOR_MANID_MACRONIX)) { /* Expected Manufacturer ID does not match */ spi_release(); platform_errno = PLATFORM_ERRNO_BADFLASHDEV; return NOR_EFAIL; } spi_release(); return NOR_EOK; }
3. evmc665x_spi.c --> platform_lib_evmc6657l/src 中的 spi_claim ()
3.
spi_claim ( uint32_t cs, uint32_t freq ) { uint32_t scalar; PLIBSPILOCK() /* Enable the SPI hardware */ SPI_SPIGCR0 = CSL_SPI_SPIGCR0_RESET_IN_RESET; spi_delay (2000); SPI_SPIGCR0 = CSL_SPI_SPIGCR0_RESET_OUT_OF_RESET; /* Set master mode, powered up and not activated */ SPI_SPIGCR1 = (CSL_SPI_SPIGCR1_MASTER_MASTER << CSL_SPI_SPIGCR1_MASTER_SHIFT) | (CSL_SPI_SPIGCR1_CLKMOD_INTERNAL << CSL_SPI_SPIGCR1_CLKMOD_SHIFT); /* CS0, CS1, CLK, Slave in and Slave out are functional pins */ if (cs == 0) { SPI_SPIPC0 = (CSL_SPI_SPIPC0_SCS0FUN0_SPI << CSL_SPI_SPIPC0_SCS0FUN0_SHIFT) | (CSL_SPI_SPIPC0_CLKFUN_SPI << CSL_SPI_SPIPC0_CLKFUN_SHIFT) | (CSL_SPI_SPIPC0_SIMOFUN_SPI << CSL_SPI_SPIPC0_SIMOFUN_SHIFT) | (CSL_SPI_SPIPC0_SOMIFUN_SPI << CSL_SPI_SPIPC0_SOMIFUN_SHIFT); } else if (cs == 1) { SPI_SPIPC0 = ((CSL_SPI_SPIPC0_SCS0FUN1_SPI << CSL_SPI_SPIPC0_SCS0FUN1_SHIFT) | (CSL_SPI_SPIPC0_CLKFUN_SPI << CSL_SPI_SPIPC0_CLKFUN_SHIFT) | (CSL_SPI_SPIPC0_SIMOFUN_SPI << CSL_SPI_SPIPC0_SIMOFUN_SHIFT) | (CSL_SPI_SPIPC0_SOMIFUN_SPI << CSL_SPI_SPIPC0_SOMIFUN_SHIFT)) & 0xFFFF; } /* setup format */ scalar = ((SPI_MODULE_CLK / freq) - 1 ) & 0xFF; if ( cs == 0) { SPI_SPIFMT0 = (8 << CSL_SPI_SPIFMT_CHARLEN_SHIFT) | (scalar << CSL_SPI_SPIFMT_PRESCALE_SHIFT) | (CSL_SPI_SPIFMT_PHASE_DELAY << CSL_SPI_SPIFMT_PHASE_SHIFT) | (CSL_SPI_SPIFMT_POLARITY_LOW << CSL_SPI_SPIFMT_POLARITY_SHIFT) | (CSL_SPI_SPIFMT_SHIFTDIR_MSB << CSL_SPI_SPIFMT_SHIFTDIR_SHIFT); }else if ( cs == 1) { SPI_SPIFMT0 = (16 << CSL_SPI_SPIFMT_CHARLEN_SHIFT) | (scalar << CSL_SPI_SPIFMT_PRESCALE_SHIFT) | (CSL_SPI_SPIFMT_PHASE_NO_DELAY << CSL_SPI_SPIFMT_PHASE_SHIFT) | (CSL_SPI_SPIFMT_POLARITY_LOW << CSL_SPI_SPIFMT_POLARITY_SHIFT) | (CSL_SPI_SPIFMT_SHIFTDIR_MSB << CSL_SPI_SPIFMT_SHIFTDIR_SHIFT); } /* hold cs active at end of transfer until explicitly de-asserted */ data1_reg_val = (CSL_SPI_SPIDAT1_CSHOLD_ENABLE << CSL_SPI_SPIDAT1_CSHOLD_SHIFT) | (0x02 << CSL_SPI_SPIDAT1_CSNR_SHIFT); if (cs == 0) { SPI_SPIDAT1 = (CSL_SPI_SPIDAT1_CSHOLD_ENABLE << CSL_SPI_SPIDAT1_CSHOLD_SHIFT) | (0x02 << CSL_SPI_SPIDAT1_CSNR_SHIFT); } /* including a minor delay. No science here. Should be good even with * no delay */ if (cs == 0) { SPI_SPIDELAY = (8 << CSL_SPI_SPIDELAY_C2TDELAY_SHIFT) | (8 << CSL_SPI_SPIDELAY_T2CDELAY_SHIFT); /* default chip select register */ SPI_SPIDEF = CSL_SPI_SPIDEF_RESETVAL; } else if (cs == 1) { SPI_SPIDELAY = (6 << CSL_SPI_SPIDELAY_C2TDELAY_SHIFT) | (3 << CSL_SPI_SPIDELAY_T2CDELAY_SHIFT); } /* no interrupts */ SPI_SPIINT0 = CSL_SPI_SPIINT0_RESETVAL; SPI_SPILVL = CSL_SPI_SPILVL_RESETVAL; /* enable SPI */ SPI_SPIGCR1 |= ( CSL_SPI_SPIGCR1_ENABLE_ENABLE << CSL_SPI_SPIGCR1_ENABLE_SHIFT ); if (cs == 1) { SPI_SPIDAT0 = 1 << 15; spi_delay (10000); /* Read SPIFLG, wait untill the RX full interrupt */ if ( (SPI_SPIFLG & (CSL_SPI_SPIFLG_RXINTFLG_FULL<<CSL_SPI_SPIFLG_RXINTFLG_SHIFT)) ) { /* Read one byte data */ scalar = SPI_SPIBUF & 0xFF; /* Clear the Data */ SPI_SPIBUF = 0; } else { /* Read one byte data */ scalar = SPI_SPIBUF & 0xFF; return SPI_EFAIL; } } return SPI_EOK; }
此致
Shankari G
是的、我已经能够构建 NOR 编写器代码。 我已经对其进行了修改、以报告单元从存储器发送和接收的内容。
我检测了 SPI 线路、以验证 C6657和自定义硬件上的 SPI 存储器之间的通信、使其尽可能靠近 C6657 (例如、内联终端电阻器)。 在查看这些数据时、我可以看到读取和写入事务。 (即 CS0变为低电平、CLK 切换、MOSI 和 MISO 发生相应变化、CS0返回高电平)。 通过链路传输的数据在传输到存储器和从存储器的数据中看起来都是正确的。
现在知道探针已正确连接并正常工作、我将定制硬件的引导模式引脚更改为 SPI 引导并重新为电路板供电。 C6657从复位状态中释放后、我可以看到 SPI 时钟线正在生成8个时钟脉冲的重复组。 然而、芯片选择线路一直为高电平(即未激活)!!!! 这就排除了 SPI 存储器返回适当数据以引导处理器的能力。
现在、我已经仔细检查重置行、以确保设备正常退出重置。 复位 按以下顺序停用。 LReset*(始终为高电平)、Reset*、100mS 延迟、POR*、100mS 延迟、 然后是 ResetFull *。 ResetStatus*在 ResetFull*变为活动状态5ms 后变为高电平。 我还验证了在 ResetFull 变为无效之前 CoreClk 存在很长时间。
(即、似乎处理器已正确退出复位)
问题:
我希望在周末使用 EVM 重新进行这些测试 、以比较两块板之间的运行情况。
其他研究问题:
重新阅读 了数据表中有关引导模式配置的部分、 SPRS814D 部分 6.28.2.7 SPI 引导器件配置、对此进行了几 次说明。
这让人非常沮丧...
也许是时候"扔掉"尝试让 SPI 直接启动运行、然后继续尝试为 I2C EEPROM 创建最小启动应用了???
考虑这个问题(即、RBL 似乎没有正确地直接从 SPI 端口加载代码)... 在前面的讨论中、我发现在尝试从 SPI 引导自定义硬件并连接调试器后、处理器正在从 RBL 内执行代码。 也许、代码停留在的位置可以为我提供有关直接从 SPI 引导问题的线索。 (即 PC 位于0x20B11B52:RBL 尝试在该位置执行什么操作?)
Brad、
这对您测试内存很好-读取和写入。
周末我做了一些有用的实验,可以帮助你
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4378495 #4378495"]问题:
我希望在周末使用 EVM 重新进行这些测试 、以比较两块板之间的运行情况。
[/报价]我想最有可能找到原因。
但是、您可能必须通过以较低频率在定制硬件中运行您的 SPI-NOR 来确认我。 (将很快向您发布实验步骤。 让我发布 EOD - 7 pm IST 的步骤)
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4378725 #4378725")在考虑此问题时(即 RBL 似乎无法直接从 SPI 端口正确加载代码)... 在前面的讨论中、我发现在尝试从 SPI 引导自定义硬件并连接调试器后、处理器正在从 RBL 内执行代码。 也许、代码停留在的位置可以为我提供有关直接从 SPI 引导问题的线索。 (即 PC 位于0x20B11B52:RBL 尝试在该位置执行什么操作?) [/报价]导致问题的不是 RBL。 主要原因是这… 请给予更多关注...
我做了一个重要实验、EVM 中的 SPI 在 C6657-GEL (-high frequency)和 RBL (-low frequency)设置的频率上工作。
-->(RBL 的 PLLM 值为"PLL_PLlm - 0x0000001F"、GEL 的 PLLM 值为"PLL_PLlm - 0x00000013")
但是、定制硬件中的 SPI 在 Saratoga_1313.gel 设置的频率上工作、但在最小配置期间不能与 RBL 设置的低频率一起工作。
===========
C6657-EVM
测试 | C6657-EVM.gel | RBL | |
C6657-EVM |
具有所有寄存器配置的 C6657 GEL PLLM -值- 0x00000013 |
且配置最小 PLLM -值- 0x0000001F |
|
引导结果 | 工作正常并引导应用程序 | 工作正常、从 NOR 引导应用程序 | |
结论 | SPI 在 PLLM 值为 0x00000013时工作 | SPI 在 PLLM 值为0x0000001F 时工作 |
===========
定制硬件
===========
测试 | Saratoga_1313.gel | RBL | |
定制硬件 |
具有所有寄存器配置的 C6657 GEL PLLM -值- |
且配置最小 PLLM - Value - (Brad 必须确认值为0x0000001F )* |
|
引导结果 | 工作正常并引导应用程序 | 不奏效 | |
结论 | SPI 在 PLLM 值为 0x00000013时工作 | 在 Saratoga_1313.gel 中输入 PLLM 值- 0x0000001F、并检查 SPI 是否在低频下工作。 |
(Brad,查找此值)*-在 GEL 文件上输入相同的 PLLM 值,并检查 SPI 是否正常工作。 如果不起作用、这意味着 SPI 在 RBL 设置的频率下不起作用。 这必须由您的硬件团队在您的定制板上进行调试。。
通常、如果定制硬件中的 SPI 在低频时不起作用、无论您选择何种引导、都将是一个问题。 (请考虑,因为它可能会影响您的后续开发点)
--
[引用 userid="476937" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4378495 #4378495"]也许是时候"扔进毛巾"尝试让 SPI 直接引导运行、然后继续尝试为 I2C EEPROM 创建最小引导应用程序了吗????确认 SPI 在 PLLM 值 0x0000001F 下工作后、让我们继续使用 IBL +应用程序。
此致
Shankari G
我不是说限制性商业惯例是问题。 我正在尝试了解 RBL 的操作以诊断问题。 如果您确切知道 RBL 的工作情况、那么 PC 在 PC=0x20B11B52周围执行代码这一事实将使您了解 RBL 尝试执行的操作和/或 RBL 未正确执行的原因(即缺少配置)。
[引用 userid="489828" URL"~/support/processors-group/processors/f/processors-forum/1134430/tms320c6657-ddr3-configuration-of-the-rbl-or-ibl-for-booting-custom-hardware/4380512 #4380512"]定制硬件
===========
测试 | Saratoga_1313.gel | RBL | |
定制硬件 |
具有所有寄存器配置的 C6657 GEL PLLM -值- |
且配置最小 PLLM - Value - (Brad 必须确认值为0x0000001F )* |
|
引导结果 | 工作正常并引导应用程序 | 不奏效 | |
结论 | SPI 在 PLLM 值为 0x00000013时工作 | 在 Saratoga_1313.gel 中输入 PLLM 值- 0x0000001F、并检查 SPI 是否在低频下工作。 |
(Brad,查找此值)*-在 GEL 文件上输入相同的 PLLM 值,并检查 SPI 是否正常工作。 如果不起作用、这意味着 SPI 在 RBL 设置的频率下不起作用。 这必须由您的硬件团队在您的定制板上进行调试。。
[/报价]谢谢、
Brad
Brad、
让我们立即设置一个呼叫。
在 IST 的下午4点接听电话是否正常?
此致
Shankari G
Brad、
如果是短时间通知、我们将在 IST - 27-10-2022的下午2点拨打电话。
此致
Shankari G
我计划在明天早些时候(10月27日凌晨3点前到达 CDT、时间是 IST 10月27日凌晨1:30)。 请重新安排 10月27日下午2点的电话。
谢谢、
Brad
好的、Brad。
将于10月27日下午2点安排并发送邀请。
--
同时、让我们来做...
以上是上述实验的步骤。
================================================================
1.下载此 GEL 文件(我已修改)-(如下所示)
2.在您的定制硬件中运行。
3.以 txt 格式共享 GEL 控制台输出(请不要作为快照)
4.生成寄存器转储--选项-->视图-->注册-->右键单击-->导出-->选择扩展名为.txt 的名称和路径-->选择全部-->单击确定
5.以 txt 格式发送该寄存器转储。
6.加载 NOR 写入器.out。
闪存 app.dat (如下所示)
8.共享控制台消息“已成功刷新”。(如果收到错误,请也共享)
9.将引导设置更改为 SPI-NOR。
10.共享 PC 计数器值。
11.祝你度过美好的一天! 再见、Brad。
--
e2e.ti.com/.../saratoga_5F00_1333_5F00_26oct.gel
此致
Shankari G
GEL 文件输出
C66xx_0: GEL Output: *** Connecting Target... C66xx_0: GEL Output: DSP core #0 C66xx_0: GEL Output: DEVSTAT 0x00000501 C66xx_0: GEL Output: Bootmode = 0x00000000 C66xx_0: GEL Output: File: Saratoga_1333.gel C66xx_0: GEL Output: File Ver is 1.0 C66xx_0: GEL Output: Global Default Setup... C66xx_0: GEL Output: Setup Cache... C66xx_0: GEL Output: L1P = 32K C66xx_0: GEL Output: L1D = 32K C66xx_0: GEL Output: L2 = ALL SRAM C66xx_0: GEL Output: Setup Cache... Done. C66xx_0: GEL Output: Main PLL (PLL1) Setup ... C66xx_0: GEL Output: PLL in Bypass ... C66xx_0: GEL Output: pll_multiplier = (31) C66xx_0: GEL Output: PLL1_PLLM = (31) C66xx_0: GEL Output: PLL1_CMD = (1) C66xx_0: GEL Output: PLL1 Setup for DSP @ 1600.0 MHz. C66xx_0: GEL Output: SYSCLK2 = 533.333313 MHz, SYSCLK5 = 320.0 MHz. C66xx_0: GEL Output: SYSCLK8 = 25.0 MHz. C66xx_0: GEL Output: PLL1 Setup... Done. C66xx_0: GEL Output: Power on all PSC modules and DSP domains... C66xx_0: GEL Output: Power on all PSC modules and DSP domains... Done. C66xx_0: GEL Output: DDR3 PLL (PLL2) Setup ... C66xx_0: GEL Output: Mult: 79 Divider:2 C66xx_0: GEL Output: DDR3 PLL Setup... Done. C66xx_0: GEL Output: DDR3 Init begin (1333 auto) C66xx_0: GEL Output: XMC Setup ... Done C66xx_0: GEL Output: IFRDY bit is SET: DDR3 Interface Ready C66xx_0: GEL Output: DDR3 initialization is complete. C66xx_0: GEL Output: DDR3 Init done C66xx_0: GEL Output: DDR3 memory test... Started C66xx_0: GEL Output: W:(0x80000100) ... C66xx_0: GEL Output: W:(0x80000200) ... C66xx_0: GEL Output: W:(0x80000300) ... C66xx_0: GEL Output: R:(0x80000100) ... C66xx_0: GEL Output: R:(0x80000200) ... C66xx_0: GEL Output: R:(0x80000300) ... C66xx_0: GEL Output: WC:(0x80000100) ... C66xx_0: GEL Output: WC:(0x80000200) ... C66xx_0: GEL Output: WC:(0x80000300) ... C66xx_0: GEL Output: RC:(0x80000100) ... C66xx_0: GEL Output: RC:(0x80000200) ... C66xx_0: GEL Output: RC:(0x80000300) ... C66xx_0: GEL Output: DDR3 memory test... Passed C66xx_0: GEL Output: PLL and DDR3 Initialization completed(Retry Cnt:0) ... C66xx_0: GEL Output: Enabling EDC ... C66xx_0: GEL Output: L1P error detection logic is enabled. C66xx_0: GEL Output: L2 error detection/correction logic is enabled. C66xx_0: GEL Output: MSMC error detection/correction logic is enabled. C66xx_0: GEL Output: Enabling EDC ...Done C66xx_0: GEL Output: Global Default Setup... Done.
4.寄存器转储
e2e.ti.com/.../TI_5F00_Oct26_5F00_Registers.txt
8.刷写 app.dat 文件
遇到问题、 使用我修改过的 norwirter 加载 app.dat 文件(唯一不同的是添加了 print 语句)。 加载到地址0x8000000长度0xf0000的文件。
(笑声)
谢谢、
Brad