GithubHelp home page GithubHelp logo

Comments (20)

McMCCRU avatar McMCCRU commented on June 3, 2024 1

Hi! You have another manufacturer(KIOXIA) of this chip, I personally checked Toshiba TC58CVG2S0H programming, the chip ID was 0xCD! You can verify this yourself from another author - https://lore.kernel.org/patchwork/patch/1008151/ Unfortunately, I cannot add support for this chip due to my lack of it...

from snander.

McMCCRU avatar McMCCRU commented on June 3, 2024 1

Judging by the information from https://lore.kernel.org/patchwork/patch/1008151

  • /*
    • Toshiba SPI NAND read ID needs a dummy byte,
    • so the first byte in id is garbage.
  • */
  • if (id[1] != SPINAND_MFR_TOSHIBA)
  •   return 0;
    

Then the first byte can really be read as garbage

from snander.

McMCCRU avatar McMCCRU commented on June 3, 2024

Please check new workaround for Toshiba/KIOXIA...
SNANDer_linux.tar.gz
kioxia.patch.gz

from snander.

Droid-MAX avatar Droid-MAX commented on June 3, 2024

@McMCCRU Maybe it is possible to create a branch only for Toshiba/Kioxia

from snander.

Droid-MAX avatar Droid-MAX commented on June 3, 2024

I create a beta branch for changes and released.
v.1.7b

from snander.

McMCCRU avatar McMCCRU commented on June 3, 2024

Hi ANTI443! In SNANDer_linux.tar.gz is the executable file for Linux. Have you checked work SNANDer with your chip?

from snander.

McMCCRU avatar McMCCRU commented on June 3, 2024

@ANTI443 Are there any results?

from snander.

Droid-MAX avatar Droid-MAX commented on June 3, 2024

I made some board about SPI_to_MW_Adapter, see SPI_to_MW_Adapter

from snander.

F5BJR avatar F5BJR commented on June 3, 2024

Same problem

With CH341 v1.18 & AS Programme 2.2.0.8 no problem detect write & read spi flash

from snander.

lgs2007m avatar lgs2007m commented on June 3, 2024

Hi @McMCCRU ! My CH341A programmer (actually CH341B uses internal clock) can normally erase/write/read SPI NAND Flash of 128MiB: ESMT F50L1G41LB wiht SNANDer v.1.7.7 in Windows 11. But when I use SNANDer v.1.7.7 to erase/write/read SPI NAND Flash of 512MiB: KIOXIA TC58CVG2S0HRAIJ, I get some errors (also tested with an external 12MHz crystal oscillator). I don't know why. Is the data written/written/read correct?

[[[[[ Here is the Output Log ]]]]]

Microsoft Windows [Version 10.0.22621.963]
(c) Microsoft Corporation. All rights reserved.

E:\SNANDer -i

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.7 by McMCC [email protected]

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
spi_nand_probe: mfr_id = 0x98, dev_id = 0xed, dev_id_2 = 0x51
Get Status Register 1: 0x00
Get Status Register 2: 0x02
Using Flash ECC.
Detected SPI NAND Flash: KIOXIA TC58CVG2S0HRAIJ, Flash Size: 512MB, OOB Size: 128B

E:\SNANDer -d -e

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.7 by McMCC [email protected]

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
spi_nand_probe: mfr_id = 0x98, dev_id = 0xed, dev_id_2 = 0x51
Get Status Register 1: 0x00
Get Status Register 2: 0x12
Disable Flash ECC.
Detected SPI NAND Flash: KIOXIA TC58CVG2S0HRAIJ, Flash Size: 512MB, OOB Size: 128B
ERASE:
Set full erase chip!
Erase addr = 0x0000000000000000, len = 0x0000000021000000
spi_nand_erase_block : erase block fail, block = 0xba, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x2ff4000, len = 0x21000000, block_idx = 0xba
spi_nand_erase_block : erase block fail, block = 0x40f, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x10bde000, len = 0x21000000, block_idx = 0x40f
spi_nand_erase_block : erase block fail, block = 0x4a7, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x1330e000, len = 0x21000000, block_idx = 0x4a7
spi_nand_erase_block : erase block fail, block = 0x600, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x18c00000, len = 0x21000000, block_idx = 0x600
spi_nand_erase_block : erase block fail, block = 0x601, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x18c42000, len = 0x21000000, block_idx = 0x601
Erase 100% [553648128] of [553648128] bytes
Elapsed time: 8 seconds
Status: OK

