Skip to main content
  • Products
  • Evaluate our Software
  • Downloads
  • Free Utilities
  • Purchase
  • Silicon Vendors
  • Support
  • About Us
  • Blog
  • Forum
  • Search
  • Jobs
  • Newsletter
  • Blog
  • Contact
  • Shop
  • emFile
  • SLC1 Driver

    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.Supported devices
      1. 1.1.Parallel NAND flash and serial data flash devices
      2. 1.2.Support for devices not available in the list
    2. 2.Performance and resource usage
    3. 3.Theory of operation
    4. 4.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.

    • User manual
    • Online documentation
    • List of downloads
    • Download for evaluation
    • Release notes
    • Update notification
    • Pricing
    • Support
    • Silicon vendor resources

    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
    • Code of Conduct
    • Privacy Policy
    © 2025 SEGGER - All rights reserved.