There haven’t been many interesting enquiries this week, so I thought I’d tell you about an interesting issue I had a few years ago bringing up a customer’s first prototype board. Whenever a customer starts an embedded design, I like to schedule some time with them as soon as the first boards come back to make sure the hardware comes up alive and ready for the software development to start.
The day before the scheduled bring-up, I had a call from the software engineer to say that they had done some initial hardware tests on the first board and it seemed fine. However, he had tried to run the software he had been developing and the emulator could not connect to the board with the debugger reporting an unhelpful error message.
So, first thing to do was to get a scope and look at the reset, address and data signals. The scope was of a certain age; you could tell that by the monochrome orange display; but it had a facility to print the trace on the screen, so we could compare the signals from the evaluation board and the customer’s board.
On the evaluation board, we could see a nice reset followed by a burst of addresses and data as the code loaded and ran. With the customer’s board, we got a reset, the start of the addresses as it jumped to the interrupt vector but then nothing. Not many other clues except one of the signals appeared to be about 0.6V below where it should be.
So we dug out the schematic and chased it back to a transistor. Although this was a low power micro with some extremely low power (in the nanoamps) power down modes the hardware engineer had put in a transistor to switch off the battery power if needed. The hardware engineer disappeared for a few minutes to remove it from the board and lo and behold the emulator connected and the code ran happily.
The moral of the story is that although you may be getting error messages from the software debugger (which may or may not be helpful and informative) it could be a hardware issue preventing your code from running. So get a fresh pair of eyes to check your schematic and layout to catch any omissions or errors before you commit to a board.