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.

[参考译文] CC430F5137:如何解锁 CC430F5137器件上的软键

Guru**** 2562120 points
Other Parts Discussed in Thread: CC430F5137, MSPDS

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/600872/cc430f5137-how-to-unlock-soft-key-on-cc430f5137-device

器件型号:CC430F5137
主题中讨论的其他器件: MSPDS

我正在尝试解锁 CC430F5137中的软键。 我的设置包括一个 MSP-FETFlash 仿真工具、此工具通过4线制 JTAG 连接被连接至目标。

 

在 UC 软锁定的情况下,我执行 VisualStudio 的序列:

状态= MSP430_Initialize ("TIUSB"、OUT 长版本);

状态= MSP430_VCC (VCC);

状态= MSP430_OpenDevice ("56"、"FFFFCD849814FFFF44876E845C74DE2259FFF48B4629FFFFFFFFF0080"、32、0、56);

状态= MSP430_ReadOutFile (0x8000、0x100、"C:\\tmp.hex"、filetype_TI_TXT);

 

其中字符串" FFFFCD849814FFFF44876E845C74DE2259FFF48B4629FFFFFFFFF0080"是我的密码。

所有调用按预期返回0、但读取文件内容全部为零、而它应该是我的应用程序代码。

 

OpenDevice 在使用密码时不起作用、还是我的实现方式错误?  

