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.

[参考译文] MSP430F5659:USB BSL 中使用的通过 python MSP430工具的复位方法

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/887663/msp430f5659-reset-method-used-in-usb-bsl-through-python-msp430-tools

器件型号:MSP430F5659
主题中讨论的其他器件:MSP430F5502MSP-EXP430F5529

您好!

我需要知道在使用 python - MSP430-tools BSL 更新程序的-r 标志时在 MSP 上触发了什么类型的复位( )

这样、我的代码就可以区分它软件何时自行复位、何时执行更新。 使用复位标志执行更新后、SYSRSTIV 的值是多少?

谢谢、

Kevin

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

    尊敬的 Kevin:

    遗憾的是、python MSP430-tools 不是 TI 官方工具、因此我的帮助将受到限制。 浏览 文档时、"-r"标志会触发软件复位、执行正常的器件复位、从而启动复位中断向量中指定的程序。

    https://python-msp430-tools.readthedocs.io/en/latest/target.html#msp430-bsl-target

    对于 SYSRSTIV、您可以在用户指南中了解有关其工作原理的更多信息。

    https://www.ti.com/lit/slau208

    此致、

    James

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

    尊敬的 James:

    感谢您提供信息。 我无法从用户指南中找到所需的所有信息、因此我进行了一些实验、使我更加困惑。

    我们的板具有 USB 端口、因此所有这些都是在电路板插入并通过 USB CDC 接口进行日志记录的情况下执行的。

    我编写了一些代码来执行 MSP430F5502的各种类型的软件复位、然后在启动时注销 SYSRSTIV 值。 有些复位似乎正常工作、有些复位则不工作。

    以下是我的结果:

    首先插入 USB 端口:

    - SYSRSTIV = 0x02、这是预期的、因为自从电路板未通电后 BOR 本会执行。

    触发一个软件 POR 复位:(PMMCTL0 = PMMPW | PMMSWPOR;)

    -主板断开连接,USB 不会重新枚举。 这个对我来说毫无意义、因为我触发的任何其他复位都会导致电路板枚举 USB 连接。

    触发一个 SW BOR 复位:(PMMCTL0 = PMMPW | PMMSWBOR;)

    -电路板断开连接,然后枚举。

    - SYSRSTIV = 0x00、根据参考手册、这个值应为0x06

    触发 PMM 密码违规(PMMCTL0 = PMMSWPOR;)//注意缺少密码,这不会触发 POR

    -电路板断开连接,然后枚举。

    - SYSRSTIV = 0x20、根据参考手册这是正确的并且是一个 PMMKEY 违反

    触发看门狗超时

    -电路板断开连接,然后重新枚举。

    - SYSRSTIV = 0x16、根据参考手册、这是正确的并且是一个 WDT 超时。

    有没有解释说明为何 SYSRSTIV 矢量中的 SW 复位似乎没有正确显示、但我尝试触发的其他复位却正确显示?

    此外、当所有其他复位都会导致正确的复位和枚举时、为什么系统在 PMMSWPOR 复位后不枚举。

    谢谢、

    Kevin

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

    尊敬的 Kevin:

    在此对延误表示歉意。 感谢您的详细开机自检和测试。

    我认为您看到的问题与写入整个 PMMCTL0寄存器有关、而不仅仅是设置 PMMSWPOR。  这将清除 PMMCTL0中的最后两个位、设置 PMMCOREV = 0。 但是、您不应一次更改 Vcore 超过一个级别-请参阅 F5xx/6xx 用户指南 www.ti.com/lit/pdf/slau208中的第2.2.5节"降低 Vcore"。 我也会将此方法应用于对 PMMCTL0的其他写入。

    有关更多详细信息、请查看以下主题。

    为什么需要设置 PMMCOREV 来实现 SW POR 复位?

    此外、遗憾的是、该器件有多个勘误表、因此阅读 勘误表可能会有所帮助

    此致、

    James

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

    尊敬的 James:

    感谢您的回答。 我更改了我正在运行的实验代码、以使用以下两行之一:

    PMMCTL0 = PMMPW | PMMSWPOR | PMMCLT0_L;

    PMMCTL0 = PMMPW | PMMSWBOR | PMMCLT0_L;

    当我使用 PMMSWPOR 时、现在一切都按预期工作。

    但是、当我使用 PMMSWBOR 时、一切都会复位并且 MSP 会与主机一起重新枚举、但是我仍然看到 SYSRSTIV 按预期设置为0x00而不是0x06。 我是否需要对 SW BOR 执行其他特殊操作?

    谢谢、

    Kevin

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

    尊敬的 Kevin:

    [引用用户="Kevin Lannen"]

    感谢您的回答。 我更改了我正在运行的实验代码、以使用以下两行之一:

    PMMCTL0 = PMMPW | PMMSWPOR | PMMCLT0_L;

    PMMCTL0 = PMMPW | PMMSWBOR | PMMCLT0_L;

    当我使用 PMMSWPOR 时、现在一切都按预期工作。

    [/报价]

    很高兴听到这个消息。

    [引用 user="Kevin Lannen">但是、当我使用 PMMSWBOR 时、一切都会复位、MSP 会与主机重新枚举、但我仍然看到 SYSRSTIV 按预期设置为0x00、而不是0x06。 我是否需要对 SW BOR 执行其他特殊操作?[/引述]

    我对这种情况的发生原因没有很好的解释。 我怀疑它与 USB 通信或应用程序代码有关。

    我采用了我的 MSP-EXP430F5529 LaunchPad、创建了一个简短的代码示例、该示例在 SWBOR 复位后打开 LED、并验证其工作正常。 这是我的代码供您参考。 有关其工作方式的更多详细信息、请参阅说明。 您可以对其进行修改、以便在发生 SWBOR 时将 GPIO 设置为高电平、这可能有助于您跟踪任何通信或可能发生的其他问题。

    /*-版权所有-、BSD_EX
    *版权所有(c) 2020、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    //
    //// MSP430F552x 演示- SYSRSTIV 复位中断矢量寄存器
    //
    //说明:此代码可在 MSP-EXP430F5529 LaunchPad 上轻松//
    确定复位的最后原因。 在本示例中、LED
    // 在启动时关闭、如果相关
    //、则打开 发生复位事件。 在一个 RST/NMI BOR 之后、LED1打开。
    // 在一个软件 BOR 之后、LED2打开。 编程和下电上电后
    // 按下 RST 按钮(S3)、LaunchPad 将打开。
    // 同样、按下 S1按钮可触发 SW BOR 事件和 LED2
    // 打开。 在对 LaunchPad 进行下电上电后、两个 LED 都保持关闭状态。
    // 由于 LED 数量有限、因此各种
    //中的代码 可修改 Switch 语句以演示其他
    // BOR、POR 或 PUC 事件。
    //
    // ACLK = 32.768kHz,MCLK = SMCLK =默认 DCO~1MHz
    //
    James Evans
    // Texas Instruments Inc.
    // 2020年4月
    //使用 CCS v10.0.0构建
    //*********
    
    /* SYSRSTIV 定义(请参见 SLAU208的表1-26)*/
    #define SYSRSTIV_NONE (0x0000) /*无中断挂起*/
    #define SYSRSTIV_HW_BOR (0x0002) /* SYSRSTIV:BOR */
    #define SYSRSTIV_RSTNMI_BOR (0x0004) /* SYSRSTIV:RST/NMI BOR */
    #define SYSRSTIV_PMM_SW_BOR (0x0006) /* SYSRSTIV:PMM 软件 BOR */
    #define SYSRSTIV_LPM5WU_BOR (0x0008) /* SYSRSTIV:端口 LPM5唤醒 BOR */
    #define SYSRSTIV_SECYV_BOR (0x000A) /* SYSRSTIV:安全违规 BOR */
    #define SYSRSTIV_SVSL_POR (0x000C) /* SYSRSTIV:SVSL POR */
    #define SYSRSTIV_SVSH_POR (0x000E) /* SYSRSTIV:SVSH POR */
    #define SYSRSTIV_SVML_OVP_POR (0x0010) /* SYSRSTIV:SVML_OVP POR */
    #define SYSRSTIV_SVMH_OVP_POR (0x0012) /* SYSRSTIV:SVMH_OVP POR */
    #define SYSRSTIV_PMM_SW_POR (0x0014) /* SYSRSTIV:PMM 软件 POR */
    #define SYSRSTIV_WDTTO_PUC (0x0016) /* SYSRSTIV:WDT 超时 PUC */
    #define SYSRSTIV_WDTKEY_PUC (0x0018) /* SYSRSTIV:WDTKEY 冲突 PUC */
    #define SYSRSTIV_KEYV_PUC (0x001A) /* SYSRSTIV:闪存密钥违反 PUC */
    #define SYSRSTIV_PERF_PUC (0x001E) /* SYSRSTIV:perf periph/config area fetch PUC */
    #define SYSRSTIV_PMMKEY_PUC (0x0020) /* SYSRSTIV:PMMKEY 违规 PUC */
    
    #include 
    
    void main (void){
    //停止看门狗计时器
    WDTCTL = WDTPW+WDTHOLD; //停止 WDT
    
    //初始化 GPIO 输入
    P2DIR &=~BIT1; // P2.1设置为输入(S1)
    P2REN |= BIT1; //启用内部
    P2OUT |= BIT1; //上拉电阻器
    
    //初始化 GPIO 输出
    P1DIR |= BIT0; // P1.0设置为输出(LED1)
    P1OUT &=~BIT0; //清除 LED1
    P4DIR |= BIT7; // P4.7设置为输出(LED2)
    P4OUT &=~BIT7; //清除 LED2
    
    //确定先前复位事件的原因
    开关(__evo_in_range (SYSRSTIV、SYSRSTIV_PMMKEY_PUC))
    {
    
    案例 SYSRSTIV_NONE: //无中断挂起
    P1OUT &=~BIT0; //重置 LED 1.
    P4OUT &=~BIT7; //重置 LED 2.
    中断;
    
    案例 SYSRSTIV_HW_BOR: // SYSRSTIV:BOR
    __no_operation();
    中断;
    
    案例 SYSRSTIV_RSTNMI_BOR:// SYSRSTIV:RST/NMI
    P1OUT |= BIT0; //打开 LED1
    中断;
    
    案例 SYSRSTIV_PMM_SW_BOR:// SYSRSTIV:SW BOR
    P4OUT |= BIT7; //打开 LED2
    中断;
    
    案例 SYSRSTIV_LPM5WU_BOR:// SYSRSTIV:端口 LPM5唤醒
    __no_operation();
    中断;
    
    案例 SYSRSTIV_SECYV_BOR:// SYSRSTIV:安全违规
    __no_operation();
    中断;
    
    案例 SYSRSTIV_SVSL_POR: // SYSRSTIV:SVSL
    __no_operation();
    中断;
    
    案例 SYSRSTIV_SVSH_POR: // SYSRSTIV:SVSH
    __no_operation();
    中断;
    
    案例 SYSRSTIV_SVML_OVP_POR:// SYSRSTIV:SVML_OVP
    __no_operation();
    中断;
    案例 SYSRSTIV_SVMH_OVP_POR:// SYSRSTIV:SVMH_OVP
    __no_operation();
    中断;
    
    案例 SYSRSTIV_PMM_SW_POR:// SYSRSTIV:SW POR
    __no_operation();
    中断;
    
    案例 SYSRSTIV_WDTTO_PUC:// SYSRSTIV:WDT 超时
    __no_operation();
    中断;
    
    案例 SYSRSTIV_WDTKEY_PUC:// SYSRSTIV:WDTKEY 违反
    __no_operation();
    中断;
    
    案例 SYSRSTIV_KEYV_PUC: // SYSRSTIV:闪存密钥违反
    __no_operation();
    中断;
    
    案例 SYSRSTIV_PERF_PUC: // SYSRSTIV:外设/配置区域获取
    __no_operation();
    中断;
    
    案例 SYSRSTIV_PMMKEY_PUC:// SYSRSTIV:PMMKEY 违规
    __no_operation();
    中断;
    
    默认值:break;
    }
    
    //无限循环
    while (1)
    {
    __no_operation();
    IF (P2IN 和 BIT1) //如果未按下 S1按钮,
    {
    __no_operation(); //不执行
    任何操作}
    其他 //如果按下 S1按钮,
    {
    _delay_cycles (10000); //开关去抖延迟
    PMMCTL0 = PMMPW | PMMSWBOR; //触发开关 BOR
    }
    }
    

    此致、

    James

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

    尊敬的 James:

    USB 代码执行某种操作来重置该值似乎是一个问题。 我将检查 SYSRSTIV 的位置移动到上面、初始化 USB 并设置 PMM_setVCore、现在我将获得此值的预期值。

    不过、我还有一个问题可以返回到我最初关于 python msp430-tools 的问题。 您说这不是 TI 的官方工具、但我发现 MSP430 USB 固件升级示例使用它的另一天: software-dl.ti.com/.../index_FDS.html 作为 python 固件升级程序。 如果 TI 将此作为一个示例来说明如何执行此操作、那么 TI 应该为此提供支持吗?

    我们还希望看到 MSP430-TOOLS 支持 python3、因为 python 2现已停产。

    感谢您的支持。

    Kevin

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

    尊敬的 Kevin:

    [引用 user="Kevin Lannen"> USB 代码执行某项操作来重置该值似乎是一个问题。 我将检查 SYSRSTIV 的位置移动到上面、初始化 USB 并设置 PMM_setVCore、现在我将获得此值的预期值。[/QUERP]

    听得非常好! 感谢您的介绍。

    [引用用户="Kevin Lannen"]

    不过、我还有一个问题可以返回到我最初关于 python msp430-tools 的问题。 您说这不是 TI 的官方工具、但我发现 MSP430 USB 固件升级示例使用它的另一天: software-dl.ti.com/.../index_FDS.html 作为 python 固件升级程序。 如果 TI 将此作为一个示例来说明如何执行此操作、那么 TI 应该为此提供支持吗?

    我们还希望看到 MSP430-TOOLS 支持 python3、因为 python 2现已停产。

    [/报价]

    Python 固件升级程序工具基于 python msp430-tools 而构建、python 是一个用于下载 MSP430代码的开源工具集、位于
    pypi.python.org/.../python-msp430-tools。该软件包仅在 MSP430 Python 固件升级程序中复制。

    我建议通过 cliechti@gmx.net 联系 python msp430-tools 作者 Chris Liechti、以请求 Python 3支持。

    此致、

    James