20#define SDIO_BUS_DEBUG (1)
23#define SDIO_DEBUG_IPRINTF(...) \
25 iprintf("%s:%d", __FUNCTION__, __LINE__); \
26 iprintf(__VA_ARGS__); \
30#define SDIO_DEBUG_IPRINTF(...) ((void)0)
41#define SDIO_SPI_BUS (1)
66extern "C" typedef void (*SdioInterruptService)(void);
79 SdioBus(uint32_t speed, uint32_t connectTimeout, uint32_t responseTimeout);
86 virtual BOOL attachBus(
void) = 0;
89 virtual BOOL acquireBus(
void) = 0;
92 virtual void releaseBus(
void) = 0;
95 virtual void selectCard(
void) = 0;
98 virtual void releaseCard(
void) = 0;
101 virtual BOOL sendCommand(SdioCommand &command) = 0;
104 virtual BOOL receiveResponse(SdioResponse &response, BOOL idle = TRUE) = 0;
107 virtual BOOL sendData(
const puint8_t dataPtr, ssize_t dataLength) = 0;
110 virtual BOOL receiveData(puint8_t dataPtr, ssize_t dataLength) = 0;
113 virtual void idleBus(
void) = 0;
116 virtual BOOL executeExtendedCommand(SdioCommand &command,
117 SdioResponse &response,
120 ssize_t dataLength) = 0;
124 uint32_t getSpeed(
void);
127 uint32_t getConnectTimeout(
void);
130 uint32_t getResponseTimeout(
void);
147 uint32_t __connectTimeout;
150 uint32_t __responseTimeout;
163class SdioBusSpiMode :
public SdioBus
167 SdioBusSpiMode(uint32_t speed,
168 uint32_t connectTimeout,
169 uint32_t responseTimeout,
170 ssize_t idleByteCount,
171 uint16_t idleFillValue,
173 NetDeviceSelectDetail chipSelectDetail);
180 BOOL attachBus(
void);
183 BOOL acquireBus(
void);
186 void releaseBus(
void);
189 void selectCard(
void);
192 void releaseCard(
void);
195 BOOL sendCommand(SdioCommand &command);
198 BOOL receiveResponse(SdioResponse &response, BOOL idleBus = TRUE);
201 BOOL sendData(
const puint8_t dataPtr, ssize_t dataLength);
204 BOOL receiveData(puint8_t dataPtr, ssize_t dataLength);
210 BOOL executeExtendedCommand(SdioCommand &command, SdioResponse &response, BOOL writeData, puint8_t dataPtr, ssize_t dataLength);
218 uint8_t waitForDataReceived(
void);
221 BOOL waitForData(
void);
228 int __chipSelectMask;
231 NetDeviceSelectDetail __chipSelectDetail;
237 ssize_t __idleByteCount;
240 uint16_t __idleFillValue;