Skip to main content
  • Products
  • Evaluate our Software
  • Downloads
  • Free Utilities
  • Purchase
  • Support
  • About Us
  • Blog
  • Forum
  • Search
    • Contact Us
    • Forum
    • Knowledge Base
    • Web Shop
    • Newsletter
    • RSS
  •   Jobs
  •   Videos
  •   Blog
  •   Sustainability
  • emFile
  • SLC1 Driver
  • Technology
  • Add-ons
  • Tools

SLC1 NAND flash driver

NAND driver designed to support one or multiple SLC (Single-Level Cell) NAND flashes which require 1-bit ECC.

Contact us
Downloads
Documentation
SEGGER emFile
  1. 1.Overview
  2. 2.Supported devices
    1. 2.1.Parallel NAND flash and serial data flash devices
    2. 2.2.Support for devices not available in the list
  3. 3.Performance and resource usage
  4. 4.Theory of operation
  5. 5.Error Correction Code (ECC)

Overview

The SLC1 NAND driver enables the file system to access raw SLC NAND flash and DataFlash devices. It provides a very high performance with a reduced RAM and ROM usage. The data reliability is ensured by making use of 1-bit ECC. The SLC1 NAND driver makes efficient use of the storage by mapping more than one logical sector to a physical page of the device. Small and large block NAND flash devices are supported which gives the user more choices in selecting a storage device.

Supported devices

In general, the driver supports almost all Single-Level Cell NAND flashes (SLC). This includes NAND flashes with page sizes of 512+16 and 2048+64 bytes. The table below shows the NAND flash devices that have been tested or are compatible with a tested device.

Parallel NAND flash and serial data flash devices

Device TypePage Size [Bytes]Storage Capacity [Bits]
Atmel/Adesto
AT45BR3214B512+1632Mx1
AT45DB011B256+81Mx1
AT45DB021B256+82Mx1
AT45DB041B256+84Mx1
AT45DB081B256+88Mx1
AT45DB161B512+1616Mx1
AT45DB321C512+1632Mx1
AT45DB6421024+3264Mx1
AT45DCB002512+1616Mx1
AT45DCB004512+1632Mx1
AT45DB321E512+1632Mx1
Hynix
HY27xS08281A512+1616Mx8
HY27xS08561M512+1632Mx8
HY27xS08121M512+1664Mx8
HY27xA081G1M512+16128Mx8
HY27UF082G2M2048+64256Mx8
HY27UF084G2M2048+64512Mx8
HY27UG084G2M2048+64512Mx8
HY27UG084GDM2048+64512Mx8
Samsung
K9F6408Q0xx512+168Mx8
K9F6408U0xx512+168Mx8
K9F2808Q0xx512+1616Mx8
K9F2808U0xx512+1616Mx8
K9F5608Q0xx512+1632Mx8
K9F5608D0xx512+1632Mx8
K9F5608U0xx512+1632Mx8
K9F1208Q0xx512+1664Mx8
K9F1208D0xx512+1664Mx8
K9F1208U0xx512+1664Mx8
K9F1208R0xx512+1664Mx8
K9K1G08R0B512+16128Mx8
K9K1G08B0B512+16128Mx8
K9K1G08U0B512+16128Mx8
K9K1G08U0M512+16128Mx8
K9T1GJ8U0M512+16128Mx8
K9F1G08x0A2048+64256Mx8
K9F2G08U0M2048+64256Mx8
K9K2G08R0A2048+64256Mx8
K9K2G08U0M2048+64256Mx8
K9F4G08U0M2048+64512Mx8
K9F8G08U0M2048+641024Mx8
Cypress (Spansion)
S34ML01G12048+64128Mx8
S34ML02G12048+64256Mx8
S34ML04G12048+64512Mx8
ST-Microelectronics
NAND128R3A512+1616Mx8
NAND128W3A512+1616Mx8
NAND256R3A512+1632Mx8
NAND256W3A512+1632Mx8
NAND512R3A512+1664Mx8
NAND512W3A512+1664Mx8
NAND01GR3A512+16128Mx8
NAND01GW3A512+16128Mx8
NAND01GR3B2048+64128Mx8
NAND01GW3B2048+64128Mx8
NAND02GR3B2048+64256Mx8
NAND02GW3B2048+64256Mx8
NAND04GW32048+64512Mx8
Toshiba
TC5816BFT512+162Mx8
TC58V32AFT512+164Mx8
TC58V64BFTx512+168Mx8
TC58256AFT512+1632Mx8
TC582562AXB512+1632Mx8
TC58512FTx512+1664Mx8
TH58100FT512+16256Mx8
Micron
MT29F2G08AAB2048+64256Mx8
MT29F2G08ABD2048+64256Mx8
MT29F4G08AAA2048+64512Mx8
MT29F4G08BAB2048+64512Mx8
MT29F2G16AAD2048+64128Mx16

