Part Number:AWR2944Other Parts Discussed in Thread: UNIFLASH
你好,工程师
请问有关于awr2944的在线升级(OTA)方案吗?
谢谢
Shine:
可以参考下面的帖子。https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/1077334/iwr6843levm-does-iwr6843-support-ota-or-remote-upgrade
,
ZhiQiang Lin:
你好
如上面的帖子,SBL应该是在.appimage烧写之后,将appimage文件加载到对应的cpu的。我需要的是如何在AWR2944处于qspi boot mode的情况下,通过串口向flash写入新的.appImage文件。
1.了解到正常的烧写应该切换到uart boot mode,并且烧写需要3个文件uart_uniflash.release.tiimage 、sbl_release.tiimage 、appimage文件,其中第一个文件uart_uniflash.release.tiimage是引导后两个文件烧写到flash中的固定位置的。在qspi boot mode的情况下,能否每次更新固件只烧写.appimage文件,保持SBL和uart_uniflash文件不变?或者能否在不更换SOP的情况下,通过寄存器实现boot模式的切换?
2.在烧写完成后,需要复位AWR2944使其重新从flash中boot,请问要怎么实现软复位?
3.注意到通过串口的烧写过程较慢,需要约1分钟,串口的模式为interrup模式,readmode为block,所以要先暂停DPC和frame,然后在烧写完成后重启,请问要如何实现?
4.在1.中提到的uart_uniflash.release.tiimage会在DSS的L3分配一块内存暂存从串口收到的.appimage文件,再写入到flash中,请问在板子正常工作时,怎样通过MCU这边的程序在DSS上申请内存,有什么函数可以查看当前2944的内存使用情况?
,
ZhiQiang Lin:
对于上面的2,有没有类似文档Soft Reset Using CLI User Guide (ti.com)中提到的复位的方法,如果有应该往哪个寄存器地址写什么?
,
Cherry Zhou:
您好,我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!
,
ZhiQiang Lin:
你好,
对于上述的第2点,我在论坛上找到一个相关的帖子AWR2944: Warm reset is reinitializing the MSS_L2 and DSS_L3 RAM – Sensors forum – Sensors – TI E2E support forums,我按照里面的做法对代码做了更改并重新生成并更新了sbl_qspi.tiimage文件,但是仍然不起作用,当使用CLI命令输入reset的指令后,板子就宕机了,并没有重新进入SBL。
,
ZhiQiang Lin:
你好
谢谢你在英文论坛上帮忙提问。关于解答的第二点,调用函数Bootloader_runSelfCpu只会重置ARM R5F我在CLI中定义的函数中调用该函数后,程序直接宕机了,而且该函数在SBL的main程序中的位置是SBL引导.appimage文件完成后。我想要实现的是当收到CLI命令后,可以重新运行SBL函数,及从RBL开始运行。
,
ZhiQiang Lin:
参照AWR2944EVM: How to reset all program(include bootloader) by software – Sensors forum – Sensors – TI E2E support forums,在SDK4.3.1版本可以使用CLI命令进行复位,但是在SDK4.2.2版本仍无法使用
,
Cherry Zhou:
以下是英文论坛的链接,您可以多多关注工程师的答复:
e2e.ti.com/…/4514988
,
ZhiQiang Lin:
你好
关于在qspi模式下通过串口接收上位机发送的appimage文件,在uart boot mode下,使用uart_uniflash.tiimage烧写脚本,其中使用xmodem协议从串口接收appimage文件,但是在qspi模式下不具备该烧写脚本,能否直接使用uart_read函数读取文件?会不会出现文件读取错误?
请详细的说明一下如何在DSS的L3上开辟内存用于临时存储appimage,然后写入到flash中?在回答中提到的函数Bootloader_socMenInitCpu中会初始化关于L3的bank,而不是分配内存,我在uart_uniflash.c中的中看到了如下内存申请的方式
#define BOOTLOADER_UNIFLASH_MAX_FILE_SIZE (0x200000) /* This has to match the size of DDR section in linker.cmd */
uint8_t gUniflashFileBuf[BOOTLOADER_UNIFLASH_MAX_FILE_SIZE] __attribute__((aligned(128), section(".bss.dss_l3")));
在uart_uniflash.c的main函数中调用了函数Bootloader_socCpuPowerOnReset(CSL_CORE_ID_C66SS0);在该函数的内部有调用上面提到的函数Bootloader_socMenInitCpu,请问这种方式是否可行?我尝试用这种方法进行内存分配时,当调用函数Bootloader_socCpuPowerOnReset后,程序宕机了,请问是为什么?是否需要先关闭DSP核再调用该函数?
谢谢
,
Cherry Zhou:
您好,
ZhiQiang Lin 说:关于解答的第二点,调用函数Bootloader_runSelfCpu只会重置ARM R5F我在CLI中定义的函数中调用该函数后,程序直接宕机了,而且该函数在SBL的main程序中的位置是SBL引导.appimage文件完成后。我想要实现的是当收到CLI命令后,可以重新运行SBL函数,及从RBL开始运行。
ZhiQiang Lin 说:参照AWR2944EVM: How to reset all program(include bootloader) by software – Sensors forum – Sensors – TI E2E support forums,在SDK4.3.1版本可以使用CLI命令进行复位,但是在SDK4.2.2版本仍无法使用
以上两点工程师已跟进,您可以多多关注。
ZhiQiang Lin 说:
关于在qspi模式下通过串口接收上位机发送的appimage文件,在uart boot mode下,使用uart_uniflash.tiimage烧写脚本,其中使用xmodem协议从串口接收appimage文件,但是在qspi模式下不具备该烧写脚本,能否直接使用uart_read函数读取文件?会不会出现文件读取错误?
请详细的说明一下如何在DSS的L3上开辟内存用于临时存储appimage,然后写入到flash中?在回答中提到的函数Bootloader_socMenInitCpu中会初始化关于L3的bank,而不是分配内存,我在uart_uniflash.c中的中看到了如下内存申请的方式
#define BOOTLOADER_UNIFLASH_MAX_FILE_SIZE (0x200000) /* This has to match the size of DDR section in linker.cmd */
uint8_t gUniflashFileBuf[BOOTLOADER_UNIFLASH_MAX_FILE_SIZE] __attribute__((aligned(128), section(".bss.dss_l3")));
在uart_uniflash.c的main函数中调用了函数Bootloader_socCpuPowerOnReset(CSL_CORE_ID_C66SS0);在该函数的内部有调用上面提到的函数Bootloader_socMenInitCpu,请问这种方式是否可行?我尝试用这种方法进行内存分配时,当调用函数Bootloader_socCpuPowerOnReset后,程序宕机了,请问是为什么?是否需要先关闭DSP核再调用该函数?我们跟进给工程师看下。