E:\SNANDer -e

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.7 by McMCC [email protected]

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
spi_nand_probe: mfr_id = 0x98, dev_id = 0xed, dev_id_2 = 0x51
Get Status Register 1: 0x00
Get Status Register 2: 0x02
Using Flash ECC.
Detected SPI NAND Flash: KIOXIA TC58CVG2S0HRAIJ, Flash Size: 512MB, OOB Size: 128B
ERASE:
Set full erase chip!
Erase addr = 0x0000000000000000, len = 0x0000000020000000
spi_nand_erase_block : erase block fail, block = 0xba, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x2e80000, len = 0x20000000, block_idx = 0xba
spi_nand_erase_block : erase block fail, block = 0x40f, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x103c0000, len = 0x20000000, block_idx = 0x40f
spi_nand_erase_block : erase block fail, block = 0x4a7, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x129c0000, len = 0x20000000, block_idx = 0x4a7
spi_nand_erase_block : erase block fail, block = 0x600, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x18000000, len = 0x20000000, block_idx = 0x600
spi_nand_erase_block : erase block fail, block = 0x601, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x18040000, len = 0x20000000, block_idx = 0x601
Erase 100% [536870912] of [536870912] bytes
Elapsed time: 7 seconds
Status: OK

E:\SNANDer -e -a 0x0 -l 0x8000000

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.7 by McMCC [email protected]

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
spi_nand_probe: mfr_id = 0x98, dev_id = 0xed, dev_id_2 = 0x51
Get Status Register 1: 0x00
Get Status Register 2: 0x12
Using Flash ECC.
Detected SPI NAND Flash: KIOXIA TC58CVG2S0HRAIJ, Flash Size: 512MB, OOB Size: 128B
ERASE:
Erase addr = 0x0000000000000000, len = 0x0000000008000000
spi_nand_erase_block : erase block fail, block = 0xba, status = 0x4
spi_nand_erase_internal : Erase Fail at addr = 0x2e80000, len = 0x8000000, block_idx = 0xba
Erase 100% [134217728] of [134217728] bytes
Elapsed time: 2 seconds
Status: OK

E:\SNANDer -v -w mtd0_spi01_128M.bin -a 0x0 -l 0x8000000

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.7 by McMCC [email protected]

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
spi_nand_probe: mfr_id = 0x98, dev_id = 0xed, dev_id_2 = 0x51
Get Status Register 1: 0x00
Get Status Register 2: 0x12
Using Flash ECC.
Detected SPI NAND Flash: KIOXIA TC58CVG2S0HRAIJ, Flash Size: 512MB, OOB Size: 128B
WRITE:
Write addr = 0x0000000000000000, len = 0x0000000008000000
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e80
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e80
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e80, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e81
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e81
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e81, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e82
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e82
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e82, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e83
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e83
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e83, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e84
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e84
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e84, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e85
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e85
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e85, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e86
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e86
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e86, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e87
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e87
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e87, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e88
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e88
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e88, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e89
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e89
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e89, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e8a
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e8a
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e8a, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e8b
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e8b
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e8b, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e8c
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e8c
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e8c, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e8d
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e8d
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e8d, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e8e
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e8e
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e8e, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e8f
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e8f
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e8f, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e90
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e90
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e90, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e91
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e91
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e91, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e92
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e92
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e92, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e93
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e93
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e93, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e94
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e94
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e94, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e95
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e95
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e95, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e96
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e96
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e96, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e97
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e97
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e97, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e98
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e98
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e98, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e99
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e99
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e99, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e9a
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e9a
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e9a, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e9b
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e9b
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e9b, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e9c
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e9c
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e9c, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e9d
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e9d
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e9d, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e9e
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e9e
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e9e, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e9f
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e9f
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2e9f, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ea0
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ea0
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ea0, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ea1
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ea1
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ea1, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ea2
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ea2
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ea2, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ea3
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ea3
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ea3, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ea4
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ea4
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ea4, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ea5
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ea5
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ea5, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ea6
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ea6
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ea6, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ea7
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ea7
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ea7, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ea8
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ea8
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ea8, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ea9
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ea9
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ea9, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eaa
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eaa
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eaa, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eab
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eab
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eab, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eac
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eac
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eac, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ead
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ead
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ead, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eae
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eae
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eae, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eaf
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eaf
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eaf, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eb0
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eb0
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eb0, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eb1
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eb1
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eb1, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eb2
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eb2
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eb2, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eb3
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eb3
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eb3, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eb4
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eb4
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eb4, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eb5
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eb5
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eb5, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eb6
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eb6
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eb6, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eb7
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eb7
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eb7, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eb8
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eb8
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eb8, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eb9
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eb9
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eb9, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2eba
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2eba
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2eba, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ebb
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ebb
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ebb, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ebc
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ebc
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ebc, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ebd
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ebd
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ebd, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ebe
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ebe
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ebe, status = 0x28
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2ebf
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2ebf
spi_nand_write_page : Program Fail at addr_offset = 0x0, page_number = 0x2ebf, status = 0x28
Written 100% [134217728] of [134217728] bytes
Elapsed time: 855 seconds
Status: OK
VERIFY:
Read addr = 0x0000000000000000, len = 0x0000000008000000
[spinand_ecc_fail_check] : ECC cannot recover detected !, page = 0x2e80
spi_nand_read_page: Bad Block, ECC cannot recovery detecte, page = 0x2e80
Status: BAD(-1)

