In-circuit emulator, a.k.a. ICE; I hate it. They are expensive, bulky, often unstable, and embellished with exotic and awkward interface.
In my experience of bringing up boards, I used ICE only once. In other cases, I used my simple ROM monitor program as an initial test and a primitive loader.
Many companies do not have an engineer (it must be ONE engineer, not a group of engineers) who can prepare a such simple program. For such companies, their way is the in-circuit emulator.
However in-circuit emulator is useless and dangerous because
– It is often unstable by itself, only adds complexity.
– It is expensive. You can buy only a few.
– Inflexible and strange interface designed by those kind of people.
My choice is a simple command line monitor. It has only limited functions, such as,
– memory dump
– UART initialization
– DDR initialization
– S-record download
Don’t make it larger than this. It is small, so it won’t have a bug. It is brought up on the day when the board is in. Once this program is up, the expensive in-circuit emulator is no use. You should bring up nicer loader such as U-boot next, then this monitor’s job is over.
I have to confess when in-circuit emulator was useful for me. That was when the board was messed up in the bus for the boot ROM, and the fetched instruction was broken. In-circuit emulator printed the instructions, clearly showing what was broken. It would have been hard to show that fact in other ways.
However I have never used any fancy functions; such as ROM writing event trigering, tracing, etc. All of those can be done by software if you have one good software engineer.