Support for devices not available in the list

Most other NAND flash devices are compatible with one of the supported devices. This means the driver can be used with these devices or may only need a little modification, which is easily done. For any questions about support for devices not listed, please feel free to contact us.

Performance and resource usage

The SLC1 NAND driver has been carefully designed to make effective use of RAM. The amount of RAM required by the driver depends on the runtime configuration and on the connected NAND flash device. In a typical embedded system which uses a 2 Gbit NAND flash, the driver requires less than 6 KB of RAM.

The SLC1 NAND driver has a very high read and write performance. For example, on an ARM7 CPU running at 48 MHz, the driver reaches a transfer speed of 3.8 MB/s for writing and 5.9 MB/s for reading. This makes the driver one of the fastest implementations on the market!

Theory of operation

NAND flash devices are divided into physical blocks and physical pages. One physical block is the smallest erasable unit; one physical page is the smallest writable unit. Each physical block consists of multiple physical pages. On small block NAND flash devices, one physical block contains typically 16, 32 or 64 pages and every physical page has a size of 528 bytes (512 data bytes + 16 spare bytes). Large block NAND flash devices contain blocks made up of 64 pages, each page containing 2112 bytes (2048 data bytes + 64 spare bytes).

The SLC1 NAND driver uses the spare bytes for the following purposes:

  • To check if the data status byte and block status are valid. If they are valid, the driver uses this sector. When the driver detects a bad sector, the whole block is marked as invalid. Its content is then copied to a non-defective block.
  • To store/read an ECC (Error Correction Code) for data reliability. When reading a sector, the driver also reads the ECC stored in the spare area of the sector, calculates the ECC based on the read data and compares the ECCs. If the ECCs are not identical, the driver tries to recover the data, based on the read ECC. When writing to a page the ECC is calculated based on the data the driver must write to the page. The calculated ECC is then stored in the spare area.

Error Correction Code (ECC)

The SLC1 NAND driver is highly speed optimized and offers better error detection and correction than a standard memory controller ECC. The ECC is capable of correcting and detecting 2-bit error. Data cannot be corrected if a block has two or more bit errors when computed for the ECC. Standard memory controllers compute an ECC for the complete block size (512 / 2048 bytes). The SLC1 NAND driver computes the ECC for data chunks of 256 bytes (e.g. a page with 2048 bytes is divided into 8 parts of 256 bytes), so the probability of detecting and also correcting data errors is much higher. This enhancement is realized with very good performance. The ECC computation of the SLC1 NAND driver is highly optimized, so that a performance of about 18 Mbytes/second can be achieved on a ATM7 CPU running at 48 MHz.

We suggest the use of the SLC1 NAND driver without the usage of a memory controller, because the performance of the driver is very high and the error correction is much better if it is controlled from the driver side.

Headquarters

SEGGER Microcontroller GmbH

Ecolab-Allee 5
40789 Monheim am Rhein, Germany
info@segger.com
Tel.: +49-2173-99312-0
Fax: +49-2173-99312-28

Locations

USA: SEGGER Microcontroller Systems LLC

Boston area
101 Suffolk Lane
Gardner, MA 01440, USA
us-east@segger.com
Tel.: +1-978-874-0299
Fax: +1-978-874-0599

Silicon Valley
Milpitas, CA 95035, USA
us-west@segger.com
Tel.: +1-408-767-4068

China: SEGGER Microcontroller China Co., Ltd.

Room 218, Block A, Dahongqiaoguoji
No. 133 Xiulian Road
Minhang District, Shanghai 201199, China
china@segger.com
Tel.: +86-133-619-907-60

ISO 9001 certified

ISO 9001

30+ years of experience

First-class embedded software tools since 1992
  • Imprint
  • Disclaimer
  • Privacy Policy
© 2025 SEGGER - All rights reserved.