Ver Fonte

add:sdhc默认不检查crc16

alienwalker há 4 anos atrás
pai
commit
121e3de262
2 ficheiros alterados com 10 adições e 6 exclusões
  1. 1 0
      bsp/device/include/dev_sdhc_spi.h
  2. 9 6
      bsp/device/src/dev_sdhc_spi.c

+ 1 - 0
bsp/device/include/dev_sdhc_spi.h

@@ -117,6 +117,7 @@ typedef struct
 	uint8_t IsSpiDMAMode;
 	uint8_t SDHCState;
 	uint8_t IsInitDone;
+	uint8_t IsCRCCheck;
 	uint8_t SDHCError;
 	uint8_t SPIError;
 	uint8_t ExternResult[8];

+ 9 - 6
bsp/device/src/dev_sdhc_spi.c

@@ -587,13 +587,16 @@ READ_REST_DATA:
 		SDHC_SpiXfer(Ctrl, pBuf, RemainingLen);
 		memset(Ctrl->TempData, 0xff, 2);
 		SPI_BlockTransfer(Ctrl->SpiID, Ctrl->TempData, Ctrl->TempData, 2);
-		crc16 = CRC16Cal(Ctrl->DataBuf.Data + Ctrl->DataBuf.Pos * __SDHC_BLOCK_LEN__, __SDHC_BLOCK_LEN__, 0, CRC16_CCITT_GEN, 0);
-		crc16_check = BytesGetBe16(Ctrl->TempData);
-		if (crc16 != crc16_check)
+		if (Ctrl->IsCRCCheck)
 		{
-			DBG("crc16 error %04x %04x", crc16, crc16_check);
-			Result = ERROR_NONE;
-			goto SDHC_SPIREADBLOCKDATA_DONE;
+			crc16 = CRC16Cal(Ctrl->DataBuf.Data + Ctrl->DataBuf.Pos * __SDHC_BLOCK_LEN__, __SDHC_BLOCK_LEN__, 0, CRC16_CCITT_GEN, 0);
+			crc16_check = BytesGetBe16(Ctrl->TempData);
+			if (crc16 != crc16_check)
+			{
+				DBG("crc16 error %04x %04x", crc16, crc16_check);
+				Result = ERROR_NONE;
+				goto SDHC_SPIREADBLOCKDATA_DONE;
+			}
 		}
 		Ctrl->DataBuf.Pos++;
 		OpEndTick = GetSysTick() + Ctrl->SDHCReadBlockTo;