I just came back from the Montreal Linux Symposium (formerly the Ottawa Linux Symposium) and realized I had ranted about the same thing I rant about at work all the time: the 4 things that I want on an embedded board in order to make my development work easier:
- A blinky LED: Above all else, (besides the power LED) there needs to be a LED which blinks under software control (perhaps a process, or event loop which toggles the state of the LED); that way you know at a glance if the LED is still blinking that the board is still sane, and that at least something in software-land is still running. If the LED stops changing state, then something bad has happened.
- A serial console: This is arguable just as important, as a blinky LED, but I’ve made it #2 on the list just because I think more people need to know that blinky LEDs are important. However, a serial console allows you to provide a command line interface to the target, and in the case of an embedded Linux project, to be able to get a root prompt. This vastly simplifies debugging the product.
- JTAG header: I have brought up boards before with only a blinky LED and serial port, however having JTAG sure makes it a lot easier. It is very annoying to get a board to work with, which hasn’t brought out the JTAG lines to a header, and you have a difficult problem to debug. Not to mention that debugging the hardware or writing a bootloader is infinitely easier if you have JTAG. Many COTS development boards come with working hardware and an existing bootloader though, which is why JTAG is at position #3 in this list.
- Ethernet port: This may seem like an odd request, as many products don’t include an Ethernet port, despite the chips being used supporting Ethernet. Many of the boards I’ve worked with will have a break-out board which provides such things as a DB9 for the serial console and a JTAG header. How hard would it be to include an Ethernet port on the same break-out board? Ethernet provides a fast way of transferring files back and forth (from target to host), allows for nfs mounted root filesystems (for embedded Linux), and is increasingly being used for remote debugging (via gdb and eclipse). Ethernet also opens new possibilities for manufacturing and rework, as you can transfer data to and from the target at much higher speeds than over a serial port.
I find many embedded developers have similar lists of “must haves” for embedded projects. However in my experience, the hardware we are given to work with don’t always follow these rules. The thing is that we’d all get the job done a lot faster, if we just had the right interfaces to work with.