diff --git a/FlashCommand.c b/FlashCommand.c index ebd0f4b..01af811 100755 --- a/FlashCommand.c +++ b/FlashCommand.c @@ -89,8 +89,7 @@ int FlashCommand_SendCommand_OneOutOneIn(unsigned char* vOut, int out_len, unsig } int FlashCommand_SendCommand_SetupPacketForBulkWrite(struct CAddressRange* AddrRange, unsigned char modeWrite, unsigned char WriteCom, unsigned int PageSize, unsigned int AddressMode, int Index) -{printf("\nevy FlashCommand_SendCommand_SetupPacketForBulkWrite"); -printf("\nevy modeWrite=%x,WriteCom=%x,PageSize=%x",modeWrite,WriteCom,PageSize); +{ unsigned char vInstruction[15]; CNTRPIPE_RQ rq; // length in terms of 256/128 bytes diff --git a/board.c b/board.c index 0fe6b20..3161995 100755 --- a/board.c +++ b/board.c @@ -42,22 +42,22 @@ bool ReadSF700AndSF600PG2SN(unsigned char* Data, int Index) vBuffer[4]=0; vBuffer[5]=0; -//must read twice +//must read twice if (OutCtrlRequest(&rq, vBuffer, 6, Index) == SerialFlash_FALSE) return false; - + //first unsigned char vBufferSN[512]; BulkPipeRead(vBufferSN, USB_TIMEOUT, Index); if (OutCtrlRequest(&rq, vBuffer, 6, Index) == SerialFlash_FALSE) return false; - + //second BulkPipeRead(vBufferSN, USB_TIMEOUT, Index); memcpy(Data, vBufferSN, 16); return true; } -bool ReadOnBoardFlash(unsigned char* Data, bool ReadUID, int Index) + bool ReadOnBoardFlash(unsigned char* Data, bool ReadUID, int Index) { CNTRPIPE_RQ rq; unsigned char vBuffer[16]; @@ -344,6 +344,27 @@ bool SetSPIClockValue(unsigned short v, int Index) return true; } +bool SetIOMOdeValue(int Index) +{ + if (!Is_usbworking(Index)) + return false; + + // send request + CNTRPIPE_RQ rq; + unsigned char vBuffer; + rq.Function = URB_FUNCTION_VENDOR_ENDPOINT; + rq.Direction = VENDOR_DIRECTION_OUT; + rq.Request = SET_IOMODE; + rq.Value = 0;//single IO + rq.Index = RFU; + rq.Length = 0; + + if (OutCtrlRequest(&rq, &vBuffer, 0, Index) == SerialFlash_FALSE) + return false; + Sleep(200); + return true; +} + unsigned int ReadUID(int Index) { if (!Is_usbworking(Index)) { @@ -352,7 +373,7 @@ unsigned int ReadUID(int Index) unsigned int dwUID = 0; unsigned char vUID[16]; - if ((g_bIsSF700 == true) || (g_bIsSF600PG2 == true)) { + if (is_SF700_Or_SF600PG2(Index)) { if (ReadSF700AndSF600PG2SN(vUID, Index) == false) return false; //Sleep(200); @@ -465,7 +486,7 @@ unsigned char ReadManufacturerID(int Index) if (!Is_usbworking(Index)) return false; - if ((g_bIsSF600 == true) || (g_bIsSF700 == true)|| (g_bIsSF600PG2 == true)) { + if ((g_bIsSF600 == true) || is_SF700_Or_SF600PG2(Index) == true) { unsigned char vUID[16]; if (ReadOnBoardFlash(vUID, false, Index) == false) return false; @@ -625,7 +646,7 @@ bool WriteUID(unsigned int dwUID, int Index) if (!Is_usbworking(Index)) return false; - if ((g_bIsSF600 == true) || (g_bIsSF700 == true)|| (g_bIsSF600PG2 == true)) + if ((g_bIsSF600 == true) || is_SF700_Or_SF600PG2(Index) == true) return true; CNTRPIPE_RQ rq; @@ -665,7 +686,7 @@ bool WriteManufacturerID(unsigned char ManuID, int Index) if (!Is_usbworking(Index)) return false; - if ((g_bIsSF600 == true) || (g_bIsSF700 == true)|| (g_bIsSF600PG2 == true)) + if ((g_bIsSF600 == true) || is_SF700_Or_SF600PG2(Index) == true) return true; CNTRPIPE_RQ rq; @@ -776,7 +797,7 @@ bool GetFirmwareVer(int Index) unsigned char vBuffer[32]; unsigned int BufferSize =32; - if((g_bIsSF600== false) && (g_bIsSF700 == false) && (g_bIsSF600PG2 == false)) + if((g_bIsSF600== false) && (is_SF700_Or_SF600PG2(Index) == false)) BufferSize = 16; // first control packet @@ -988,7 +1009,7 @@ bool UpdateFirmware(const char* sFolder, int Index) unsigned int UID = 0; unsigned char ManID = 0; // read status - if ((g_bIsSF600 == true) || (g_bIsSF700 == true)|| (g_bIsSF600PG2 == true)) + if ((g_bIsSF600 == true) || (is_SF700_Or_SF600PG2(Index) == true)) return UpdateSF600Firmware(sFolder, Index); dediprog_set_spi_voltage(g_Vcc, Index); diff --git a/board.h b/board.h index a1e6829..5452557 100755 --- a/board.h +++ b/board.h @@ -20,6 +20,7 @@ bool SetCS(size_t value, int Index); bool SetIOModeToSF600(size_t value, int Index); bool BlinkProgBoard(bool boIsV5, int Index); bool LeaveSF600Standalone(bool Enable, int Index); +bool SetIOMOdeValue(int Index); bool SetSPIClockValue(unsigned short v, int Index); unsigned int ReadUID(int Index); bool SetSPIClockDefault(int Index); diff --git a/dpcmd.c b/dpcmd.c index dc07ddd..206b575 100755 --- a/dpcmd.c +++ b/dpcmd.c @@ -408,13 +408,13 @@ void GetLogPath(char* pBuf) void EnterStandaloneMode(int Index) { - if ((g_bIsSF600[Index] == true) || (g_bIsSF700[Index] == true)|| (g_bIsSF600PG2[Index] == true)) + if ((g_bIsSF600[Index] == true) || is_SF700_Or_SF600PG2(Index)) LeaveSF600Standalone(false, Index); } void LeaveStandaloneMode(int Index) { - if ((g_bIsSF600[Index] == true) || (g_bIsSF700[Index] == true)|| (g_bIsSF600PG2[Index] == true)) + if ((g_bIsSF600[Index] == true) || is_SF700_Or_SF600PG2(Index)) LeaveSF600Standalone(true, Index); } @@ -774,10 +774,12 @@ int main(int argc, char* argv[]) } } int dwUID = ReadUID(g_uiDevNum - 1); - if (g_bIsSF700[g_uiDevNum - 1] == true) { - printf("\nDevice %d (SF7%05d):\tdetecting chip\n", g_uiDevNum, dwUID); - } else if (g_bIsSF600PG2[g_uiDevNum - 1] == true) { - printf("\nDevice %d (S6B%05d):\tdetecting chip\n", g_uiDevNum, dwUID); + if (is_SF700_Or_SF600PG2(g_uiDevNum - 1)) { + if (g_bIsSF700[g_uiDevNum - 1] == true) { + printf("\nDevice %d (SF7%05d):\tdetecting chip\n", g_uiDevNum, dwUID); + } else if (g_bIsSF600PG2[g_uiDevNum - 1] == true) { + printf("\nDevice %d (S6B%05d):\tdetecting chip\n", g_uiDevNum, dwUID); + } } else if ((g_bIsSF600[g_uiDevNum - 1] == true) && (dwUID / 600000) > 0) { printf("\nDevice %d (SF%06d):\tdetecting chip\n", g_uiDevNum, dwUID); } else if ((dwUID / 100000) > 0) { @@ -804,10 +806,12 @@ int main(int argc, char* argv[]) //printf("%s\n",g_LogPath); int dwUID = ReadUID(i); - if (g_bIsSF700[i] == true) { - printf("\nDevice %d (SF7%05d):\tdetecting chip\n", i + 1, dwUID); - } else if (g_bIsSF600PG2[i] == true) { - printf("\nDevice %d (S6B%05d):\tdetecting chip\n", i + 1, dwUID); + if (is_SF700_Or_SF600PG2(i)) { + if (g_bIsSF700[i] == true) { + printf("\nDevice %d (SF7%05d):\tdetecting chip\n", i + 1, dwUID); + } else if (g_bIsSF600PG2[i] == true) { + printf("\nDevice %d (S6B%05d):\tdetecting chip\n", i + 1, dwUID); + } } else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) { printf("\nDevice %d (SF%06d):\tdetecting chip\n", i + 1, dwUID); } else if ((dwUID / 100000) > 0) { @@ -1182,8 +1186,10 @@ bool InitProject(void) for (int i = 0; i < dev_cnt; i++) { g_StartupMode = targets[g_ucTarget]; SetTargetFlash((unsigned char)targets[g_ucTarget], i); + SetSPIIOMode(i); SetSPIClock(i); SetVcc(i); + SetVppVoltage(0,i); if (strlen(g_parameter_type) > 0) { if (Dedi_Search_Chip_Db_ByTypeName(g_parameter_type, &Chip_Info)) { @@ -1204,8 +1210,10 @@ bool InitProject(void) } else if (g_uiDevNum <= dev_cnt) { g_StartupMode = targets[g_ucTarget]; SetTargetFlash((unsigned char)targets[g_ucTarget], g_uiDevNum - 1); + SetSPIIOMode(g_uiDevNum - 1); SetSPIClock(g_uiDevNum - 1); SetVcc(g_uiDevNum - 1); + SetVppVoltage(0,g_uiDevNum - 1); if (strlen(g_parameter_type) > 0) { if (Dedi_Search_Chip_Db_ByTypeName(g_parameter_type, &Chip_Info)) { @@ -1282,6 +1290,10 @@ void SetVpp(int Index) { } +void SetSPIIOMode(int Index) +{ + SetIOMOdeValue(Index); +} void SetSPIClock(int Index) { // sscanf(g_parameter_spi_clk,"%d",&g_ucSPIClock); @@ -1289,12 +1301,50 @@ void SetSPIClock(int Index) } void SetVcc(int Index) -{ +{ // sscanf(g_parameter_vcc,"%d",&g_Vcc); - if (!(g_Vcc <= 3800 && g_Vcc >= 1800 && ((g_bIsSF600[Index] == true) || (g_bIsSF700[Index] == true) || (g_bIsSF600PG2[Index] == true)))) + if (!(g_Vcc <= 3800 && g_Vcc >= 1800 && ((g_bIsSF600[Index] == true) || is_SF700_Or_SF600PG2(Index)))) g_Vcc = (0x10 | (g_Vcc & 0x03)); } +int SetVppVoltage(int vol, int Index) +{ + int ret; + int voltage_selector; + CNTRPIPE_RQ rq; + + switch (vol) { + case 0: + /* Admittedly this one is an assumption. */ + voltage_selector = 0x0; + break; + case 9: + voltage_selector = 0x1; + break; + case 12: + voltage_selector = 0x2; + break; + default: + return 1; + } + + rq.Function = URB_FUNCTION_VENDOR_ENDPOINT; + rq.Direction = VENDOR_DIRECTION_OUT; + rq.Request = 0x03; + rq.Value = voltage_selector; + rq.Index = 0; + rq.Length = 0x0; + + ret = OutCtrlRequest(&rq, NULL, 0, Index); + + if (ret == SerialFlash_FALSE) { + // printf("Command Set VPP Voltage 0x%x failed!\n", voltage_selector); + return 1; + } + Sleep(200); + return 0; +} + int do_loadFile(void) { char* filename = NULL; @@ -1342,11 +1392,12 @@ bool CheckProgrammerInfo(void) if (g_uiDevNum == 0) { for (int i = 0; i < dev_cnt; i++) { int dwUID = ReadUID(i); - if (g_bIsSF700[i] == true) - printf("%d,\tSF7%05d\n", i + 1, dwUID); - else if (g_bIsSF600PG2[i] == true) - printf("%d,\tS6B%05d\n", i + 1, dwUID); - else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) + if (is_SF700_Or_SF600PG2(i)) { + if (g_bIsSF700[i] == true) + printf("%d,\tSF7%05d\n", i + 1, dwUID); + else if (g_bIsSF600PG2[i] == true) + printf("%d,\tS6B%05d\n", i + 1, dwUID); + } else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) printf("%d,\tSF%06d\n", i + 1, dwUID); else if ((dwUID / 100000) > 0) printf("%d,\tSF%06d\n", i + 1, dwUID); @@ -1363,16 +1414,18 @@ bool CheckProgrammerInfo(void) printf(" Firmware version : %s\n", g_FW_ver); printf(" FPGA version : 0x%04x\n", uiFPGAVer); printf(" Hardware version : %s\n", g_HW_ver); - } else if (g_bIsSF700[i]) { - printf(" Programmer type : SF700\n"); - printf(" Firmware version : %s\n", g_FW_ver); - printf(" FPGA version : 0x%04x\n", uiFPGAVer); - printf(" Hardware version : %s\n", g_HW_ver); - } else if (g_bIsSF600PG2[i]) { - printf(" Programmer type : SF600Plus-G2\n"); - printf(" Firmware version : %s\n", g_FW_ver); - printf(" FPGA version : 0x%04x\n", uiFPGAVer); - printf(" Hardware version : %s\n", g_HW_ver); + } else if (is_SF700_Or_SF600PG2(i)){ + if (g_bIsSF700[i]) { + printf(" Programmer type : SF700\n"); + printf(" Firmware version : %s\n", g_FW_ver); + printf(" FPGA version : 0x%04x\n", uiFPGAVer); + printf(" Hardware version : %s\n", g_HW_ver); + } else if (g_bIsSF600PG2[i]) { + printf(" Programmer type : SF600Plus-G2\n"); + printf(" Firmware version : %s\n", g_FW_ver); + printf(" FPGA version : 0x%04x\n", uiFPGAVer); + printf(" Hardware version : %s\n", g_HW_ver); + } } else //SF100 { printf(" Programmer type : SF100\n"); @@ -1383,10 +1436,12 @@ bool CheckProgrammerInfo(void) } } else { int dwUID = ReadUID(g_uiDevNum - 1); - if (g_bIsSF700[g_uiDevNum - 1] == true) { - printf("\nDevice %d (SF7%05d):\n", g_uiDevNum, dwUID); - } else if (g_bIsSF600PG2[g_uiDevNum - 1] == true) { - printf("\nDevice %d (S6B%05d):\n", g_uiDevNum, dwUID); + if (is_SF700_Or_SF600PG2(g_uiDevNum - 1)) { + if (g_bIsSF700[g_uiDevNum - 1] == true) { + printf("\nDevice %d (SF7%05d):\n", g_uiDevNum, dwUID); + } else if (g_bIsSF600PG2[g_uiDevNum - 1] == true) { + printf("\nDevice %d (S6B%05d):\n", g_uiDevNum, dwUID); + } } else if ((g_bIsSF600[g_uiDevNum - 1] == true) && (dwUID / 600000) > 0) { printf("\nDevice %d (SF%06d):\n", g_uiDevNum, dwUID); } else if ((dwUID / 100000) > 0) { @@ -1404,18 +1459,16 @@ bool CheckProgrammerInfo(void) printf(" Firmware version : %s\n", g_FW_ver); printf(" FPGA version : 0x%x\n", uiFPGAVer); printf(" Hardware version : %s\n", g_HW_ver); - } else if (g_bIsSF700[g_uiDevNum - 1]) { - printf(" Programmer type : SF700\n"); - printf(" Firmware version : %s\n", g_FW_ver); - printf(" FPGA version : 0x%x\n", uiFPGAVer); - printf(" Hardware version : %s\n", g_HW_ver); - } else if (g_bIsSF600PG2[g_uiDevNum - 1]) { - printf(" Programmer type : SF600Plus-G2\n"); + } else if (is_SF700_Or_SF600PG2(g_uiDevNum - 1)) { + if (g_bIsSF700[g_uiDevNum - 1]) { + printf(" Programmer type : SF700\n"); + } else if (g_bIsSF600PG2[g_uiDevNum - 1]) { + printf(" Programmer type : SF600Plus-G2\n"); + } printf(" Firmware version : %s\n", g_FW_ver); printf(" FPGA version : 0x%x\n", uiFPGAVer); printf(" Hardware version : %s\n", g_HW_ver); - } else //SF100 - { + } else {//SF100 printf(" Programmer type : SF100\n"); printf(" Firmware version : %s\n", g_FW_ver); printf(" FPGA version : N.A.\n"); @@ -1476,11 +1529,12 @@ void ListSFSerialID(void) if (g_uiDeviceID < 1) { for (unsigned int i = 0; i < dev_cnt; i++) { dwUID = ReadUID(i); - if (g_bIsSF700[i] == true) - printf("%d,\tSF7%05d\n", i + 1, dwUID); - else if (g_bIsSF600PG2[i] == true) - printf("%d,\tS6B%05d\n", i + 1, dwUID); - else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) + if (is_SF700_Or_SF600PG2(i)) { + if (g_bIsSF700[i] == true) + printf("%d,\tSF7%05d\n", i + 1, dwUID); + else if (g_bIsSF600PG2[i] == true) + printf("%d,\tS6B%05d\n", i + 1, dwUID); + } else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) printf("%d,\tSF%06d\n", i + 1, dwUID); else if ((dwUID / 100000) > 0) printf("%d,\tSF%06d\n", i + 1, dwUID); @@ -1492,11 +1546,12 @@ void ListSFSerialID(void) printf("The number of programmer is not defined!\n"); else { dwUID = ReadUID(g_uiDeviceID - 1); - if (g_bIsSF700[g_uiDeviceID - 1] == true) - printf("%d,\tSF7%05d\n", g_uiDeviceID, dwUID); - else if (g_bIsSF600PG2[g_uiDeviceID - 1] == true) - printf("%d,\tS6B%05d\n", g_uiDeviceID, dwUID); - else if ((g_bIsSF600[g_uiDeviceID - 1] == true) && (dwUID / 600000) > 0) + if (is_SF700_Or_SF600PG2(g_uiDeviceID - 1)) { + if (g_bIsSF700[g_uiDeviceID - 1] == true) + printf("%d,\tSF7%05d\n", g_uiDeviceID, dwUID); + else if (g_bIsSF600PG2[g_uiDeviceID - 1] == true) + printf("%d,\tS6B%05d\n", g_uiDeviceID, dwUID); + } else if ((g_bIsSF600[g_uiDeviceID - 1] == true) && (dwUID / 600000) > 0) printf("%d,\tSF%06d\n", g_uiDeviceID, dwUID); else if ((dwUID / 100000) > 0) printf("%d,\tSF%06d\n", g_uiDeviceID, dwUID); @@ -1832,11 +1887,12 @@ bool CalChecksum(void) for (int i = 0; i < dev_cnt; i++) { int dwUID = ReadUID(i); if (g_uiAddr == 0 && g_uiLen == 0) { - if (g_bIsSF700[i] == true) - printf("\nDevice %d (SF7%05d):", i + 1, dwUID); - else if (g_bIsSF600PG2[i] == true) - printf("\nDevice %d (S6B%05d):", i + 1, dwUID); - else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) + if (is_SF700_Or_SF600PG2(i)) { + if (g_bIsSF700[i] == true) + printf("\nDevice %d (SF7%05d):", i + 1, dwUID); + else if (g_bIsSF600PG2[i] == true) + printf("\nDevice %d (S6B%05d):", i + 1, dwUID); + } else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) printf("\nDevice %d (SF%06d):", i + 1, dwUID); else if ((dwUID / 100000) > 0) printf("\nDevice %d (SF%06d):", i + 1, dwUID); @@ -1845,11 +1901,12 @@ bool CalChecksum(void) printf("Checksum of the whole chip(address starting from: 0x%X, 0x%zX bytes in total): %08X\n", g_uiAddr, Chip_Info.ChipSizeInByte, CRC32(pBufferForLastReadData[i], Chip_Info.ChipSizeInByte)); } else { - if (g_bIsSF700[i] == true) - printf("\nDevice %d (SF7%05d):", i + 1, ReadUID(i)); - else if (g_bIsSF600PG2[i] == true) - printf("\nDevice %d (S6B%05d):", i + 1, ReadUID(i)); - else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) + if (is_SF700_Or_SF600PG2(i)) { + if (g_bIsSF700[i] == true) + printf("\nDevice %d (SF7%05d):", i + 1, ReadUID(i)); + else if (g_bIsSF600PG2[i] == true) + printf("\nDevice %d (S6B%05d):", i + 1, ReadUID(i)); + } else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) printf("\nDevice %d (SF%06d):", i + 1, ReadUID(i)); else if ((dwUID / 100000) > 0) printf("\nDevice %d (SF%06d):", i + 1, ReadUID(i)); @@ -1862,11 +1919,12 @@ bool CalChecksum(void) } else if (g_uiDevNum != 0) { int dwUID = ReadUID(g_uiDevNum - 1); if (g_uiAddr == 0 && g_uiLen == 0) { - if (g_bIsSF700[g_uiDevNum - 1] == true) - printf("\nDevice %d (SF7%05d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); - else if (g_bIsSF600PG2[g_uiDevNum - 1] == true) - printf("\nDevice %d (S6B%05d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); - else if ((g_bIsSF600[g_uiDevNum - 1] == true) && (dwUID / 600000) > 0) + if (is_SF700_Or_SF600PG2(g_uiDevNum - 1)) { + if (g_bIsSF700[g_uiDevNum - 1] == true) + printf("\nDevice %d (SF7%05d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); + else if (g_bIsSF600PG2[g_uiDevNum - 1] == true) + printf("\nDevice %d (S6B%05d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); + } else if ((g_bIsSF600[g_uiDevNum - 1] == true) && (dwUID / 600000) > 0) printf("\nDevice %d (SF%06d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); else if ((dwUID / 100000) > 0) printf("\nDevice %d (SF%06d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); @@ -1875,11 +1933,12 @@ bool CalChecksum(void) printf("Checksum of the whole chip(address starting from: 0x%X, 0x%zX bytes in total): %08X\n", g_uiAddr, Chip_Info.ChipSizeInByte, CRC32(pBufferForLastReadData[g_uiDevNum - 1], Chip_Info.ChipSizeInByte)); } else { - if (g_bIsSF700[g_uiDevNum - 1] == true) - printf("\nDevice %d (SF7%05d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); - else if (g_bIsSF600PG2[g_uiDevNum - 1] == true) - printf("\nDevice %d (S6B%05d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); - else if ((g_bIsSF600[g_uiDevNum - 1] == true) && (dwUID / 600000) > 0) + if (is_SF700_Or_SF600PG2(g_uiDevNum - 1)) { + if (g_bIsSF700[g_uiDevNum - 1] == true) + printf("\nDevice %d (SF7%05d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); + else if (g_bIsSF600PG2[g_uiDevNum - 1] == true) + printf("\nDevice %d (S6B%05d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); + } else if ((g_bIsSF600[g_uiDevNum - 1] == true) && (dwUID / 600000) > 0) printf("\nDevice %d (SF%06d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); else if ((dwUID / 100000) > 0) printf("\nDevice %d (SF%06d):", g_uiDevNum, ReadUID(g_uiDevNum - 1)); @@ -1927,11 +1986,12 @@ bool Wait(const char* strOK, const char* strFail) { for (int i = 0; i < dev_cnt; i++) { int dwUID = ReadUID(i); - if (g_bIsSF700[i] == true) - printf("\nDevice %d (SF7%05d):", i + 1, dwUID); - else if (g_bIsSF600PG2[i] == true) - printf("\nDevice %d (S6B%05d):", i + 1, dwUID); - else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) + if (is_SF700_Or_SF600PG2(i)) { + if (g_bIsSF700[i] == true) + printf("\nDevice %d (SF7%05d):", i + 1, dwUID); + else if (g_bIsSF600PG2[i] == true) + printf("\nDevice %d (S6B%05d):", i + 1, dwUID); + } else if ((g_bIsSF600[i] == true) && (dwUID / 600000) > 0) printf("\nDevice %d (SF%06d):", i + 1, dwUID); else if ((dwUID / 100000) > 0) printf("\nDevice %d (SF%06d):", i + 1, dwUID); @@ -1942,11 +2002,12 @@ bool Wait(const char* strOK, const char* strFail) } } else if (g_uiDevNum <= dev_cnt) { int dwUID = ReadUID(g_uiDevNum - 1); - if (g_bIsSF700[g_uiDevNum - 1] == true) - printf("\nDevice %d (SF7%05d):", g_uiDevNum, dwUID); - else if (g_bIsSF600PG2[g_uiDevNum - 1] == true) - printf("\nDevice %d (S6B%05d):", g_uiDevNum, dwUID); - else if ((g_bIsSF600[g_uiDevNum - 1] == true) && (dwUID / 600000) > 0) + if (is_SF700_Or_SF600PG2(g_uiDevNum - 1)) { + if (g_bIsSF700[g_uiDevNum - 1] == true) + printf("\nDevice %d (SF7%05d):", g_uiDevNum, dwUID); + else if (g_bIsSF600PG2[g_uiDevNum - 1] == true) + printf("\nDevice %d (S6B%05d):", g_uiDevNum, dwUID); + } else if ((g_bIsSF600[g_uiDevNum - 1] == true) && (dwUID / 600000) > 0) printf("\nDevice %d (SF%06d):", g_uiDevNum, dwUID); else if ((dwUID / 100000) > 0) printf("\nDevice %d (SF%06d):", g_uiDevNum, dwUID); diff --git a/dpcmd.h b/dpcmd.h index 1bbadab..dafe9ad 100755 --- a/dpcmd.h +++ b/dpcmd.h @@ -48,8 +48,10 @@ bool InitProject(void); void CloseProject(void); bool DetectChip(void); void SetVpp(int Index); +void SetSPIIOMode(int Index); void SetSPIClock(int Index); void SetVcc(int Index); +int SetVppVoltage(int vol,int Index); int do_loadFile(void); int do_loadFileWithVerify(void); void BlinkProgrammer(void); diff --git a/project.c b/project.c index 993e955..ba60ddf 100755 --- a/project.c +++ b/project.c @@ -923,14 +923,18 @@ void threadRun(void* Type) int dwUID = ReadUID(Index); if (g_uiAddr == 0 && g_uiLen == 0) { - if (g_bIsSF700[Index] == true) - printf("\nDevice %d (SF7%05X):", Index + 1, dwUID); - else if (g_bIsSF600PG2[Index] == true) - printf("\nDevice %d (SPG%05X):", Index + 1, dwUID); - else if ((dwUID / 600000) == 0) + if(is_SF700_Or_SF600PG2(Index)){ + if (g_bIsSF700[Index] == true) + printf("\nDevice %d (SF7%05X):", Index + 1, dwUID); + else if (g_bIsSF600PG2[Index] == true) + printf("\nDevice %d (S6%05X):", Index + 1, dwUID); + } + else { + if ((dwUID / 600000) == 0) printf("\nDevice %d (DP%06d):", Index + 1, dwUID); else printf("\nDevice %d (SF%06d):", Index + 1, dwUID); + } } if (opType == UPDATE_FIRMWARE) { @@ -1045,7 +1049,7 @@ void SetIOMode(bool isProg, int Index) m_boEnReadQuadIO = 0; m_boEnWriteQuadIO = 0; - if ((g_bIsSF600[Index] == false) && (g_bIsSF700[Index] == false) && (g_bIsSF600PG2[Index] == false)) + if ((g_bIsSF600[Index] == false) && (is_SF700_Or_SF600PG2(Index) == false)) return; SetIOModeToSF600(IOValue, Index); @@ -1187,20 +1191,26 @@ bool is_SF600nBoardVersionGreaterThan_7_0_1n6_7_0(int Index) } return false; } -bool is_SF700(int Index) + +bool is_SF700_Or_SF600PG2(int Index) { if (strstr(g_board_type, "SF700") != NULL) { return true; + } + else if (strstr(g_board_type, "SF600PG2") != NULL) { + return true; } + return false; } +/* bool is_SF600PG2(int Index) { if (strstr(g_board_type, "SF600PG2") != NULL) { return true; } return false; -} +}*/ #if 0 CHIP_INFO GetFirstDetectionMatch(int Index) { @@ -1291,7 +1301,7 @@ CHIP_INFO GetFirstDetectionMatch(char* TypeName, int Index) TurnONVcc(Index); if (Is_usbworking(Index)) { - if ((g_bIsSF600[Index] == true) || (g_bIsSF700[Index] == true)|| (g_bIsSF600PG2[Index] == true)) { + if ((g_bIsSF600[Index] == true) || is_SF700_Or_SF600PG2(Index)) { int startmode; if (g_StartupMode == STARTUP_APPLI_SF_2) diff --git a/project.h b/project.h index f9cd004..1b2a020 100755 --- a/project.h +++ b/project.h @@ -46,8 +46,9 @@ bool is_SF100nBoardVersionGreaterThan_5_5_0(int Index); bool is_SF600nBoardVersionGreaterThan_6_9_0(int Index); bool is_SF100nBoardVersionGreaterThan_5_2_0(int Index); bool is_SF600nBoardVersionGreaterThan_7_0_1n6_7_0(int Index); -bool is_SF700(int Index); -bool is_SF600PG2(int Index); +//bool is_SF700(int Index); +//bool is_SF600PG2(int Index); +bool is_SF700_Or_SF600PG2(int Index); int GetFileFormatFromExt(const char* csPath); #if 0 CHIP_INFO GetFirstDetectionMatch(int Index); diff --git a/usbdriver.c b/usbdriver.c index 47204ba..1b78a21 100755 --- a/usbdriver.c +++ b/usbdriver.c @@ -33,7 +33,7 @@ unsigned g_usb_busnum = -1; bool Is_NewUSBCommand(int Index) { - if (is_SF100nBoardVersionGreaterThan_5_5_0(Index) || is_SF600nBoardVersionGreaterThan_6_9_0(Index) || is_SF700(Index)) { + if (is_SF100nBoardVersionGreaterThan_5_5_0(Index) || is_SF600nBoardVersionGreaterThan_6_9_0(Index) || is_SF700_Or_SF600PG2(Index)) { return true; } return false; @@ -67,8 +67,7 @@ void usb_db_init(void) void AssignSF600orSF700var(int Index) { if (Index == -1) - Index = DevIndex; - + Index = DevIndex; g_bIsSF600[Index] = false; g_bIsSF700[Index] = false; g_bIsSF600PG2[Index] = false; @@ -99,7 +98,8 @@ void AssignSF600orSF700var(int Index) { if (strstr(g_board_type, "SF600PG2") != NULL) { - g_bIsSF600PG2[Index] = true; + g_bIsSF600PG2[Index] = true; + Sleep(2); } else { @@ -154,7 +154,7 @@ int OutCtrlRequest(CNTRPIPE_RQ* rq, unsigned char* buf, unsigned long buf_size, if (Index == -1) Index = DevIndex; - if ((rq->Function != URB_FUNCTION_VENDOR_ENDPOINT) && ((g_bIsSF600[Index] == true) || (g_bIsSF700[Index] == true) || (g_bIsSF600PG2[Index] == true))) + if ((rq->Function != URB_FUNCTION_VENDOR_ENDPOINT) && ((g_bIsSF600[Index] == true) || is_SF700_Or_SF600PG2(Index) == true)) return true; requesttype = 0x00; @@ -187,7 +187,7 @@ int InCtrlRequest(CNTRPIPE_RQ* rq, unsigned char* buf, unsigned long buf_size, i unsigned int requesttype; unsigned int ret = 0; - if ((rq->Function != URB_FUNCTION_VENDOR_ENDPOINT) && ((g_bIsSF600[Index] == true) || (g_bIsSF700[Index] == true)|| (g_bIsSF600PG2[Index] == true))) + if ((rq->Function != URB_FUNCTION_VENDOR_ENDPOINT) && ((g_bIsSF600[Index] == true) || is_SF700_Or_SF600PG2(Index) == true)) return true; if (Index == -1) @@ -245,7 +245,7 @@ int InCtrlRequest(CNTRPIPE_RQ* rq, unsigned char* buf, unsigned long buf_size, i // should be called after usb successfully opens pipes. int dediprog_start_appli(int Index) { - if((g_bIsSF600[Index] != false) || (g_bIsSF700[Index] != false) || (g_bIsSF600PG2[Index] != false)) + if((g_bIsSF600[Index] != false) || is_SF700_Or_SF600PG2(Index)!=false) return 1; CNTRPIPE_RQ rq; @@ -334,7 +334,7 @@ int BulkPipeWrite(unsigned char* pBuff, unsigned int size, unsigned int timeOut, if (Index == -1) Index = DevIndex; - ret = libusb_bulk_transfer(dediprog_handle[Index], ((g_bIsSF600[Index] == true) || (g_bIsSF700[Index] == true)|| (g_bIsSF600PG2[Index] == true)) ? 0x01 : 0x02, pData, nWrite, &actual_length, DEFAULT_TIMEOUT); + ret = libusb_bulk_transfer(dediprog_handle[Index], ((g_bIsSF600[Index] == true) || is_SF700_Or_SF600PG2(Index) == true) ? 0x01 : 0x02, pData, nWrite, &actual_length, DEFAULT_TIMEOUT); nWrite = ret; return nWrite; } @@ -369,13 +369,12 @@ int dediprog_set_spi_voltage(int v, int Index) unsigned char v[4] = { 0xff, 0xff, 0xff, 0xff }; FlashCommand_SendCommand_OutOnlyInstruction(v, 4, Index); } - } - + } return ret; } int dediprog_set_vpp_voltage(int volt, int Index) -{ +{ int ret; int voltage_selector; CNTRPIPE_RQ rq; @@ -573,6 +572,8 @@ long flash_ReadId(unsigned int read_id_code, unsigned int out_data_size, int Ind // DoRDP() ; // send request + + CNTRPIPE_RQ rq; unsigned char vInstruction[8]; unsigned long rc = 0;