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.
I am using the MSP430F5529 for a product. I tried entering the Z-Area by a couple of methods from my application code. I haven't been able to get it to work. I have tried it with and with out the JTAG adapter attached with no luck. With the JTAG adapter attached the Program Counter changes to 0XFFFE after I set the Program Counter to 0x1000. It appears to be reseting when I enter the BSL address.
Thanks,
Paul
The BSL area is protected against read/write access. Trying to access it may cause an NMI or reset.
From the family users guide:
1.11.1 Vacant Memory Space
Vacant memory is non-existent memory space. Accesses to vacant memory space generate a system(non)maskable interrupt (SNMI) when enabled (VMAIE = 1). Reads from vacant memory results in the value 3FFFh. In the case of a fetch, this is taken as JMP $. Fetch accesses from vacant peripheral space result in a PUC. After the boot code is executed, it behaves like vacant memory space and also causes an NMI on access.
Since you're not looking for vacant memory when you have problems accessing the BSL, you'll easily miss this.
I thought the Z-Area was supposed to be address space that was access-able from normal address space.
Thanks,
Paul
Me too.Paul Schilling said:I thought the Z-Area was supposed to be address space that was access-able from normal address space.
Hi Guys,
Sorry about getting to this one so late. The Z-area should be accessible from Application space. Setting the PC to addr 0x1000 should start the BSL (assuming one is there)
Then the part I quoted from the latest datasheet is incorrect (well, not the first one I discovered). Since setting the PC to 0x1000 results (of course) in a fetch from the BSL area, which in turn should trigger a vacant memory violation interrupt.
I found the problem with the BSL. I was using an X430F5529 REV A part. I used an Elprotronic Flash Pro430 to download the BSL on REV A and REV C part and found significant changes in the BSL memory content. I found executing address 0x1000 on a REV C part works but not on a REV A part. I then copied the BSL from a REV C to a REV A part and found it worked perfectly after that. In my code I did disconnect and disable the USB interface before making the call to the BSL. I don't know if that is strictly required but probably a good idea.
With the correct BSL code in the device the Z-Area works as expected.
The following C++ code is what I used to enter the BSL.
void CMD_UpgradeSoftware(void)
{
typedef void (* __data16 functionpointer)(void);
const functionpointer bsloader = (functionpointer)(0x1000);
USB_disconnect();
USB_disable();
//disable interrupts
_DINT();
// enter BSL
bsloader();
}
So maybe the passage from the docs related to vacant memory was written for the X430 RevA and the behaviour has been changed for the RevC. It should be reflected in the docs then. Or in the errata sheet.
So if understand you want us to jump to address 0x1000?
The manual says to jump to vector 0c00h which is the calling vectors for BSL access by program.
If I jump to 0c00h my board just resets, at least by jumping to 01000h I do not reset, but if I break the code, I find the PC running in my application area.
What should you see happen when you jump to 01000h?
Hi,
It depends on the device:
1/2/4xx devices: 0xC00 starts the BSL
5xx: 0x1000 starts the BSL
You can test whether it has worked correctly by trying to communicate with the BSL as normal. I wouldnt' trust using the debugger after this point, as you are off in protected memory for the 5xx. (the BSL)
Hello,
I found this thread on the jump to application and would like to ask some help for my problem. I too am trying to enter the BSL via application code. In order to read the BSL code (at least the assembly), I unset the SYSBSLPE bit ("SYSBSLC = 0x0003") but saw only a bunch of JMP executions in the disassembly tab of CodeComposer.
If I disconnect the MSP-FETu430UIF and try to communicate with the BSL UART, nothing is returned. Is it necessary to do any extra configuration?
Thanks
**Attention** This is a public forum