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.

MSP Flasher --- MSP430 Does not work after installation!

Other Parts Discussed in Thread: MSP430FR5969

Can somebody explain this to me please? When I download the WIN version after installation no shortcut will show up on the desktop neither on my installed apps on WIN 10!

Maybe it is not compatible with 10? Any idea please?

www.ti.com/.../msp430-flasher

 

  • After more digging into the software with WIn 7, found out I have the same issue. The folder is empty and only uninstall shows up!

  • Hello CaEngineer,

    I just installed a fresh copy of MSP430 Flasher on my Windows 7 computer and reproduced the same results that you seem to be having. However, it seems like the shortcut is just missing from the start menu but the program installed correctly on my system. Please navigate over to the installation folder to run the MSP430Flasher.exe file (default folder is C:\TI\MSP430Flasher_1.3.7). To create a shortcut, right click on "MSP430Flasher.exe" and click "Create Shortcut" which you can then move to your desktop or to the start menu folder. The start menu folder for MSP430 Flasher on Windows 7 can be accessed here: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\MSP430 Flasher

    I will confirm with someone on our team here to see where we are with regards to Windows 10 compatibility.

    Regards,

    Akash Patel

  • Akash,

    This folder has only a shortcut that does not take me anywhere!

    It does not show me what it shows for you after installation!

  • CaEngineer,

    Please first navigate to the C:\TI\MSP430Flasher_1.3.7 folder to see the installation files. Here you should see files similar to the ones in my above screenshot. Once you have done that, right click on the MSP430Flasher.exe file and create the shortcut which you can then move into the start menu folder in your screenshot.

    Regards,

    Akash

  • Akash,

    On windows XP worked. But hen you click on .EXE on the desktop or within the folder it shows you the black dos screen for a second and disappears!

  • Ok now, I am able to run the executable file. However, it seems it does not flash my firmware. It flashes JTAG firmware! How can I insert the .hex or .txt file to flash the MSP with my firmware?

  • It is said that BL_PROGRAM_FIRMWARE = 3, /**< Program new firmware */ but seems it updates the firmware of the JTAg itself!
  • My main:

    int main(int argc, char* argv[])
    {
        int RetState = 0;
        
        // Prepare default options
        g_sOpt.pcInterface = g_Def.defInterface;
        g_sOpt.pcEraseType = g_Def.defEraseType;
        g_sOpt.pcVerify    = g_Def.defFALSE;
        g_sOpt.pcVCC       = 0;
        g_sOpt.pcPassword  = g_Def.defPassword;
        g_sOpt.pcTimeout   = g_Def.defTimeout;
        
        // Execute Flasher routine
        RetState = Flasher(argc, argv, &g_sOpt, &g_RTE);
    
        switch(RetState)
        {
            case 1:
                Help();
                return RetState;
                break;
            case 2:
                Exit_Specs();
                return RetState;
                break;
        }
    
        StdUseCase_Close(&g_sOpt);
        return RetState;
    }
    

    Does not include any calling to my TXT file!

  • But seems Flasher does the loading but there is no sign of the TXT or HEX File!
  • Ended up with the following. However, ReadFile does not call any TEXT file or HEX!

    void StdUseCase_ReadWrite(sDefOptions_t* sOpt, sRTE_t* RTE)
    {
        string DeviceName = sOpt->pcDeviceName;
        string EraseType(sOpt->pcEraseType ? sOpt->pcEraseType : "");
        string ReadFile(sOpt->pcReadFile ? sOpt->pcReadFile : "");
        string ReadMem(sOpt->pcReadMem ? sOpt->pcReadMem : "");
        ReadMem.erase(std::remove(ReadMem.begin(), ReadMem.end(), ' '), ReadMem.end());
    
        if(ReadFile != "")        // if MSP430 memory should be dumped
        {
            int32_t lwStart;
            int32_t lwLength;
                            
            if(ReadMem == "RAM")
            {
                lwStart = g_tTargetDevice.ramStart;
                lwLength = g_tTargetDevice.ramEnd - g_tTargetDevice.ramStart + 1;
            }
            else if(ReadMem == "INFO")
            {
                lwStart = g_tTargetDevice.infoStart;
                lwLength = g_tTargetDevice.infoEnd - g_tTargetDevice.infoStart + 1;
                                
                Print_N_Log(REPORT_MSG, "* Unlocking Info Memory A...");
                Ret_Configure = MSP430_Configure(LOCKED_FLASH_ACCESS, ENABLE);
                if(Ret_Configure == STATUS_ERROR)
                {
                    StdUseCase_Exit(EXIT_CONFIGURE, 0);
                }
            }
            else if(ReadMem == "MAIN")
            {
                lwStart = g_tTargetDevice.mainStart;
                lwLength = g_tTargetDevice.mainEnd - g_tTargetDevice.mainStart + 1;
            }
            else if(ReadMem == "BSL")
            {
                lwStart = g_tTargetDevice.bslStart;
                lwLength = g_tTargetDevice.bslEnd - g_tTargetDevice.bslStart + 1;
    
                Print_N_Log(REPORT_MSG, "* Unlocking BSL memory...");
                Ret_Configure = MSP430_Configure(UNLOCK_BSL_MODE, 1);
                if(Ret_Configure == STATUS_ERROR)
                {
                    StdUseCase_Exit(EXIT_CONFIGURE, 0);
                }
            }
            else if(ReadMem.find("0X") != string::npos)
            {
                size_t del_pos = ReadMem.find("-");
    			lwStart = (int32_t)strtol(ReadMem.substr(0, del_pos).c_str(), NULL, 16);
                /*if (lwStart % 2)
                {
                    lwStart += 1;
                    Print_N_Log(ERR_MSG, "* Warning : Uneven start address. Using 0x%x instead.\n", lwStart);
                }*/
    
    			lwLength = (int32_t)strtol(ReadMem.substr(del_pos+1, string::npos).c_str(), NULL, 16) - lwStart + 1;
                if (lwLength <= 0)
                {
                    Print_N_Log(ERR_MSG, "* ERROR : Invalid memory boundaries specified.\n");
                    StdUseCase_Exit(EXIT_READOUTFILE, 0);
                }      
            }
    
            Print_N_Log(REPORT_MSG,"* Dumping memory from %s into %s...", sOpt->pcReadMem, sOpt->pcReadFile);
            Ret_ReadFile = MSP430_ReadOutFile(lwStart, lwLength, sOpt->pcReadFile, RTE->file_type);
            if(Ret_ReadFile != STATUS_OK)
            {
                Print_N_Log(ERR_MSG, "* ERROR : Unable to read from memory.\n");
                if (lwLength <= 0)
                StdUseCase_Exit(EXIT_READOUTFILE, 0);
            } 
        }
        else
        {
            Ret_ReadFile = STATUS_OK;
        }
    
        // if MSP430 memory should be programmed
        if(Ret_OpenDevice == STATUS_OK && sOpt->pcFile != NULL)
        {
            // if BSL write is enabled
            if(Ret_OpenDevice == STATUS_OK && inst_state & WRITE_BSL)
            {                  
                Print_N_Log(REPORT_MSG, "* Unlocking BSL memory...");
                Ret_Configure = MSP430_Configure(UNLOCK_BSL_MODE, ENABLE);
                if(Ret_Configure == STATUS_ERROR)
                {
                    StdUseCase_Exit(EXIT_CONFIGURE, 0);
                }
            }
    
            // if locked flash access is selected
            if(Ret_OpenDevice == STATUS_OK && inst_state & UNLOCK_FLASH)
            {
                Print_N_Log(REPORT_MSG, "* Unlocking Info Memory A...");
                Ret_Configure = MSP430_Configure(LOCKED_FLASH_ACCESS, ENABLE);
                if(Ret_Configure == STATUS_ERROR)
                {
                    StdUseCase_Exit(EXIT_CONFIGURE, 0);
                }
            }
                            
            int32_t lEraseType = ERASE_ALL;
    
            // evaluate erase type
            // only the L092 requires writing to external memory
            if(DeviceName == "MSP430L092")
            {
                inst_state |= MODE_SELECT;
                sOpt->pcEraseType = "ERASE_MAIN";
            }
            else
            if(DeviceName == "MSP430C092")
            {
                sOpt->pcEraseType = "ERASE_MAIN";
            }
            if(EraseType == "ERASE_MAIN")
            {
                lEraseType = ERASE_MAIN;
            }
            if(EraseType == "NO_ERASE")
            {
                lEraseType = 0; // = ERASE_SEGMENT (will be ignored by MSP430_ProgramFile() -> no erase
            }
            if(EraseType == "ERASE_SEGMENT")
            {
    			int32_t lStartAddress = 0;
    			int32_t lProgramLength = 0;
                
                lEraseType = ERASE_SEGMENT;
                if(ParseInputFile(sOpt->pcFile, &lStartAddress, &lProgramLength) != STATUS_OK)
                {
                    StdUseCase_Exit(EXIT_VARIOUS, 26); // ErrorNumber 26 = "File I/O Error"
                }
    
                if(MSP430_Erase(lEraseType, lStartAddress, lProgramLength) != STATUS_OK)
                {
                    Print_N_Log(ERR_MSG,"* Erase check failed. Memory segment was not erased correctly!\n");
                    StdUseCase_Exit(EXIT_ERASE, 0);
                }
                
                if(MSP430_EraseCheck(lStartAddress, lProgramLength) != STATUS_OK)
                {
                    Print_N_Log(ERR_MSG,"* Erase check failed. Memory segment was not erased correctly!\n");
                    StdUseCase_Exit(EXIT_ERASE, 0);
                }
            }
    
            Print_N_Log(REPORT_MSG,"* Loading file into device...");
    
            // program target code into MSP430 memory without verify
            Ret_ProgramFile = MSP430_ProgramFile(sOpt->pcFile, lEraseType, false);
    
            if(Ret_ProgramFile != STATUS_OK)
            {
    			StdUseCase_Exit(EXIT_PROGRAMFILE, 0);
            }
        }
        else
        {
            Ret_ProgramFile = STATUS_OK;  // <- simply set status to OK
        }
    
    	// verify data transfer
    	if(strcmp(sOpt->pcVerify, "FALSE"))
        {
    	    if((!strcmp(sOpt->pcVerify, "TRUE")) && (sOpt->pcFile != NULL))
            {
                Print_N_Log(REPORT_MSG,"* Verifying memory (%s)...", sOpt->pcFile);
                Ret_VerifyFile = MSP430_VerifyFile(sOpt->pcFile);
            }
    		else if(strcmp(sOpt->pcVerify, "TRUE"))  // separate file for verify
    		{
                Print_N_Log(REPORT_MSG,"* Verifying memory (%s)...", sOpt->pcVerify);
                Ret_VerifyFile = MSP430_VerifyFile(sOpt->pcVerify);
    		}
    		
    		if(Ret_VerifyFile != STATUS_OK)
    		{
    			StdUseCase_Exit(EXIT_VERIFYFILE, 0);
    		}
    	}
    
    	// L092 handling
        if ((inst_state & WRITE_EXT_MEM)      &&  // if data should be written to external memory
    		(sOpt->pcFile != NULL)            &&  // ...and data was transferred into RAM
    		(Ret_ProgramFile != STATUS_ERROR))    // ...successfully
        {
            Print_N_Log(REPORT_MSG,"* Writing to external memory...");
            Ret_Configure = MSP430_Configure(WRITE_EXTERNAL_MEMORY, ENABLE);        // write to external memory
            if(Ret_Configure == STATUS_ERROR)
            {
                StdUseCase_Exit(EXIT_CONFIGURE, 0);
            }
        }
    }
    

  • If I need to type in commands in the black Dos window, why it disappears after a while!
  • Hi CaEngineer,

    Whereas I did go over how to create a shortcut for this earlier, this is step is unnecessary as the MSP430 Flasher runs from a terminal/command window. My apologies for not pointing that out earlier. For more information on how to use this software, please consult the user guide found here: http://www.ti.com/lit/ug/slau654/slau654.pdf 

    The procedure for using the tool can be found in section 1 of the user's guide. Using this tool requires files in the format of  TXT (TI-txt) or HEX (Intel-hex) (this is found in table 1 of the user's guide). If you're using IAR or CCS, you can follow the instructions at this link to create these types of files. processors.wiki.ti.com/.../Generating_and_Loading_MSP430_Binary_Files

    Basic steps:

    1. Open a command/terminal window. You can do this by typing "cmd" into the start menu and pressing enter.
    2. Navigate over to the MSP30 Flasher directory in the command window.
    3. Run the MSP430 Flasher from the command window by typing "MSP430Flasher [options]"
      1. Please consult the user guide for the appropriate options. Be sure to include the MSP part that you are flashing as well as point to a text/hex file which is to be flashed.

    Below is an example of me flashing hex code onto my MSP430FR5969 Launchpad.

    The file that I will be flashing is msp430fr59xx_1.c.txt which can be seen in the below screenshot. I have placed this file in my MSP430Flasher_1.3.7 folder to make it easier for me to locate it in the command window.

    Below is an example of me running the commands in the command window to flash the above text file into my MSP430FR5969.

  • Perfect Akash!

    Let me try this and get back to you shortly! 

  • Ashka,

    Here is my findings so far:

    I have successfully done what you have done above as you can see through the pictures below.

    However, when I load the firmware to the MSP430, my LCD does nothing! Normally other than blinking the JTAG the LCD goes on and off that's why I can make sure that the firmware is loaded or not!

    What do you advice? The way I load is wrong or my firmware? Because the "Verify" section is Flase!

    what do you advise?

  • Yeyyyyyyyyy!!!! I added -v -z [VCC] to the rest of the command and it is loaded to my MSP430 and LCD shows what I want to see with the help of that HEX code!

    Many thanks Ashka! :)
  • Glad to know that you got it to work! I was able to confirm that the tool should work with Windows 10 currently (v. 1.3.7) and that it should be officially supported in our next release of the software.

    Regards,
    Akash

  • Yes, it is working on Win10 as well. Thanks for your follow up!

**Attention** This is a public forum