“线程”中讨论的其它部件:TMDXICE3359,
您好,
我正在调试模式下使用评估板“TMDXICE3359”上的 TIDEP0032应用程序。
主应用程序识别到正确的协议后,执行指令“HWREG (0x44E00F00)= 0x2;”[在使用重新寻号“协议 ID”写入 RTC_SCRATCH0_REG 寄存器后]。
执行此操作时,调试会话将过期,应用程序将重新启动。 如何在重新启动时下载已识别的堆栈?
此致
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.
您好,
我正在调试模式下使用评估板“TMDXICE3359”上的 TIDEP0032应用程序。
主应用程序识别到正确的协议后,执行指令“HWREG (0x44E00F00)= 0x2;”[在使用重新寻号“协议 ID”写入 RTC_SCRATCH0_REG 寄存器后]。
执行此操作时,调试会话将过期,应用程序将重新启动。 如何在重新启动时下载已识别的堆栈?
此致
您好,Andrea,
感谢您提出问题。
请参阅设计指南 中的第4.3节-多协议工业以太网检测-功能序列:https://www.ti.com/lit/pdf/tidua28
您需要创建一个“引导加载程序”应用 程序,该应用程序读取寄存器0x44E00F00并解释其值。 基于此寄存器值,引导加载程序可以加载“协议特定应用程序”或“检测应用程序”。 在 Bootloader 跳到加载的应用程序之前,它需要清除寄存器 0x44E00F00中的值。
其他一些注意事项:
1.在 ARM 发出冷启动(重置)后,寄存器0x44E00F00将保留其内容。 因此,此寄存器用于将数据字节从“检测应用程序”交换到“引导加载程序”。 这意味着“检测应用程序”可以告诉引导加载程序检测到了哪种协议。 有关其他引导加载程序编程,请参见要点3。
预期 JTAG 调试会话会断开连接,因为发出冷启动(重置)正在重新启动 ARM。 如果需要调试任何内容,您可以在 JTAG 中使用 HW 断点,在特定的指令位置停止。 或者让系统运行,以便引导加载程序可以按编程方式工作。
3.修改后的引导加载程序不是 TIDEP0032的一部分。 您需要根据您的引导加载程序示例自行对此进行编程。 原则上,修改后的引导加载程序需要在寄存器 0x44E00F00中读取,确定其要加载的应用程序软件的值(IE 协议应用程序之一或“检测应用程序”),将应用程序加载到内存中,清除寄存器 0x44E00F00,然后跳到内存位置以执行应用程序。
如果您还有其他问题,请告诉我。
此致,
托马斯
bootloader 随处理器 SDK RTOS 一起提供。 通常,它是预编译的图像,我认为对于 AM335x,它在放入 SD 卡时称为 MLO。 您可以识别名称 MLO。
在 RTOS 文档中,引导加载程序称为辅助引导加载程序 :https://software-dl.ti.com/processor-sdk-rtos/esd/docs/06_03_00_106/AM335X/rtos/index_faq.html#secondary-bootloader
在我的设置中(我可能没有最新版本),SBL 引导加载程序位于: C:\ti\PDK_AM335x_1_0_17\packages \ti\startware\bootloader
这是您需要将自定义设置添加到的 C 源代码文件。 如果您需要有关如何构建 bootloader 的其他指导,请在处理器论坛中提交一个新的 e2e 问题。
此致,
托马斯
您好,Andrea,
我还从原演示者那里挖掘了一些旧的 bootloader 片段。 请注意,这是基于2015年以后的较旧的引导加载程序版本,因此您将在当天的引导加载程序中找不到相同的部分。 但是,它将为您提供一些有关我们添加到引导加载程序的机制的指导,以根据内存位置0x44E00F00的内容加载不同的映像。 我们添加的文本代码以绿色插入,但被调用的函数很可能在当前引导加载程序中不兼容1:1,您需要将其移植到当前环境中。
我们在 SD 卡上放置了所有多协议软件映像,引导加载程序确实加载了相应的文件名。 “APP”图像是 TIDEP0032的“检测应用程序”。
希望这对我们有更多帮助,
托马斯
这来自文件: bl_hsmmcsd.c
枚举 app_selector
{
Selector 应用程序= 0,
EtherCAT =1,
Profinet = 2,
EtherNetIP =3,
Powerlink = 4,
SERCOS3 = 5
};
/**
*\简介此功能通过读取将应用程序映像复制到 DDR
*标题信息。\n
*
*\param -无。\n
*
*\返回 E_PASS -成功时,E_FAIL 失败时。\n
*
*
内部 HSMMCSDImageCopy (void)
{
FRESULT 结果;
无符号短 usBytesRead =0;
无符号字符*destAddr =(无符号字符*)DDR_START_ADDR;
未签名字符 header_read =0;
无符号字符 buer_indx =0;
TI_HEADER temp_HEADER;
字符*fname ="/app";
/*开始:添加用于多协议演示。 基于中的值
* RTC Scratch0,MMCSD 对应的二进制文件将是
*已执行
* Scratch0值- enum app_selector
*
无符号 int app_SEL = RTCSatchPadGet (SOC_RTC_0_regs,0);
//if (app_SEL = selecter_app)
// fname ="/sel_app";
IF (app_SEL = EtherCAT)
fname ="/ecat 应用程序";
否则 IF (app_SEL = PROFINET)
fname ="/pn_app";
否则,如果(app_SEL == EtherNetIP)
fname ="/eip_app";
否则,如果(app_SEL == POWERLINK)
fname ="/pl_app";
否则,如果(app_SEL = SERCOS3)
fname ="/s3_app";
/*将 SCRATCH0值重置为默认值(selecter_app)*/
RTCWriteProtectDisable (SOC_RTC_0_regs);
RTCScratchPadSet (SOC_RTC_0_regs,0,0);
/*
**打开文件进行阅读。
*
fresult = f_open (&g_sFileObject,fname,fa_read);