Skip to content

Commit

Permalink
* Add new SPI NAND flash GIGADEVICE GD5F1GQ5UE and GD5F1GQ5RE(1.8V)
Browse files Browse the repository at this point in the history
* Update progress bar once per second for SPI flash programming.
  • Loading branch information
McMCCRU committed Dec 25, 2021
1 parent 5c16db0 commit 461699e
Show file tree
Hide file tree
Showing 11 changed files with 169 additions and 96 deletions.
Binary file modified Linux/SNANDer
Binary file not shown.
Binary file modified MacOSX/SNANDer.aarch64
Binary file not shown.
Binary file modified MacOSX/SNANDer.x86_64
Binary file not shown.
Binary file modified Windows/SNANDer.exe
Binary file not shown.
148 changes: 75 additions & 73 deletions flash_support_list.txt
Original file line number Diff line number Diff line change
@@ -1,83 +1,85 @@

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.3 by McMCC <mcmcc@mail.ru>
SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.4 by McMCC <mcmcc_at_mail.ru>

SPI NAND Flash Support List:
001. GIGADEVICE GD5F1GQ4UA
002. GIGADEVICE GD5F1GQ4UB
003. GIGADEVICE GD5F1GQ4UC
004. GIGADEVICE GD5F1GQ4UE
005. GIGADEVICE GD5F2GQ4UB
006. GIGADEVICE GD5F2GQ4UE
007. GIGADEVICE GD5F2GQ4UC
008. GIGADEVICE GD5F4GQ4UB
009. GIGADEVICE GD5F4GQ4UC
010. ESMT F50L512
011. ESMT F50L1G
012. ESMT F50L1G41LB
013. ESMT F50L2G41LB
014. WINBOND W25N01G
015. WINBOND W25M02G
016. MXIC MX35LF1G
017. MXIC MX35LF2G
018. ZENTEL A5U12A21ASC
019. ZENTEL A5U1GA21BWS
020. ETRON EM73C044SNB
021. ETRON EM73C044SND
022. ETRON EM73C044SNF
023. ETRON EM73C044VCA
024. ETRON EM73C044VCD
025. ETRON EM73D044VCA
026. ETRON EM73D044VCB
027. ETRON EM73D044VCD
028. ETRON EM73D044VCG
029. ETRON EM73D044VCH
030. ETRON EM73D044SNA
031. ETRON EM73D044SNC
032. ETRON EM73D044SND
033. ETRON EM73D044SNF
034. ETRON EM73E044SNA
035. TOSHIBA TC58CVG0S3H
036. TOSHIBA TC58CVG1S3H
037. TOSHIBA TC58CVG2S0H
038. KIOXIA TC58CVG2S0HRAIJ
039. MICRON MT29F1G01
040. MICRON MT29F2G01
041. MICRON MT29F4G01
042. HEYANG HYF1GQ4UAACAE
043. HEYANG HYF2GQ4UAACAE
044. HEYANG HYF2GQ4UHCCAE
045. HEYANG HYF1GQ4UDACAE
046. HEYANG HYF2GQ4UDACAE
047. PN PN26G01A-X
048. PN PN26G02A-X
049. PN PN26Q01A-X
050. ATO ATO25D1GA
051. ATO ATO25D2GA
052. ATO ATO25D2GB
053. FM FM25S01
054. FM FM25S01A
055. FM FM25G01B
056. FM FM25G02B
057. FM FM25G02C
058. FM FM25G02
059. XTX XT26G02B
060. XTX XT26G01A
061. XTX XT26G02A
062. MIRA PSU1GS20BN
063. BIWIN BWJX08U
064. BIWIN BWET08U
065. FORESEE FS35ND01GD1F1
066. FORESEE FS35ND01GS1F1
067. FORESEE FS35ND02GS2F1
068. FORESEE FS35ND02GD1F1
069. DS DS35Q2GA
070. DS DS35Q1GA
071. FISON CS11G0T0A0AA
072. FISON CS11G1T0A0AA
073. FISON CS11G0G0A0AA
074. TYM TYM25D2GA01
075. TYM TYM25D2GA02
076. TYM TYM25D1GA03
005. GIGADEVICE GD5F1GQ5UE
006. GIGADEVICE GD5F1GQ5RE
007. GIGADEVICE GD5F2GQ4UB
008. GIGADEVICE GD5F2GQ4UE
009. GIGADEVICE GD5F2GQ4UC
010. GIGADEVICE GD5F4GQ4UB
011. GIGADEVICE GD5F4GQ4UC
012. ESMT F50L512
013. ESMT F50L1G
014. ESMT F50L1G41LB
015. ESMT F50L2G41LB
016. WINBOND W25N01G
017. WINBOND W25M02G
018. MXIC MX35LF1G
019. MXIC MX35LF2G
020. ZENTEL A5U12A21ASC
021. ZENTEL A5U1GA21BWS
022. ETRON EM73C044SNB
023. ETRON EM73C044SND
024. ETRON EM73C044SNF
025. ETRON EM73C044VCA
026. ETRON EM73C044VCD
027. ETRON EM73D044VCA
028. ETRON EM73D044VCB
029. ETRON EM73D044VCD
030. ETRON EM73D044VCG
031. ETRON EM73D044VCH
032. ETRON EM73D044SNA
033. ETRON EM73D044SNC
034. ETRON EM73D044SND
035. ETRON EM73D044SNF
036. ETRON EM73E044SNA
037. TOSHIBA TC58CVG0S3H
038. TOSHIBA TC58CVG1S3H
039. TOSHIBA TC58CVG2S0H
040. KIOXIA TC58CVG2S0HRAIJ
041. MICRON MT29F1G01
042. MICRON MT29F2G01
043. MICRON MT29F4G01
044. HEYANG HYF1GQ4UAACAE
045. HEYANG HYF2GQ4UAACAE
046. HEYANG HYF2GQ4UHCCAE
047. HEYANG HYF1GQ4UDACAE
048. HEYANG HYF2GQ4UDACAE
049. PN PN26G01A-X
050. PN PN26G02A-X
051. PN PN26Q01A-X
052. ATO ATO25D1GA
053. ATO ATO25D2GA
054. ATO ATO25D2GB
055. FM FM25S01
056. FM FM25S01A
057. FM FM25G01B
058. FM FM25G02B
059. FM FM25G02C
060. FM FM25G02
061. XTX XT26G02B
062. XTX XT26G01A
063. XTX XT26G02A
064. MIRA PSU1GS20BN
065. BIWIN BWJX08U
066. BIWIN BWET08U
067. FORESEE FS35ND01GD1F1
068. FORESEE FS35ND01GS1F1
069. FORESEE FS35ND02GS2F1
070. FORESEE FS35ND02GD1F1
071. DS DS35Q2GA
072. DS DS35Q1GA
073. FISON CS11G0T0A0AA
074. FISON CS11G1T0A0AA
075. FISON CS11G0G0A0AA
076. TYM TYM25D2GA01
077. TYM TYM25D2GA02
078. TYM TYM25D1GA03