谢谢。

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

    您好!

    您的密码可能错误。 查看 MSPDebugStack 开发人员指南中图2中的代码示例、我看到他们的密码为"0x34127856"、但实际上是按以下顺序发送的:0x12 0x34 0x56 0x78

    此外、对于您的"MSP430_ReadOutFile()"函数、我看到您使用的是"filletype_TI_TXT"和".hex"文件、而不是"txt"文件。 这可能会导致您的问题。

    此外、请确保按照 《MSPDebugStack 开发人员指南》第3.1节中所述的正确步骤处理一般应用和器件。 假设您使用的是 MSP 调试堆栈开发包(MSPDS)、有几个优秀的示例将会非常有帮助。 例如、我在下面附加了'example.c'。

    /*
    *版权所有(C) 2012 - 2014 Texas Instruments Incorporated - http://www.ti.com/
    *
    
    只要
    满足以下条件*、就允许以源代码和二进制形式重新分发和使用*进行修改或不进行修改*:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    *二进制形式的再发行必须在
    
    *
    发行版随附的*文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    *未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件派生的产品*。
    *
    *本软件由版权所有者和贡献者
    *按原样"提供、
    
    且不承认任何明示或暗示的保证、包括但不限于*特定用途*的适销性和适用性的暗示保证。 在任何情况下、版权
    *所有者或贡献者都不对任何直接、间接、偶然、
    *特殊、模范、 或相应的损害(包括但不
    限于*采购替代产品或服务;丧失使用、
    *数据或利润; 或业务中断)、但出于
    任何*责任理论、无论是合同、严格责任还是侵权
    行为*(包括疏忽或其他原因)、即使
    被告知可能会造成此类损坏、也是出于此类责任理论。
    //
    
    MSP430 JTAG DLL 使用示例。
    //
    //版本1.1
    //
    
    //此文件包含一个调用 MSP430 JTAG DLL 函数的示例程序。
    
    // MSP430 JTAG DLL 函数用于:
    // 1. 初始化接口。
    // 2. 设置器件 Vcc。
    // 3. 打开设备。
    // 4. 获取器件信息。
    // 5.1擦除器件(主闪存)存储器。
    // 5.2验证器件内存擦除。
    // 5.3对器件存储器进行编程(使用程序)。
    // 5.4验证器件存储器编程。
    // 5.5对器件存储器进行编程(使用重新启动矢量)。
    // 5.6将设备内存读入文件。
    // 5.7将文件编程到器件存储器中并进行验证。
    // 5.8使用器件存储器验证文件。
    // 6.1熔断器件安全保险丝。
    // 6.2重置设备并开始代码执行。
    //7. 关闭界面。
    // 8.1确定错误编号。
    // 8.2确定错误编号的字符串。
    
    //注释:
    // 1. MSP430_Initialize()必须是被调用的第一个函数。
    // 2. 如果被调用、MSP430_close()必须是最后被调用的函数。
    
    //#includes。 ----------------------------------------
    
    #include 
    #include "msp430.h"
    
    int main ()
    {
    STATUS_T STATUS、SECURE = STATUS_OK;
    char* portNumber;
    长版本;
    长版本 VCC = 3300;
    UNION DEVICE_T 器
    件;//以下数据是 FET_1程序(使 LED 闪烁)(MSP430F6659)。
    char Data0[]={
    0xF1、0x03、0xB2、0x40、0x80、 0x5A、0x5C、0x01、0xD2、0xD3、
    0x04、0x02、0xD2、0xE3、0x02、 0x02、0xB1、0x40、0x10、0x27、 0x00、0x00、0x91、0x83、0x00、 0x00、
    0x81、0x93、0x00、0x00、 0xF6、0x27、0xFA、0x3F
    };
    字 Data0_addr = 0xf000;
    //以下数据是 FET_1程序的重启矢量。
    char data1[]={
    0x00、0xF0
    };
    word data1_addr = 0xfffe;
    char filename[]="test.TXT";
    long fileType = filetype_TI_TXT;
    
    //简单测试的设置。
    端口号="TIUSB";
    
    执行
    {
    // 1. 初始化接口。
    printf ("初始化接口:");
    status = MSP430_Initialize (portNumber、&version);
    printf ("MSP430_Initialize (portNumber=%s、version=%d)返回%d\n"、 portnumber、version、status);
    if (status!= status_OK) break;
    
    // 2. 设置器件 Vcc。
    printf ("设置器件 Vcc:");
    status = MSP430_VCC (VCC);
    printf ("MSP430_VCC (%d)返回%d\n"、VCC、status);
    if (status!= STATUS_OK)中断;
    
    // 3. 打开设备。
    printf ("打开器件:");
    status = MSP430_OpenDevice ("device_unknown"、""、0、0、0、 device_unknown);
    printf ("MSP430_OpenDevice()返回%d\n"、status);
    if (status!= status_OK) break;
    // 4. 获取设备信息
    状态= MSP430_GetFoundDevice (((char*)&device、sizeof (device.buffer));
    printf ("MSP430_GetFoundDevices()返回%d\n"、状态);
    if (status!= status_OK) break;
    printf (" device.id:%d\n"、device.id);
    设备字符串(%d\n"、device.id);设备字符串:%f"
    printf (" device.mainStart:0x%04x\n"、device.mainStart);
    printf (" device.infoStart: 0x%04x\n"、device.infoStart);
    printf (" device.ramEnd:0x%04x\n"、 device.ramEnd);
    printf (" device.nBreakpoints:%d\n"、device.nBreakpoints);
    printf (" device.emulation:%d\n"、device.emulation);
    printf (" device.clockControl:%d\n"、device.clockControl);
    printf (" device.lcdStart:0x%04x\n"、device.lcdStart);
    printf (" device.lcdEnd:0x%04x\n"、 device.lcdEnd);
    printf (" device.vccMinOp:%d\n"、device.vccMinOp);
    printf (" device.vccMaxOp:%d\n"、device.vccMaxOp);
    printf (" device.hasTestVpp:%d\n"、device.hasTestVpp);
    
    //以下操作使用擦除、读取/写入和验证操作器件存储器。
    
    // 5.1擦除器件存储器。
    printf ("擦除器件存储器:");
    status = MSP430_Erase (ERASE_MAIN、device.mainStart、0x10000 - device.mainStart);
    printf ("MSP430_Erase (ERASE_MAIN、 startAddr=0x%04x、length=0x%04x)返回%d\n"、
    device.mainStart、0x10000 - device.mainStart、status);
    如果(status!= STATUS_OK)中断;
    
    // 5.2验证设备内存擦除。
    printf ("验证设备内存擦除:");
    status = MSP430_EraseCheck (Data0_addr、sizeof (Data0));
    printf ("MSP430_EraseCheck (startAddr=0x%04x、length=0x%04x)返回%d\n"、
    Data0_addr、sizeof (Data0)、status);
    if (status!= status_OK) break;
    
    // 5.3对器件存储器进行编程(使用程序)。
    printf ("对器件存储器(程序)进行编程:");
    status = MSP430_Write_Memory (Data0_addr、Data0、sizeof (Data0));
    printf ("MSP430_Write_Memory (startAddr=0x%04x、 Data0、length=0x%04x)返回%d\n"、
    Data0_addr、sizeof (Data0)、status);
    如果(status!= STATUS_OK)中断;
    
    // 5.4验证器件存储器编程。
    printf ("验证器件存储器编程:");
    status = MSP430_VerifyMem (Data0_addr、sizeof (Data0)、Data0);
    printf ("MSP430_VerifyMem (startAddr=0x%04x、 length=0x%04x、Data0)返回%d\n"、
    Data0_addr、sizeof (Data0)、status);
    if (status!= STATUS_OK) break;
    
    // 5.5对器件存储器进行编程(使用重新启动矢量)。
    printf ("对器件存储器进行编程(复位矢量):");
    status = MSP430_Write_Memory (data1_addr、data1、sizeof (data1));
    printf ("MSP430_Write_Memory (startAddr=0x%04x、 Data1、length=0x%04x)返回%d\n"、
    data1_addr、sizeof (data1)、status);
    如果(status!= STATUS_OK)中断;
    
    // 5.6将器件存储器读取到文件中。
    printf ("将器件存储器读入文件:");
    status = MSP430_ReadOutFile (Data0_addr、0x10000-Data0_addr、filename、fileType);
    printf ("MSP430_ReadOutFile (startAddr=0x%04x、length=0x%04x、file=\"%s\"、fileType=%d)返回%d\n"、
    Data0_addr、 0x10000-Data0_addr、文件名、文件类型、状态);
    if (status!= status_OK) break;
    
    // 5.7将文件编程到器件存储器中并进行验证。
    printf ("将文件编程到器件存储器中(使用 verify):");
    status = MSP430_ProgramFile (filename、ERASE_ALL、true);
    printf ("MSP430_ProgramFile (file="%s\"、 method=erase_all、verify_true)返回%d\n"、filename、status);
    if (status!= status_OK) break;
    
    // 5.8使用设备内存验证文件。
    printf ("使用器件存储器验证文件:");
    status = MSP430_VerifyFile (filename);
    printf ("MSP430_VerifyFile (file="%s\")返回%d\n"、filename、status);
    如果(status!= STATUS_OK)中断;
    
    //如果目标器件的 JTAG 保险丝应该被熔断、则取消注释以下行-将无法再对
    器件进行// JTAG 访问!
    
    //#define secure
    
    #ifdef SECURE
    // 6.1熔断器件安全熔丝。
    printf ("熔断器件安全熔丝:");
    secure = MSP430_Secure ();
    printf ("MSP430_Secure ()返回%d\n"、secure);
    if (secure!= STATUS_OK) break;
    #endif
    
    // 6.2重置器件并开始执行器件。
    printf ("复位器件并开始执行器件:");
    status = MSP430_Reset (RST_RESET、TRUE、FALSE);
    printf ("MSP430_Reset (method=RST_RESET、 execute=true、releaseJTAG=false)返回%d\n"、状态);
    //如果安全操作成功(因为禁用了 JTAG 访问)忽略该状态。
    如果((secure!= STATUS_OK)&&(status!= STATUS_OK))中断;
    
    // 7. 关闭界面。
    printf ("关闭接口:");
    status = MSP430_close (false);
    printf ("MSP430_close (false)返回%d\n"、status);
    if (status!= status_OK) break;
    }
    while (0);
    
    if (status!= status_OK)
    {
    long errorNumber;
    
    //以下操作处理错误。
    
    printf ("其他错误信息:\n");
    // 8.1确定错误编号。
    printf ("错误编号:%d\n"、errorNumber = MSP430_Error_Number ());
    // 8.2确定错误编号的字符串。
    printf ("错误字符串:%s\n"、MSP430_Error_String (errorNumber));
    }
    
    printf ("按" 要继续");
    getchar();
    
    return (status =status_OK? 0:-1);
    }
    

    此致、

    James

    MSP 客户应用

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

    由于不活动、我将关闭此线程。

    此致、

    James

    MSP 客户应用