Documentation for “Zerocat Chipflasher” as of Sat, 12 Sep 2026 15:33:20 +0200
Repository: git://zerocat.org/zerocat/projects/chipflasher.git
Version: v3.0.2-0-23f71fc2c
Branch: master
Propeller Spin/PASM Compiler 'OpenSpin' (c)2012-2016 Parallax Inc. DBA Parallax Semiconductor.
Version 1.00.78
Compiling...
spi-flashbase.spin
Done.
Program size is 3648 bytes
______________________________________________________________________________
********************************************************* File starts here ***
Zerocat Chipflasher --- Flash free firmware, kick the Management Engine.
Copyright (C) 2020, 2021, 2022, 2024, 2025, 2026 Kai Mertens
File spi-flashbase.spin --- Provide methods to access SPI flash chip database
This file is part of Zerocat Chipflasher.
See end of file for terms of use.
******************************************************************************
# Compiler Switches
# Object Summary
Object "spi-flashbase" Interface:
PUB init
PUB set_slot(n)
PUB get_slot
PUB inc(transparent_mode)
PUB dec(transparent_mode)
PUB get_MID
PUB get_IDn(n)
PUB get_ID
PUB get_CE
PUB iscommand(cmdnum)
PUB isvalid(ireg)
PUB isstatic(ireg)
PUB iswritable(ireg)
PUB isotp(ireg)
PUB isinfo(ireg) :
PUB sprintbit(ireg, bitpos, pbuf2) :
PUB isbit(ireg, bitpos, pbitname)
PUB digits :
PUB ptr_bitnames(ireg)
PUB ptr_names_n(n)
PUB ptr_names
PUB ptr_chipset
PUB ptr_mfr(testid, mode) :
PUB get_blockaddr(bnum, pbmax) :
PUB get_bits_readblockregister
PUB get_features32
PUB get_pagesize :
PUB get_size :
PUB isADS(flag)
PUB isSRL(flag)
PUB isPSECT(flag)
PUB get_features
PUB isfeature32(feature_flags)
PUB isfeature(feature_flags)
PUB isEFAIL(flag)
PUB isUNIQ(flag)
PUB isWPS(flag)
PUB isTB(flag)
PUB get_otptype(pn, ps, pk, pe, psize, popcode_r) :
PUB get_opcode_wrblocklock(mode, p_opcode, p_arg)
PUB get_opcode_rdblocklock :
PUB xref_PTABLES(s14cmp, s6sec, anytb, bplevel, bfirst_addr, bstop_addr) :
Program: 908 Longs
Variable: 1 Longs
# Loaded Objects
# Included Files
## ./blocksizes.spin
### Constants
* Common Flash Block Sizes
## SPI Command Bytes, as collected across multiple datasheets
* Obsolete Command Bytes, found on Atmel AT26DF041
* Command Bytes, understood by most SPI flash chips
* Basic Command Bytes, understood by modern SPI flash chips
* SPI Command Bytes, Identification
* SPI Command Bytes, found on Microchip SST25VF016B
* SPI Command Bytes, found on EONSSI (e.g. EN25QH256, EN25QH128-2T)
* SPI Command Bytes, found on Macronix chips (MXIC)
* SPI Command Bytes, found on Atmel AT26DFxxx, and AT25DFxxx; Macronix
* SPI Command Bytes, found on Atmel AT25DFxxx
* SPI Command Bytes for OTP, found on AMIC A25L-types
* SPI Command Bytes for OTP, found on Spansion S25FL064P
* Individual Block Protection, found on Micron M25PE-family
* Individual Block Protection, found on Winbond W25Q..JV-family
* SPI Command Bytes, found on Winbond W25Q-types
* SPI Command Bytes, found on EONSSI EN25QH-types
* SPI Extended Address Modes, found on Winbond W25Q..JV-family (e.g. W25Q512JV)
* SPI Device Reset (found on Winbond W25Q..JV-family)
* SPI Power, extended
* SPI Power, understood by most SPI flash chips
## ENUM S3_type: SPI Instruction Set 3 (security) -- Flag Numbers 96..127
* Security on Microchip (e.g. SSTVF064C)
* Security on Macronix (MXIC) and AMIC A25LQ64
* Security on Atmel AT25DF Family
* Security on AMIC
* Security on Spansion
* OTP Commands (EONSSI)
* Security on Winbond
* Sector Protection on Atmel AT25DF/26DF Family
* Individual Block Protection, found on Winbond W25Q..JV-family
## ENUM S2_type: SPI Instruction Set 2 (fast) -- Flag Numbers 64..95
* SPI Sector Protection (e.g. Micron M25PE080)
* SPI Fast Read
## ENUM S1_type: SPI Instruction Set 1 (extended) -- Flag Numbers 32..63
* SPI high bank access, found on EONSSI EN25QH-types (e.g. EN25QH256)
* SPI extended address mode (4 bytes), found on Winbond W25Q-types (e.g. W25Q512JV)
* Extended Protection Commands
* SPI Device Reset
* SPI Extended Power Commands
* SPI Pin Configuration found on Microchip SST25VF040B, SSTVF064C
## ENUM S0_type: SPI Instruction Set 0 (basic) -- Flag Numbers 0..31
* Status Register Commands
* Read Commands
* Erase and Program Commands
* Protection Commands
* Identification Commands
* Power Commands
## Set 3: Alii
## Set 1: SPI Extended Address
## Set 0: Basic Flags
Atmel AT26DF Family does not provide S0_XAB_RES and S0_X90_REMS!
## Set 0: Alii
## JEDEC_IDs
* Manufacturer IDs ...
* Chips with static status register ...
* Chips with volatile status register ...
# Constants
## SPI Flash Database
### Terminology
1) Database = all chip definition files on disc
2) Chip Set = selected chip definition files at compile time
3) Slot = one chip definition file of a chip set
### Chipset Structure, Record Sizes and Offsets
* Number of slots in the chip set: NUMBER_OF_SLOTS
* Size of a slot in bytes
* Slot offsets in bytes
### Symbols
* Horizontal Tab
* Not Applicable, N_A, (TRUE)
### Charset Offsets for Global Protection Scheme
### Feature Flags (Extended Feature Register)
* Protection Table Numbers 0..7
* P-Table Entries
* Chip Sizes
* isADS() Flags
* isSRL() Flags
* isPSECT() Flags
* Single Flags
### Feature Flags (Basic Feature Register)
* Flag Groups
* Single Flags
# Globals
* Active Slot
# Functions
_________
PUB init
Initialize memory.
________________
PUB set_slot(n)
Set active slot number.
_____________
PUB get_slot
Get active slot number.
__________________________
PUB inc(transparent_mode)
transparent (non-zero): Jump to next slot.
not transparent (zero): Jump to next slot match.
__________________________
PUB dec(transparent_mode)
transparent (non-zero): Jump to next slot, backwards.
not transparent (zero): Jump to next slot match, backwards.
____________
PUB get_MID
Return manufacturer ID of active slot.
Return 0 if last slot.
_______________
PUB get_IDn(n)
Lookup ID for a given slot number.
___________
PUB get_ID
Return JEDEC_ID of active slot.
___________
PUB get_CE
Query CE command in respect to chip's capabilities,
return N_A (TRUE) if no erase command is available.
______________________
PUB iscommand(cmdnum)
Check whether cmdnum is set in command set of current slot.
Return FALSE if not.
Return FALSE for last slot.
__________________
PUB isvalid(ireg)
Return an estimated valid bit mask for the specified slot.
The estimation is not perfect, as disabled write bits
which are not marked with info bits are not taken into account.
Return FALSE for last slot.
___________________
PUB isstatic(ireg)
Return >is_static< register bit information for the specified slot.
Return 1 for last slot, avoid >is_volatile< condition at start of program.
_____________________
PUB iswritable(ireg)
Return >is_writable< register bit information for specified slot.
Return FALSE for last slot.
________________
PUB isotp(ireg)
Return >is_otp< register bit information for specified slot.
Return FALSE for last slot.
____________________
PUB isinfo(ireg) :
Return >is_info< register bit information for specified slot.
Return FALSE for last slot.
______________________________________
PUB sprintbit(ireg, bitpos, pbuf2) :
Print a register bit name from database into buffer.
ireg - index of SR string, 0..2
bitpos - bit position in register, 7..0
pbuf2 - pointer to string buffer, size 2 longs
Returns number of characters written (without string termination 0).
Bit names are supposed to be of less than 8 characters length.
__________________________________
PUB isbit(ireg, bitpos, pbitname)
Check a bit name.
Return TRUE if bitname matches, otherwise return FALSE.
______________
PUB digits :
Return number of digits in respect to chip size for specified slot.
Return 0 for last slot.
_______________________
PUB ptr_bitnames(ireg)
Return pointer to start of indexed bitnames string for the specified slot.
Return NULL pointer for last slot.
___________________
PUB ptr_names_n(n)
Return pointer to start of names string for the specified slot.
______________
PUB ptr_names
Return pointer to start of names string for current slot.
Return NULL pointer for last slot.
________________
PUB ptr_chipset
Return pointer to start of chip set name string.
_____________________________
PUB ptr_mfr(testid, mode) :
Return pointer to start of manufacturer ID (mode = 0).
Return pointer to start of manufacturer string (mode = 1).
__________________________________
PUB get_blockaddr(bnum, pbmax) :
_______________________________
PUB get_bits_readblockregister
Return number of bits to read for reliable RSPR data.
___________________
PUB get_features32
____________________
PUB get_pagesize :
Return size of page.
Return 0 for last slot.
________________
PUB get_size :
Return size of the chip of the specified slot.
Return N_A (TRUE) for last slot.
________________
PUB isADS(flag)
________________
PUB isSRL(flag)
__________________
PUB isPSECT(flag)
_________________
PUB get_features
_______________________________
PUB isfeature32(feature_flags)
Check whether all features are available.
Return TRUE if so, otherwise FALSE.
_____________________________
PUB isfeature(feature_flags)
Check whether all features are available.
Return TRUE if so, otherwise FALSE.
__________________
PUB isEFAIL(flag)
_________________
PUB isUNIQ(flag)
________________
PUB isWPS(flag)
_______________
PUB isTB(flag)
_____________________________________________________
PUB get_otptype(pn, ps, pk, pe, psize, popcode_r) :
Return the type of OTP, if any.
Make sure code supports both, read and write.
Erase capabilities are to be queried differently.
__________________________________________________
PUB get_opcode_wrblocklock(mode, p_opcode, p_arg)
______________________________
PUB get_opcode_rdblocklock :
____________________________________________________________________________
PUB xref_PTABLES(s14cmp, s6sec, anytb, bplevel, bfirst_addr, bstop_addr) :
Return a protected block range for a given `global' protection level,
take protection scheme bits into account: TB, SEC, CMP
This method applies for a (standard) global protection scheme -- it cannot be used for
an `individual' protection scheme (based on individual per-block protection registers)
as found on some chips. Note some chips ship both schemes, selectable per WPS or WPSEL bit.
This method relies on look-up tables.
Some of the tables could get replaced by algorythms, what saves bytes.
# Data: Manufacturers
# Data: P-Table Addresses
# Data: P04-Table
# Data: P08-Table
# Data: P16-Table
# Data: P08WB-Table
# Data: P16WB-Table
# Data: P08WW-Table
# Data: P16WW-Table
# Data: Other Data
# Data: OTP Type Data
******************************************************************************
Terms of Use:
Zerocat Chipflasher is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
Zerocat Chipflasher is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License along
with Zerocat Chipflasher. If not, see <http://www.gnu.org/licenses/>.
************************************************************** End of File ***