SPI NOR Flash Support List:
001. AT25DF321
Expand Down
14 changes: 7 additions & 7 deletions readme.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.3 by McMCC <mcmcc_at_mail.ru>
SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.4 by McMCC <mcmcc_at_mail.ru>

Usage:
-h display this message
Expand All @@ -23,7 +23,7 @@ Examples:

igor@mcmcc-GL553VE:~/Soft/SNANDer-bin/Linux$ ./SNANDer -i

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.3 by McMCC <mcmcc_at_mail.ru>
SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.4 by McMCC <mcmcc_at_mail.ru>

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
Expand All @@ -35,7 +35,7 @@ Detected SPI NAND Flash: MXIC MX35LF2G, Flash Size: 256 MB

or

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.3 by McMCC <mcmcc_at_mail.ru>
SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.4 by McMCC <mcmcc_at_mail.ru>

Found programmer device: Winchiphead (WCH) - CH341A
Device revision is 3.0.4
Expand All @@ -49,7 +49,7 @@ Detected SPI NAND Flash: WINBOND W25N01G, Flash Size: 128 MB

igor@mcmcc-GL553VE:~/Soft/SNANDer-bin/Linux$ ./SNANDer -d -e

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.3 by McMCC <mcmcc_at_mail.ru>
SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.4 by McMCC <mcmcc_at_mail.ru>

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
Expand All @@ -70,7 +70,7 @@ igor@mcmcc-GL553VE:~/Soft/SNANDer-bin/Linux$

