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.

[参考译文] MSP430F5438A:使用MSP430F5438A BSL UART

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/638020/msp430f5438a-using-msp430f5438a-bsl-uart

部件号:MSP430F5438A
主题中讨论的其他部件:MSP-FET

各位专家,您好!

我正在使用通过MSP-FET连接到MSP430F5438A目标开发板的BSL脚本程序。

当我使用下面的示例脚本时:

//
//脚本示例543x系列UART BSL
//
//下载闪烁LED应用程序
//通过UART BSL连接到543x系列设备
//
//它是使用Launchpad BSL进行测试的
//应用程序作为通信网桥
//
日志
模式MSP430F5xx UART COM12
//提供了错误的密码
//mass eraseof the memory (内存的质量)
//mass擦除
Rx_password .\pass16_wrong.txt
Rx_password .\pass16_default.txt
RX_DATA_BLOCK .\blinkLED_f5438.txt
//crc_check 0x5C00 0x0020 0xAF15
//crc_check 0xffd2 0x00D0 0xC1EA
Set_PC 0x5c00

我可以在内部加载代码。 但是,在我将PC设置为0x5C00后,我必须重置微控制器才能启动应用程序。

我的问题是为什么需要重置才能启动应用程序?

谢谢,此致,

安杰特

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

    0x5C00可能是主代码存储器的起点,但它是否是复位向量(0xFFFE)指向的开始操作的地址? 请查看您的二进制映像文件并进行相应的修改。 还值得一提的是,BSL在8 MHz下运行,在应用程序启动时会继续运行,因此需要完全重置时钟系统以达到预期的操作频率。 BSL脚本用户指南(SLAU655)的第二个常见问题解答中对此进行了介绍。 您也可以选择让BSL将错误的WDTPW值写入WDTTTL以进行PUC重置,或者在PMMCTL0寄存器中设置PMMSSWBOR/POR位以进行BOR/POR重置。

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

    您好,Ryan:

    感谢您的回复。 根据你的解释,我有几个问题。 (请忍受,我仍在学习)

    0x5C00可能是主代码存储器的起点,但它是否是复位向量(0xFFFE)指向的开始操作的地址? 请查看您的二进制映像文件并进行相应的修改。  我检查了重置向量(0xFFFE),它确实指向0x5C00。

     还值得一提的是,BSL在8 MHz下运行,在应用程序启动时会继续运行,因此需要完全重置时钟系统以达到预期的操作频率。  那么您的意思是需要将类似的内容添加到我的代码中?:

    void Initialize_Clock (void)

    UCSCTL3 |= SELREF_REFCLK;
    UCSCTL4 |=拉美经济体系_REFOLK;
    //初始化Timer_B模块
    TB0CCTL0 = CCIE;// CCR0中断已启用
    TB0CCR0 = 3.2768万;
    TB0CTL = TBSSEL__ACLK + MC__UP + TBCLR;// ACLK,UP模式,清除TAR
    }

    BSL脚本用户指南(SLAU655)的第二个常见问题解答中对此进行了介绍。 我没有设置任何时钟,这意味着它应该使用内部参考时钟和带有默认设置的DCO来生成时钟。 如果BSL在8MHz工作,那么即使我不提供任何XT1和XT2,BSL也应该能够使用内部参考时钟和DCO设置8MHz (如果使用内部参考时钟和DCO,BSL将会遇到任何问题?)。 我读过SLAU655,但我不明白它会对我的代码有何影响,因为在下面的代码中,我正在根据For循环执行的次数更改延迟。 无论时钟频率如何,如果我的理解正确,如果我给出了足够的延迟,我仍应看到LED闪烁。 因此,在以下代码中,如果我将i的分配更改为更大的值,我应该会看到LED闪烁:

    int main (void){
    WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
    P1DIR |=0x01;//将WFP 1.0 设置为输出方向

    用于(;;){
    volatile unsigned int I;// volatile,用于防止优化

    P1OUT ^= 0x01;//使用OXE-OR切换WFP 1.0

    I = 1万;//软件延迟
    我是否--;
    while (i !=0);
    }

    返回0;
    }

    您也可以选择让BSL将错误的WDTPW值写入WDTTTL以进行PUC重置,或者在PMMCTL0寄存器中设置PMMSSWBOR/POR位以进行BOR/POR重置。  我知道我需要生成软件重置,但我无法理解BSL将如何执行此操作。 您是否暗示我通过BSL加载的新代码应该能够做到这一点?

     

    附注:My TI输出文本文件

    @5c00
    81 00 00 5C B1 13 2A 00 0C 43 B1 13 00 B1 13
    24 00 32 D0 10 00 FD 3F 03 43
    @ffd2
    12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12
    12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12
    12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 12 5C 00 5C F1 03
    B2 40 80 5A 5C 01 D2 D3 04 02 D2 E3 02 02 B1 40
    10 27 00 00 91 83 00 00 81 93 00 00 F6 27 FA 3F
    03 43 03 43 FF 3F 03 43 1C 43 10 01

     

     

    谢谢,此致,

    安杰特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的UCSCTL设置不太正确,因为您应该使用“=”而不是“|=”,因为位设置不会修改BSL所做的更改。 这也应用于所有UCSCTL寄存器,例如,UCSCTL2的FLLN位设置DCO的乘数值N。 重置值31创建(31+1)*3.2768万=~1 MHz的默认启动频率。 8 MHz的速度可能太快,无法看到LED闪烁,因此它似乎始终亮起。

    是的,您可以加载新的二进制映像,该映像能够使用BSL生成软件重置。 通过WDT的PUC示例:

    @015C
    00 00


    或使用PMMCTL0的BOR:

    @0120
    04 A5.


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

    您好,Ryan:

    非常感谢!
    通过WDT生成PUC后,重置问题得到解决。
    @015C
    00 00


    谢谢,此致,
    安杰特