Flash-translation-layer (FTL) software sits between an operating system or application and raw NAND or NOR flash-memory devices. It handles features like wear-leveling, bad-block management, and caching. Many applications can get away with almost any FTL support. However, real-time systems require a deterministic environment, otherwise programmers need to take the non-deterministic nature of flash into account. The variability of flash storage can be significant over the life of the system, and longer operation times occur as a system ages.
HCC Embedded’s SafeFTL is designed to provide deterministic flash operation over the life of the system. SafeFTL addresses the typical high-performance FTL chores like bad-block management and garbage collection. It can handle up to 4 TB in a single wear-leveled array. It supports multichip arrays and 16-kB page sizes.
The system supports zero copy block read/writes and fast initialization. It has a number of caching options and fail-safe support for unexpected resets. SafeFTL supports all common NAND/NOR devices, including SLC, MLC and multi-plane, while providing over 98% block availability. It comes with ONFI and CFI drivers.
Dealing with Variability
SafeFTL can operate as a conventional FTL implementation but how does HCC Embedded address variability of flash operations? It provides an additional programming interface that allows the application to check whether an operation will complete in the desired timeframe. The application can delay an operation if it would delay the application, preventing it from completing another action within a required time period.
This approach of prioritizing actions is something programmers working on real-time systems must always contend with. SafeFTL also supports parallel operations, enabling developers to schedule use of the system—even taking operation priorities into account. Developers can split complex operations over multiple time slots while the memory remains accessible for other operations. This can be critical to environments where multiple deterministic applications are running simultaneously.
Having a deterministic FTL can be critical to applications where safety and certification are part of the system design. Working with a non-deterministic FTL is possible in these cases, but it makes the programmer’s job more difficult. In addition, dealing with the unknown means reducing real-time limits or making hardware and software design more complex.