An important aspect of embedded systems, and more widely of digital systems in general, is the code error correction.
Indeed, when data transits through a communication channel (CAN, radio…), the integrity of the information transmitted may be affected, this is known as an error.
The causes of these communication errors could be different. Most of the time, they are due to purely physical phenomenons like power or thermal noise, cross talk, attenuation, and other forms of interference.
Normally such errors are inevitable, and can be quite critical regarding the integrity of the system. Consequently, the on-board software must be able to manage these errors.
Data redundancy as a method to detect errors
A very simple solution is to introduce data redundancy, that consists of adding/duplicating the original information. This notion of redundancy is usually used by engineers in safety-critical systems. In communication, it ensures that data will be transmitted without its content being subject to these errors.
In our case, although we make sure that our systems can communicate through different communication channels such as USB, radio or 4G, we also employ Information Redundancy to provide internal and external communication without any errors. There are a number of methods to detect and correct errors within communications, here are some examples:
- Parity bit, the simplest form of error detecting code. Add one bit which specifies whether the number of bits at ‘1’ is even or odd.
- Checksum. Add a value which is the result of the data’s bits sum complemented using 1’s complement.
- Cyclic redundancy check.
A few words about the last method, the CRC. It is a widely used error detection code in telecommunications, which, despite a bigger calculation cost compared to other algorithms, allows high reliability for error correction. The idea is quite simple; at sending a data frame, the CRC algorithm, will add a Control Code to the original data, which is based on the remainder of a polynomial division of their contents. Thus, upon the reception of the message, the system will just have to repeat the same calculation based on the data. If the result is equal to the received Control Code, then the message has been correctly transmitted, otherwise, it contains an error.
In Embention, concerned about the integrity and reliability of our products, we have integrated, at several levels of the system, error detection mechanisms as CRC, that are directly firmware-implemented, or Checksum, that can be configured by users through the Software. Whether on external memory communication with the SD card, or for telemetry communication between Pipe and Veronte Autopilots, we ensure free-errors communications.