MCF > Detailed Design and Analysis > Embedded Software/Firmware >
Scope and Description
This topic page covers development of embedded software (including firmware). This includes any software that is not what we categorize in this knowledge base as "flight software", which is responsible for command and data handling (C&DH) for the entire spacecraft. Software covered by this topic is typically bare-metal - running on a microcontroller or FPGA without an intervening operating system layer in the software architecture. This subsystem and payload software is usually much less complicated than the flight software and is responsible for lower-level functionality tied closely to analog inputs (e.g., power switch control and analog telemetry acquisition in the electrical power subsystem). Software flaws are one of the most common sources of on-orbit failure in small satellites. Because this software usually cannot be updated on-orbit, smallsat developers should ensure that it is robust and reliable.
Resources in this topic area are primarily software tools for developing embedded software, developing firmware, software version control, and management of development processes.
Best Practices and Lessons Learned
- In addition to the performance of the code, quality software is well commented and has good documentation/user guides to ensure survival of lost personnel.
- Pair senior programmers with junior ones whenever possible to facilitate mentoring and transfer of institutional knowledge.
- Save effort by holding off coding until later in the project lifecycle (e.g., after the preliminary design review). This will ensure that the key issues are fully understood before finalizing software requirements. Deciding to code with only a fraction of the requirements finalized may cause expensive, time-consuming rewrites - especially if the architecture of the software has to be torn up and reworked.
- Work with hardware engineers to design software such that if a failure or fault occurs, the root cause can be derived from telemetry.
- Make telemetry functions configurable such that the type and frequency of telemetry data can be adjusted on-orbit.
- Use watchdog timeouts liberally to prevent the software from hanging and provide a "safety valve" for the software to trap and handle errors.
- Break down software into simple, testable modules and minimize logical paths within each to make testing with complete code-coverage easier. Build a reusable module whenever an action is repeated - do not repeat yourself.
- Develop and strictly follow good procedures for revision control, bug tracking, testing, and review of all code.
- Strongly consider instituting an Agile approach to software development.
This interactive online software tool offers a step-by-step guide for determining radiation risks that ... apply given a set of simple input from the user. Smallsat teams can develop dose depth curves and single event effects (SEE) plots based on the orbit and other input parameters. In addition, R-GENTIC provides advice on electronics and software/firmware design for radiation tolerance in the specified environment.
Complex electronics are "programmable and designable complex integrated circuits." Examples of these ... include, but are not limited to, FPGAs, CPLDs, ASICs, and SoCs. This handbook provides an overview of FPGA, CPLD, ASIC, and SoC devices, how they are designed and programmed, and assurance and verification activities for them. It also covers trends in design and assurance for these complex devices. This document is coming from a traditional, high-reliability perspective, but the intended audience and "overview" level of detail makes this a good introduction these design, assurance, and verification tasks. Section 3 provides a useful glossary of terms.
A web-based software engineering handbook designed to provide guidance for the implementation of safe ... and reliable software on satellite projects. This handbook includes software engineering resources such as NASA standards, guides, lessons learned, and references for acquiring, developing, and maintaining NASA software systems.
MATLAB and Simulink is a software tool used for (among other things) embedded code development and verification ... - from prototyping to production. Software developers can use this software tool to model, simulate, and analyze the embedded software/firmware. In addition, users can generate C and C++ code for their devices directly from MATLAB and Simulink.
GitHub is a cloud-based software tool where software developers can store and manage their source code. ... It is a free tool that allows software teams to host, collaborate, and organize code using private or public repositories. GitHub is the largest host of source code in the world and can be used by smallsat teams to develop flight software and embedded software/firmware.
GitLab is a free and open-source cloud-based software tool used for managing, issue-tracking, and continuous ... integration of software throughout the DevOps lifecycle. GitLab is a great code management tool that smallsat software developers can use to collaborate and manage the software development process.
Bitbucket is Atlassian's cloud-based, open-source code management system that can easily integrate into ... its software suite of tools. Bitbucket is a great solution for teams that require additional collaborative tools such as scheduling, design, and document sharing.
This software application is used for developing and debugging microcontroller applications. Microchip ... Studio is an integrated development environment of well-supported development tools written in C/C++ or assembly code.
A design suite of high productivity development tools for designing, testing, and performing timing analysis. ... This design suite can reduce the development time needed for field-programmable gate arrays (FPGAs) using the Microchip's high-level sythesis compiler.
An integrated development environment (IDE) for development and debugging support of all Microchip SoC ... field-programmable gate arrays (FPGAs).
This is an open-source framework that allows customers to develop, test, and debug software in a co-development ... environment. Renode enables software developers to assemble virtual Systems-on-Chips (SoCs) from building blocks, without having to copy-paste code or modify hard-coded values.
This software tool can be used for development, testing, and timing analysis for embedded firmware. The ... Vivado design suite offers a new approach to high productivity with C/C++ and IP-based design.
This resource provides general and detailed requirements for software development on space systems. This ... document covers design, development, integration and testing for flight software and embedded software/firmware.
This NASA guidebook provides software safety procedures and guidance for the development and quality ... assurance of safety-critical software. This resource also provides software acquisition guidance for both commercial off-the-shelf (COTS) software and software developed under contract.