Skip to content

Commit

Permalink
dpcmd.c
Browse files Browse the repository at this point in the history
  • Loading branch information
root committed Apr 20, 2023
1 parent d7430ab commit faebb14
Show file tree
Hide file tree
Showing 8 changed files with 263 additions and 362 deletions.
45 changes: 45 additions & 0 deletions ChipInfoDb.dedicfg
Original file line number Diff line number Diff line change
Expand Up @@ -17573,6 +17573,29 @@ ICType="SPI_NOR"



<Chip TypeName="MX77L12850F"
ICType="SPI_NOR"
Class="MX25Lxxx"
UniqueID="0xC27518"
Description="128 Mbit, Serial Flash Memory"
Manufacturer="Macronix"
ManufactureUrl="www.MXIC.com"
Voltage="3.3V"
Clock="85MHz"
Timeout="250"
ManufactureID="0xC2"
JedecDeviceID="0xC27518"
ChipSizeInKByte="16384"
SectorSizeInByte="65536"

PageSizeInByte="256"
MXIC_WPmode="true"
ProgramIOMethod="QPQD_RSWQW"
AddrWidth="3"
IDNumber="3"
RDIDCommand="0x9F"/>


<Chip TypeName="MT25QL01GB"
ICType="SPI_NOR"
Class="N25Qxxx_Large_2Die"
Expand Down Expand Up @@ -25273,6 +25296,28 @@ RDIDCommand="0x9F"/>
RDIDCommand="0x9F"/>


<Chip TypeName="W77Q128JW"
ICType="SPI_NOR"
Class="W25Pxx"
UniqueID="0xEF8A18"
Description="128 Mbit, Low Voltage, Serial Flash Memory With 75MHz SPI Bus Interface"
Manufacturer="Winbond Electronics Corp"
ManufactureUrl="www.winbond.com"
Voltage="1.8V"
Clock="75MHz"
Timeout="250"
JedecDeviceID="0xEF8A18"
ManufactureID="0xEF"
DeviceID="0x17"
ChipSizeInKByte="16384"
SectorSizeInByte="4096"
PageSizeInByte="256"
BlockSizeInByte="65536"
AddrWidth="3"
ProgramIOMethod="SPQD_RQWSW"
IDNumber="3"
RDIDCommand="0x9F"/>

