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.

[参考译文] CCS/MSP430F5438A:UART3上的自定义 BSL 由软件调用、但立即退出

Guru**** 2589275 points
Other Parts Discussed in Thread: MSP430F5418A, MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/747470/ccs-msp430f5438a-custom-bsl-on-uart3-is-invoked-by-software-but-exit-immediately

器件型号:MSP430F5438A
主题中讨论的其他器件:MSP430F5418A

工具/软件:Code Composer Studio

大家好、我正在使用 CCS 8.1我正在使用从 TI 网站下载的自定义 BSL 项目、我修改了该项目、并添加了 UART 源代码示例。 我调试 BSL、并且在调试打开的情况下从 CCS 进行午餐时工作得很好。 我使用 BSL Scripter 进行了测试、现在工作正常。 问题是当我尝试使用0x1000上的跳转来从应用程序调用 BSL 时、BSL 会执行、但在函数_system_preinit()中、当它想执行 DINT()时、跳转到主应用程序0x5c00地址。  

在主应用程序中,我使用命令  __BIC_SR_register (GIE)停止了中断; 使用命令 (void (*.))0x1000)()进行跳转;

我缺少什么? 我怀疑问题出在 BSL430_Low_level_Init.asm 中、但我不知道。

谢谢、

克劳迪乌

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

    您好、Claudiu、


    您是否知道提供的片上 BSL 基于 UART? 此外、提供的定制 BSL 示例也是 UART。 尽管在这两种情况下、它都是基于计时器的 UART、与典型的 UART 引脚不一致。 如果您只想更改一个基于 USCI 的 UART、那么您只需要在外设接口代码中更改、而不是触摸 BSL 的其余部分。

    我可以看到的一个问题是、您使用 CCS 进行 BSL 开发工作。 在为最小的大小进行编译时、CCS 不如 IAR 好、这可能会导致一些 BSL 超出 BSL 部分的2kB 限制。 因此、如果您在进行硬件进入时执行批量擦除、则可能会烧毁一些 BSL、因此软件进入不起作用。

    需要考虑的另一个方面是、在通过软件条目进入 BSL 之前、您需要确保中断被关闭、并且芯片已经将 BSL 使用的所有外设复位至它们的缺省 BOR 状态。 这是因为 BSL 假定您来自硬件条目、因此来自复位状态。 这意味着 BSL 假定它使用的所有外设(包括时钟)的默认配置、并且只修改它为了正确启动所需的寄存器设置的绝对最小值。 因此、如果您在应用中使用外设(或不同的时钟设置)、并且它不在进入 BSL 时的默认功率中、则 BSL 最终会出现配置错误、从而导致使用 BSL 时出现问题。

    另一个问题是、如果您正在调试定制 BSL、当代码位于 BSL 部分时、很难正确调试。 EEM 可能会报告部件所在位置的错误状态。 因此、建议在开发过程中将定制 BSL 代码移至应用空间、以实现正确调试。 一切正常后、将 BSL 代码移至存储器中的适当区域。 更多信息、请参阅定制 BSL 应用手册中的"1.5 BSL 开发和调试"部分。 (http://www.ti.com/lit/slaa450)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jace、我很确定所有中断都已关闭、我将检查寄存器的状态以查看它们是否处于默认配置。 我已经调试了我的 BSL、并且工作正常。 我在几年前测试过计时器 A BSL、但现在我需要 UCA2 UART 上的 BSL。 月份我遇到了一些问题,因为我没有看到示例中的链接器文件名为 lnk_msp430f5438A.... 但内部是没有 UCA2的 msp430f5418A 的链接器。 这很糟糕、我花了这么多时间去弄清楚、我认为你们应该在文档中为我评论这个问题、这是很难看到的。 但我想现在是关于它的大小。 我将进行一些调查、看看会发生什么情况。

    此致、
    Claoo
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的反馈 Claudiu。 目前、我将在您进行调查时关闭此帖子。 如果您回复此主题帖、它将重新打开。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    实际上、你是对的、我的 BSL 的大小是问题所在。 由于超出了 BSL 区域、因此将一些代码放置在0x10000 FLASH2区域。 我修改了应用程序的 lnk 文件、并将 FAH2区域从0x11000放置、它运行得非常完美。 非常感谢。 我将尝试使我的 BSL 更小、是否有任何建议或文档?

    此致、

    Claoo   

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

    如果您可以访问 IAR、则在编译大小时会做得更好。 除此之外、以下应用手册可能对您有所帮助。

    MSP430优化 C/C++编译器 http://www.ti.com/lit/slau132
    使用 MSP430TmMCU 优化 C 代码大小:提示和技巧 http://www.ti.com/lit/slaa801