fix bugs in multi-blocks read meeting '0xFE' CRCs

This commit is contained in:
WuZheng 2022-12-14 17:35:10 +08:00
parent 5a64507a84
commit 1864f39dd2
1 changed files with 15 additions and 15 deletions

View File

@ -28,7 +28,7 @@ static uint32 SdReady(SpiSdDeviceType spi_sd_dev)
NULL_PARAM_CHECK(spi_sd_dev);
uint8 data = 0xFF;
uint8 read;
uint8 read = 0x00;
uint32 start_time;
struct BusBlockWriteParam write_param;
@ -42,7 +42,7 @@ static uint32 SdReady(SpiSdDeviceType spi_sd_dev)
start_time = 0;
do
{
BusDevWriteData(&spi_sd_dev->spi_dev->haldev, &write_param);
// BusDevWriteData(&spi_sd_dev->spi_dev->haldev, &write_param);
BusDevReadData(&spi_sd_dev->spi_dev->haldev, &read_param);
@ -690,7 +690,7 @@ static uint32 SdHwReadCSD(SpiSdDeviceType spi_sd_dev)
if (0xFE != g_sd_cmd_param.sd_respone_data[1]) {
/*Step2 : SPI write data 0xFF until read 0xFE*/
uint8 data = 0xFF;
uint8 read_spi=0x00;
uint8 read_spi = 0x00;
uint32 start_time;
write_param.buffer = (void *)&data;
@ -702,7 +702,7 @@ static uint32 SdHwReadCSD(SpiSdDeviceType spi_sd_dev)
do
{
BusDevWriteData(&spi_sd_dev->spi_dev->haldev, &write_param);
// BusDevWriteData(&spi_sd_dev->spi_dev->haldev, &write_param);
BusDevReadData(&spi_sd_dev->spi_dev->haldev, &read_param);
SD_TIMEOUT(start_time, 10 * SPI_SD_TIMEOUT_NUM);
}while(0xFE != read_spi);
@ -768,7 +768,7 @@ static uint32 SdReadSingleBlock(SpiSdDeviceType spi_sd_dev, uint32 id, uint8 *re
/*Step2 : SPI read until 0xFE*/
uint8 data = 0xFF;
uint8 read[2];
uint8 read[2]={0};
uint32 start_time;
write_param.buffer = (void *)&data;
@ -837,7 +837,7 @@ static uint32 SdReadMultiBlock(SpiSdDeviceType spi_sd_dev, uint32 id, const uint
/*Step2 : SPI write data 0xFF until read 0xFE*/
uint32 i = 0;
uint8 data = 0xFF;
uint8 read[2];
uint8 read[2] = {0};
uint32 start_time;
for (i = 0 ; i < block_num ; i ++) {
@ -847,7 +847,7 @@ static uint32 SdReadMultiBlock(SpiSdDeviceType spi_sd_dev, uint32 id, const uint
read_param.size = 1;
start_time = 0;
read[0] = 0;
do
{
BusDevReadData(&spi_sd_dev->spi_dev->haldev, &read_param);
@ -859,12 +859,12 @@ static uint32 SdReadMultiBlock(SpiSdDeviceType spi_sd_dev, uint32 id, const uint
read_param.buffer = (void *)((uint8 *)read_buffer + i * spi_sd_dev->sd_param.block_param.block_size);
read_param.size = spi_sd_dev->sd_param.block_param.block_size;
BusDevReadData(&spi_sd_dev->spi_dev->haldev, &read_param);
}
/*Step4 : SPI read 2 bytes CRC*/
read_param.buffer = (void *)read;
read_param.size = 2;
BusDevReadData(&spi_sd_dev->spi_dev->haldev, &read_param);
}
/*Step5 : CMD12 stop read*/
g_sd_cmd_param.sd_cmd_type = SD_CMD_12;
@ -921,7 +921,7 @@ static uint32 SdWriteSingleBlock(SpiSdDeviceType spi_sd_dev, uint32 id, const ui
/*Step2 : SPI write data 0xFE*/
uint8 data = 0xFE;
uint8 read;
uint8 read = 0x00;
uint8 write[2] = {0xFF, 0xFF};
write_param.buffer = (void *)&data;
@ -1034,7 +1034,7 @@ static uint32 SdWriteMultiBlock(SpiSdDeviceType spi_sd_dev, uint32 id, const voi
/*Step3 : SPI write data 0xFC*/
uint32 i;
uint8 data = 0xFC;
uint8 read;
uint8 read = 0x00;
uint8 write[2] = {0xFF, 0xFF};
for (i = 0 ; i < block_num; i ++) {
@ -1057,6 +1057,7 @@ static uint32 SdWriteMultiBlock(SpiSdDeviceType spi_sd_dev, uint32 id, const voi
read_param.size = 1;
start_time = 0;
read = 0xFF;
do
{
BusDevReadData(&spi_sd_dev->spi_dev->haldev, &read_param);
@ -1232,7 +1233,6 @@ uint32 SdRead(void *dev, struct BusBlockReadParam *read_param)
KMutexAbandon(spi_sd_dev->spi_dev->haldev.owner_bus->bus_lock);
return ERROR;
}
/*Step2 : read SD block*/
if (1 == block_num) {
ret = SdReadSingleBlock(spi_sd_dev, id, read_buffer);