<Chip TypeName="W25M121AW-W25Q128JW"
ICType="SPI_NOR"
Class="W25Pxx"
Expand Down
8 changes: 5 additions & 3 deletions FlashCommand.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,9 @@ 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)
{
unsigned char vInstruction[16];
{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
size_t divider;
Expand Down Expand Up @@ -119,6 +120,7 @@ int FlashCommand_SendCommand_SetupPacketForBulkWrite(struct CAddressRange* AddrR
vInstruction[4] = WriteCom;

if (Is_NewUSBCommand(Index)) {
printf("\nevy Is_NewUSBCommand");
vInstruction[5] = 0;
vInstruction[6] = (AddrRange->start & 0xff);
vInstruction[7] = ((AddrRange->start >> 8) & 0xff);
Expand All @@ -131,7 +133,7 @@ int FlashCommand_SendCommand_SetupPacketForBulkWrite(struct CAddressRange* AddrR
vInstruction[14] = (AddressMode & 0xff);
rq.Value = 0;
rq.Index = 0;
rq.Length = (unsigned long)(16);
rq.Length = (unsigned long)(15);
} else {
rq.Value = (unsigned short)(AddrRange->start & 0xffff); // 16 bits LSB
rq.Index = (unsigned short)((AddrRange->start >> 16) & 0xffff); // 16 bits MSB
Expand Down
2 changes: 1 addition & 1 deletion SerialFlash.c
Original file line number Diff line number Diff line change
Expand Up @@ -1716,7 +1716,7 @@ int SerialFlash_Enable4ByteAddrMode(int bEnable, int Index)
return CN25Qxxx_LargeEnable4ByteAddrMode(bEnable, Index);
else if (strstr(Chip_Info.Class, SUPPORT_SPANSION_S25FLxx_Large) != NULL)
return CS25FLxx_LargeEnable4ByteAddrMode(bEnable, Index);
else
else if(Chip_Info.ChipSizeInByte > 0x1000000)
return Universal_LargeEnable4ByteAddrMode(bEnable, Index);
return SerialFlash_TRUE;
}
Expand Down
106 changes: 78 additions & 28 deletions board.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ volatile bool g_bIsSF700 = false;
volatile bool g_bIsSF600PG2 = false;
extern char g_board_type[8];
extern char g_FPGA_ver[8];
extern char g_FW_ver[8];
extern char g_FW_ver[10];
extern char g_HW_ver[8];
extern int g_firmversion;
extern unsigned int g_IO1Select;
Expand All @@ -22,6 +22,41 @@ extern bool Is_NewUSBCommand(int Index);
// extern int is_SF100nBoardVersionGreaterThan_5_2_0(int Index);
// extern int is_SF600nBoardVersionGreaterThan_6_9_0(int Index);

bool ReadSF700AndSF600PG2SN(unsigned char* Data, int Index)
{
CNTRPIPE_RQ rq;
unsigned char vBuffer[6];

rq.Function = URB_FUNCTION_VENDOR_ENDPOINT;
rq.Direction = VENDOR_DIRECTION_OUT;
rq.Request = 0x71;
rq.Value = 0;
rq.Index = 0;
rq.Length = 6;


vBuffer[0]=0;
vBuffer[1]=0;
vBuffer[2]=0;
vBuffer[3]=2;
vBuffer[4]=0;
vBuffer[5]=0;

//must read twice
if (OutCtrlRequest(&rq, vBuffer, 6, Index) == SerialFlash_FALSE)
return false;

unsigned char vBufferSN[512];
BulkPipeRead(vBufferSN, USB_TIMEOUT, Index);

if (OutCtrlRequest(&rq, vBuffer, 6, Index) == SerialFlash_FALSE)
return false;

BulkPipeRead(vBufferSN, USB_TIMEOUT, Index);

memcpy(Data, vBufferSN, 16);
return true;
}
bool ReadOnBoardFlash(unsigned char* Data, bool ReadUID, int Index)
{
CNTRPIPE_RQ rq;
Expand Down Expand Up @@ -71,13 +106,7 @@ void QueryBoard(int Index)
return;
}

memcpy(g_board_type, &vBuffer[0], 8);

unsigned char ucData;
if((strstr(g_board_type, "SF600PG2") != NULL))
{
printf(" evy UpdateSF600Flash\n");
}
memcpy(g_board_type, &vBuffer[0], 8);
}

unsigned int GetFPGAVersion(int Index)
Expand Down Expand Up @@ -290,7 +319,7 @@ bool LeaveSF600Standalone(bool Enable, int Index)
if (OutCtrlRequest(&rq, &vBuffer, 0, Index) == SerialFlash_FALSE) {
return false;
}

Sleep(100);
return true;
}

Expand Down Expand Up @@ -323,7 +352,19 @@ unsigned int ReadUID(int Index)
unsigned int dwUID = 0;
unsigned char vUID[16];

if ((g_bIsSF600 == true) || (g_bIsSF700 == true) || (g_bIsSF600PG2 == true)) {
if ((g_bIsSF700 == true) || (g_bIsSF600PG2 == true)) {
if (ReadSF700AndSF600PG2SN(vUID, Index) == false)
return false;
//Sleep(200);
//if (ReadSF700AndSF600PG2SN(vUID, Index) == false)
// return false;

dwUID = (unsigned int)vUID[2] << 16 | (unsigned int)vUID[1] << 8 | vUID[0];
return dwUID;

}

if ((g_bIsSF600 == true) ) {
if (ReadOnBoardFlash(vUID, false, Index) == false)
return false;
if (g_bIsSF600 == true)
Expand All @@ -332,7 +373,7 @@ unsigned int ReadUID(int Index)
dwUID = (unsigned int)vUID[2] << 16 | (unsigned int)vUID[1] << 8 | vUID[0];
return dwUID;
}

CNTRPIPE_RQ rq;
unsigned char vBuffer[3];

Expand All @@ -346,7 +387,7 @@ unsigned int ReadUID(int Index)

if (InCtrlRequest(&rq, vBuffer, 3, Index) == SerialFlash_FALSE) {
return false;
}
}

dwUID = (unsigned int)vBuffer[0] << 16 | (unsigned int)vBuffer[1] << 8 | vBuffer[2];
return dwUID;
Expand Down Expand Up @@ -732,33 +773,44 @@ bool GetFirmwareVer(int Index)
{

CNTRPIPE_RQ rq;
unsigned char vBuffer[26];
unsigned char vBuffer[32];
unsigned int BufferSize =32;

if((g_bIsSF600== false) && (g_bIsSF700 == false) && (g_bIsSF600PG2 == false))
BufferSize = 16;

// first control packet
rq.Function = URB_FUNCTION_VENDOR_ENDPOINT;
rq.Direction = VENDOR_DIRECTION_IN;
rq.Request = PROGINFO_REQUEST;
rq.Value = 0;
rq.Index = 0;
rq.Length = 26;
rq.Length = BufferSize;

if (!OutCtrlRequest(&rq, vBuffer, 26, Index))
if (!OutCtrlRequest(&rq, vBuffer, BufferSize, Index))
return false;

if (!Is_usbworking(Index)) {
printf("Do not find SFxx programmer!!\n");
return false;
}

memcpy(g_board_type, &vBuffer[0], 8);
memcpy(g_FW_ver, &vBuffer[10], 7);

memcpy(g_board_type, &vBuffer[0], 8);

if (strstr(g_board_type, "SF600PG2") != NULL)
memcpy(g_HW_ver, &vBuffer[20], 4);
if (strstr(g_board_type, "SF600") != NULL)
memcpy(g_HW_ver, &vBuffer[20], 4);
if (strstr(g_board_type, "SF700") != NULL)
memcpy(g_HW_ver, &vBuffer[21], 4);
{
memcpy(g_FW_ver, &vBuffer[12], 9);
memcpy(g_HW_ver, &vBuffer[25], 5);
}
else
{
memcpy(g_FW_ver, &vBuffer[10], 7);
if (strstr(g_board_type, "SF600") != NULL)
memcpy(g_HW_ver, &vBuffer[20], 4);
if (strstr(g_board_type, "SF700") != NULL)
memcpy(g_HW_ver, &vBuffer[21], 4);
}


return true;
}
Expand Down Expand Up @@ -902,8 +954,7 @@ bool UpdateSF600Flash_FPGA(const char* sFilePath, int Index)
Package[2] = ((fw_info.SecondSize >> 16) & 0xff);
Package[3] = ((fw_info.SecondSize >> 24) & 0xff);

if (!OutCtrlRequest(&rq, Package, 4, Index)) {
printf("Error: 1\n");
if (!OutCtrlRequest(&rq, Package, 4, Index)) {
free(pBuffer);
return false;
}
Expand All @@ -915,8 +966,7 @@ bool UpdateSF600Flash_FPGA(const char* sFilePath, int Index)
rq.Index = (unsigned short)((fw_info.SecondSize >> 16) & 0xffff);
rq.Length = 0;

if (!OutCtrlRequest(&rq, pBuffer, 0, Index)) {
printf("Error: 2\n");
if (!OutCtrlRequest(&rq, pBuffer, 0, Index)) {
free(pBuffer);
return false;
}
Expand Down
Loading

0 comments on commit faebb14

Please sign in to comment.