ABSTRACT

Any CPUs we have in the system or on our board design will run software. We, the hardware engineers, must have a basic understanding of the parts of the software that directly exercises our hardware through registers, the parts that are involved in initializing our devices, and any test software specifically written for testing our hardware—mainly what these pieces do, where they are stored on the board, which one is which, when their development is completed, and what features they have or should have, not their source code itself. It is written by the software engineers, and most often they are run through the console by the software or test engineers for us in the lab. Compiled software code has a layered structure. Firmware is the type of low-level software that interacts with hardware chip registers and bus addresses, as opposed to regular user software that is at the higher application level only and is hardware independent. Regular software still relies of the existence of the main chips but treats them as simplified objects to extract the actual functionality of the system. User software often relies on the firmware downstream to it to complete a hardware access task, but that is not very interesting to us.