E:\

My CH341A programmer (actually CH341B)

from snander.

McMCCRU avatar McMCCRU commented on June 3, 2024

Hi @lgs2007m ! The problem is not in your programmer or my program, but in the NAND chip itself. It is normal that bad blocks may be present in the NAND, usually the NAND controller handles these errors itself and replaces the bad blocks with good ones from other memory locations. My program does not know how your nand controller works and how it works with bad blocks, whether it uses the next good block or a special backup table. I can only implement a mechanism for writing and reading the next block, but this may not work in your case. I usually write only the bootloader in such a situation, and then I write everything else through the bootloader.

from snander.

lgs2007m avatar lgs2007m commented on June 3, 2024

@McMCCRU Thanks for your help. You mean that this chip have bad blocks? OMG! I bought this chip from taobao.com, and the seller said it was a brand new chip.

from snander.

McMCCRU avatar McMCCRU commented on June 3, 2024

Yes, your chip has bad blocks, this is normal if the bad blocks are not at the very beginning of the memory and the bootloader can be written there. Next the nand controller should do everything. Try the new version of SNANDer with the -k option, this will allow you to ignore bad blocks or pages and use the next ones.
23f3508

from snander.

lgs2007m avatar lgs2007m commented on June 3, 2024

Yes, your chip has bad blocks, this is normal if the bad blocks are not at the very beginning of the memory and the bootloader can be written there. Next the nand controller should do everything. Try the new version of SNANDer with the -k option, this will allow you to ignore bad blocks or pages and use the next ones. 23f3508

Thanks! Thanks for your excellent work! This is very helpful~

from snander.

McMCCRU avatar McMCCRU commented on June 3, 2024

Just keep in mind that this method will work if the nand controller writes to the next good block, and not to another place. And this method will definitely not work if you clone data from one flash memory to another....

from snander.

lgs2007m avatar lgs2007m commented on June 3, 2024

Just keep in mind that this method will work if the nand controller writes to the next good block, and not to another place. And this method will definitely not work if you clone data from one flash memory to another....

OK. Thanks for reminding.

from snander.

McMCCRU avatar McMCCRU commented on June 3, 2024

Updated binaries for Linux, Windows and MacOSX.
8cf7027

from snander.

lgs2007m avatar lgs2007m commented on June 3, 2024

Updated binaries for Linux, Windows and MacOSX. 8cf7027

Hi, McMCCRU. I can't run SNANDer with -k. When I use -k, it just show the help message. Can you help me?

Output Log E:\SNANDer -i

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.8b1 by McMCC <[email protected]>

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
spi_nand_probe: mfr_id = 0x98, dev_id = 0xed, dev_id_2 = 0x51
Get Status Register 1: 0x00
Get Status Register 2: 0x12
Using Flash ECC.
Detected SPI NAND Flash: KIOXIA TC58CVG2S0HRAIJ, Flash Size: 512MB, OOB Size: 128B

