28,659 questions
sdbussubmitrequest() 53 don't have data transformer
WXD
0
Reputation points
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
Sign in to answer