diff --git a/FlashCommand.c b/FlashCommand.c index 01af811..21def56 100755 --- a/FlashCommand.c +++ b/FlashCommand.c @@ -118,8 +118,7 @@ int FlashCommand_SendCommand_SetupPacketForBulkWrite(struct CAddressRange* AddrR vInstruction[3] = modeWrite; // PAGE_PROGRAM, PAGE_WRITE, AAI_1_BYTE, AAI_2_BYTE, PP_128BYTE, PP_AT26DF041 vInstruction[4] = WriteCom; - if (Is_NewUSBCommand(Index)) { -printf("\nevy Is_NewUSBCommand"); + if (Is_NewUSBCommand(Index)) { vInstruction[5] = 0; vInstruction[6] = (AddrRange->start & 0xff); vInstruction[7] = ((AddrRange->start >> 8) & 0xff); diff --git a/SerialFlash.c b/SerialFlash.c index 7fabf04..79a0e91 100755 --- a/SerialFlash.c +++ b/SerialFlash.c @@ -13,7 +13,7 @@ extern int m_boEnWriteQuadIO; extern CHIP_INFO Chip_Info; extern volatile bool g_bIsSF600[16]; extern volatile bool g_bIsSF700[16]; -extern volatile bool g_bIsSF600PG2[16]; +extern volatile bool g_bIsSF600PG2[16]; extern bool Is_NewUSBCommand(int Index); unsigned char mcode_WRSR = 0x01; @@ -2090,7 +2090,7 @@ int SerialFlash_DieErase(int Index) } int SerialFlash_bulkPipeProgram(struct CAddressRange* AddrRange, unsigned char* vData, unsigned char modeWrite, unsigned char WriteCom, int Index) -{ +{ size_t i, j, divider; unsigned char* itr_begin; @@ -2105,8 +2105,7 @@ int SerialFlash_bulkPipeProgram(struct CAddressRange* AddrRange, unsigned char* SerialFlash_Enable4ByteAddrMode(true, Index); if (SerialFlash_EnableQuadIO(true, m_boEnWriteQuadIO, Index) == SerialFlash_FALSE) return false; - -//printf("WriteMode=%d, WriteCom=%02X\n", modeWrite,WriteCom); + itr_begin = vData; switch (modeWrite) { //transfer how many data each time @@ -2132,9 +2131,7 @@ int SerialFlash_bulkPipeProgram(struct CAddressRange* AddrRange, unsigned char* down_range.start = AddrRange->start; down_range.end = AddrRange->end; size_t packageNum; - size_t loop = (range_temp.end - range_temp.start) / 0x1000000; - // printf("loop=%d \n",loop); - // printf("range_temp.end=%x,range_temp.start=%x\n\r",range_temp.end,range_temp.start); + size_t loop = (range_temp.end - range_temp.start) / 0x1000000; for (j = 0; j < loop; j++) { if (j == (loop - 1)) @@ -2148,9 +2145,7 @@ int SerialFlash_bulkPipeProgram(struct CAddressRange* AddrRange, unsigned char* down_range.start = (AddrRange->start & 0xFF000000) + (0x1000000 * j); down_range.length = down_range.end - down_range.start; - packageNum = down_range.length >> divider; - // printf("packageNum=%d \n",packageNum); - // printf("down_range.start=%X, down_range.end=%X\n",down_range.start, down_range.end); + packageNum = down_range.length >> divider; FlashCommand_SendCommand_SetupPacketForBulkWrite(&down_range, modeWrite, WriteCom, Chip_Info.PageSizeInByte, Chip_Info.AddrWidth, Index); for (i = 0; i < packageNum; ++i) { BulkPipeWrite((unsigned char*)(itr_begin + (i << divider)), 1 << divider, USB_TIMEOUT, Index); @@ -2162,7 +2157,7 @@ int SerialFlash_bulkPipeProgram(struct CAddressRange* AddrRange, unsigned char* } else { size_t packageNum = (AddrRange->end - AddrRange->start) >> divider; FlashCommand_SendCommand_SetupPacketForBulkWrite(AddrRange, modeWrite, WriteCom, Chip_Info.PageSizeInByte, Chip_Info.AddrWidth, Index); - for (i = 0; i < packageNum; ++i) { + for (i = 0; i < packageNum; ++i) { BulkPipeWrite((unsigned char*)((itr_begin + (i << divider))), 1 << divider, USB_TIMEOUT, Index); if (m_isCanceled) return false; @@ -2184,7 +2179,7 @@ int SerialFlash_bulkPipeProgram(struct CAddressRange* AddrRange, unsigned char* } int SerialFlash_bulkPipeRead(struct CAddressRange* AddrRange, unsigned char* vData, unsigned char modeRead, unsigned char ReadCom, int Index) -{ +{ size_t i, j, loop, pageNum, BufferLocation = 0; int ret = 0; if (!SerialFlash_StartofOperation(Index)) diff --git a/board.c b/board.c index 3161995..21cc094 100755 --- a/board.c +++ b/board.c @@ -9,7 +9,7 @@ volatile bool g_bIsSF600 = false; volatile bool g_bIsSF700 = false; -volatile bool g_bIsSF600PG2 = false; +volatile bool g_bIsSF600PG2 = false; extern char g_board_type[8]; extern char g_FPGA_ver[8]; extern char g_FW_ver[10]; diff --git a/dpcmd.c b/dpcmd.c index 206b575..5639646 100755 --- a/dpcmd.c +++ b/dpcmd.c @@ -22,7 +22,7 @@ extern unsigned int g_uiFileChecksum; extern unsigned long g_ulFileSize; extern volatile bool g_bIsSF600[16]; extern volatile bool g_bIsSF700[16]; -extern volatile bool g_bIsSF600PG2[16]; +extern volatile bool g_bIsSF600PG2[16]; extern unsigned char g_BatchIndex; unsigned int g_Vcc = vcc3_5V; @@ -594,17 +594,17 @@ int main(int argc, char* argv[]) break; case 'p': g_parameter_program = optarg; - g_ucOperation |= PROGRAM; + g_ucOperation |= PROGRAM; break; case 'u': g_parameter_auto = optarg; g_ucOperation |= BATCH; - g_BatchIndex = 2; + g_BatchIndex = 2; break; case 'z': g_parameter_batch = optarg; g_ucOperation |= BATCH; - g_BatchIndex = 1; + g_BatchIndex = 1; break; case 's': // display chip checksum g_ucOperation |= CSUM; @@ -648,9 +648,7 @@ int main(int argc, char* argv[]) // printf("hexadecimal starting address (with arg: %s)\n", l_opt_arg); break; case 'N': //lock length - sscanf(optarg, "%x", &g_uiLockLen); - // l_opt_arg = optarg; - // printf("hexadecimal length of area that will be kept unchanged while updating (with arg: %s)\n", l_opt_arg); + sscanf(optarg, "%x", &g_uiLockLen); break; case 'B': sscanf(optarg, "%d", &g_uiBlink); @@ -671,7 +669,7 @@ int main(int argc, char* argv[]) // printf("Fix programmer serial number with programmer sequence. (with arg: %s)\n", l_opt_arg); // break; g_parameter_loadfile_with_verify = optarg; - g_ucOperation |= LOADFILEWITHVERIFY; + g_ucOperation |= LOADFILEWITHVERIFY; break; case 'V': sscanf(optarg, "%d", &g_uiDeviceID); @@ -1580,7 +1578,7 @@ void do_Erase(void) void do_Program(void) { if (!do_loadFile()) - return; + return; SaveProgContextChanges(); printf("%s\n", msg_info_programming); @@ -1835,9 +1833,8 @@ bool Erase(void) bool Program(void) { - if (g_ucOperation & PROGRAM) - do_Program(); - + if (g_ucOperation & PROGRAM) + do_Program(); return g_bStatus; } @@ -1852,8 +1849,8 @@ bool Read(void) bool Auto(void) { - if (g_ucOperation & BATCH) - do_Auto(); + if (g_ucOperation & BATCH) + do_Auto(); return g_bStatus; } @@ -1861,8 +1858,8 @@ bool LoadFileWithVerify(void) { if (g_ucOperation & LOADFILEWITHVERIFY) { do_loadFileWithVerify(); - if (g_bStatus) - do_Verify(); + if (g_bStatus) + do_Verify(); } return g_bStatus; } diff --git a/project.c b/project.c index ba60ddf..19f2707 100755 --- a/project.c +++ b/project.c @@ -27,7 +27,7 @@ extern int m_boEnReadQuadIO; extern int m_boEnWriteQuadIO; extern volatile bool g_bIsSF600[16]; extern volatile bool g_bIsSF700[16]; -extern volatile bool g_bIsSF600PG2[16]; +extern volatile bool g_bIsSF600PG2[16]; extern char g_board_type[8]; extern int g_firmversion; extern char* g_parameter_vcc; @@ -340,10 +340,12 @@ bool ValidateProgramParameters(int Index) } bool ProgramChip(int Index) -{ +{ + bool need_padding = (g_ucFill != 0xFF); unsigned char* vc; struct CAddressRange real_addr[16]; + real_addr[Index].start = (DownloadAddrRange.start & (~(0x200 - 1))); real_addr[Index].end = ((DownloadAddrRange.end + (0x200 - 1)) & (~(0x200 - 1))); real_addr[Index].length = real_addr[Index].end - real_addr[Index].start; @@ -357,13 +359,12 @@ bool ProgramChip(int Index) memcpy(vc + (DownloadAddrRange.start & 0x1FF), pBufferforLoadedFile, DownloadAddrRange.length); } - bool result = SerialFlash_rangeProgram(&real_addr[Index], vc, Index); + bool result = SerialFlash_rangeProgram(&real_addr[Index], vc, Index); return result; } bool ReadChip(const struct CAddressRange range, int Index) -{ - //printf("\n===>project.c ---- ReadChip()\n"); +{ bool result = true; unsigned char* vc; size_t addrStart = range.start; @@ -635,44 +636,13 @@ bool threadCompareFileAndChip(int Index) if (result) { ReadChip(DownloadAddrRange, Index); - size_t offset = min(DownloadAddrRange.length, g_ulFileSize); + size_t offset = min(DownloadAddrRange.length, g_ulFileSize); unsigned int crcFile = CRC32(pBufferforLoadedFile, offset); unsigned int crcChip = CRC32(pBufferForLastReadData[Index], offset); - // unsigned int i=0; -#if 0 - for(i=0; i<10; i++) - { - if(pBufferforLoadedFile[i] != pBufferForLastReadData[i]) - printf("Data deferent at %X, pBufferforLoadedFile[i]=%x,pBufferForLastReadData[i]=%x\n",i,pBufferforLoadedFile[i],pBufferForLastReadData[i]); - } -#endif - + result = (crcChip == crcFile); } - -#if 0 - - if( !bAuto[Index] ) //not batch - { - - CompleteCnt++; - /*if( CompleteCnt==get_usb_dev_cnt() ) - { - //m_context.runtime.is_operation_on_going = false; - //m_chip[Index]->ClearCancelOperationFlag(); - g_is_operation_on_going = false; - //SerialFlash_ClearCancelOperationFlag(); - }*/ - - } - else - { - // g_is_operation_on_going = false; - // SerialFlash_ClearCancelOperationFlag(); - } -#endif - g_is_operation_successful[Index] = result; return result; @@ -718,14 +688,7 @@ size_t Condense(uintptr_t* out, unsigned char* vc, uintptr_t* addrs, size_t addr extern void SetPageSize(CHIP_INFO* mem, int USBIndex); bool BlazeUpdate(int Index) -{ - // struct CAddressRange addr_round;//(Chip_Info.MaxErasableSegmentInByte); - - // if(strstr(Chip_Info.Class,SUPPORT_ATMEL_45DBxxxD) != NULL) - // SetPageSize(&Chip_Info,Index); - - // dealwith lock phase 1 - +{ struct CAddressRange down_with_lock_range; down_with_lock_range.start = DownloadAddrRange.start; down_with_lock_range.end = DownloadAddrRange.end; @@ -738,12 +701,12 @@ bool BlazeUpdate(int Index) if ((LockAddrrange.start + LockAddrrange.length) > DownloadAddrRange.end) down_with_lock_range.end = LockAddrrange.start + LockAddrrange.length; } - + struct CAddressRange effectiveRange; //(addr_round.SectionRound(down_with_lock_range)); effectiveRange.start = down_with_lock_range.start & (~(Chip_Info.MaxErasableSegmentInByte - 1)); effectiveRange.end = (down_with_lock_range.end + (Chip_Info.MaxErasableSegmentInByte - 1)) & (~(Chip_Info.MaxErasableSegmentInByte - 1)); effectiveRange.length = effectiveRange.end - effectiveRange.start; - + if (!threadReadRangeChip(effectiveRange, Index)) return false; @@ -760,14 +723,15 @@ bool BlazeUpdate(int Index) memcpy(vc, pBufferForLastReadData[Index], effectiveRange.length); //memory data if (LockAddrrange.length > 0) { - unsigned int offsetOfRealStartAddrOffset = LockAddrrange.start - effectiveRange.start; // DownloadAddrRange.start - effectiveRange.start; + offsetOfRealStartAddrOffset = LockAddrrange.start - effectiveRange.start; memcpy(pBufferforLoadedFile + offsetOfRealStartAddrOffset, pBufferForLastReadData[Index] + offsetOfRealStartAddrOffset, LockAddrrange.length); Leng = GenerateDiff(addrs, vc, DownloadAddrRange.length, pBufferforLoadedFile, g_ulFileSize, DownloadAddrRange.start, Chip_Info.MaxErasableSegmentInByte); } else { - unsigned int offsetOfRealStartAddrOffset = DownloadAddrRange.start - effectiveRange.start; - Leng = GenerateDiff(addrs, vc + offsetOfRealStartAddrOffset, DownloadAddrRange.length, pBufferforLoadedFile, g_ulFileSize, DownloadAddrRange.start, Chip_Info.MaxErasableSegmentInByte); + offsetOfRealStartAddrOffset = DownloadAddrRange.start - effectiveRange.start; + +Leng = GenerateDiff(addrs, vc + offsetOfRealStartAddrOffset, DownloadAddrRange.length, pBufferforLoadedFile, g_ulFileSize, DownloadAddrRange.start, Chip_Info.MaxErasableSegmentInByte); } - + if (Leng == 0) // speed optimisation { return true; @@ -775,7 +739,7 @@ bool BlazeUpdate(int Index) uintptr_t* condensed_addr = (size_t*)malloc(min(DownloadAddrRange.length, g_ulFileSize)); size_t condensed_size; condensed_size = Condense(condensed_addr, vc, addrs, Leng, effectiveRange.start, Chip_Info.MaxErasableSegmentInByte); - + SerialFlash_batchErase(condensed_addr, condensed_size, Index); if (strstr(Chip_Info.Class, SUPPORT_MACRONIX_MX25Lxxx) != NULL) { @@ -783,15 +747,16 @@ bool BlazeUpdate(int Index) Sleep(100); TurnONVcc(Index); } - + memcpy(vc + offsetOfRealStartAddrOffset, pBufferforLoadedFile, DownloadAddrRange.length); + size_t i = 0; for (i = 0; i < Leng; i++) { size_t idx_in_vc = addrs[i] - effectiveRange.start; struct CAddressRange addr_range; addr_range.start = addrs[i]; addr_range.end = addrs[i] + Chip_Info.MaxErasableSegmentInByte; - addr_range.length = addr_range.end - addr_range.start; + addr_range.length = addr_range.end - addr_range.start; if (SerialFlash_rangeProgram(&addr_range, vc + idx_in_vc, Index) == 0) { free(vc); free(addrs); @@ -817,8 +782,7 @@ bool RangeUpdateThruSectorErase(int Index) } bool RangeUpdateThruChipErase(int Index) -{ - // printf("RangeUpdateThruChipErase!\n"); +{ unsigned char* vc = (unsigned char*)malloc(Chip_Info.ChipSizeInByte); unsigned int i = 0; bool boIsBlank = true; @@ -881,22 +845,11 @@ bool threadPredefinedBatchSequences(int Index) bool result = true; if (g_ulFileSize == 0) - result = false; - - // size_t option=2; - // bool bVerifyAfterCompletion; - // 07.11.2009 - // bool bIdentifyBeforeOperation; + result = false; if (result && (!ValidateProgramParameters(Index))) - result = false; -#if 0 - if(strstr(Chip_Info.Class,SUPPORT_MACRONIX_MX25Lxxx)!= NULL - ||strstr(Chip_Info.Class,SUPPORT_MACRONIX_MX25Lxxx_Large) != NULL - ||strstr(Chip_Info.Class,SUPPORT_MACRONIX_MX25Lxxx_PP32)!=NULL) - Sleep(10); -#endif - + result = false; + if (result) { switch (g_BatchIndex) { case 1: //-z @@ -904,7 +857,7 @@ bool threadPredefinedBatchSequences(int Index) break; case 2: default: - result = RangeUpdate(Index); + result = RangeUpdate(Index); break; } }