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.

[参考译文] MSP432E401Y:将 BSL (USB-DFU)应用于 TI-RTOS 示例:BSL 无法激活 TI-RTOS 应用程序、但应用程序在调试中工作

Guru**** 2535750 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1043370/msp432e401y-apply-bsl-usb-dfu-to-ti-rtos-example-bsl-fail-to-activate-the-ti-rtos-application-but-the-application-works-under-debug

器件型号:MSP432E401Y
主题中讨论的其他器件:UNIFLASH

大家好、 我目前正在尝试将引导加载程序实现到 TI-RTOS 的代码中。 但是、除了 notROTS 示例之外、我找不到任何其他示例。 因此、我按照给定的示例和一些线程的答案来处理它。

在实现过程中、我在  命令行中使用 BSL 脚本编写器测试代码、我很不幸运。 因此、我认为我应该只使用 CCS 调试模式进行调试、我已经成功地使 它运行。 我开始调试、然后将 script_1.txt 上载到电路板并重新开始调试。 程序工作正常、可以从 BIOS_exit 触发跳转模式。 但是、对于 BSL 脚本编写器来说、这个仍然不起作用。 因此、我提出了一种不同的方法。 我从程序中生成一个.txt 文件、并尝试通过 Uniflash 进行上传。 这个方法可以上传程序并且只有当我选择擦除配置来擦除并且只下载必要的段时、程序才起作用。 这个结果让我觉得我对代码有疑问、那就是当我运行 BSL 脚本编写器时擦除主存储器的任何内容。 但是、我找不到导致它的任何东西。 如果有人有任何想法、请提供帮助。  

我将使用按钮式 TI-RTOS 示例测试 BSL、下面是我进行更改的一些步骤

1.cmd 文件:  

a.闪存(RX):origin = 0x00004000,length = 0x000FC000  

B.各款

.intvecs:> app_base
.text:> FLASH
.const:> FLASH
.rodata:> FLASH
.cinit:>闪存
.pinit:> FLASH
init_array:> FLASH

.vtable:>0x20000000

2..cfg 文件

m3Hwi.resetVectorAddress = 0x4000;/* App base *

3.主要应用:  

a.添加 Jumpotootloader 函数

void JumpToBootLoader (void);
空 JumpToBootLoader (空)

/*在进入之前,我们必须确保关闭 SysTick 及其中断
*引导加载程序! *
map_SysTickIntDisable();
map_SysTickDisable();

/*禁用所有处理器中断。 而不是逐个禁用它们
*时间、执行到 NVIC 的直接写入来禁用所有外设
*中断。 *
NVIC->icer[0]= 0xffffffff;
NVIC->icer[1]= 0xffffffff;
NVIC->icer[2]= 0xffffffff;
NVIC->icer[3]= 0xffffffff;

//从引导加载程序的矢量加载栈指针
//__set_msp (*(volatile uint32_t*) 0x00);

/*将控制权返回给引导加载程序。 这是对 SVC 处理程序的调用
*。 *
(*(void (*)(void))(*(uint32_t*) 0x2C))();

2.添加函数 RTOS 退出(main_tirtos.c 的第126行)

int main (空)

pthread_t 线程;
pthread_attr_t atttrs;
struct sched_param primParam;
int retc;

Board_init();

/*使用默认值初始化属性结构*/
pthread_attr_init (atttrs);

/*设置优先级、分离状态和堆栈大小属性*/
priParam.sched_priority = 1;
retc = pthread_attr_setschedparam (&attrs、&priParam);
retc |= pthread_attr_setdetachstate (&attrs、pthread_create_detachstate);
retc |= pthread_attr_setstacksize (&attrs、THREADSTACKSIZE);
如果(retc!= 0){
/*无法设置属性*/
while (1){}

retc = pthread_create (&thread、&attrs、mainThread、NULL);
如果(retc!= 0){
/* pthread_create()失败*/
while (1){}


System_atexit (JumpToBootLoader);

BIOS_start();

返回(0);

4. rtos.c

BIOS_exit (1);触发(buttonled.c 处的第146行)

if (button_ev_clicked =(事件和 button_ev_clicked))

bStats.clicked++;
bStats.lastpresedduration =
button_getLastPresedDuration (handle);

/*将事件放入环状缓冲区进行打印*/
RingBuf_Put (&ringObj、事件);

if (LED_State_闪烁= LED_getState (LED))

LED_STOPINCING_FLOCING_LECK_LED
LED_setoff (led);

其他

LED_TOGGLE (led);
BIOS_exit (1);

非常感谢  

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

    为您提供一些想法、从 TI-RTOS 任务跳转到 ROM USB BSL 可能是另一个选项。

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

    感谢您的想法。

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

    问题已解决。 原因是 这是 BSL 在读取.txt 文件时出现错误。  .txt 文件对齐不是新地址之前4个字节的倍数、因此会出现错误。 这  讨论它的主题。   我们所需要的就是 用0xFF 来填充间隙。

    以下是链接失败时的解决方案。