diff --git a/nand-image-builder.c b/nand-image-builder.c index b3def12fce30aae957a813f60cfd93789599fd71..8b37d00dc4fda2faf02328357c425c19c9eb76ba 100644 --- a/nand-image-builder.c +++ b/nand-image-builder.c @@ -16,6 +16,9 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA + * + * This code is referenced from https://github.com/ak-hard/brcm-nand-bch/. + * */ // BCH 4 algorithm is used for ECC level. In schematic bootstrap sets to 4 bit ECC level for NAND. @@ -87,7 +90,7 @@ static void clear_pagebuffer() /* Clears the buffers before programming the Page. */ for (index = 0; index < ((SECTOR_SZ + OOB_SZ) * SECTORS_PER_PAGE); index++) { - page_buffer[index] = 0x0; + page_buffer[index] = 0xFF; } } @@ -231,11 +234,11 @@ int main(int argc, char **argv) goto exit; } - if ((st.st_size % block_size) != 0) + /* if ((st.st_size % block_size) != 0) { printf("File size not multiple of block size\n"); goto exit; - } + } */ blocks_app = st.st_size / block_size; //calculate total blocks needed for application. pages_in_block = block_size / page_size; @@ -294,12 +297,14 @@ int main(int argc, char **argv) printf("OOB_ECC_LEN %d\n", oob_ecc_len); printf("OOB_ECC_OFS %d\n", oob_ecc_ofs); - while (!feof(in_file)) + + while (!feof(in_file)) + { clear_pagebuffer(); - numBytesRead = fread(page_buffer, (size_t)1, (sector_sz + oob_sz) * SECTORS_PER_PAGE, in_file); + numBytesRead = fread(page_buffer, (size_t)1, (sector_sz ) * SECTORS_PER_PAGE, in_file); totalBytesRead += numBytesRead; /* printf("\r\nRead %d bytes [%d%%] from file...\r\n", @@ -312,6 +317,8 @@ int main(int argc, char **argv) goto exit; } + if (numBytesRead != (sector_sz ) * SECTORS_PER_PAGE) break; // skip if byte is less than bytes read from fread api. + memset(cmp_buffer, 0, sector_sz * SECTORS_PER_PAGE); memcpy(cmp_buffer, page_buffer, (sector_sz)*SECTORS_PER_PAGE);