I'm having a few difficulties getting the UART bootloader to work on a C5502. Having investigated quite deeply for a couple of days, I have found out where the problem is: the device is programming itself via UART without a hitch, but not calling the entry point.
The boot table is fine: in fact, I can blow the same file to an EEPROM and boot using SPI, and it works wonderfully. The integrity of the data we're sending has been checked time and time again: the UART behaves as it should, with the TX pin echoing the RX pin but trailing by eight bits. The GPIO4 pin also does what it should do. We have a weak pull-down on it, and see a positive-going pulse on it as soon as the last byte of boot data is transferred.
The first few bytes of the boot table look like this:
00 00 7B 2F : entry point 0x7b24 (yes, this connects with _c_int00)
00 00 00 00 : register configuration count = 0
00 00 00 32 : data block count 0x32
00 00 7B D4 : start of data 0x7bd4
[... 50 bytes follow ...]
00 00 04 5F : data block count 0x45f
00 00 77 20 : start of data 0x7720
... and it goes on in a similarly understandable way.
Owing to the way the debugger works, I cannot interrogate any memory address lower than 0x00c0 without it complaining, so cannot inspect the supposed entry point at 0x0060.
I've tried with another program and get the same result: all programmed properly, everything behaving as it should, but the program counter is hovering around 0x0030 and not going to the entry point as it should.
The .cmd file is:
-heap 0x1000
-stack 0x1000
-sysstack 0x1000
MEMORY
{
MMR : o = 0x000000 l = 0x0000c0
DARAM : o = 0x0000C0 l = 0x00FD40
VECS : o = 0x00FE00 l = 0x000200
}
SECTIONS
{
.cinit > DARAM
.text > DARAM
.stack > DARAM
.sysstack > DARAM
.sysmem > DARAM
.data > DARAM
.cio > DARAM
.bss > DARAM
.const > DARAM
vectors > VECS
}
Any ideas?
Chip markings (just in case this is a known issue with some dodgy ROM): TMS320C5502PGF CA-32AZKRW G4