igor@mcmcc-GL553VE:~/Soft/SNANDer-bin/Linux$ ./SNANDer -d -v -w ecc_2Gb_2K_64_flashimage_rfb1_ac2600.bin

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.3 by McMCC <mcmcc_at_mail.ru>
SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.4 by McMCC <mcmcc_at_mail.ru>

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
Expand All @@ -94,7 +94,7 @@ Status: OK

igor@igor-GL553VE:~/Soft/SNANDer-bin/Linux$ ./SNANDer -E 93c46 -r test.bin

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.3 by McMCC <mcmcc_at_mail.ru>
SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.4 by McMCC <mcmcc_at_mail.ru>

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
Expand All @@ -111,7 +111,7 @@ Status: OK

igor@igor-GL553VE:~/Soft/SNANDer-bin/Linux$ ./SNANDer -E 93c46 -w test.bin -v

SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.3 by McMCC <mcmcc_at_mail.ru>
SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.4 by McMCC <mcmcc_at_mail.ru>

Found programmer device: WinChipHead (WCH) - CH341A
Device revision is 3.0.4
Expand Down
2 changes: 1 addition & 1 deletion src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ extern int org;
#define EHELP ""
#endif

#define _VER "1.7.3"
#define _VER "1.7.4"

void title(void)
{
Expand Down
65 changes: 56 additions & 9 deletions src/spi_nand_flash.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,8 @@
#define _SPI_NAND_DEVICE_ID_GD5F2GQ4UCYIG 0xB2
#define _SPI_NAND_DEVICE_ID_GD5F4GQ4UBYIG 0xD4
#define _SPI_NAND_DEVICE_ID_GD5F4GQ4UCYIG 0xB4
#define _SPI_NAND_DEVICE_ID_GD5F1GQ5UEYIG 0x51
#define _SPI_NAND_DEVICE_ID_GD5F1GQ5REYIG 0x41
#define _SPI_NAND_DEVICE_ID_F50L512M41A 0x20
#define _SPI_NAND_DEVICE_ID_F50L1G41A0 0x21
#define _SPI_NAND_DEVICE_ID_F50L1G41LB 0x01
Expand Down Expand Up @@ -537,6 +539,36 @@ static const struct SPI_NAND_FLASH_INFO_T spi_nand_flash_tables[] = {
feature: SPI_NAND_FLASH_FEATURE_NONE,
},

{
mfr_id: _SPI_NAND_MANUFACTURER_ID_GIGADEVICE,
dev_id: _SPI_NAND_DEVICE_ID_GD5F1GQ5UEYIG,
ptr_name: "GIGADEVICE GD5F1GQ5UE",
device_size: _SPI_NAND_CHIP_SIZE_1GBIT,
page_size: _SPI_NAND_PAGE_SIZE_2KBYTE,
oob_size: _SPI_NAND_OOB_SIZE_128BYTE,
erase_size: _SPI_NAND_BLOCK_SIZE_128KBYTE,
dummy_mode: SPI_NAND_FLASH_READ_DUMMY_BYTE_APPEND,
read_mode: SPI_NAND_FLASH_READ_SPEED_MODE_DUAL,
write_mode: SPI_NAND_FLASH_WRITE_SPEED_MODE_SINGLE,
oob_free_layout: &ooblayout_gigadevice_128,
feature: SPI_NAND_FLASH_FEATURE_NONE,
},

{
mfr_id: _SPI_NAND_MANUFACTURER_ID_GIGADEVICE,
dev_id: _SPI_NAND_DEVICE_ID_GD5F1GQ5REYIG,
ptr_name: "GIGADEVICE GD5F1GQ5RE",
device_size: _SPI_NAND_CHIP_SIZE_1GBIT,
page_size: _SPI_NAND_PAGE_SIZE_2KBYTE,
oob_size: _SPI_NAND_OOB_SIZE_128BYTE,
erase_size: _SPI_NAND_BLOCK_SIZE_128KBYTE,
dummy_mode: SPI_NAND_FLASH_READ_DUMMY_BYTE_APPEND,
read_mode: SPI_NAND_FLASH_READ_SPEED_MODE_DUAL,
write_mode: SPI_NAND_FLASH_WRITE_SPEED_MODE_SINGLE,
oob_free_layout: &ooblayout_gigadevice_128,
feature: SPI_NAND_FLASH_FEATURE_NONE,
},

{
mfr_id: _SPI_NAND_MANUFACTURER_ID_GIGADEVICE,
dev_id: _SPI_NAND_DEVICE_ID_GD5F2GQ4UBYIG,
Expand Down Expand Up @@ -2521,6 +2553,8 @@ static SPI_NAND_FLASH_RTN_T ecc_fail_check( u32 page_number )
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ4UBYIG) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ4UCYIG) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ4UEYIS) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ5UEYIG) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ5REYIG) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F2GQ4UBYIG) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F2GQ4UE9IS) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F2GQ4UCYIG) ||
Expand All @@ -2530,6 +2564,8 @@ static SPI_NAND_FLASH_RTN_T ecc_fail_check( u32 page_number )
if((ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ4UAYIG) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ4UBYIG) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ4UEYIS) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ5UEYIG) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ5REYIG) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F2GQ4UBYIG) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F2GQ4UE9IS) ||
(ptr_dev_info_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F4GQ4UBYIG))
Expand Down Expand Up @@ -2937,9 +2973,12 @@ static SPI_NAND_FLASH_RTN_T spi_nand_erase_internal( u32 addr, u32 len )
/* 2.7 Erase next block if needed */
addr += _current_flash_info_t.erase_size;
erase_len += _current_flash_info_t.erase_size;
printf("\bErase %d%% [%u] of [%u] bytes ", 100 * (erase_len / 1024) / (len / 1024), erase_len, len);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
fflush(stdout);
if( timer_progress() )
{
printf("\bErase %d%% [%u] of [%u] bytes ", 100 * (erase_len / 1024) / (len / 1024), erase_len, len);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
fflush(stdout);
}
}
printf("Erase 100%% [%u] of [%u] bytes \n", erase_len, len);
}
Expand Down Expand Up @@ -3250,9 +3289,12 @@ static SPI_NAND_FLASH_RTN_T spi_nand_write_internal( u32 dst_addr, u32 len, u32
write_addr += data_len;
remain_len -= data_len;
ptr_rtn_len += data_len;
printf("\bWritten %d%% [%u] of [%u] bytes ", 100 * ((len - remain_len) / 1024) / (len / 1024), len - remain_len, len);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
fflush(stdout);
if( timer_progress() )
{
printf("\bWritten %d%% [%u] of [%u] bytes ", 100 * ((len - remain_len) / 1024) / (len / 1024), len - remain_len, len);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
fflush(stdout);
}
}
printf("Written 100%% [%u] of [%u] bytes \n", len - remain_len, len);
_SPI_NAND_SEMAPHORE_UNLOCK();
Expand Down Expand Up @@ -3329,9 +3371,12 @@ static SPI_NAND_FLASH_RTN_T spi_nand_read_internal ( u32 addr, u32 len, u8 *ptr_
remain_len -= (ptr_dev_info_t->page_size - data_offset);
read_addr += (ptr_dev_info_t->page_size - data_offset);
}
printf("\bRead %d%% [%u] of [%u] bytes ", 100 * ((len - remain_len) / 1024) / (len / 1024), len - remain_len, len);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
fflush(stdout);
if( timer_progress() )
{
printf("\bRead %d%% [%u] of [%u] bytes ", 100 * ((len - remain_len) / 1024) / (len / 1024), len - remain_len, len);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
fflush(stdout);
}
}
printf("Read 100%% [%u] of [%u] bytes \n", len - remain_len, len);
_SPI_NAND_SEMAPHORE_UNLOCK();
Expand Down Expand Up @@ -3367,6 +3412,8 @@ static void spi_nand_manufacute_init( struct SPI_NAND_FLASH_INFO_T *ptr_device_t
((ptr_device_t->mfr_id == _SPI_NAND_MANUFACTURER_ID_GIGADEVICE) && (ptr_device_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ4UBYIG)) ||
((ptr_device_t->mfr_id == _SPI_NAND_MANUFACTURER_ID_GIGADEVICE) && (ptr_device_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ4UCYIG)) ||
((ptr_device_t->mfr_id == _SPI_NAND_MANUFACTURER_ID_GIGADEVICE) && (ptr_device_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ4UEYIS)) ||
((ptr_device_t->mfr_id == _SPI_NAND_MANUFACTURER_ID_GIGADEVICE) && (ptr_device_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ5UEYIG)) ||
((ptr_device_t->mfr_id == _SPI_NAND_MANUFACTURER_ID_GIGADEVICE) && (ptr_device_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F1GQ5REYIG)) ||
((ptr_device_t->mfr_id == _SPI_NAND_MANUFACTURER_ID_GIGADEVICE) && (ptr_device_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F2GQ4UBYIG)) ||
((ptr_device_t->mfr_id == _SPI_NAND_MANUFACTURER_ID_GIGADEVICE) && (ptr_device_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F2GQ4UE9IS)) ||
((ptr_device_t->mfr_id == _SPI_NAND_MANUFACTURER_ID_GIGADEVICE) && (ptr_device_t->dev_id == _SPI_NAND_DEVICE_ID_GD5F2GQ4UCYIG)) ||
Expand Down
14 changes: 8 additions & 6 deletions src/spi_nor_flash.c
Original file line number Diff line number Diff line change
Expand Up @@ -564,10 +564,12 @@ int snor_erase(unsigned long offs, unsigned long len)

offs += spi_chip_info->sector_size;
len -= spi_chip_info->sector_size;

printf("\bErase %ld%% [%lu] of [%lu] bytes ", 100 * (plen - len) / plen, plen - len, plen);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
fflush(stdout);
if( timer_progress() )
{
printf("\bErase %ld%% [%lu] of [%lu] bytes ", 100 * (plen - len) / plen, plen - len, plen);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
fflush(stdout);
}
}
printf("Erase 100%% [%lu] of [%lu] bytes \n", plen - len, plen);
timer_end();
Expand Down Expand Up @@ -634,7 +636,7 @@ int snor_read(unsigned char *buf, unsigned long from, unsigned long len)
}
remain_len -= spi_chip_info->sector_size - data_offset;
read_addr += spi_chip_info->sector_size - data_offset;
if ((read_addr & 0xffff) == 0) {
if( timer_progress() ) {
printf("\bRead %ld%% [%lu] of [%lu] bytes ", 100 * (len - remain_len) / len, len - remain_len, len);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
fflush(stdout);
Expand Down Expand Up @@ -709,7 +711,7 @@ int snor_write(unsigned char *buf, unsigned long to, unsigned long len)

snor_dbg("%s: to:%x page_size:%x ret:%x\n", __func__, to, page_size, rc);

if ((retlen & 0xffff) == 0) {
if( timer_progress() ) {
printf("\bWritten %ld%% [%lu] of [%lu] bytes ", 100 * (plen - len) / plen, plen - len, plen);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
fflush(stdout);
Expand Down
Loading

0 comments on commit 461699e

Please sign in to comment.