@@ -223,6 +223,7 @@ void CRKUsbComm::InitializeCBW(PCBW pCBW, USB_OPERATION_CODE code)
223
223
case WRITE_EFUSE:
224
224
case WRITE_SPI_FLASH:
225
225
case WRITE_NEW_EFUSE:
226
+ case ERASE_LBA:
226
227
pCBW->ucCBWFlags = DIRECTION_OUT;
227
228
pCBW->ucCBWCBLength = 0x0a ;
228
229
break ;
@@ -591,6 +592,41 @@ int CRKUsbComm::RKU_WriteLBA(DWORD dwPos, DWORD dwCount, BYTE* lpBuffer, BYTE by
591
592
592
593
return ERR_SUCCESS;
593
594
}
595
+ int CRKUsbComm::RKU_EraseLBA (DWORD dwPos, DWORD dwCount)
596
+ {
597
+ if ((m_deviceDesc.emUsbType != RKUSB_LOADER) && (m_deviceDesc.emUsbType != RKUSB_MASKROM)) {
598
+ if (m_log) {
599
+ m_log->Record (" Error:RKU_WriteLBA failed,device not support" );
600
+ }
601
+ return ERR_DEVICE_NOT_SUPPORT;
602
+ }
603
+ CBW cbw;
604
+ CSW csw;
605
+ USHORT usCount;
606
+ usCount = dwCount;
607
+
608
+
609
+ InitializeCBW (&cbw, ERASE_LBA);
610
+ cbw.cbwcb .dwAddress = EndianU32_LtoB (dwPos);
611
+ cbw.cbwcb .usLength = EndianU16_LtoB (usCount);
612
+
613
+ if (!RKU_Write ( (BYTE *)&cbw, sizeof (CBW))) {
614
+ return ERR_DEVICE_WRITE_FAILED;
615
+ }
616
+
617
+ if (!RKU_Read ( (BYTE *)&csw, sizeof (CSW))) {
618
+ return ERR_DEVICE_READ_FAILED;
619
+ }
620
+
621
+ if ( !UFI_CHECK_SIGN (cbw, csw) )
622
+ return ERR_CMD_NOTMATCH;
623
+
624
+ if (csw.ucCSWStatus == 1 )
625
+ return ERR_FAILED;
626
+
627
+ return ERR_SUCCESS;
628
+ }
629
+
594
630
int CRKUsbComm::RKU_WriteSector (DWORD dwPos, DWORD dwCount, BYTE *lpBuffer)
595
631
{
596
632
if ((m_deviceDesc.emUsbType != RKUSB_LOADER) && (m_deviceDesc.emUsbType != RKUSB_MASKROM)) {
0 commit comments