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.
Work with hardware engineers to design software such that if a failure or fault occurs, the root cause can be derived from telemetry.
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.
Pair senior programmers with junior ones whenever possible to facilitate mentoring and transfer of institutional knowledge.
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.
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.
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.
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 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.
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 annual state-of-the-art report from NASA provides "a survey of small spacecraft technologies sourced ... from open literature" with an introduction to each technology, development status and performance metrics for procurable systems, and descriptions of new technologies with reference missions. Section 8 of this report covers avionics and flight software technologies.
This guidebook is a "collection of of recommended best practices and ready references to expedite research ... and technology (R&T) development projects" for NASA's Small Spacecraft Technology (SST) program. This resource is specifically targeted at SST projects; however many of the sections include best practices that can be valuable to a general smallsat audience. This section of the guidebook addresses software engineering, assurance, and management.