STRUCT NAND_SDR_TIMINGS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct nand_sdr_timings(9) πŸ’…

okay so this is a page from the Kernel API Manual bestie, and it's literally all about struct nand_sdr_timings β€” the glow-up sheet where an SDR NAND chip's timing requirements live. buckle up πŸŽ€


✨ NAME ✨

struct nand_sdr_timings β€” SDR NAND chip timings πŸ¦‹


🌸 SYNOPSIS 🌸

no cap, here's the whole struct, character for character, don't touch a thing:

struct nand_sdr_timings {
    u64 tBERS_max;
    u32 tCCS_min;
    u64 tPROG_max;
    u64 tR_max;
    u32 tALH_min;
    u32 tADL_min;
    u32 tALS_min;
    u32 tAR_min;
    u32 tCEA_max;
    u32 tCEH_min;
    u32 tCH_min;
    u32 tCHZ_max;
    u32 tCLH_min;
    u32 tCLR_min;
    u32 tCLS_min;
    u32 tCOH_min;
    u32 tCS_min;
    u32 tDH_min;
    u32 tDS_min;
    u32 tFEAT_max;
    u32 tIR_min;
    u32 tITC_max;
    u32 tRC_min;
    u32 tREA_max;
    u32 tREH_min;
    u32 tRHOH_min;
    u32 tRHW_min;
    u32 tRHZ_max;
    u32 tRLOH_min;
    u32 tRP_min;
    u32 tRR_min;
    u64 tRST_max;
    u32 tWB_max;
    u32 tWC_min;
    u32 tWH_min;
    u32 tWHR_min;
    u32 tWP_min;
    u32 tWW_min;
 };

πŸ’– Members πŸ’–

okay this is the part where every single field gets its moment. main character energy for all 38 of them, periodt:

  • tBERS_max β€” Block erase time ⏳
  • tCCS_min β€” Change column setup time
  • tPROG_max β€” Page program time
  • tR_max β€” Page read time
  • tALH_min β€” ALE hold time
  • tADL_min β€” ALE to data loading time
  • tALS_min β€” ALE setup time
  • tAR_min β€” ALE to RE# delay
  • tCEA_max β€” CE# access time
  • tCEH_min β€” CE# high hold time
  • tCH_min β€” CE# hold time
  • tCHZ_max β€” CE# high to output hi-Z
  • tCLH_min β€” CLE hold time
  • tCLR_min β€” CLE to RE# delay
  • tCLS_min β€” CLE setup time
  • tCOH_min β€” CE# high to output hold
  • tCS_min β€” CE# setup time
  • tDH_min β€” Data hold time
  • tDS_min β€” Data setup time
  • tFEAT_max β€” Busy time for Set Features and Get Features
  • tIR_min β€” Output hi-Z to RE# low
  • tITC_max β€” Interface and Timing Mode Change time
  • tRC_min β€” RE# cycle time
  • tREA_max β€” RE# access time
  • tREH_min β€” RE# high hold time
  • tRHOH_min β€” RE# high to output hold
  • tRHW_min β€” RE# high to WE# low
  • tRHZ_max β€” RE# high to output hi-Z
  • tRLOH_min β€” RE# low to output hold
  • tRP_min β€” RE# pulse width
  • tRR_min β€” Ready to RE# low (data only)
  • tRST_max β€” Device reset time, measured from the falling edge of R/B# to the rising edge of R/B#.
  • tWB_max β€” WE# high to SR[6] low
  • tWC_min β€” WE# cycle time
  • tWH_min β€” WE# high hold time
  • tWHR_min β€” WE# high to RE# low
  • tWP_min β€” WE# pulse width
  • tWW_min β€” WP# transition to WE# low

πŸ¦‹ Description πŸ¦‹

so this struct is literally the whole timing requirements vibe of an SDR NAND chip πŸ’« like, it defines them, that's the job. and where do you even find all this tea? every NAND datasheet has it, and the actual meaning of the timings is spelled out in the ONFI specifications: https://media-www.micron.com/-/media/client/onfi/specs/onfi_3_1_spec.pdf (chapter 4.15 Timing Parameters) β€” iykyk πŸ“–βœ¨

important bestie note: all these timings are expressed in picoseconds. every single one. picoseconds. 😭 tiny.

🌈 SEE ALSO 🌈

the whole friend group, no one left out 🫢:

Kernel file ./include/linux/mtd/rawnand.h struct nand_parameters(9), struct nand_id(9), struct nand_ecc_step_info(9), struct nand_ecc_caps(9), struct nand_ecc_ctrl(9), struct nand_nvddr_timings(9), enum nand_interface_type(9), struct nand_interface_config(9), nand_interface_is_sdr(9), nand_interface_is_nvddr(9), nand_get_sdr_timings(9), nand_get_nvddr_timings(9), struct nand_op_cmd_instr(9), struct nand_op_addr_instr(9), struct nand_op_data_instr(9), struct nand_op_waitrdy_instr(9), enum nand_op_instr_type(9), struct nand_op_instr(9), struct nand_subop(9), struct nand_op_parser_addr_constraints(9), struct nand_op_parser_data_constraints(9), struct nand_op_parser_pattern_elem(9), struct nand_op_parser_pattern(9), struct nand_op_parser(9), struct nand_operation(9), struct nand_controller_ops(9), struct nand_controller(9), struct nand_legacy(9), struct nand_chip_ops(9), struct nand_manufacturer(9), struct nand_secure_region(9), struct nand_chip(9), nand_get_interface_config(9), struct nand_flash_dev(9), nand_opcode_8bits(9), nand_get_data_buf(9)


and that's the whole page, bestie, you ate that πŸ’…βœ¨ this lil drop came from ./include/linux/mtd and it's dated October 2026, filed under struct nand_sdr_timings(9) β€” go forth and time your NAND correctly, mwah πŸŽ€πŸ’–

πŸ“¦ where this page comes from