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.

[参考译文] MSP430G2231:使用 MSP-FET 载入程序错误

Guru**** 2513185 points
Other Parts Discussed in Thread: MSP-FET, MSP430G2231

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1200981/msp430g2231-load-program-error-using-msp-fet

器件型号:MSP430G2231
主题中讨论的其他器件: MSP-FET

你(们)好!

我正在尝试使用 MSP-FET 通过 Spy-Bi-Wire 接口将程序加载到 MSP430G2231器件。

我继承了该电路板(即、不是我的硬件设计、但我知道它在过去已成功使用)。

MSP-FET 是新产品(上周通过 RS 购买)、序列号19010144A (第二代)

当我第一次尝试加载程序时、出现了一个加载程序错误、内容是发生了数据验证错误、地址 x 处的值不匹配。

我刚刚尝试了重新加载、看上去一切正常(调试控制台已启动、并且说处理器正在运行)。

然后、我尝试对程序进行小幅更改并再次加载、最初出现"无法检测到器件"错误。 我必须断开 MSP-FET 并对电路板进行下电上电、然后才能进行连接。 但现在我每次尝试对其进行编程时都会收到数据验证错误。 验证错误的地址似乎在0xF800和0xFFF0之间变化、但是我不能弄清楚确定哪个地址是错误的任何逻辑。

该程序非常简单-我只是初始化端口并将 GPIO 引脚设置为输出和高电平。 整个用户源代码为:

#include <msp430.h>

int main(void)
{
	WDTCTL = WDTPW | WDTCNTCL;	// reset watchdog timer

	// Port 1 initialisation
	//P1.0 n/c++
	P1DIR &= ~(1<<0); //P1.0 set to input
	P1REN |= (1<<0); // P1.0 enable pull up/down resistor
	P1OUT &= ~(1<<0); //P1.0 pull down
	//P1.1 n/c
	P1DIR &= ~(1<<1); //P1.1 set to input
	P1REN |= (1<<1); // P1.1 enable pull up/down resistor
	P1OUT &= ~(1<<1); //P1.1 pull down
	//P1.2 Watchdog_Feedback pin - connected directly to main microprocessor input (STM32F429 PE4)
    P1DIR |= (1<<2); //P1.2 set to output
    P1REN &= ~(1<<2); // P1.2 disable pull up/down resistor
    P1OUT &= ~(1<<2); //P1.2 set low (0)
    //P1.3 KICK_WATCHDOG pin - connected directly to main microprocessor output (STM32F429 PE3)
    P1DIR &= ~(1<<3); //P1.3 set to input
    P1REN |= (1<<3); // P1.3 enable pull up/down resistor
    P1OUT &= ~(1<<3); //P1.3 pull down
    //P1.4 n/c
    P1DIR &= ~(1<<4); //P1.4 set to input
    P1REN |= (1<<4); // P1.4 enable pull up/down resistor
    P1OUT &= ~(1<<4); //P1.4 pull down
    //P1.5 n/c
    P1DIR &= ~(1<<5); //P1.5 set to input
    P1REN |= (1<<5); // P1.5 enable pull up/down resistor
    P1OUT &= ~(1<<5); //P1.5 pull down
    //P1.6 n/c
    P1DIR &= ~(1<<6); //P1.6 set to input
    P1REN |= (1<<6); // P1.6 enable pull up/down resistor
    P1OUT &= ~(1<<6); //P1.6 pull down
    //P1.7 n/c
    P1DIR &= ~(1<<7); //P1.7 set to input
    P1REN |= (1<<7); // P1.7 enable pull up/down resistor
    P1OUT &= ~(1<<7); //P1.7 pull down

    //Port 2 initialisation
    //Start by setting P2 pins 6 & 7 to be GPIO as they are set to primary module function (XIN / XOUT) on reset
    //NB although user guide talks about P2SEL2 register, it isn't implemented according to datasheet.
    P2SEL &= ~0xC0; //clear P2SEL bits 6 & 7

    //P2.6 n/c
    P2DIR &= ~(1<<6); //P2.6 set to input
    P2REN |= (1<<6); // P2.6 enable pull up/down resistor
    P2OUT &= ~(1<<6); //P2.6 pull down
	//P2.7 Controls +GND_SWITCHED net. Low (0) for +GND_SWITCHED to be pulled high, High (1) for +GND_SWITCHED to be connected to 0V.
    //When low, the relay outputs are effectively disabled - no 0V for coils.
    //When high, the relay outputs are enabled - coils will function as normal.
    P2DIR |= (1<<7); //set P2.7 to output
	P2REN &= ~(1<<7); // P2.7 disable pull up/down resistor
	P2OUT |= (1<<7);   //set P2.7 high - enable relays
	//P2OUT &= ~(1<<7); //**OCP** temp

	while(1)
	{
	    WDTCTL = WDTPW | WDTCNTCL;  // reset watchdog timer
	}
}

我收到的错误消息是:

显示 JTAG 接口的硬件原理图为:

您能否给我有关问题可能是什么的线索?

非常感谢、

