Nandps standalone driver

Introduction

This page gives an overview of nandps driver which is available as part of the Xilinx Vivado and SDK distribution.
Source path for the driver:
https://github.com/Xilinx/embeddedsw/tree/master/XilinxProcessorIPLib/drivers/nandps

Driver source code is organized into different folders. Below diagram shows the nandpsu driver source organization
nandps
|
-- Doc - Provides the API and data structure details
|
- Examples - Reference application to show how to use the driver APIs and calling sequence
|
- Source - Driver source files

Features Supported

Controller Features:

  • ONFI 1.0 compatible
  • upto 1GB device
  • 8/16-bit IO width with a single chip select
  • 16-word read/write FIFOs
  • 8-word command FIFO
  • Programmable IO Cycle timing
  • 1-bit ECC hardware with sw assist
  • Asynchronous memory operating mode

Driver Features:

  • Supports only the mandatory ONFI 1.0 commands. i.e Reset, Read status, Read ID, Read Parameter Page, Read Page, Program Page, Erase Block, Set/Get Features
  • supports page cache read operations
  • Support BBT management
  • Support for ondie ecc devices

Bad Block management

As part of the bbt management, driver reserves the last 4 blocks of the flash device for storing the bbt information. bbt management is similar to the Linux except the offset of storing the BBT signature land version location and also the locations reserved for storing the ecc information.

Known issues and Limitations

  • Driver supports polled mode only
  • No support for interleaved and optional 1.0 commands

ChangeLog

  • 2016.3

    • None
  • 2016.4

    • None
  • 2017.1

    • None
  • 2017.2

    • None
  • 2017.3

    • None
  • 2017.4

    • None
  • 2018.1

    • None
  • 2018.2

    • None
  • 2018.3

    • Summary
      • Fix incorrect BBT write
    • Commit
  • 2019.1

    • None
  • 2019.2

    • None
  • 2020.1

    • None
  • 2020.2

    • Summary
      • Update Makefile for parallel make execution
    • Commits

Test cases

Nandps example:


https://github.com/Xilinx/embeddedsw/blob/master/XilinxProcessorIPLib/drivers/nandps/examples/xnandps_example.c

It verifies the nand data integrity by programing the known data pattern and verify the same by reading the data back.
In this process erase, program, read, read ID, Read Parameter Page, Reset, read status, get/set features and bbt management are covered

Output:

Nandps skip example:

https://github.com/Xilinx/embeddedsw/blob/master/XilinxProcessorIPLib/drivers/nandps/examples/xnandps_skip_example.c
Same as nandps example. In addition to that it will verify the given block is bad or not. if it is bad block it skips that block and proceed with other good block.

Output:

Nandps cache example:

https://github.com/Xilinx/embeddedsw/blob/master/XilinxProcessorIPLib/drivers/nandps/examples/xnandps_cache_example.c
Same as nandps example. In addition to that it will use the page cache read operations.

Output:

Performance

Write(MBPS)Read(MBPS)
7.113.8

Related Links