When embedded developers obtain a board or chip, it’s typically tied to a board support package (BSP) or software development kit (SDK). So what’s the difference between the two? Not all that much upon first glance. That’s because they often contain the same types of items, including documentation about the target platform, run-time support with a matching application programming interface (API), and possibly some support libraries and tools.
Generally, the main difference is that a BSP targets hardware and usually a specific board or family of boards, while an SDK can target hardware or software.
The BSP provides a way to access and configure the hardware using an API supplied with the BSP. These days, this comprises a set of C or C++ header files. A BSP for a microcontroller will often be designed to support “bare metal” applications or those that run without a standard operating system. The application may utilize interrupts and implement its own operating system.
For an SDK, in terms of software, the target may be an API, middleware, or an operating system. Of course, middleware and operating systems can have many APIs for different functional areas. An SDK that targets hardware often includes or supports one or more BSPs.
An SDK often will be built on top of standard interfaces or loaders like a BIOS or a UEFI system (see “Bye Bye BIOS. Hello UEFI”). The latest crop of PC-compatible motherboards use UEFI as well as many embedded motherboards and modules.
Generally, SDKs include more library support than a BSP. A BSP’s libraries more or less support the target, many times providing hooks into hardware accelerators such as encryption support. SDK libraries often feature algorithms not tied to the underlying hardware; for example, an SDK might include an FFT or sorting algorithm.
Another difference between the two is that SDKs will likely hide the underlying hardware, while a BSP exposes it. On top of that, SDKs sometimes get hidden behind new names like Embedded Development Kit (EDK) or similar variations.
In any case, a BSP or SDK is designed to reduce the time to get an application to market.