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/MSP430F5529:对引导加载程序的软件访问

Guru**** 676280 points
Other Parts Discussed in Thread: MSP430F5659, MSP-TS430PN80USB
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/657803/ccs-msp430f5529-software-access-to-bootloader

部件号:MSP430F5529
主题中讨论的其他部件:MSP430F5659MSP-TS430PN80USB

工具/软件:Code Composer Studio

长期以来,我一直通过软件可靠地触发此设备的引导加载程序,没有任何问题。

我刚刚做了一个小的主板响应,但我认为我没有对引导加载程序做任何重要的更改。

但是,当我指示设备(新主板)触发bootloader时,它会从USB卸载,但它不会作为HID设备安装,以便为新固件做好准备,而是重新安装为CDC设备。

软件是相同的。 旧主板仍可正常运行。 硬件触发的引导加载在新主板上仍然有效。

我有什么想法可以让软件bootloader命令失败?

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

    您是否要将PC更改为0x1000以跳转至BSL?
    当SW跳至BSL时,USB是否已连接?
    您是否通过主板旋转对USB电路进行了更改?
    您如何与主机端的USB BSL进行交互? 是否通过BSLscriptter?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    JH,是的,我的软件断开USB连接,停止中断,然后跳转至0x1000,USB已连接。 我使用TI固件更新程序示例上载新固件。 新主板在USB,电源等方面应该是一样的,我一直在查看示意图,看不到任何变化。 这一流程已经运行了6年,我以前从未见过这一故障。 传统主板是处理器C修订版,新的K修订版,我已经查看了勘误表,了解与此症状有关的任何信息。 硬件引导加载程序(启动时PUR高)在新主板上仍然工作。 代码相同。 我很困惑。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Alex,

    您是否能够淘汰旧版本的MCU并在旧版主板上使用新版本进行替换(或在新PCB上执行相反操作,即旧版本的MCU)? 这会告诉你很多问题是什么,并会限制可能的罪魁祸首。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为这是最后的办法。 我的原始开发板在某处,配有ZIF插座,我将尝试使用该插槽中的两个处理器。 勘误表列出了一些BSL修复,TI肯定不会破坏此函数?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的,我刚刚在MSP-FET430U64开发板的ZIF插槽中尝试了裸芯片。  

    Rev.C和Rev.E芯片工作正常。

     我的新版本上的Rev.K零件无法正常工作。

    新芯片作为HID设备出现,我可以将固件加载到其中。 但是软件BSL调用(PC到0x1000)失败,该部件只是作为CDC设备重新启动。 在通电过程中物理地将PUR拉至Vcc会访问bootloader。

    我有一批哑弹。 建议? 如何获得TI在这方面的帮助?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的装配公司已确认部件来源为Farnell,订购代码为186.6822万。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Alex,

    由于较新的设备通过硬件调用正确地进入USB BSL,而且它们似乎工作正常,这让我相信这是软件问题,而不是硬件问题。 从您正在处理的修订来看,已经实施了许多USB和BSL修复。 这可能与最新芯片上的USB BSL版本不兼容,而不是您的正常软件。

    我会尝试以下几种方法:

    • 通过SW条目进入BSL之前,确保将USB BSL使用的外围设备重置为重置状态(计时器B,USB等)。
      • 在进入SW之前,需要将这些外围设备重置为默认状态。这是因为BSL建立在假设您刚刚完成重置的基础上, 并且它使用的外围设备处于默认状态。 在执行SW条目时不是这种情况,因为寄存器保留在上次设置的状态而不是默认状态。 最近更新了BSL用户指南,以包括其使用的所有外围设备,因此可以进行这些调整。
    • 创建一个简单的裸机程序,在特定超时或按下按钮后,仅从SW条目进入USB。
      • 这将用作测试,以确保最简单的SW正常工作。
    • 将BSL更新到最新版本
      • 我们会定期更新BSL,但可能尚未更新到芯片的最新版本。 更新BSL可以解决一些已经解决的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jace,由于我目前正在处理Smartfusion和PIC,并且六年前已对MSP430进行了编码,您能否指导我参考一些应用说明,以获得以下方面的指导:
    将USB BSL使用的外围设备重置为重置状态
    更新BSL
    我真的不想在这个后期阶段对一个经过试验和验证的产品的代码进行更改。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在看MSP430BSL_1_00_12_00.zip,5529部分的唯一BSL图像似乎是i2c或UART bootloader。 我不需要USB BSL映像吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alex,

    对于BSL图像,在zip中导航至5xx_6xx_released_BSL_images -> MSP430F552x_550x_Family -> USB BSL。 此文件夹包含最新的BSL映像以及这些设备的上一个映像。 您可以查看BSL FLASH用户指南(http://www.ti.com/lit/slau319 ),查看您拥有的芯片的每个版本中加载了哪个版本。

    我们没有针对您所要求的内容的任何应用说明。 相关信息包含在上述BSL FLASH用户指南中。 但是,您可以从以下应用说明中看到一些常规BSL更新的价值。
    创建基于闪存的自定义引导加载程序(http://www.ti.com/lit/slaa450 )
    使用MSP430 MCU开始USB设计(http;//www.ti.com/lit/slaa457 )

    我上面没有介绍的另一个选项是,您可能会将最新修订芯片中的USB BSL版本降级为您的修订版本中使用的相同图像。 但是,建议不要这样做,因为不同版本之间的USB外设内芯片更改可能会导致冲突。 你可以尝试一下。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的错误,我在MSP430F522x中查找,我正在数盲! 我现在感觉有些不知所措,我还有另外两项工作需要紧急处理,现在我得绕着我的TI处理器走了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jace,我已经回到SPP-FET430U64工具上的SQU1演示应用程序"C1_LedOnOff"(我的应用程序的起点)。 我在slau3190.pdf第28页添加了USB BSL访问代码。

    在Rev.K部件上,此代码有效,我可以成功触发bootloader。

    这将手指指向计时器B,因为演示应用程序仅使用计时器A,而我的代码使用计时器B作为主刻度计时器。

    因此,请建议-将计时器B重置为不会打乱启动加载程序的状态,具体需要做什么? 简单地停止计时器不起作用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在调用bootloader之前,我尝试将TB0CTL,TB0CCTL0和TB0CCR0 (我修改的唯一计时器寄存器)设置回数据表默认值零。 我的代码仍然直接退回到CDC模式。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Alex:

    您应该将TimerB寄存器重置为其默认的从设备用户指南中指示的重置状态中恢复。 还建议禁用GIE位,因为中断也会干扰BSL。 此外,对于USB BSL设备,建议也断开USB堆栈。 有关详细信息,请参阅《闪存BSL用户指南》(www.ti.com/lit/slau319)中的3.8 1部分。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    正如我在上一篇文章中所述,我已经完成了所有这些操作,计时器寄存器恢复为数据表默认值,并从BSL应用程序注释中建议了代码片段,以禁用中断并断开USB连接。 它仍然存在故障。 引导加载程序中发生了哪些更改,因此我的代码不再起作用? BSL还需要哪些其他资源?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    “TI认为问题已解决”,这是什么意思? 这一点尚未得到解决。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Alex,

    我在上一次的答复中已概述了BSL的需要。 也就是说,如果在调用之前已经使用过,则需要断开TimerB和USB堆栈的连接。 另外,建议禁用GIE,因为中断可能会中断BSL进程。 除此之外,我唯一能想到的问题是VCORE设置。 USB BSL将时钟速度更改为8MHz,并将VCORE级别更改为级别1。 当然,它可能假定VCORE是标准重置级别0。 如果您的VCORE和时钟级别较高,应该不会有问题,但这是一个值得测试的问题。 在进入BSL时会清除RAM,因此不会出现问题。

    可以进行的一项调试工作是注释代码的各个部分,然后尝试转到SW BSL查看哪些设置会影响您的输入。 如您所述,TimerB是可疑 的,因此如果有任何方法无法在项目中使用/设置TimerB (临时),请查看问题是否仍然存在。这可以为我们提供一些线索,以了解导致问题的原因。

    在我们之前的谈话中,“TI认为已解决”被按下,因为我以为我已经为您找到了解决方案。 如果你看那个特定的答复,你可以拒绝这个概念。 很显然,问题尚未解决,我仍在与您合作,尝试解决问题。

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

    我正在使用BSL文档中的完整代码片段;

    __disable_interrupt ();
    USBKEYPID = 0x9628;//解锁USB配置寄存器
    USBCNF &=~PUR_EN;//将PUR引脚设置为Hi-Z,从逻辑上断开与主机的连接
    USBPWRCTL &=~VBOFFIE;//禁用VUSBoff中断
    USBKEYPID = 0x9600;//锁定USB配置寄存器
    __DELAY周期(50万);
    ((void (*)))0x1000)();//调用BSL

    另外,将定时器B重置为复位状态,不能使用JOY。 我本来打算切换到定时器D,但我当然不会这样做。 这只剩下计时器A。我使用的是8MHz时钟和Vcore级别3。 我仍在四处寻找突破的希望。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经尝试了所有我能想到的修复方法,但没有从头开始重建我的应用程序,没有任何乐趣。 六年来,通过各种修订(当然是C和E),它一直很可靠,但只是为了打破版本K。我没有分析已打破的内容的技能或资源。 如果我发送了我的应用程序的主体,TI的人员是否可以在开发工具上运行它并帮助我找出发生了什么变化?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Alex,

    很遗憾,我们目前不能提供这种服务。 我们可以继续帮助您调试问题,并提供查找问题位置的建议。

    您是否可以重新检查您所使用的修订版与新修订版之间在应用程序使用方面的勘误差异? 错误修复程序之间必须有一个连接,该修复程序会更改应用程序的行为方式,从而影响BSL SW条目。

    可以执行的另外两个测试如下。 读取旧版本的BSL二进制文件,并使用常规应用程序将其编程到更新的修订版部分。 然后执行相反的操作(将新的BSL修订版代码插入到旧的修订版设备中)。 这应该可以让您了解问题是由硅修复还是由BSL修复导致的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    设计人员支持的Jace是我选择供应商的关键因素,我曾考虑将设计发展为MSP430F5659,以便在没有MSP432 USB部件的情况下提供更多内存。 但是,鉴于您不再有现场工程师,我要自己解决TI芯片修订版引起的问题,我不太确定。 我将继续进行诊断,但如果TI能提供更主动的帮助,那就更好了。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在访问bootloader之前,我已转出简单的'LED On/LED Off'演示和我的代码的完整寄存器集。 我添加了一个例程,用于将代码中的一些关键寄存器设置回在简单代码中工作的值,特别是计时器和中断。
    仍然没有什么乐趣。 如何获得诊断此问题的帮助?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在我们之前的谈话中,“TI认为已解决”被按下,因为我以为我已经为您找到了解决方案。 如果你看那个特定的答复,你可以拒绝这个概念。 很显然,问题尚未解决,我仍在与您合作,尝试解决问题。  在这些帖子中,我找不到'REJECT'选项。  

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

    我发现您可以查看注册差异并进行更改,但问题仍未解决。 您是否尝试过我之前建议的BSL固件交换? 这将是一个有用的调试点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我需要一些关于这一点的提示,它正在深入探讨MSP430的要点,而不是我真正想要的。

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

    自定义BSL应用说明(http://www.ti.com/lit/450) 包含此处的最详细信息,随附的软件下载包含最新和以前的BSL二进制映像。 我会在较新的转速设备上测试最新的二进制映像,以防出现修复您问题的错误修复。然后,您可以在较旧的转速设备上尝试最新的映像。由于代码和版本不兼容,此映像可能会失败。您可以这样做 阅读您拥有的旧版本的图片,并将其放在最新版本的零件上。 这应该是可行的,但也可能由于您正在进行的大幅修订跳转而失败。您可以使用OR ID (CCS/IAR)读取BSL图像,但Elprotronic Lite FET-PRO 430可能是一个更容易使用的工具。

    正如我之前所说,上面的应用说明详细介绍了如何将BSL编程到BSL内存区域,但最简单的方法是将BSL映像的二进制文件与您的SW结合起来。 这是因为它们都位于不同的内存空间中。 您必须手动启用CCS/IAR中的二进制输出(TI-TXT输出)。 然后,您可以拼接BSL二进制图像,并再次使用Elprotronic工具加载组合二进制图像。 您需要确保完成正确的选项,以便可以加载BSL内存区域。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    此问题的更新。 将运行基本代码示例的开发板和我的开发板的行为与我的代码进行比较后,我再次详细研究了原理图。 我的主板源自开发板(MSP-TS430PN80USB),但我已经优化了3V3去耦。 将主板上的此项从10uF增加到47uF可解决引导加载程序问题。

    在确定USB电源和MSP调节3V3的范围时,我可以看到内部监管器在从CDC切换到HID设备期间中断电源。 10uF时,此值下降1V5,47uF时降低800mV -出现约500US的短时脉冲波形干扰。 这显然足以从bootloader中崩溃。  

    我可以看到Rev.K芯片的这种行为。 我看不到早期芯片上的3V3故障。

    您能解释一下吗?