奥利弗.

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

    尊敬的 Oliver:

    我建议通读 这 篇文章 、了解数据验证错误。  

    此外、我建议尝试使用 闪烁示例进行编程。 这是一种简单的 GPIO 切换、有助于确定您编程的程序是不是导致问题还是其他原因。

    此致、

    Luke

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

    Luke、您好!

    谢谢。 遗憾的是 、我未能在这方面取得任何进展。 我已经尝试使用 CCS "msp430g2xx1_p1_01.c"(以及汇编器版本)中的 blinky 示例项目、使用了所有默认设置、我理解这应该起作用。 硬件板没有 任何外部存储器或任何东西。

    据我从文档中得知、通过简单的硬件和软件设置、不需要在目标配置设置(在初始化设置下)中添加 GEL 文件?

    我想尝试使用 tools > MEMORY MAP 选项检查存储器映射、但这从未出现、因为加载失败。

    我还尝试将 JTAG 时钟速率减慢到"慢"、但这没有什么区别。

    您是否对我应该从哪里入手有了更多的想法?  实际上、在系统发生故障之前、很难看到它在加载过程中所处的实际位置。 (我使用过的其他工具集会向您展示加载进度)。

    谢谢。

    奥利弗.

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

    尊敬的 Oliver:

    根据所需的段、有详细输出的选项。 考虑到这是内存验证、如果您右键单击项目、然后选择项目属性->调试-> MSP430闪存设置->启用详细输出。 这将为您提供进一步的信息。

    您个人以前是否能够对此器件进行编程? (我看到您继承了板、因此之前可能有一些设置)。 您应该能够对我链接的示例进行编程、而不会出现存储器错误。

    以下是几个您可以尝试的选项(出现此错误消息的原因可能有多种)

    1. 验证 JTAG 连接(松动的连接会导致 JTAG 编程错误)
    2. 创建一个全新的 CCS 工作区(删除了与其他调试配置或设置相关的任何痕迹)
    3. 擦除主存储器和信息存储器(这有助于从之前的编程中创建一个干净的 slate)( 我建议备份信息部分的存储器以保留 TLV 数据)
      1. 擦除主存储器、信息存储器和 IP 存储器
    4. 关闭内存验证,对已验证的正常程序进行编程,然后重新启用内存验证

    此致、

    Luke

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

    Luke、您好!

    感谢您的持续帮助。

    首先回答您的问题:这是我第一次尝试对器件进行编程、因此、我从未能够可靠地对其进行编程。 不过、 昨天我花了很多时间在这上面、当我可以不定期地对器件进行编程时、我确实明白了这一点。 我已经得出结论,这很可能是一个硬件问题而不是软件,因为这并不重要,我使用的是闪烁的例子,还是我的原始的-有时它编程成功,有时它不是。 成功完成后、会弹出一个显示进度的编程过程对话框。 当它不起作用时、这个框从不出现、只是有一个延迟、然后我得到验证错误。 这是否表明它甚至未启动编程过程? 一旦建立连接、看起来就很可靠。

    (请注意、我偶尔 也会收到"Error connecting to the target:Could not find device"消息、但如果我循环通电并断开/重新连接 MSP-FET、此消息通常会消失)。

    我注意到的一点是、硬件实现略微超出规格、因为 TDI/TDO 上的0V 电容为两个47nF 串联电容、因此略高于最大规格22nF。 我对电路板进行了修改、使其处于限值范围内(~12nF)、但这似乎没有改变不稳定的编程行为。 有时我可以连续编程几次,没有错误,然后突然它会再次给出验证错误。

    我不确定这是否与速度相关-我已在 目标配置中将 JTAG 时钟速度设置为"慢"。  是否有可能进一步降低速度? 最后、我需要做的就是对已在现场部署的一些硬件进行编程(MSP430器件很可能是完全未编程的-它们只是板的一个辅助 uC、暂时还没有使用)。 所以我的问题是、如果编程不可靠、将会非常尴尬、同时也无法修改电路板(例如、TDO/TDI 上的电容变化)。

    也感谢您的其他想法-我现在无法尝试、因为没有硬件、但将在下周尝试。 我 对第3点感兴趣-游戏过程是否不会将内存擦除为正常负载的一部分? 我不熟悉 TLV 功能、但只读了一点相关内容-保持这一点似乎很重要、但我没有找到任何说明如何在擦除后重新加载它的内容-您是否有指向相关说明的链接?

    再次感谢。

    奥利弗.

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

    尊敬的 Oliver:

    我很高兴你能够编程它,尽管有一些不一致的地方。

    • 对于该器件、JTAG 慢设置是您可以实现的最慢设置。  
    • 编程会擦除主存储器、但默认情况下不会触及信息或 IP 部分。
      • TLV 数据基本上是特定器件以及其他特定器件特性的校准因数。 要备份数据、您需要连接至器件并从器件导出存储器。 TLV 数据位于信息部分的 A 段。 如果您下载 Uniflash 、则可以非常轻松地连接和导出相关数据(只需转到存储器部分、然后点击导出按钮、即可选择要导出的存储器部分)。 然后、我建议使用这些数据重新刷写器件、这样您就无需每次在正常程序中刷写。

    如果任何其他选项提供更持久的解决方案、请随时更新我。

    此致、

    Luke