主题中讨论的其他器件:SysConfig
工具与软件:
各位专家、您好!
每当从 UART 接收到特定字符串时、我都需要执行芯片复位。
函数 SOC_generateSwWarmResetMainDomain()在收到特定消息后调用、固件执行停止、但从不重新启动。
我缺少什么吗?
此致、
Andrea
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.
Anil、您好!
我将向您发送该项目。
e2e.ti.com/.../uart_5F00_reset.zip
在 UART 上接收到消息01 10 00 00 00 02 04 00 00 00 01 32 6F (HEX)之后调用复位 API: CONFIG_UART0_RS485。
void modbus_writeDoubleWord(modbusReg_struct *regType) { switch(regType->regPointer) { case 0: if (regType->value == 1) regType->resetDrive = 1; break; default: regType->error = C_MODBUS_ERROR_REGISTER_UNDEFINED; break; } }
接收到消息后、标志"regType->resetDrive"将设置为1 (第7行)。
//Reset driver if requested if(regType.resetDrive) { //Wait for trasmit to finish while(uartType->txBusy) { shs_UART_trasmit_check_done(uartType); } //Reset MCU SOC_generateSwWarmResetMainDomain(); //TODO: Verificare reset }
函数"Modbus_detect"检查 "regType->resetDrive"的值并 调用"SOC_generateSwWarmResetMainDomain();"。
引导模式设置为 OSPI 模式、微软件位于 OSPI 闪存中。
目标是在复位后开始执行闪存内的固件。
BR、
Andrea
安德烈、您好!
您能否确认控件是否位于上述代码的第10行?
如果控制转向第10行、那么 SOC 将通过复位。
复位后、SOC 引导流程从 RBL→SBL OSPI→Application 开始。
同样、应用程序全新启动。 目前、我怀疑您的代码是否真的是转到第10行的控件。
是否使用 XIP 模式? SBL 始终从外部闪存中选择一个应用映像、并将其放入 DDR/MSRAM 存储器中。 因此、当您使用 XIP 模式时、您需要将代码保存在闪存而非 RAM 存储器中。
如果您使用的是 XIP 模式、请按照以下步骤操作。
此致、
Anil。
安德烈、您好!
您能否共享 UART 日志?
我感觉 SOC 正在复位。
另外、我假设您希望 CCS 根据您的代码新鲜运行、而这不会发生、因为当您从 CCS 加载示例时、CCS 将直接将数据写入 MSRAM/DDR 位置、复位后、内容将丢失、代码也不会从应用程序执行。
您只需确认 SOC 是否正在执行复位。 只需检查 UART 日志、每次复位时都会打印 SBL 日志、这会确认 SOC 是否复位。
此致、
Anil。
您好!
我刚刚查看了 UART 日志。
引导模式引脚的设置方式是主引导模式为 OSPI、备用引导模式为 UART。
当我为电路板加电时、SBL 设法使用 OSPI 加载闪存固件。
日志:
DMSC 固件版本9.0.7--v09.00.07 (Kool Koala)
DMSC 固件版本0x9
DMSC ABI 修订版3.1
[bootloader_profile]引导介质:NOR SPI 闪存
[bootloader_profile]引导介质时钟:100.000 MHz
[bootloader_profile]启动映像大小:108 KB
[bootloader_profile] Cores present:
r5f0-0
[引导加载程序配置文件] SYSFW init:12183us
[引导加载程序配置文件] System_init:5366309us
[引导加载程序配置文件] Drivers_open : 276us
[引导加载程序配置文件] Board_driversOpen:73us
[bootloader profile] Sciclient 获取版本: 9844us
[引导加载程序配置文件] CPU 负载:180616us
[bootloader_profile] SBL 总耗时时间:200596us
图像加载完成、切换到应用程序...
我注意到、当发出软件复位(SOC_generateSwWarmResetMainDomain)时、IC 进入备用引导模式。
日志:
000000000011a0000616d36347800000000000048534653000002000000020002a6000000000000b018658ad99dc903c8c9bfb27b12751099920a042ad1dcd7b
出于某种原因、SBL 无法从 OSPI 闪存加载固件、而是使用备用引导模式。
BR、
Andrea
Anil、您好!
在将定制 SBL 工程与 TI 的 SBL ospi 进行比较后、我可以确认唯一的区别是所使用的闪存器件;该电路板使用的闪存与评估板不同。
我尝试过的:
1)我尝试在自定义 SBL 项目的 main 的第一行添加一个对"loop_forever ();"的调用以进行调试。
/* call this API to stop the booting process and spin, do that you can connect * debugger, load symbols and then make the 'loop' variable as 0 to continue execution * with debugger connected. */ void loop_forever(void) { volatile uint32_t loop = 1; while(loop) ; } int main(void) { int32_t status; loop_forever(); Bootloader_profileReset(); Bootloader_socWaitForFWBoot();
上电时、整个程序正确执行、 主项目启动。
在主应用程序发出"SOC_generateSwWarmResetMainDomain();"调用后、MCU 将进入备份引导模式、而不进入闪存中加载的自定义 SBL。
2) 2)我尝试向函数添加调用
Board_driversClose ();
drivers_close();
board_deinit();
system_deinit();
就在"SOC_generateSwWarmResetMainDomain();"之前,但没有任何变化。
BR、
Andrea
安德烈、您好!
[报价 userid="525901" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1485530/am2434-software-reset/5736489 #5736489"]我的建议是、 使用 TI SBL 并确认此问题是否仍然存在。
这将确认您的 SBL 创建问题或应用程序创建问题。
[报价]请也执行此步骤。这将提供有关 SBL 创建问题或应用程序的信息。
我将把您的查询转给 SBL 专家。
通常、引导流程会返回到备份模式、这种方式不正确。
如果不知道 SBL 为什么要返回备份引导模式 、则在这里驱动程序可能没有帮助。
好的、让 SBL 专家来评论这个问题。
请使用什么协议(如8D 8D 8D 或任何其他协议或闪存器件型号和 syscfg)共享闪存详细信息、这有助于我们调试闪存侧的问题。
此致、
Anil。
Anil、您好!
尝试使用 TI SBL 后、复位工作正常:电路板成功复位、芯片进入 OSPI 引导模式。
以下是有关闪存的一些详细信息:
-设备: W25Q128JVSIM.
-方案:4S-4S-4S
在 zip 文件夹中、您可以找到定制 SBL 的工程
e2e.ti.com/.../HT_2D00_NET_5F00_sbl_5F00_ospi.zip
BR、
Andrea
看起来很有趣、我提到了一个非常接近于您看到的数据表。
如果设置使用 OSPI 闪存 IO、则闪存和 OSPI 部分被排除。 我们需要查看代码。
我会从闪存和 OSPI 的角度给它一个绿色标志。
此致、
Vaibhav
您好!
我指的是此数据表:
https://www.mouser.it/datasheet/2/949/w25q128jv_dtr_revc_03272018_plus-1489858.pdf
BR、
Andrea
您好!
[报价 userid="541459" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1485530/am2434-software-reset/5745228 #5745228"]我指的是此数据表:
https://www.mouser.it/datasheet/2/949/w25q128jv_dtr_revc_03272018_plus-1489858.pdf
[报价]我昨天参考了这个数据表、看到有另一个表格说明了4-4-4协议的支持情况、因此该表格有效。
正确、我正在尝试找出导致自定义 SBL OSPI 无法正常工作的原因。
我还会在默认 SBL OSPI 与您发出的 SBL OSPI 之间进行比较。 如果您有发现问题、请及时通知我、我也会在同一时间进行解答。
此致、
Vaibhav
您好!
[报价 userid="541459" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1485530/am2434-software-reset/5741774 #5741774"]在 zip 文件夹中、您可以找到定制 SBL 的工程
[报价]我在这里有疑问。
您说过这是定制 SBL OSPI。
但我看到的只是 SysConfig 的 OSPI 和闪存部分的更改、并且 main、.c 中的代码与默认 MCU + SDK 9.00.00.35所提供的代码相同。
我是否遗漏了一些内容或您已对源/驱动程序进行了更改?
期待您的答复。
此致、
Vaibhav