Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
root committed May 30, 2023
1 parent 3acba5a commit 5cffe50
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 103 deletions.
3 changes: 1 addition & 2 deletions FlashCommand.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
19 changes: 7 additions & 12 deletions SerialFlash.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand All @@ -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
Expand All @@ -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))
Expand All @@ -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);
Expand All @@ -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;
Expand All @@ -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))
Expand Down
2 changes: 1 addition & 1 deletion board.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
29 changes: 13 additions & 16 deletions dpcmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -1580,7 +1578,7 @@ void do_Erase(void)
void do_Program(void)
{
if (!do_loadFile())
return;
return;
SaveProgContextChanges();

printf("%s\n", msg_info_programming);
Expand Down Expand Up @@ -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;
}

Expand All @@ -1852,17 +1849,17 @@ bool Read(void)

bool Auto(void)
{
if (g_ucOperation & BATCH)
do_Auto();
if (g_ucOperation & BATCH)
do_Auto();
return g_bStatus;
}

bool LoadFileWithVerify(void)
{
if (g_ucOperation & LOADFILEWITHVERIFY) {
do_loadFileWithVerify();
if (g_bStatus)
do_Verify();
if (g_bStatus)
do_Verify();
}
return g_bStatus;
}
Expand Down
97 changes: 25 additions & 72 deletions project.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -760,38 +723,40 @@ 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;
} else {
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) {
TurnOFFVcc(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);
Expand All @@ -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;
Expand Down Expand Up @@ -881,30 +845,19 @@ 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
result = ReplaceChipContentThruChipErase(Index);
break;
case 2:
default:
result = RangeUpdate(Index);
result = RangeUpdate(Index);
break;
}
}
Expand Down

0 comments on commit 5cffe50

Please sign in to comment.