sdbussubmitrequest() 53 don't have data transformer

WXD 0 Reputation points
2023-02-14T12:46:58.87+00:00
When i use sdbussubmitrequest() send cmd 53 to my sdio device, i can look that cmd 53 is sended normally by logic analyzer.But the 4 data line don't have  any data transfer,the r1 53 response is normal. What happend? 

The return status is #define STATUS_IO_TIMEOUT                ((NTSTATUS)0xC00000B5L).

part of code is list below:

//

//----------------------------------------------------------------------------------------------------------

//

	const SDCMD_DESCRIPTOR WriteIoExtendedDesc = { 

							SDCMD_IO_RW_EXTENDED, 

							SDCC_STANDARD, 

							SDTD_WRITE, 

							SDTT_SINGLE_BLOCK, 

							SDRT_5}; 

 

	const SDCMD_DESCRIPTOR ReadIoExtendedDesc = { 

							SDCMD_IO_RW_EXTENDED,  

							SDCC_STANDARD,  

							SDTD_READ,  

							SDTT_SINGLE_BLOCK,  

							SDRT_5}; 									 

 

	psdrp = ExAllocatePool2(POOL_FLAG_NON_PAGED, sizeof(SDBUS_REQUEST_PACKET), '3278'); 

	if(!psdrp)  

	{ 

		RT_TRACE(COMP_IO, DBG_SERIOUS, ("PlatformSdioCmd53ReadWriteMDL(): Allocate sdrp fail!!\n")); 

		return rtstatus; 

	} 

 

	RtlZeroMemory(psdrp, sizeof(SDBUS_REQUEST_PACKET)); 

 

	psdrp->RequestFunction = SDRF_DEVICE_COMMAND; 

	psdrp->Parameters.DeviceCommand.Mdl = pmdl; 

 

	// 

	// Set up the argument and command descriptor. 

	// 

	extendedArgument.u.AsULONG = 0; 

	 

	if (blockMode) 

	{ // Block Mode. 

 

		extendedArgument.u.bits.OpCode  = 0; //Increment address 

		 

		extendedArgument.u.bits.Count =  

			(byteCount/sdiodevice->SdioFuncBlockSize) +  

			((byteCount%sdiodevice->SdioFuncBlockSize?1:0)); 

		 

		psdrp->Parameters.DeviceCommand.Length =  

			(extendedArgument.u.bits.Count)*sdiodevice->SdioFuncBlockSize; 

	} 

	else 

	{ // Byte Count Mode. 

		if( byteCount == sdiodevice->SdioFuncBlockSize) 

			extendedArgument.u.bits.Count = 0; 

		else 

			extendedArgument.u.bits.Count = byteCount; 

		 

		psdrp->Parameters.DeviceCommand.Length = extendedArgument.u.bits.Count; 

	} 

	 

	extendedArgument.u.bits.Function = funcNum; 

	extendedArgument.u.bits.Address = registerIndex;	 

	 

	if (writeToDevice) { 

        extendedArgument.u.bits.WriteToDevice = 1; 

       	psdrp->Parameters.DeviceCommand.CmdDesc  = WriteIoExtendedDesc; 

    }  

	else { 

        psdrp->Parameters.DeviceCommand.CmdDesc  = ReadIoExtendedDesc; 

    } 

 

	DbgPrint("extendedArgument.u.bits.Count = %d ,psdrp->Parameters.DeviceCommand.Length = %d \n",extendedArgument.u.bits.Count,psdrp->Parameters.DeviceCommand.Length); 

 

    if (blockMode) { 

		extendedArgument.u.bits.BlockMode = blockMode; 

       	psdrp->Parameters.DeviceCommand.CmdDesc.TransferType = SDTT_MULTI_BLOCK_NO_CMD12; 

    } 

		 

	psdrp->Parameters.DeviceCommand.Argument = extendedArgument.u.AsULONG;	

Thanks!
Windows for business | Windows Client for IT Pros | User experience | Other
0 comments No comments
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.