E:\SNANDer -k -e

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.8b1 by McMCC <[email protected]>

Usage:
-h display this message
-d disable internal ECC(use read and write page size + OOB size)
-o <bytes> manual set OOB size with disable internal ECC(default 0)
-I ECC ignore errors(for read test only)
-k Skip BAD pages, try read or write in to next page
-L print list support chips
-i read the chip ID info
-E select I2C EEPROM {24c01|24c02|24c04|24c08|24c16|24c32|24c64|24c128|24c256|24c512|24c1024}
select Microwire EEPROM {93c06|93c16|93c46|93c56|93c66|93c76|93c86|93c96} (need SPI-to-MW adapter)
select SPI EEPROM 25xxx {25010|25020|25040|25080|25160|25320|25640|25128|25256|25512|251024}
-8 set organization 8-bit for Microwire EEPROM(default 16-bit) and set jumper on SPI-to-MW adapter
-f <addr len> set manual address size in bits for Microwire EEPROM(default auto)
-s <bytes> set page size from datasheet for fast write SPI EEPROM(default not usage)
-e erase chip(full or use with -a [-l])
-l <bytes> manually set length
-a <address> manually set address
-w <filename> write chip with data from filename
-r <filename> read chip and save data to filename
-v verify after write on chip

E:\SNANDer -k -w mtd.bin -a 0x0 -l 0x600000

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.8b1 by McMCC <[email protected]>

Usage:
-h display this message
-d disable internal ECC(use read and write page size + OOB size)
-o <bytes> manual set OOB size with disable internal ECC(default 0)
-I ECC ignore errors(for read test only)
-k Skip BAD pages, try read or write in to next page
-L print list support chips
-i read the chip ID info
-E select I2C EEPROM {24c01|24c02|24c04|24c08|24c16|24c32|24c64|24c128|24c256|24c512|24c1024}
select Microwire EEPROM {93c06|93c16|93c46|93c56|93c66|93c76|93c86|93c96} (need SPI-to-MW adapter)
select SPI EEPROM 25xxx {25010|25020|25040|25080|25160|25320|25640|25128|25256|25512|251024}
-8 set organization 8-bit for Microwire EEPROM(default 16-bit) and set jumper on SPI-to-MW adapter
-f <addr len> set manual address size in bits for Microwire EEPROM(default auto)
-s <bytes> set page size from datasheet for fast write SPI EEPROM(default not usage)
-e erase chip(full or use with -a [-l])
-l <bytes> manually set length
-a <address> manually set address
-w <filename> write chip with data from filename
-r <filename> read chip and save data to filename
-v verify after write on chip

E:\SNANDer -k -w mtd.bin

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.8b1 by McMCC <[email protected]>

Usage:
-h display this message
-d disable internal ECC(use read and write page size + OOB size)
-o <bytes> manual set OOB size with disable internal ECC(default 0)
-I ECC ignore errors(for read test only)
-k Skip BAD pages, try read or write in to next page
-L print list support chips
-i read the chip ID info
-E select I2C EEPROM {24c01|24c02|24c04|24c08|24c16|24c32|24c64|24c128|24c256|24c512|24c1024}
select Microwire EEPROM {93c06|93c16|93c46|93c56|93c66|93c76|93c86|93c96} (need SPI-to-MW adapter)
select SPI EEPROM 25xxx {25010|25020|25040|25080|25160|25320|25640|25128|25256|25512|251024}
-8 set organization 8-bit for Microwire EEPROM(default 16-bit) and set jumper on SPI-to-MW adapter
-f <addr len> set manual address size in bits for Microwire EEPROM(default auto)
-s <bytes> set page size from datasheet for fast write SPI EEPROM(default not usage)
-e erase chip(full or use with -a [-l])
-l <bytes> manually set length
-a <address> manually set address
-w <filename> write chip with data from filename
-r <filename> read chip and save data to filename
-v verify after write on chip

from snander.

McMCCRU avatar McMCCRU commented on June 3, 2024

e7e9d3f
I fix it.

from snander.

lgs2007m avatar lgs2007m commented on June 3, 2024

e7e9d3f I fix it.

Thanks! It works.

from snander.

Related Issues (19)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.