1e41f4b71Sopenharmony_ci# SDIO 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci## Overview<a name="section1155271783811"></a> 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ciSecure Digital Input/Output \(SDIO\) is a peripheral interface evolved from the Secure Digital \(SD\) memory card interface. The SDIO interface is compatible with SD memory cards and can be connected to devices that support the SDIO interface. 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ciSDIO is widely used. Currently, many smartphones support SDIO, and many SDIO peripherals are developed for connections to smartphones. Common SDIO peripherals include WLAN, GPS, cameras, and Bluetooth. 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ciThe SDIO bus has two ends, named host and device. All communication starts when the host sends a command. The device can communicate with the host as long as it can parse the command of the host. An SDIO host can connect to multiple devices, as shown in the figure below. 10e41f4b71Sopenharmony_ci- CLK signal: clock signal sent from the host to the device 11e41f4b71Sopenharmony_ci- VDD signal: power signal 12e41f4b71Sopenharmony_ci- VSS signal: ground signal 13e41f4b71Sopenharmony_ci- D0-3 signal: four data lines. The DAT1 signal cable is multiplexed as the interrupt line. In 1-bit mode, DAT0 is used to transmit data. In 4-bit mode, DAT0 to DAT3 are used to transmit data. 14e41f4b71Sopenharmony_ci- CMD signal: used by the host to send commands and the device to respond to commands. 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci**Figure 1** Connections between the host and devices in SDIO 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci 20e41f4b71Sopenharmony_ciThe SDIO interface defines a set of common methods for operating an SDIO device, including opening and closing an SDIO controller, exclusively claiming and releasing the host, enabling and disabling devices, claiming and releasing an SDIO IRQ, reading and writing data based on SDIO, and obtaining and setting common information. 21e41f4b71Sopenharmony_ci 22e41f4b71Sopenharmony_ci## Available APIs<a name="section12601496259"></a> 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci**Table 1** APIs available for the SDIO driver 25e41f4b71Sopenharmony_ci 26e41f4b71Sopenharmony_ci<a name="table1731550155318"></a> 27e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row1625342317507"><th class="cellrowborder" valign="top" width="21.07%" id="mcps1.2.4.1.1"><p id="p1779183435016"><a name="p1779183435016"></a><a name="p1779183435016"></a>Capability</p> 28e41f4b71Sopenharmony_ci</th> 29e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="34.04%" id="mcps1.2.4.1.2"><p id="p1879163417502"><a name="p1879163417502"></a><a name="p1879163417502"></a>Function</p> 30e41f4b71Sopenharmony_ci</th> 31e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="44.89%" id="mcps1.2.4.1.3"><p id="p1379113410506"><a name="p1379113410506"></a><a name="p1379113410506"></a>Description</p> 32e41f4b71Sopenharmony_ci</th> 33e41f4b71Sopenharmony_ci</tr> 34e41f4b71Sopenharmony_ci</thead> 35e41f4b71Sopenharmony_ci<tbody><tr id="row1351945135614"><td class="cellrowborder" rowspan="2" valign="top" width="21.07%" headers="mcps1.2.4.1.1 "><p id="p146755118566"><a name="p146755118566"></a><a name="p146755118566"></a>SDIO device opening/closing</p> 36e41f4b71Sopenharmony_ci</td> 37e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="34.04%" headers="mcps1.2.4.1.2 "><p id="p1151945185614"><a name="p1151945185614"></a><a name="p1151945185614"></a>SdioOpen</p> 38e41f4b71Sopenharmony_ci</td> 39e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="44.89%" headers="mcps1.2.4.1.3 "><p id="p85110451565"><a name="p85110451565"></a><a name="p85110451565"></a>Opens an SDIO controller with a specified bus number.</p> 40e41f4b71Sopenharmony_ci</td> 41e41f4b71Sopenharmony_ci</tr> 42e41f4b71Sopenharmony_ci<tr id="row1062610995616"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p136261793568"><a name="p136261793568"></a><a name="p136261793568"></a>SdioClose</p> 43e41f4b71Sopenharmony_ci</td> 44e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p062614919566"><a name="p062614919566"></a><a name="p062614919566"></a>Closes an SDIO controller.</p> 45e41f4b71Sopenharmony_ci</td> 46e41f4b71Sopenharmony_ci</tr> 47e41f4b71Sopenharmony_ci<tr id="row337105133315"><td class="cellrowborder" rowspan="6" valign="top" width="21.07%" headers="mcps1.2.4.1.1 "><p id="p07631557153319"><a name="p07631557153319"></a><a name="p07631557153319"></a>SDIO reading/writing</p> 48e41f4b71Sopenharmony_ci</td> 49e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="34.04%" headers="mcps1.2.4.1.2 "><p id="p34551320121416"><a name="p34551320121416"></a><a name="p34551320121416"></a>SdioReadBytes</p> 50e41f4b71Sopenharmony_ci</td> 51e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="44.89%" headers="mcps1.2.4.1.3 "><p id="p748062291415"><a name="p748062291415"></a><a name="p748062291415"></a>Incrementally reads a given length of data from a specified SDIO address.</p> 52e41f4b71Sopenharmony_ci</td> 53e41f4b71Sopenharmony_ci</tr> 54e41f4b71Sopenharmony_ci<tr id="row9317134301618"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p10345104001412"><a name="p10345104001412"></a><a name="p10345104001412"></a>SdioWriteBytes</p> 55e41f4b71Sopenharmony_ci</td> 56e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p113452040141418"><a name="p113452040141418"></a><a name="p113452040141418"></a>Incrementally writes a given length of data into a specified SDIO address.</p> 57e41f4b71Sopenharmony_ci</td> 58e41f4b71Sopenharmony_ci</tr> 59e41f4b71Sopenharmony_ci<tr id="row131301734171616"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p713025410166"><a name="p713025410166"></a><a name="p713025410166"></a>SdioReadBytesFromFixedAddr</p> 60e41f4b71Sopenharmony_ci</td> 61e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p14130165418168"><a name="p14130165418168"></a><a name="p14130165418168"></a>Reads a given length of data from a fixed SDIO address.</p> 62e41f4b71Sopenharmony_ci</td> 63e41f4b71Sopenharmony_ci</tr> 64e41f4b71Sopenharmony_ci<tr id="row1434434011147"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1913013546161"><a name="p1913013546161"></a><a name="p1913013546161"></a>SdioWriteBytesToFixedAddr</p> 65e41f4b71Sopenharmony_ci</td> 66e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p111301954131614"><a name="p111301954131614"></a><a name="p111301954131614"></a>Writes a given length of data into a fixed SDIO address.</p> 67e41f4b71Sopenharmony_ci</td> 68e41f4b71Sopenharmony_ci</tr> 69e41f4b71Sopenharmony_ci<tr id="row364393591410"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1851815711620"><a name="p1851815711620"></a><a name="p1851815711620"></a>SdioReadBytesFromFunc0</p> 70e41f4b71Sopenharmony_ci</td> 71e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p751875761611"><a name="p751875761611"></a><a name="p751875761611"></a>Reads a given length of data from the address space of SDIO function 0.</p> 72e41f4b71Sopenharmony_ci</td> 73e41f4b71Sopenharmony_ci</tr> 74e41f4b71Sopenharmony_ci<tr id="row17455333175"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1645519318173"><a name="p1645519318173"></a><a name="p1645519318173"></a>SdioWriteBytesToFunc0</p> 75e41f4b71Sopenharmony_ci</td> 76e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p114552320176"><a name="p114552320176"></a><a name="p114552320176"></a>Writes a given length of data into the address space of SDIO function 0.</p> 77e41f4b71Sopenharmony_ci</td> 78e41f4b71Sopenharmony_ci</tr> 79e41f4b71Sopenharmony_ci<tr id="row34145016535"><td class="cellrowborder" valign="top" width="21.07%" headers="mcps1.2.4.1.1 "><p id="p229610227124"><a name="p229610227124"></a><a name="p229610227124"></a>SDIO block size setting</p> 80e41f4b71Sopenharmony_ci</td> 81e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="34.04%" headers="mcps1.2.4.1.2 "><p id="p74531720181413"><a name="p74531720181413"></a><a name="p74531720181413"></a>SdioSetBlockSize</p> 82e41f4b71Sopenharmony_ci</td> 83e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="44.89%" headers="mcps1.2.4.1.3 "><p id="p247972241411"><a name="p247972241411"></a><a name="p247972241411"></a>Sets the block size.</p> 84e41f4b71Sopenharmony_ci</td> 85e41f4b71Sopenharmony_ci</tr> 86e41f4b71Sopenharmony_ci<tr id="row778816813238"><td class="cellrowborder" rowspan="2" valign="top" width="21.07%" headers="mcps1.2.4.1.1 "><p id="p1578958142317"><a name="p1578958142317"></a><a name="p1578958142317"></a>SDIO common information retrieval/setting</p> 87e41f4b71Sopenharmony_ci</td> 88e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="34.04%" headers="mcps1.2.4.1.2 "><p id="p378918842311"><a name="p378918842311"></a><a name="p378918842311"></a>SdioGetCommonInfo</p> 89e41f4b71Sopenharmony_ci</td> 90e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="44.89%" headers="mcps1.2.4.1.3 "><p id="p1078919892313"><a name="p1078919892313"></a><a name="p1078919892313"></a>Obtains common information.</p> 91e41f4b71Sopenharmony_ci</td> 92e41f4b71Sopenharmony_ci</tr> 93e41f4b71Sopenharmony_ci<tr id="row5667102342417"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p2668623182411"><a name="p2668623182411"></a><a name="p2668623182411"></a>SdioSetCommonInfo</p> 94e41f4b71Sopenharmony_ci</td> 95e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p14668192362419"><a name="p14668192362419"></a><a name="p14668192362419"></a>Sets common information.</p> 96e41f4b71Sopenharmony_ci</td> 97e41f4b71Sopenharmony_ci</tr> 98e41f4b71Sopenharmony_ci<tr id="row1165101111256"><td class="cellrowborder" valign="top" width="21.07%" headers="mcps1.2.4.1.1 "><p id="p8166161192511"><a name="p8166161192511"></a><a name="p8166161192511"></a>SDIO data flushing</p> 99e41f4b71Sopenharmony_ci</td> 100e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="34.04%" headers="mcps1.2.4.1.2 "><p id="p121662112256"><a name="p121662112256"></a><a name="p121662112256"></a>SdioFlushData</p> 101e41f4b71Sopenharmony_ci</td> 102e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="44.89%" headers="mcps1.2.4.1.3 "><p id="p171661711112519"><a name="p171661711112519"></a><a name="p171661711112519"></a>Flushes data.</p> 103e41f4b71Sopenharmony_ci</td> 104e41f4b71Sopenharmony_ci</tr> 105e41f4b71Sopenharmony_ci<tr id="row17388101522515"><td class="cellrowborder" rowspan="2" valign="top" width="21.07%" headers="mcps1.2.4.1.1 "><p id="p53101413268"><a name="p53101413268"></a><a name="p53101413268"></a>SDIO host exclusively claiming or releasing</p> 106e41f4b71Sopenharmony_ci</td> 107e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="34.04%" headers="mcps1.2.4.1.2 "><p id="p1638881562520"><a name="p1638881562520"></a><a name="p1638881562520"></a>SdioClaimHost</p> 108e41f4b71Sopenharmony_ci</td> 109e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="44.89%" headers="mcps1.2.4.1.3 "><p id="p143881715152517"><a name="p143881715152517"></a><a name="p143881715152517"></a>Claims a host exclusively.</p> 110e41f4b71Sopenharmony_ci</td> 111e41f4b71Sopenharmony_ci</tr> 112e41f4b71Sopenharmony_ci<tr id="row5352175517251"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p93537557259"><a name="p93537557259"></a><a name="p93537557259"></a>SdioReleaseHost</p> 113e41f4b71Sopenharmony_ci</td> 114e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1235355511254"><a name="p1235355511254"></a><a name="p1235355511254"></a>Releases the exclusively claimed host.</p> 115e41f4b71Sopenharmony_ci</td> 116e41f4b71Sopenharmony_ci</tr> 117e41f4b71Sopenharmony_ci<tr id="row8759125415269"><td class="cellrowborder" rowspan="2" valign="top" width="21.07%" headers="mcps1.2.4.1.1 "><p id="p272143815359"><a name="p272143815359"></a><a name="p272143815359"></a>SDIO device enablement</p> 118e41f4b71Sopenharmony_ci</td> 119e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="34.04%" headers="mcps1.2.4.1.2 "><p id="p6760195452615"><a name="p6760195452615"></a><a name="p6760195452615"></a>SdioEnableFunc</p> 120e41f4b71Sopenharmony_ci</td> 121e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="44.89%" headers="mcps1.2.4.1.3 "><p id="p9760135417263"><a name="p9760135417263"></a><a name="p9760135417263"></a>Enables an SDIO device.</p> 122e41f4b71Sopenharmony_ci</td> 123e41f4b71Sopenharmony_ci</tr> 124e41f4b71Sopenharmony_ci<tr id="row1166105762620"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p5662175782616"><a name="p5662175782616"></a><a name="p5662175782616"></a>SdioDisableFunc</p> 125e41f4b71Sopenharmony_ci</td> 126e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p3662135722618"><a name="p3662135722618"></a><a name="p3662135722618"></a>Disables an SDIO device.</p> 127e41f4b71Sopenharmony_ci</td> 128e41f4b71Sopenharmony_ci</tr> 129e41f4b71Sopenharmony_ci<tr id="row12332331113517"><td class="cellrowborder" rowspan="2" valign="top" width="21.07%" headers="mcps1.2.4.1.1 "><p id="p188181849203614"><a name="p188181849203614"></a><a name="p188181849203614"></a>SDIO IRQ claiming/releasing</p> 130e41f4b71Sopenharmony_ci</td> 131e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="34.04%" headers="mcps1.2.4.1.2 "><p id="p933383133517"><a name="p933383133517"></a><a name="p933383133517"></a>SdioClaimIrq</p> 132e41f4b71Sopenharmony_ci</td> 133e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="44.89%" headers="mcps1.2.4.1.3 "><p id="p20333431203510"><a name="p20333431203510"></a><a name="p20333431203510"></a>Claims an SDIO IRQ.</p> 134e41f4b71Sopenharmony_ci</td> 135e41f4b71Sopenharmony_ci</tr> 136e41f4b71Sopenharmony_ci<tr id="row173103413357"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p2073123413515"><a name="p2073123413515"></a><a name="p2073123413515"></a>SdioReleaseIrq</p> 137e41f4b71Sopenharmony_ci</td> 138e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1773634153518"><a name="p1773634153518"></a><a name="p1773634153518"></a>Releases an SDIO IRQ.</p> 139e41f4b71Sopenharmony_ci</td> 140e41f4b71Sopenharmony_ci</tr> 141e41f4b71Sopenharmony_ci</tbody> 142e41f4b71Sopenharmony_ci</table> 143e41f4b71Sopenharmony_ci 144e41f4b71Sopenharmony_ci> **NOTE:**<br> 145e41f4b71Sopenharmony_ci>All functions provided in this document can be called only in kernel mode. 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ci## Usage Guidelines<a name="section1878939192515"></a> 148e41f4b71Sopenharmony_ci 149e41f4b71Sopenharmony_ci### How to Use<a name="section1490685512255"></a> 150e41f4b71Sopenharmony_ci 151e41f4b71Sopenharmony_ciThe figure below illustrates how to use the APIs. 152e41f4b71Sopenharmony_ci 153e41f4b71Sopenharmony_ci**Figure 2** Using SDIO driver APIs 154e41f4b71Sopenharmony_ci 155e41f4b71Sopenharmony_ci 156e41f4b71Sopenharmony_ci 157e41f4b71Sopenharmony_ci 158e41f4b71Sopenharmony_ci 159e41f4b71Sopenharmony_ci 160e41f4b71Sopenharmony_ci### Opening an SDIO Controller<a name="section10782428132616"></a> 161e41f4b71Sopenharmony_ci 162e41f4b71Sopenharmony_ciBefore performing SDIO communication, obtain the device handle of an SDIO controller by calling **SdioOpen**. This function returns the device handle of the SDIO controller with a specified bus number. 163e41f4b71Sopenharmony_ci 164e41f4b71Sopenharmony_ciDevHandle SdioOpen\(int16\_t mmcBusNum, struct SdioFunctionConfig \*config\); 165e41f4b71Sopenharmony_ci 166e41f4b71Sopenharmony_ci**Table 2** Parameters and return values of SdioOpen 167e41f4b71Sopenharmony_ci 168e41f4b71Sopenharmony_ci<a name="table1036944152712"></a> 169e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row4370114192717"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p737074112720"><a name="p737074112720"></a><a name="p737074112720"></a>Parameter</p> 170e41f4b71Sopenharmony_ci</th> 171e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p15370154102716"><a name="p15370154102716"></a><a name="p15370154102716"></a>Description</p> 172e41f4b71Sopenharmony_ci</th> 173e41f4b71Sopenharmony_ci</tr> 174e41f4b71Sopenharmony_ci</thead> 175e41f4b71Sopenharmony_ci<tbody><tr id="row3370184112716"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p337094142715"><a name="p337094142715"></a><a name="p337094142715"></a>mmcBusNum</p> 176e41f4b71Sopenharmony_ci</td> 177e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p8370154162718"><a name="p8370154162718"></a><a name="p8370154162718"></a>Bus number.</p> 178e41f4b71Sopenharmony_ci</td> 179e41f4b71Sopenharmony_ci</tr> 180e41f4b71Sopenharmony_ci<tr id="row10370746272"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p23706402717"><a name="p23706402717"></a><a name="p23706402717"></a>config</p> 181e41f4b71Sopenharmony_ci</td> 182e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p153701492715"><a name="p153701492715"></a><a name="p153701492715"></a>SDIO functionality configurations.</p> 183e41f4b71Sopenharmony_ci</td> 184e41f4b71Sopenharmony_ci</tr> 185e41f4b71Sopenharmony_ci<tr id="row173703417274"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p183701349276"><a name="p183701349276"></a><a name="p183701349276"></a><strong id="b11478182120013"><a name="b11478182120013"></a><a name="b11478182120013"></a>Return Value</strong></p> 186e41f4b71Sopenharmony_ci</td> 187e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p203701647275"><a name="p203701647275"></a><a name="p203701647275"></a><strong id="b277217221307"><a name="b277217221307"></a><a name="b277217221307"></a>Description</strong></p> 188e41f4b71Sopenharmony_ci</td> 189e41f4b71Sopenharmony_ci</tr> 190e41f4b71Sopenharmony_ci<tr id="row837016462716"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p937184172716"><a name="p937184172716"></a><a name="p937184172716"></a>NULL</p> 191e41f4b71Sopenharmony_ci</td> 192e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1837184182720"><a name="p1837184182720"></a><a name="p1837184182720"></a>Failed to obtain the device handle of an SDIO controller.</p> 193e41f4b71Sopenharmony_ci</td> 194e41f4b71Sopenharmony_ci</tr> 195e41f4b71Sopenharmony_ci<tr id="row737116492712"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p537174122715"><a name="p537174122715"></a><a name="p537174122715"></a>Device handle</p> 196e41f4b71Sopenharmony_ci</td> 197e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p113715411274"><a name="p113715411274"></a><a name="p113715411274"></a>Device handle of an SDIO controller.</p> 198e41f4b71Sopenharmony_ci</td> 199e41f4b71Sopenharmony_ci</tr> 200e41f4b71Sopenharmony_ci</tbody> 201e41f4b71Sopenharmony_ci</table> 202e41f4b71Sopenharmony_ci 203e41f4b71Sopenharmony_ciThe following example shows how to open an SDIO controller. 204e41f4b71Sopenharmony_ci 205e41f4b71Sopenharmony_ci``` 206e41f4b71Sopenharmony_ciDevHandle handle = NULL; 207e41f4b71Sopenharmony_cistruct SdioFunctionConfig config; 208e41f4b71Sopenharmony_ciconfig.funcNr = 1; 209e41f4b71Sopenharmony_ciconfig.vendorId = 0x123; 210e41f4b71Sopenharmony_ciconfig.deviceId = 0x456; 211e41f4b71Sopenharmony_ci/* Open an SDIO controller whose bus number is 1. */ 212e41f4b71Sopenharmony_cihandle = SdioOpen(1, &config); 213e41f4b71Sopenharmony_ciif (handle == NULL) { 214e41f4b71Sopenharmony_ci HDF_LOGE("SdioOpen: failed!\n"); 215e41f4b71Sopenharmony_ci} 216e41f4b71Sopenharmony_ci``` 217e41f4b71Sopenharmony_ci 218e41f4b71Sopenharmony_ci### Claiming a Host Exclusively<a name="section11263172312715"></a> 219e41f4b71Sopenharmony_ci 220e41f4b71Sopenharmony_ciAfter obtaining the device handle of an SDIO controller, exclusively claim the host before performing subsequent operations on the SDIO device. 221e41f4b71Sopenharmony_ci 222e41f4b71Sopenharmony_civoid SdioClaimHost\(DevHandle handle\); 223e41f4b71Sopenharmony_ci 224e41f4b71Sopenharmony_ci**Table 3** Parameter description of SdioClaimHost 225e41f4b71Sopenharmony_ci 226e41f4b71Sopenharmony_ci<a name="table192822447271"></a> 227e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row192829443279"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p1128284452713"><a name="p1128284452713"></a><a name="p1128284452713"></a>Parameter</p> 228e41f4b71Sopenharmony_ci</th> 229e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p1528264418272"><a name="p1528264418272"></a><a name="p1528264418272"></a>Description</p> 230e41f4b71Sopenharmony_ci</th> 231e41f4b71Sopenharmony_ci</tr> 232e41f4b71Sopenharmony_ci</thead> 233e41f4b71Sopenharmony_ci<tbody><tr id="row328264472711"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p15282124420274"><a name="p15282124420274"></a><a name="p15282124420274"></a>handle</p> 234e41f4b71Sopenharmony_ci</td> 235e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p0282164432719"><a name="p0282164432719"></a><a name="p0282164432719"></a>Device handle of an SDIO controller.</p> 236e41f4b71Sopenharmony_ci</td> 237e41f4b71Sopenharmony_ci</tr> 238e41f4b71Sopenharmony_ci</tbody> 239e41f4b71Sopenharmony_ci</table> 240e41f4b71Sopenharmony_ci 241e41f4b71Sopenharmony_ciThe following example shows how to exclusively claim a host. 242e41f4b71Sopenharmony_ci 243e41f4b71Sopenharmony_ci``` 244e41f4b71Sopenharmony_ciSdioClaimHost(handle); /* Claim a host exclusively. */ 245e41f4b71Sopenharmony_ci``` 246e41f4b71Sopenharmony_ci 247e41f4b71Sopenharmony_ci### Enabling the SDIO Device<a name="section17861486271"></a> 248e41f4b71Sopenharmony_ci 249e41f4b71Sopenharmony_ciBefore accessing a register, enable the SDIO device. 250e41f4b71Sopenharmony_ci 251e41f4b71Sopenharmony_ciint32\_t SdioEnableFunc\(DevHandle handle\); 252e41f4b71Sopenharmony_ci 253e41f4b71Sopenharmony_ci**Table 4** Parameters and return values of SdioEnableFunc 254e41f4b71Sopenharmony_ci 255e41f4b71Sopenharmony_ci<a name="table144881047485"></a> 256e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row8487204184815"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p1648611415486"><a name="p1648611415486"></a><a name="p1648611415486"></a>Parameter</p> 257e41f4b71Sopenharmony_ci</th> 258e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p19487134124820"><a name="p19487134124820"></a><a name="p19487134124820"></a>Description</p> 259e41f4b71Sopenharmony_ci</th> 260e41f4b71Sopenharmony_ci</tr> 261e41f4b71Sopenharmony_ci</thead> 262e41f4b71Sopenharmony_ci<tbody><tr id="row16487044480"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p74878414810"><a name="p74878414810"></a><a name="p74878414810"></a>handle</p> 263e41f4b71Sopenharmony_ci</td> 264e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p17487184194819"><a name="p17487184194819"></a><a name="p17487184194819"></a>Device handle of an SDIO controller.</p> 265e41f4b71Sopenharmony_ci</td> 266e41f4b71Sopenharmony_ci</tr> 267e41f4b71Sopenharmony_ci<tr id="row13487748487"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p24873424811"><a name="p24873424811"></a><a name="p24873424811"></a><strong id="b048017216013"><a name="b048017216013"></a><a name="b048017216013"></a>Return Value</strong></p> 268e41f4b71Sopenharmony_ci</td> 269e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p4487174134813"><a name="p4487174134813"></a><a name="p4487174134813"></a><strong id="b87731622105"><a name="b87731622105"></a><a name="b87731622105"></a>Description</strong></p> 270e41f4b71Sopenharmony_ci</td> 271e41f4b71Sopenharmony_ci</tr> 272e41f4b71Sopenharmony_ci<tr id="row1748814494812"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p84878410488"><a name="p84878410488"></a><a name="p84878410488"></a>0</p> 273e41f4b71Sopenharmony_ci</td> 274e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p948715410483"><a name="p948715410483"></a><a name="p948715410483"></a>The SDIO device is enabled.</p> 275e41f4b71Sopenharmony_ci</td> 276e41f4b71Sopenharmony_ci</tr> 277e41f4b71Sopenharmony_ci<tr id="row54881416482"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p24881645489"><a name="p24881645489"></a><a name="p24881645489"></a>Negative value</p> 278e41f4b71Sopenharmony_ci</td> 279e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p10488247487"><a name="p10488247487"></a><a name="p10488247487"></a>Failed to enable the SDIO device.</p> 280e41f4b71Sopenharmony_ci</td> 281e41f4b71Sopenharmony_ci</tr> 282e41f4b71Sopenharmony_ci</tbody> 283e41f4b71Sopenharmony_ci</table> 284e41f4b71Sopenharmony_ci 285e41f4b71Sopenharmony_ciThe following example shows how to enable the SDIO device. 286e41f4b71Sopenharmony_ci 287e41f4b71Sopenharmony_ci``` 288e41f4b71Sopenharmony_ciint32_t ret; 289e41f4b71Sopenharmony_ci/* Enable the SDIO device. */ 290e41f4b71Sopenharmony_ciret = SdioEnableFunc(handle); 291e41f4b71Sopenharmony_ciif (ret != 0) { 292e41f4b71Sopenharmony_ci HDF_LOGE("SdioEnableFunc: failed, ret %d\n", ret); 293e41f4b71Sopenharmony_ci} 294e41f4b71Sopenharmony_ci``` 295e41f4b71Sopenharmony_ci 296e41f4b71Sopenharmony_ci### Claiming an SDIO IRQ<a name="section521213262286"></a> 297e41f4b71Sopenharmony_ci 298e41f4b71Sopenharmony_ciBefore SDIO communication, claim an SDIO IRQ. 299e41f4b71Sopenharmony_ci 300e41f4b71Sopenharmony_ciint32\_t SdioClaimIrq\(DevHandle handle, SdioIrqHandler \*handler\); 301e41f4b71Sopenharmony_ci 302e41f4b71Sopenharmony_ci**Table 5** Parameters and return values of SdioClaimIrq 303e41f4b71Sopenharmony_ci 304e41f4b71Sopenharmony_ci<a name="table1149014114815"></a> 305e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row114891042488"><th class="cellrowborder" valign="top" width="49.980000000000004%" id="mcps1.2.3.1.1"><p id="p1348864164811"><a name="p1348864164811"></a><a name="p1348864164811"></a>Parameter</p> 306e41f4b71Sopenharmony_ci</th> 307e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50.019999999999996%" id="mcps1.2.3.1.2"><p id="p14885410486"><a name="p14885410486"></a><a name="p14885410486"></a>Description</p> 308e41f4b71Sopenharmony_ci</th> 309e41f4b71Sopenharmony_ci</tr> 310e41f4b71Sopenharmony_ci</thead> 311e41f4b71Sopenharmony_ci<tbody><tr id="row048911404820"><td class="cellrowborder" valign="top" width="49.980000000000004%" headers="mcps1.2.3.1.1 "><p id="p248974174814"><a name="p248974174814"></a><a name="p248974174814"></a>handle</p> 312e41f4b71Sopenharmony_ci</td> 313e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.019999999999996%" headers="mcps1.2.3.1.2 "><p id="p1848915494813"><a name="p1848915494813"></a><a name="p1848915494813"></a>Device handle of an SDIO controller.</p> 314e41f4b71Sopenharmony_ci</td> 315e41f4b71Sopenharmony_ci</tr> 316e41f4b71Sopenharmony_ci<tr id="row204894454813"><td class="cellrowborder" valign="top" width="49.980000000000004%" headers="mcps1.2.3.1.1 "><p id="p17489944488"><a name="p17489944488"></a><a name="p17489944488"></a>handler</p> 317e41f4b71Sopenharmony_ci</td> 318e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.019999999999996%" headers="mcps1.2.3.1.2 "><p id="p1548984174813"><a name="p1548984174813"></a><a name="p1548984174813"></a>Pointer to the SDIO IRQ function.</p> 319e41f4b71Sopenharmony_ci</td> 320e41f4b71Sopenharmony_ci</tr> 321e41f4b71Sopenharmony_ci<tr id="row44898413488"><td class="cellrowborder" valign="top" width="49.980000000000004%" headers="mcps1.2.3.1.1 "><p id="p1548934124815"><a name="p1548934124815"></a><a name="p1548934124815"></a><strong id="b548120216017"><a name="b548120216017"></a><a name="b548120216017"></a>Return Value</strong></p> 322e41f4b71Sopenharmony_ci</td> 323e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.019999999999996%" headers="mcps1.2.3.1.2 "><p id="p54891444485"><a name="p54891444485"></a><a name="p54891444485"></a><strong id="b877422211013"><a name="b877422211013"></a><a name="b877422211013"></a>Description</strong></p> 324e41f4b71Sopenharmony_ci</td> 325e41f4b71Sopenharmony_ci</tr> 326e41f4b71Sopenharmony_ci<tr id="row748994144811"><td class="cellrowborder" valign="top" width="49.980000000000004%" headers="mcps1.2.3.1.1 "><p id="p448918415484"><a name="p448918415484"></a><a name="p448918415484"></a>0</p> 327e41f4b71Sopenharmony_ci</td> 328e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.019999999999996%" headers="mcps1.2.3.1.2 "><p id="p174892412489"><a name="p174892412489"></a><a name="p174892412489"></a>The SDIO IRQ is claimed.</p> 329e41f4b71Sopenharmony_ci</td> 330e41f4b71Sopenharmony_ci</tr> 331e41f4b71Sopenharmony_ci<tr id="row448914420489"><td class="cellrowborder" valign="top" width="49.980000000000004%" headers="mcps1.2.3.1.1 "><p id="p248912464817"><a name="p248912464817"></a><a name="p248912464817"></a>Negative value</p> 332e41f4b71Sopenharmony_ci</td> 333e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.019999999999996%" headers="mcps1.2.3.1.2 "><p id="p34891645485"><a name="p34891645485"></a><a name="p34891645485"></a>Failed to claim an SDIO IRQ.</p> 334e41f4b71Sopenharmony_ci</td> 335e41f4b71Sopenharmony_ci</tr> 336e41f4b71Sopenharmony_ci</tbody> 337e41f4b71Sopenharmony_ci</table> 338e41f4b71Sopenharmony_ci 339e41f4b71Sopenharmony_ciThe following example shows how to claim an SDIO IRQ. 340e41f4b71Sopenharmony_ci 341e41f4b71Sopenharmony_ci``` 342e41f4b71Sopenharmony_ci/* Implement the SDIO IRQ function based on the application. */ 343e41f4b71Sopenharmony_cistatic void SdioIrqFunc(void *data) 344e41f4b71Sopenharmony_ci{ 345e41f4b71Sopenharmony_ci if (data == NULL) { 346e41f4b71Sopenharmony_ci HDF_LOGE("SdioIrqFunc: data is NULL.\n"); 347e41f4b71Sopenharmony_ci return; 348e41f4b71Sopenharmony_ci } 349e41f4b71Sopenharmony_ci /* You need to add specific implementations. */ 350e41f4b71Sopenharmony_ci} 351e41f4b71Sopenharmony_ci 352e41f4b71Sopenharmony_ciint32_t ret; 353e41f4b71Sopenharmony_ci/* Claim an SDIO IRQ. */ 354e41f4b71Sopenharmony_ciret = SdioClaimIrq(handle, SdioIrqFunc); 355e41f4b71Sopenharmony_ciif (ret != 0) { 356e41f4b71Sopenharmony_ci HDF_LOGE("SdioClaimIrq: failed, ret %d\n", ret); 357e41f4b71Sopenharmony_ci} 358e41f4b71Sopenharmony_ci``` 359e41f4b71Sopenharmony_ci 360e41f4b71Sopenharmony_ci### Performing SDIO Communication<a name="section85661522153420"></a> 361e41f4b71Sopenharmony_ci 362e41f4b71Sopenharmony_ci- Incrementally write a given length of data into the SDIO device. 363e41f4b71Sopenharmony_ci 364e41f4b71Sopenharmony_ciThe corresponding function is as follows: 365e41f4b71Sopenharmony_ci 366e41f4b71Sopenharmony_ciint32\_t SdioWriteBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); 367e41f4b71Sopenharmony_ci 368e41f4b71Sopenharmony_ci**Table 6** Parameters and return values of SdioWriteBytes 369e41f4b71Sopenharmony_ci 370e41f4b71Sopenharmony_ci<a name="table6887174174111"></a> 371e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row10887144111419"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p181381751164113"><a name="p181381751164113"></a><a name="p181381751164113"></a>Parameter</p> 372e41f4b71Sopenharmony_ci</th> 373e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p19138115184116"><a name="p19138115184116"></a><a name="p19138115184116"></a>Description</p> 374e41f4b71Sopenharmony_ci</th> 375e41f4b71Sopenharmony_ci</tr> 376e41f4b71Sopenharmony_ci</thead> 377e41f4b71Sopenharmony_ci<tbody><tr id="row4887341174114"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p1534612017427"><a name="p1534612017427"></a><a name="p1534612017427"></a>handle</p> 378e41f4b71Sopenharmony_ci</td> 379e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p8179347434"><a name="p8179347434"></a><a name="p8179347434"></a>Device handle of an SDIO controller.</p> 380e41f4b71Sopenharmony_ci</td> 381e41f4b71Sopenharmony_ci</tr> 382e41f4b71Sopenharmony_ci<tr id="row18881041144120"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p10888154118412"><a name="p10888154118412"></a><a name="p10888154118412"></a>data</p> 383e41f4b71Sopenharmony_ci</td> 384e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1288854115413"><a name="p1288854115413"></a><a name="p1288854115413"></a>Pointer to the data to write.</p> 385e41f4b71Sopenharmony_ci</td> 386e41f4b71Sopenharmony_ci</tr> 387e41f4b71Sopenharmony_ci<tr id="row191054911432"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p91054994311"><a name="p91054994311"></a><a name="p91054994311"></a>addr</p> 388e41f4b71Sopenharmony_ci</td> 389e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p111024915432"><a name="p111024915432"></a><a name="p111024915432"></a>Start address where the data is written into.</p> 390e41f4b71Sopenharmony_ci</td> 391e41f4b71Sopenharmony_ci</tr> 392e41f4b71Sopenharmony_ci<tr id="row14888144124119"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p1588814413412"><a name="p1588814413412"></a><a name="p1588814413412"></a>size</p> 393e41f4b71Sopenharmony_ci</td> 394e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1288813411413"><a name="p1288813411413"></a><a name="p1288813411413"></a>Length of the data to write.</p> 395e41f4b71Sopenharmony_ci</td> 396e41f4b71Sopenharmony_ci</tr> 397e41f4b71Sopenharmony_ci<tr id="row18247654163519"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p486155173610"><a name="p486155173610"></a><a name="p486155173610"></a><strong id="b84827210012"><a name="b84827210012"></a><a name="b84827210012"></a>Return Value</strong></p> 398e41f4b71Sopenharmony_ci</td> 399e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1686155113620"><a name="p1686155113620"></a><a name="p1686155113620"></a><strong id="b16775152213010"><a name="b16775152213010"></a><a name="b16775152213010"></a>Description</strong></p> 400e41f4b71Sopenharmony_ci</td> 401e41f4b71Sopenharmony_ci</tr> 402e41f4b71Sopenharmony_ci<tr id="row10574165663512"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p912141012364"><a name="p912141012364"></a><a name="p912141012364"></a>0</p> 403e41f4b71Sopenharmony_ci</td> 404e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p51219107363"><a name="p51219107363"></a><a name="p51219107363"></a>Data is written into the SDIO device.</p> 405e41f4b71Sopenharmony_ci</td> 406e41f4b71Sopenharmony_ci</tr> 407e41f4b71Sopenharmony_ci<tr id="row1490635883519"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p10121510133617"><a name="p10121510133617"></a><a name="p10121510133617"></a>Negative value</p> 408e41f4b71Sopenharmony_ci</td> 409e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p131212106365"><a name="p131212106365"></a><a name="p131212106365"></a>Failed to write data into the SDIO device.</p> 410e41f4b71Sopenharmony_ci</td> 411e41f4b71Sopenharmony_ci</tr> 412e41f4b71Sopenharmony_ci</tbody> 413e41f4b71Sopenharmony_ci</table> 414e41f4b71Sopenharmony_ci 415e41f4b71Sopenharmony_ciThe following example shows how to incrementally write a given length of data into the SDIO device. 416e41f4b71Sopenharmony_ci 417e41f4b71Sopenharmony_ci``` 418e41f4b71Sopenharmony_ciint32_t ret; 419e41f4b71Sopenharmony_ciuint8_t wbuff[] = {1,2,3,4,5}; 420e41f4b71Sopenharmony_ciuint32_t addr = 0x100 + 0x09; 421e41f4b71Sopenharmony_ci/* Incrementally write 5-byte data into the start address 0x109 of the SDIO device. */ 422e41f4b71Sopenharmony_ciret = SdioWriteBytes(handle, wbuff, addr, sizeof(wbuff) / sizeof(wbuff[0])); 423e41f4b71Sopenharmony_ciif (ret != 0) { 424e41f4b71Sopenharmony_ci HDF_LOGE("SdioWriteBytes: failed, ret %d\n", ret); 425e41f4b71Sopenharmony_ci} 426e41f4b71Sopenharmony_ci``` 427e41f4b71Sopenharmony_ci 428e41f4b71Sopenharmony_ci- Incrementally read a given length of data from the SDIO device. 429e41f4b71Sopenharmony_ci 430e41f4b71Sopenharmony_ciThe corresponding function is as follows: 431e41f4b71Sopenharmony_ci 432e41f4b71Sopenharmony_ciint32\_t SdioReadBytes\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); 433e41f4b71Sopenharmony_ci 434e41f4b71Sopenharmony_ci**Table 7** Parameters and return values of SdioReadBytes 435e41f4b71Sopenharmony_ci 436e41f4b71Sopenharmony_ci<a name="table5783755152110"></a> 437e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row19783355162116"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p635754142212"><a name="p635754142212"></a><a name="p635754142212"></a>Parameter</p> 438e41f4b71Sopenharmony_ci</th> 439e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p1035774182215"><a name="p1035774182215"></a><a name="p1035774182215"></a>Description</p> 440e41f4b71Sopenharmony_ci</th> 441e41f4b71Sopenharmony_ci</tr> 442e41f4b71Sopenharmony_ci</thead> 443e41f4b71Sopenharmony_ci<tbody><tr id="row137831055192118"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p14783155192114"><a name="p14783155192114"></a><a name="p14783155192114"></a>handle</p> 444e41f4b71Sopenharmony_ci</td> 445e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p9676437202218"><a name="p9676437202218"></a><a name="p9676437202218"></a>Device handle of an SDIO controller.</p> 446e41f4b71Sopenharmony_ci</td> 447e41f4b71Sopenharmony_ci</tr> 448e41f4b71Sopenharmony_ci<tr id="row4784155102111"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p1978455510217"><a name="p1978455510217"></a><a name="p1978455510217"></a>data</p> 449e41f4b71Sopenharmony_ci</td> 450e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p767683714223"><a name="p767683714223"></a><a name="p767683714223"></a>Pointer to the data to read.</p> 451e41f4b71Sopenharmony_ci</td> 452e41f4b71Sopenharmony_ci</tr> 453e41f4b71Sopenharmony_ci<tr id="row63651118499"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p73669113496"><a name="p73669113496"></a><a name="p73669113496"></a>addr</p> 454e41f4b71Sopenharmony_ci</td> 455e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p53661144916"><a name="p53661144916"></a><a name="p53661144916"></a>Start address where the data is read from.</p> 456e41f4b71Sopenharmony_ci</td> 457e41f4b71Sopenharmony_ci</tr> 458e41f4b71Sopenharmony_ci<tr id="row7784145510218"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p1078413554219"><a name="p1078413554219"></a><a name="p1078413554219"></a>size</p> 459e41f4b71Sopenharmony_ci</td> 460e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p14676163782210"><a name="p14676163782210"></a><a name="p14676163782210"></a>Length of the data to read.</p> 461e41f4b71Sopenharmony_ci</td> 462e41f4b71Sopenharmony_ci</tr> 463e41f4b71Sopenharmony_ci<tr id="row964182643610"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p7833639163612"><a name="p7833639163612"></a><a name="p7833639163612"></a><strong id="b84831021108"><a name="b84831021108"></a><a name="b84831021108"></a>Return Value</strong></p> 464e41f4b71Sopenharmony_ci</td> 465e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p3833939113619"><a name="p3833939113619"></a><a name="p3833939113619"></a><strong id="b17775192216016"><a name="b17775192216016"></a><a name="b17775192216016"></a>Description</strong></p> 466e41f4b71Sopenharmony_ci</td> 467e41f4b71Sopenharmony_ci</tr> 468e41f4b71Sopenharmony_ci<tr id="row199479312363"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p567424413611"><a name="p567424413611"></a><a name="p567424413611"></a>0</p> 469e41f4b71Sopenharmony_ci</td> 470e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p166741544113615"><a name="p166741544113615"></a><a name="p166741544113615"></a>Data is read from the SDIO device.</p> 471e41f4b71Sopenharmony_ci</td> 472e41f4b71Sopenharmony_ci</tr> 473e41f4b71Sopenharmony_ci<tr id="row5166203418361"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p1167416448361"><a name="p1167416448361"></a><a name="p1167416448361"></a>Negative value</p> 474e41f4b71Sopenharmony_ci</td> 475e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p9674114410364"><a name="p9674114410364"></a><a name="p9674114410364"></a>Failed to read data from the SDIO device.</p> 476e41f4b71Sopenharmony_ci</td> 477e41f4b71Sopenharmony_ci</tr> 478e41f4b71Sopenharmony_ci</tbody> 479e41f4b71Sopenharmony_ci</table> 480e41f4b71Sopenharmony_ci 481e41f4b71Sopenharmony_ciThe following example shows how to incrementally read a given length of data from the SDIO device. 482e41f4b71Sopenharmony_ci 483e41f4b71Sopenharmony_ci``` 484e41f4b71Sopenharmony_ciint32_t ret; 485e41f4b71Sopenharmony_ciuint8_t rbuff[5] = {0}; 486e41f4b71Sopenharmony_ciuint32_t addr = 0x100 + 0x09; 487e41f4b71Sopenharmony_ci/* Incrementally read 5-byte data from the start address 0x109 of the SDIO device. */ 488e41f4b71Sopenharmony_ciret = SdioReadBytes(handle, rbuff, addr, 5); 489e41f4b71Sopenharmony_ciif (ret != 0) { 490e41f4b71Sopenharmony_ci HDF_LOGE("SdioReadBytes: failed, ret %d\n", ret); 491e41f4b71Sopenharmony_ci} 492e41f4b71Sopenharmony_ci``` 493e41f4b71Sopenharmony_ci 494e41f4b71Sopenharmony_ci- Write a given length of data into the fixed address of an SDIO device. 495e41f4b71Sopenharmony_ci 496e41f4b71Sopenharmony_ci The corresponding function is as follows: 497e41f4b71Sopenharmony_ci 498e41f4b71Sopenharmony_ci int32\_t SdioWriteBytesToFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t scatterLen\); 499e41f4b71Sopenharmony_ci 500e41f4b71Sopenharmony_ci **Table 8** Parameters and return values of SdioWriteBytesToFixedAddr 501e41f4b71Sopenharmony_ci 502e41f4b71Sopenharmony_ci <a name="table1982918113010"></a> 503e41f4b71Sopenharmony_ci <table><thead align="left"><tr id="row1582911114010"><th class="cellrowborder" valign="top" width="48.43%" id="mcps1.2.3.1.1"><p id="p28301411903"><a name="p28301411903"></a><a name="p28301411903"></a>Parameter</p> 504e41f4b71Sopenharmony_ci </th> 505e41f4b71Sopenharmony_ci <th class="cellrowborder" valign="top" width="51.57000000000001%" id="mcps1.2.3.1.2"><p id="p1883019111018"><a name="p1883019111018"></a><a name="p1883019111018"></a>Description</p> 506e41f4b71Sopenharmony_ci </th> 507e41f4b71Sopenharmony_ci </tr> 508e41f4b71Sopenharmony_ci </thead> 509e41f4b71Sopenharmony_ci <tbody><tr id="row10830141111014"><td class="cellrowborder" valign="top" width="48.43%" headers="mcps1.2.3.1.1 "><p id="p470818551018"><a name="p470818551018"></a><a name="p470818551018"></a>handle</p> 510e41f4b71Sopenharmony_ci </td> 511e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.57000000000001%" headers="mcps1.2.3.1.2 "><p id="p18578510518"><a name="p18578510518"></a><a name="p18578510518"></a>Device handle of an SDIO controller.</p> 512e41f4b71Sopenharmony_ci </td> 513e41f4b71Sopenharmony_ci </tr> 514e41f4b71Sopenharmony_ci <tr id="row48303111304"><td class="cellrowborder" valign="top" width="48.43%" headers="mcps1.2.3.1.1 "><p id="p127081955502"><a name="p127081955502"></a><a name="p127081955502"></a>data</p> 515e41f4b71Sopenharmony_ci </td> 516e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.57000000000001%" headers="mcps1.2.3.1.2 "><p id="p1857841013110"><a name="p1857841013110"></a><a name="p1857841013110"></a>Pointer to the data to write.</p> 517e41f4b71Sopenharmony_ci </td> 518e41f4b71Sopenharmony_ci </tr> 519e41f4b71Sopenharmony_ci <tr id="row9830111119019"><td class="cellrowborder" valign="top" width="48.43%" headers="mcps1.2.3.1.1 "><p id="p187085555011"><a name="p187085555011"></a><a name="p187085555011"></a>addr</p> 520e41f4b71Sopenharmony_ci </td> 521e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.57000000000001%" headers="mcps1.2.3.1.2 "><p id="p257831016115"><a name="p257831016115"></a><a name="p257831016115"></a>Fixed address where the data is written into.</p> 522e41f4b71Sopenharmony_ci </td> 523e41f4b71Sopenharmony_ci </tr> 524e41f4b71Sopenharmony_ci <tr id="row683091120012"><td class="cellrowborder" valign="top" width="48.43%" headers="mcps1.2.3.1.1 "><p id="p370819555013"><a name="p370819555013"></a><a name="p370819555013"></a>size</p> 525e41f4b71Sopenharmony_ci </td> 526e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.57000000000001%" headers="mcps1.2.3.1.2 "><p id="p7578181015113"><a name="p7578181015113"></a><a name="p7578181015113"></a>Length of the data to write.</p> 527e41f4b71Sopenharmony_ci </td> 528e41f4b71Sopenharmony_ci </tr> 529e41f4b71Sopenharmony_ci <tr id="row58301911309"><td class="cellrowborder" valign="top" width="48.43%" headers="mcps1.2.3.1.1 "><p id="p570810551107"><a name="p570810551107"></a><a name="p570810551107"></a>scatterLen</p> 530e41f4b71Sopenharmony_ci </td> 531e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.57000000000001%" headers="mcps1.2.3.1.2 "><p id="p17579910915"><a name="p17579910915"></a><a name="p17579910915"></a>Length of the scatter list. If the value is not <strong id="b107381713254"><a name="b107381713254"></a><a name="b107381713254"></a>0</strong>, the data is of the scatter list type.</p> 532e41f4b71Sopenharmony_ci </td> 533e41f4b71Sopenharmony_ci </tr> 534e41f4b71Sopenharmony_ci <tr id="row18215162810212"><td class="cellrowborder" valign="top" width="48.43%" headers="mcps1.2.3.1.1 "><p id="p1521319452211"><a name="p1521319452211"></a><a name="p1521319452211"></a><strong id="b648472113017"><a name="b648472113017"></a><a name="b648472113017"></a>Return Value</strong></p> 535e41f4b71Sopenharmony_ci </td> 536e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.57000000000001%" headers="mcps1.2.3.1.2 "><p id="p162138457217"><a name="p162138457217"></a><a name="p162138457217"></a><strong id="b1277682210016"><a name="b1277682210016"></a><a name="b1277682210016"></a>Description</strong></p> 537e41f4b71Sopenharmony_ci </td> 538e41f4b71Sopenharmony_ci </tr> 539e41f4b71Sopenharmony_ci <tr id="row2197123118210"><td class="cellrowborder" valign="top" width="48.43%" headers="mcps1.2.3.1.1 "><p id="p1921413451212"><a name="p1921413451212"></a><a name="p1921413451212"></a>0</p> 540e41f4b71Sopenharmony_ci </td> 541e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.57000000000001%" headers="mcps1.2.3.1.2 "><p id="p32146451624"><a name="p32146451624"></a><a name="p32146451624"></a>Data is written into the SDIO device.</p> 542e41f4b71Sopenharmony_ci </td> 543e41f4b71Sopenharmony_ci </tr> 544e41f4b71Sopenharmony_ci <tr id="row18629103314218"><td class="cellrowborder" valign="top" width="48.43%" headers="mcps1.2.3.1.1 "><p id="p132141245622"><a name="p132141245622"></a><a name="p132141245622"></a>Negative value</p> 545e41f4b71Sopenharmony_ci </td> 546e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.57000000000001%" headers="mcps1.2.3.1.2 "><p id="p17214345328"><a name="p17214345328"></a><a name="p17214345328"></a>Failed to write data into the SDIO device.</p> 547e41f4b71Sopenharmony_ci </td> 548e41f4b71Sopenharmony_ci </tr> 549e41f4b71Sopenharmony_ci </tbody> 550e41f4b71Sopenharmony_ci </table> 551e41f4b71Sopenharmony_ci 552e41f4b71Sopenharmony_ci The following example shows how to write a given length of data into the fixed address of an SDIO device. 553e41f4b71Sopenharmony_ci 554e41f4b71Sopenharmony_ci ``` 555e41f4b71Sopenharmony_ci int32_t ret; 556e41f4b71Sopenharmony_ci uint8_t wbuff[] = {1, 2, 3, 4, 5}; 557e41f4b71Sopenharmony_ci uint32_t addr = 0x100 + 0x09; 558e41f4b71Sopenharmony_ci /* Write 5-byte data into the fixed address 0x109 of the SDIO device. */ 559e41f4b71Sopenharmony_ci ret = SdioWriteBytesToFixedAddr(handle, wbuff, addr, sizeof(wbuff) / sizeof(wbuff[0]), 0); 560e41f4b71Sopenharmony_ci if (ret != 0) { 561e41f4b71Sopenharmony_ci HDF_LOGE("SdioWriteBytesToFixedAddr: failed, ret %d\n", ret); 562e41f4b71Sopenharmony_ci } 563e41f4b71Sopenharmony_ci ``` 564e41f4b71Sopenharmony_ci 565e41f4b71Sopenharmony_ci- Read a given length of data from the fixed address of an SDIO device. 566e41f4b71Sopenharmony_ci 567e41f4b71Sopenharmony_ci The corresponding function is as follows: 568e41f4b71Sopenharmony_ci 569e41f4b71Sopenharmony_ci int32\_t SdioReadBytesFromFixedAddr\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size, uint32\_t scatterLen\); 570e41f4b71Sopenharmony_ci 571e41f4b71Sopenharmony_ci **Table 9** Parameters and return values of SdioReadBytesFromFixedAddr 572e41f4b71Sopenharmony_ci 573e41f4b71Sopenharmony_ci <a name="table2724132220115"></a> 574e41f4b71Sopenharmony_ci <table><thead align="left"><tr id="row8724142214115"><th class="cellrowborder" valign="top" width="48.699999999999996%" id="mcps1.2.3.1.1"><p id="p16752055131112"><a name="p16752055131112"></a><a name="p16752055131112"></a>Parameter</p> 575e41f4b71Sopenharmony_ci </th> 576e41f4b71Sopenharmony_ci <th class="cellrowborder" valign="top" width="51.300000000000004%" id="mcps1.2.3.1.2"><p id="p914434191218"><a name="p914434191218"></a><a name="p914434191218"></a>Description</p> 577e41f4b71Sopenharmony_ci </th> 578e41f4b71Sopenharmony_ci </tr> 579e41f4b71Sopenharmony_ci </thead> 580e41f4b71Sopenharmony_ci <tbody><tr id="row1372462214119"><td class="cellrowborder" valign="top" width="48.699999999999996%" headers="mcps1.2.3.1.1 "><p id="p2752175516113"><a name="p2752175516113"></a><a name="p2752175516113"></a>handle</p> 581e41f4b71Sopenharmony_ci </td> 582e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.300000000000004%" headers="mcps1.2.3.1.2 "><p id="p1353155020125"><a name="p1353155020125"></a><a name="p1353155020125"></a>Device handle of an SDIO controller.</p> 583e41f4b71Sopenharmony_ci </td> 584e41f4b71Sopenharmony_ci </tr> 585e41f4b71Sopenharmony_ci <tr id="row197244220117"><td class="cellrowborder" valign="top" width="48.699999999999996%" headers="mcps1.2.3.1.1 "><p id="p12752165581117"><a name="p12752165581117"></a><a name="p12752165581117"></a>data</p> 586e41f4b71Sopenharmony_ci </td> 587e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.300000000000004%" headers="mcps1.2.3.1.2 "><p id="p9540508121"><a name="p9540508121"></a><a name="p9540508121"></a>Pointer to the data to read.</p> 588e41f4b71Sopenharmony_ci </td> 589e41f4b71Sopenharmony_ci </tr> 590e41f4b71Sopenharmony_ci <tr id="row172519228116"><td class="cellrowborder" valign="top" width="48.699999999999996%" headers="mcps1.2.3.1.1 "><p id="p1675315521120"><a name="p1675315521120"></a><a name="p1675315521120"></a>addr</p> 591e41f4b71Sopenharmony_ci </td> 592e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.300000000000004%" headers="mcps1.2.3.1.2 "><p id="p05415501125"><a name="p05415501125"></a><a name="p05415501125"></a>Start address where the data is read from.</p> 593e41f4b71Sopenharmony_ci </td> 594e41f4b71Sopenharmony_ci </tr> 595e41f4b71Sopenharmony_ci <tr id="row137251922131117"><td class="cellrowborder" valign="top" width="48.699999999999996%" headers="mcps1.2.3.1.1 "><p id="p47531355111111"><a name="p47531355111111"></a><a name="p47531355111111"></a>size</p> 596e41f4b71Sopenharmony_ci </td> 597e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.300000000000004%" headers="mcps1.2.3.1.2 "><p id="p1954165031214"><a name="p1954165031214"></a><a name="p1954165031214"></a>Length of the data to read.</p> 598e41f4b71Sopenharmony_ci </td> 599e41f4b71Sopenharmony_ci </tr> 600e41f4b71Sopenharmony_ci <tr id="row972552281111"><td class="cellrowborder" valign="top" width="48.699999999999996%" headers="mcps1.2.3.1.1 "><p id="p2753755161114"><a name="p2753755161114"></a><a name="p2753755161114"></a>scatterLen</p> 601e41f4b71Sopenharmony_ci </td> 602e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.300000000000004%" headers="mcps1.2.3.1.2 "><p id="p3541350111218"><a name="p3541350111218"></a><a name="p3541350111218"></a>Length of the scatter list. If the value is not <strong id="b498517146511"><a name="b498517146511"></a><a name="b498517146511"></a>0</strong>, the data is of the scatter list type.</p> 603e41f4b71Sopenharmony_ci </td> 604e41f4b71Sopenharmony_ci </tr> 605e41f4b71Sopenharmony_ci <tr id="row15725162210117"><td class="cellrowborder" valign="top" width="48.699999999999996%" headers="mcps1.2.3.1.1 "><p id="p681073451314"><a name="p681073451314"></a><a name="p681073451314"></a><strong id="b144852215014"><a name="b144852215014"></a><a name="b144852215014"></a>Return Value</strong></p> 606e41f4b71Sopenharmony_ci </td> 607e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.300000000000004%" headers="mcps1.2.3.1.2 "><p id="p17810134121316"><a name="p17810134121316"></a><a name="p17810134121316"></a><strong id="b127776221003"><a name="b127776221003"></a><a name="b127776221003"></a>Description</strong></p> 608e41f4b71Sopenharmony_ci </td> 609e41f4b71Sopenharmony_ci </tr> 610e41f4b71Sopenharmony_ci <tr id="row1772511227119"><td class="cellrowborder" valign="top" width="48.699999999999996%" headers="mcps1.2.3.1.1 "><p id="p78105346133"><a name="p78105346133"></a><a name="p78105346133"></a>0</p> 611e41f4b71Sopenharmony_ci </td> 612e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.300000000000004%" headers="mcps1.2.3.1.2 "><p id="p18810173411312"><a name="p18810173411312"></a><a name="p18810173411312"></a>Data is read from the SDIO device.</p> 613e41f4b71Sopenharmony_ci </td> 614e41f4b71Sopenharmony_ci </tr> 615e41f4b71Sopenharmony_ci <tr id="row191829161138"><td class="cellrowborder" valign="top" width="48.699999999999996%" headers="mcps1.2.3.1.1 "><p id="p1581012340131"><a name="p1581012340131"></a><a name="p1581012340131"></a>Negative value</p> 616e41f4b71Sopenharmony_ci </td> 617e41f4b71Sopenharmony_ci <td class="cellrowborder" valign="top" width="51.300000000000004%" headers="mcps1.2.3.1.2 "><p id="p28101834161317"><a name="p28101834161317"></a><a name="p28101834161317"></a>Failed to read data from the SDIO device.</p> 618e41f4b71Sopenharmony_ci </td> 619e41f4b71Sopenharmony_ci </tr> 620e41f4b71Sopenharmony_ci </tbody> 621e41f4b71Sopenharmony_ci </table> 622e41f4b71Sopenharmony_ci 623e41f4b71Sopenharmony_ci The following example shows how to read a given length of data from the fixed address of an SDIO device. 624e41f4b71Sopenharmony_ci 625e41f4b71Sopenharmony_ci ``` 626e41f4b71Sopenharmony_ci int32_t ret; 627e41f4b71Sopenharmony_ci uint8_t rbuff[5] = {0}; 628e41f4b71Sopenharmony_ci uint32_t addr = 0x100 + 0x09; 629e41f4b71Sopenharmony_ci /* Read 5-byte data from the fixed address 0x109 of the SDIO device. */ 630e41f4b71Sopenharmony_ci ret = SdioReadBytesFromFixedAddr(handle, rbuff, addr, 5, 0); 631e41f4b71Sopenharmony_ci if (ret != 0) { 632e41f4b71Sopenharmony_ci HDF_LOGE("SdioReadBytesFromFixedAddr: failed, ret %d\n", ret); 633e41f4b71Sopenharmony_ci } 634e41f4b71Sopenharmony_ci ``` 635e41f4b71Sopenharmony_ci 636e41f4b71Sopenharmony_ci 637e41f4b71Sopenharmony_ci- Writes a given length of data into the address space of SDIO function 0. 638e41f4b71Sopenharmony_ci 639e41f4b71Sopenharmony_ciCurrently, only 1-byte data can be written. The corresponding function is as follows: 640e41f4b71Sopenharmony_ci 641e41f4b71Sopenharmony_ciint32\_t SdioWriteBytesToFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); 642e41f4b71Sopenharmony_ci 643e41f4b71Sopenharmony_ci**Table 10** Parameters and return values of SdioWriteBytesToFunc0 644e41f4b71Sopenharmony_ci 645e41f4b71Sopenharmony_ci<a name="table5339151811112"></a> 646e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row2033991881120"><th class="cellrowborder" valign="top" width="49.94%" id="mcps1.2.3.1.1"><p id="p1116916499117"><a name="p1116916499117"></a><a name="p1116916499117"></a>Parameter</p> 647e41f4b71Sopenharmony_ci</th> 648e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50.06%" id="mcps1.2.3.1.2"><p id="p13169174971115"><a name="p13169174971115"></a><a name="p13169174971115"></a>Description</p> 649e41f4b71Sopenharmony_ci</th> 650e41f4b71Sopenharmony_ci</tr> 651e41f4b71Sopenharmony_ci</thead> 652e41f4b71Sopenharmony_ci<tbody><tr id="row9339171871118"><td class="cellrowborder" valign="top" width="49.94%" headers="mcps1.2.3.1.1 "><p id="p16169194914117"><a name="p16169194914117"></a><a name="p16169194914117"></a>handle</p> 653e41f4b71Sopenharmony_ci</td> 654e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.06%" headers="mcps1.2.3.1.2 "><p id="p10169114921110"><a name="p10169114921110"></a><a name="p10169114921110"></a>Device handle of an SDIO controller.</p> 655e41f4b71Sopenharmony_ci</td> 656e41f4b71Sopenharmony_ci</tr> 657e41f4b71Sopenharmony_ci<tr id="row93401118171116"><td class="cellrowborder" valign="top" width="49.94%" headers="mcps1.2.3.1.1 "><p id="p216919491118"><a name="p216919491118"></a><a name="p216919491118"></a>data</p> 658e41f4b71Sopenharmony_ci</td> 659e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.06%" headers="mcps1.2.3.1.2 "><p id="p5169449121117"><a name="p5169449121117"></a><a name="p5169449121117"></a>Pointer to the data to write.</p> 660e41f4b71Sopenharmony_ci</td> 661e41f4b71Sopenharmony_ci</tr> 662e41f4b71Sopenharmony_ci<tr id="row534019182114"><td class="cellrowborder" valign="top" width="49.94%" headers="mcps1.2.3.1.1 "><p id="p2016934941114"><a name="p2016934941114"></a><a name="p2016934941114"></a>addr</p> 663e41f4b71Sopenharmony_ci</td> 664e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.06%" headers="mcps1.2.3.1.2 "><p id="p8169649101112"><a name="p8169649101112"></a><a name="p8169649101112"></a>Start address where the data is written into.</p> 665e41f4b71Sopenharmony_ci</td> 666e41f4b71Sopenharmony_ci</tr> 667e41f4b71Sopenharmony_ci<tr id="row334011871113"><td class="cellrowborder" valign="top" width="49.94%" headers="mcps1.2.3.1.1 "><p id="p6169194913117"><a name="p6169194913117"></a><a name="p6169194913117"></a>size</p> 668e41f4b71Sopenharmony_ci</td> 669e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.06%" headers="mcps1.2.3.1.2 "><p id="p71691449141119"><a name="p71691449141119"></a><a name="p71691449141119"></a>Length of the data to write.</p> 670e41f4b71Sopenharmony_ci</td> 671e41f4b71Sopenharmony_ci</tr> 672e41f4b71Sopenharmony_ci<tr id="row123407185111"><td class="cellrowborder" valign="top" width="49.94%" headers="mcps1.2.3.1.1 "><p id="p294173071617"><a name="p294173071617"></a><a name="p294173071617"></a><strong id="b848612215010"><a name="b848612215010"></a><a name="b848612215010"></a>Return Value</strong></p> 673e41f4b71Sopenharmony_ci</td> 674e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.06%" headers="mcps1.2.3.1.2 "><p id="p39421830111616"><a name="p39421830111616"></a><a name="p39421830111616"></a><strong id="b27786221308"><a name="b27786221308"></a><a name="b27786221308"></a>Description</strong></p> 675e41f4b71Sopenharmony_ci</td> 676e41f4b71Sopenharmony_ci</tr> 677e41f4b71Sopenharmony_ci<tr id="row8950101811164"><td class="cellrowborder" valign="top" width="49.94%" headers="mcps1.2.3.1.1 "><p id="p9942730181613"><a name="p9942730181613"></a><a name="p9942730181613"></a>0</p> 678e41f4b71Sopenharmony_ci</td> 679e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.06%" headers="mcps1.2.3.1.2 "><p id="p89421130141617"><a name="p89421130141617"></a><a name="p89421130141617"></a>Data is written into the SDIO device.</p> 680e41f4b71Sopenharmony_ci</td> 681e41f4b71Sopenharmony_ci</tr> 682e41f4b71Sopenharmony_ci<tr id="row42485216168"><td class="cellrowborder" valign="top" width="49.94%" headers="mcps1.2.3.1.1 "><p id="p1194223012167"><a name="p1194223012167"></a><a name="p1194223012167"></a>Negative value</p> 683e41f4b71Sopenharmony_ci</td> 684e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50.06%" headers="mcps1.2.3.1.2 "><p id="p19942630121617"><a name="p19942630121617"></a><a name="p19942630121617"></a>Failed to write data into the SDIO device.</p> 685e41f4b71Sopenharmony_ci</td> 686e41f4b71Sopenharmony_ci</tr> 687e41f4b71Sopenharmony_ci</tbody> 688e41f4b71Sopenharmony_ci</table> 689e41f4b71Sopenharmony_ci 690e41f4b71Sopenharmony_ciThe following example shows how to write a given length of data into the address space of SDIO function 0. 691e41f4b71Sopenharmony_ci 692e41f4b71Sopenharmony_ci``` 693e41f4b71Sopenharmony_ciint32_t ret; 694e41f4b71Sopenharmony_ciuint8_t wbuff = 1; 695e41f4b71Sopenharmony_ci/* Write 1-byte data into the address 0x2 of SDIO function 0. */ 696e41f4b71Sopenharmony_ciret = SdioWriteBytesToFunc0(handle, &wbuff, 0x2, 1); 697e41f4b71Sopenharmony_ciif (ret != 0) { 698e41f4b71Sopenharmony_ci HDF_LOGE("SdioWriteBytesToFunc0: failed, ret %d\n", ret); 699e41f4b71Sopenharmony_ci} 700e41f4b71Sopenharmony_ci``` 701e41f4b71Sopenharmony_ci 702e41f4b71Sopenharmony_ci- Reads a given length of data from the address space of SDIO function 0. 703e41f4b71Sopenharmony_ci 704e41f4b71Sopenharmony_ciCurrently, only 1-byte data can be read. The corresponding function is as follows: 705e41f4b71Sopenharmony_ci 706e41f4b71Sopenharmony_ciint32\_t SdioReadBytesFromFunc0\(DevHandle handle, uint8\_t \*data, uint32\_t addr, uint32\_t size\); 707e41f4b71Sopenharmony_ci 708e41f4b71Sopenharmony_ci**Table 11** Parameters and return values of SdioReadBytesFromFunc0 709e41f4b71Sopenharmony_ci 710e41f4b71Sopenharmony_ci<a name="table1071931161814"></a> 711e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row771918171819"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p71291418171813"><a name="p71291418171813"></a><a name="p71291418171813"></a>Parameter</p> 712e41f4b71Sopenharmony_ci</th> 713e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p51291818101818"><a name="p51291818101818"></a><a name="p51291818101818"></a>Description</p> 714e41f4b71Sopenharmony_ci</th> 715e41f4b71Sopenharmony_ci</tr> 716e41f4b71Sopenharmony_ci</thead> 717e41f4b71Sopenharmony_ci<tbody><tr id="row9720113186"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p121294185189"><a name="p121294185189"></a><a name="p121294185189"></a>handle</p> 718e41f4b71Sopenharmony_ci</td> 719e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p20129141815184"><a name="p20129141815184"></a><a name="p20129141815184"></a>Device handle of an SDIO controller.</p> 720e41f4b71Sopenharmony_ci</td> 721e41f4b71Sopenharmony_ci</tr> 722e41f4b71Sopenharmony_ci<tr id="row672017114185"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p171291186185"><a name="p171291186185"></a><a name="p171291186185"></a>data</p> 723e41f4b71Sopenharmony_ci</td> 724e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p8129118171820"><a name="p8129118171820"></a><a name="p8129118171820"></a>Pointer to the data to read.</p> 725e41f4b71Sopenharmony_ci</td> 726e41f4b71Sopenharmony_ci</tr> 727e41f4b71Sopenharmony_ci<tr id="row5720910188"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p8129121816184"><a name="p8129121816184"></a><a name="p8129121816184"></a>addr</p> 728e41f4b71Sopenharmony_ci</td> 729e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p21296189182"><a name="p21296189182"></a><a name="p21296189182"></a>Start address where the data is read from.</p> 730e41f4b71Sopenharmony_ci</td> 731e41f4b71Sopenharmony_ci</tr> 732e41f4b71Sopenharmony_ci<tr id="row172020115189"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p18129418191816"><a name="p18129418191816"></a><a name="p18129418191816"></a>size</p> 733e41f4b71Sopenharmony_ci</td> 734e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p612921851820"><a name="p612921851820"></a><a name="p612921851820"></a>Length of the data to read.</p> 735e41f4b71Sopenharmony_ci</td> 736e41f4b71Sopenharmony_ci</tr> 737e41f4b71Sopenharmony_ci<tr id="row167202113189"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p1813001881810"><a name="p1813001881810"></a><a name="p1813001881810"></a><strong id="b164871218012"><a name="b164871218012"></a><a name="b164871218012"></a>Return Value</strong></p> 738e41f4b71Sopenharmony_ci</td> 739e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1313081817184"><a name="p1313081817184"></a><a name="p1313081817184"></a><strong id="b17795221202"><a name="b17795221202"></a><a name="b17795221202"></a>Description</strong></p> 740e41f4b71Sopenharmony_ci</td> 741e41f4b71Sopenharmony_ci</tr> 742e41f4b71Sopenharmony_ci<tr id="row17720151101818"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p131307185182"><a name="p131307185182"></a><a name="p131307185182"></a>0</p> 743e41f4b71Sopenharmony_ci</td> 744e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p113019187182"><a name="p113019187182"></a><a name="p113019187182"></a>Data is read from the SDIO device.</p> 745e41f4b71Sopenharmony_ci</td> 746e41f4b71Sopenharmony_ci</tr> 747e41f4b71Sopenharmony_ci<tr id="row1972019118189"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p18130151815185"><a name="p18130151815185"></a><a name="p18130151815185"></a>Negative value</p> 748e41f4b71Sopenharmony_ci</td> 749e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1013001861815"><a name="p1013001861815"></a><a name="p1013001861815"></a>Failed to read data from the SDIO device.</p> 750e41f4b71Sopenharmony_ci</td> 751e41f4b71Sopenharmony_ci</tr> 752e41f4b71Sopenharmony_ci</tbody> 753e41f4b71Sopenharmony_ci</table> 754e41f4b71Sopenharmony_ci 755e41f4b71Sopenharmony_ciThe following example shows how to read a given length of data from the address space of SDIO function 0. 756e41f4b71Sopenharmony_ci 757e41f4b71Sopenharmony_ci``` 758e41f4b71Sopenharmony_ciint32_t ret; 759e41f4b71Sopenharmony_ciuint8_t rbuff; 760e41f4b71Sopenharmony_ci/* Read 1-byte data from the address 0x2 of SDIO function 0. */ 761e41f4b71Sopenharmony_ciret = SdioReadBytesFromFunc0(handle, &rbuff, 0x2, 1); 762e41f4b71Sopenharmony_ciif (ret != 0) { 763e41f4b71Sopenharmony_ci HDF_LOGE("SdioReadBytesFromFunc0: failed, ret %d\n", ret); 764e41f4b71Sopenharmony_ci} 765e41f4b71Sopenharmony_ci``` 766e41f4b71Sopenharmony_ci 767e41f4b71Sopenharmony_ci### Releasing the SDIO IRQ<a name="section1683449352"></a> 768e41f4b71Sopenharmony_ci 769e41f4b71Sopenharmony_ciAfter the SDIO communication, release the SDIO IRQ. 770e41f4b71Sopenharmony_ci 771e41f4b71Sopenharmony_ciint32\_t SdioReleaseIrq\(DevHandle handle\); 772e41f4b71Sopenharmony_ci 773e41f4b71Sopenharmony_ci**Table 12** Parameters and return values of SdioReleaseIrq 774e41f4b71Sopenharmony_ci 775e41f4b71Sopenharmony_ci<a name="table165006412481"></a> 776e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row15499849482"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p1549964114814"><a name="p1549964114814"></a><a name="p1549964114814"></a>Parameter</p> 777e41f4b71Sopenharmony_ci</th> 778e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p749915484816"><a name="p749915484816"></a><a name="p749915484816"></a>Description</p> 779e41f4b71Sopenharmony_ci</th> 780e41f4b71Sopenharmony_ci</tr> 781e41f4b71Sopenharmony_ci</thead> 782e41f4b71Sopenharmony_ci<tbody><tr id="row1499194104813"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p9499743481"><a name="p9499743481"></a><a name="p9499743481"></a>handle</p> 783e41f4b71Sopenharmony_ci</td> 784e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p184999434815"><a name="p184999434815"></a><a name="p184999434815"></a>Device handle of an SDIO controller.</p> 785e41f4b71Sopenharmony_ci</td> 786e41f4b71Sopenharmony_ci</tr> 787e41f4b71Sopenharmony_ci<tr id="row3499442485"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p649918414812"><a name="p649918414812"></a><a name="p649918414812"></a><strong id="b54881821905"><a name="b54881821905"></a><a name="b54881821905"></a>Return Value</strong></p> 788e41f4b71Sopenharmony_ci</td> 789e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p164991242486"><a name="p164991242486"></a><a name="p164991242486"></a><strong id="b1078062218018"><a name="b1078062218018"></a><a name="b1078062218018"></a>Description</strong></p> 790e41f4b71Sopenharmony_ci</td> 791e41f4b71Sopenharmony_ci</tr> 792e41f4b71Sopenharmony_ci<tr id="row1349919494810"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p24994484820"><a name="p24994484820"></a><a name="p24994484820"></a>0</p> 793e41f4b71Sopenharmony_ci</td> 794e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1649920414482"><a name="p1649920414482"></a><a name="p1649920414482"></a>The SDIO IRQ is released.</p> 795e41f4b71Sopenharmony_ci</td> 796e41f4b71Sopenharmony_ci</tr> 797e41f4b71Sopenharmony_ci<tr id="row17500204154810"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p194990415489"><a name="p194990415489"></a><a name="p194990415489"></a>Negative value</p> 798e41f4b71Sopenharmony_ci</td> 799e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p74997419484"><a name="p74997419484"></a><a name="p74997419484"></a>Failed to release the SDIO IRQ.</p> 800e41f4b71Sopenharmony_ci</td> 801e41f4b71Sopenharmony_ci</tr> 802e41f4b71Sopenharmony_ci</tbody> 803e41f4b71Sopenharmony_ci</table> 804e41f4b71Sopenharmony_ci 805e41f4b71Sopenharmony_ciThe following example shows how to release the SDIO IRQ. 806e41f4b71Sopenharmony_ci 807e41f4b71Sopenharmony_ci``` 808e41f4b71Sopenharmony_ciint32_t ret; 809e41f4b71Sopenharmony_ci/* Release the SDIO IRQ. */ 810e41f4b71Sopenharmony_ciret = SdioReleaseIrq(handle); 811e41f4b71Sopenharmony_ciif (ret != 0) { 812e41f4b71Sopenharmony_ci HDF_LOGE("SdioReleaseIrq: failed, ret %d\n", ret); 813e41f4b71Sopenharmony_ci} 814e41f4b71Sopenharmony_ci``` 815e41f4b71Sopenharmony_ci 816e41f4b71Sopenharmony_ci### Disabling the SDIO Device<a name="section15379324143611"></a> 817e41f4b71Sopenharmony_ci 818e41f4b71Sopenharmony_ciAfter the SDIO communication, disable the SDIO device. 819e41f4b71Sopenharmony_ci 820e41f4b71Sopenharmony_ciint32\_t SdioDisableFunc\(DevHandle handle\); 821e41f4b71Sopenharmony_ci 822e41f4b71Sopenharmony_ci**Table 13** Parameters and return values of SdioDisableFunc 823e41f4b71Sopenharmony_ci 824e41f4b71Sopenharmony_ci<a name="table25012415481"></a> 825e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row1050010474810"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p05002419488"><a name="p05002419488"></a><a name="p05002419488"></a>Parameter</p> 826e41f4b71Sopenharmony_ci</th> 827e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p17500114174811"><a name="p17500114174811"></a><a name="p17500114174811"></a>Description</p> 828e41f4b71Sopenharmony_ci</th> 829e41f4b71Sopenharmony_ci</tr> 830e41f4b71Sopenharmony_ci</thead> 831e41f4b71Sopenharmony_ci<tbody><tr id="row65001946482"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p1150054104814"><a name="p1150054104814"></a><a name="p1150054104814"></a>handle</p> 832e41f4b71Sopenharmony_ci</td> 833e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1850014184812"><a name="p1850014184812"></a><a name="p1850014184812"></a>Device handle of an SDIO controller.</p> 834e41f4b71Sopenharmony_ci</td> 835e41f4b71Sopenharmony_ci</tr> 836e41f4b71Sopenharmony_ci<tr id="row175013494817"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p350013434816"><a name="p350013434816"></a><a name="p350013434816"></a><strong id="b1448917215019"><a name="b1448917215019"></a><a name="b1448917215019"></a>Return Value</strong></p> 837e41f4b71Sopenharmony_ci</td> 838e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1750184104813"><a name="p1750184104813"></a><a name="p1750184104813"></a><strong id="b37811222007"><a name="b37811222007"></a><a name="b37811222007"></a>Description</strong></p> 839e41f4b71Sopenharmony_ci</td> 840e41f4b71Sopenharmony_ci</tr> 841e41f4b71Sopenharmony_ci<tr id="row1850113413481"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p11501164114818"><a name="p11501164114818"></a><a name="p11501164114818"></a>0</p> 842e41f4b71Sopenharmony_ci</td> 843e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p1550116416489"><a name="p1550116416489"></a><a name="p1550116416489"></a>The SDIO device is disabled.</p> 844e41f4b71Sopenharmony_ci</td> 845e41f4b71Sopenharmony_ci</tr> 846e41f4b71Sopenharmony_ci<tr id="row45015444817"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p7501184154816"><a name="p7501184154816"></a><a name="p7501184154816"></a>Negative value</p> 847e41f4b71Sopenharmony_ci</td> 848e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p35011040484"><a name="p35011040484"></a><a name="p35011040484"></a>Failed to disable the SDIO device.</p> 849e41f4b71Sopenharmony_ci</td> 850e41f4b71Sopenharmony_ci</tr> 851e41f4b71Sopenharmony_ci</tbody> 852e41f4b71Sopenharmony_ci</table> 853e41f4b71Sopenharmony_ci 854e41f4b71Sopenharmony_ciThe following example shows how to disable the SDIO device. 855e41f4b71Sopenharmony_ci 856e41f4b71Sopenharmony_ci``` 857e41f4b71Sopenharmony_ciint32_t ret; 858e41f4b71Sopenharmony_ci/* Disable the SDIO device. */ 859e41f4b71Sopenharmony_ciret = SdioDisableFunc(handle); 860e41f4b71Sopenharmony_ciif (ret != 0) { 861e41f4b71Sopenharmony_ci HDF_LOGE("SdioDisableFunc: failed, ret %d\n", ret); 862e41f4b71Sopenharmony_ci} 863e41f4b71Sopenharmony_ci``` 864e41f4b71Sopenharmony_ci 865e41f4b71Sopenharmony_ci### Releasing the Exclusively Claimed Host<a name="section536018263713"></a> 866e41f4b71Sopenharmony_ci 867e41f4b71Sopenharmony_ciAfter the SDIO communication, release the exclusively claimed host. 868e41f4b71Sopenharmony_ci 869e41f4b71Sopenharmony_civoid SdioReleaseHost\(DevHandle handle\); 870e41f4b71Sopenharmony_ci 871e41f4b71Sopenharmony_ci**Table 14** Parameter description of SdioReleaseHost 872e41f4b71Sopenharmony_ci 873e41f4b71Sopenharmony_ci<a name="table1350214164813"></a> 874e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row6502134194814"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p18501945486"><a name="p18501945486"></a><a name="p18501945486"></a>Parameter</p> 875e41f4b71Sopenharmony_ci</th> 876e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p45028414817"><a name="p45028414817"></a><a name="p45028414817"></a>Description</p> 877e41f4b71Sopenharmony_ci</th> 878e41f4b71Sopenharmony_ci</tr> 879e41f4b71Sopenharmony_ci</thead> 880e41f4b71Sopenharmony_ci<tbody><tr id="row135027411483"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p16502174204816"><a name="p16502174204816"></a><a name="p16502174204816"></a>handle</p> 881e41f4b71Sopenharmony_ci</td> 882e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p6502164184816"><a name="p6502164184816"></a><a name="p6502164184816"></a>Device handle of an SDIO controller.</p> 883e41f4b71Sopenharmony_ci</td> 884e41f4b71Sopenharmony_ci</tr> 885e41f4b71Sopenharmony_ci</tbody> 886e41f4b71Sopenharmony_ci</table> 887e41f4b71Sopenharmony_ci 888e41f4b71Sopenharmony_ciThe following example shows how to release the exclusively claimed host. 889e41f4b71Sopenharmony_ci 890e41f4b71Sopenharmony_ci``` 891e41f4b71Sopenharmony_ciSdioReleaseHost(handle); /* Release the exclusively claimed host. */ 892e41f4b71Sopenharmony_ci``` 893e41f4b71Sopenharmony_ci 894e41f4b71Sopenharmony_ci### Closing an SDIO Controller<a name="section4752739183716"></a> 895e41f4b71Sopenharmony_ci 896e41f4b71Sopenharmony_ciAfter the SDIO communication, close the SDIO controller. 897e41f4b71Sopenharmony_ci 898e41f4b71Sopenharmony_civoid SdioClose\(DevHandle handle\); 899e41f4b71Sopenharmony_ci 900e41f4b71Sopenharmony_ciThis function releases the resources requested. 901e41f4b71Sopenharmony_ci 902e41f4b71Sopenharmony_ci**Table 15** Parameter description of SdioClose 903e41f4b71Sopenharmony_ci 904e41f4b71Sopenharmony_ci<a name="table950324124815"></a> 905e41f4b71Sopenharmony_ci<table><thead align="left"><tr id="row1050213424819"><th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.1"><p id="p18502134194818"><a name="p18502134194818"></a><a name="p18502134194818"></a>Parameter</p> 906e41f4b71Sopenharmony_ci</th> 907e41f4b71Sopenharmony_ci<th class="cellrowborder" valign="top" width="50%" id="mcps1.2.3.1.2"><p id="p2502154104813"><a name="p2502154104813"></a><a name="p2502154104813"></a>Description</p> 908e41f4b71Sopenharmony_ci</th> 909e41f4b71Sopenharmony_ci</tr> 910e41f4b71Sopenharmony_ci</thead> 911e41f4b71Sopenharmony_ci<tbody><tr id="row25035434810"><td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.1 "><p id="p175028434819"><a name="p175028434819"></a><a name="p175028434819"></a>handle</p> 912e41f4b71Sopenharmony_ci</td> 913e41f4b71Sopenharmony_ci<td class="cellrowborder" valign="top" width="50%" headers="mcps1.2.3.1.2 "><p id="p2050274194819"><a name="p2050274194819"></a><a name="p2050274194819"></a>Device handle of an SDIO controller.</p> 914e41f4b71Sopenharmony_ci</td> 915e41f4b71Sopenharmony_ci</tr> 916e41f4b71Sopenharmony_ci</tbody> 917e41f4b71Sopenharmony_ci</table> 918e41f4b71Sopenharmony_ci 919e41f4b71Sopenharmony_ciThe following example shows how to close an SDIO controller. 920e41f4b71Sopenharmony_ci 921e41f4b71Sopenharmony_ci``` 922e41f4b71Sopenharmony_ciSdioClose(handle); /* Close an SDIO controller. */ 923e41f4b71Sopenharmony_ci``` 924e41f4b71Sopenharmony_ci 925e41f4b71Sopenharmony_ci## Usage Example<a name="section376910122382"></a> 926e41f4b71Sopenharmony_ci 927e41f4b71Sopenharmony_ciThe following example shows how to use an SDIO device. First, open an SDIO controller whose bus number is 1, exclusively claim a host, enable the SDIO device, claim an SDIO IRQ, and then perform SDIO communication \(such as reading and writing\). After the SDIO communication, release the SDIO IRQ, disable the SDIO device, release the host, and close the SDIO controller. 928e41f4b71Sopenharmony_ci 929e41f4b71Sopenharmony_ci``` 930e41f4b71Sopenharmony_ci#include "hdf_log.h" 931e41f4b71Sopenharmony_ci#include "sdio_if.h" 932e41f4b71Sopenharmony_ci 933e41f4b71Sopenharmony_ci#define TEST_FUNC_NUM 1 /* The I/O function whose ID is 1 is used. */ 934e41f4b71Sopenharmony_ci#define TEST_FBR_BASE_ADDR 0x100 /* FBR base address of the I/O function whose ID is 1 */ 935e41f4b71Sopenharmony_ci#define TEST_ADDR_OFFSET 9 /* Address offset of the register to read or write */ 936e41f4b71Sopenharmony_ci#define TEST_DATA_LEN 3 /* Length of the data to read or write */ 937e41f4b71Sopenharmony_ci#define TEST_BLOCKSIZE 2 /* Size of a data block, in bytes */ 938e41f4b71Sopenharmony_ci 939e41f4b71Sopenharmony_ci/* Implement the SDIO IRQ function based on the application. */ 940e41f4b71Sopenharmony_cistatic void SdioIrqFunc(void *data) 941e41f4b71Sopenharmony_ci{ 942e41f4b71Sopenharmony_ci if (data == NULL) { 943e41f4b71Sopenharmony_ci HDF_LOGE("SdioIrqFunc: data is NULL.\n"); 944e41f4b71Sopenharmony_ci return; 945e41f4b71Sopenharmony_ci } 946e41f4b71Sopenharmony_ci /* You need to add specific implementations. */ 947e41f4b71Sopenharmony_ci} 948e41f4b71Sopenharmony_ci 949e41f4b71Sopenharmony_civoid SdioTestSample(void) 950e41f4b71Sopenharmony_ci{ 951e41f4b71Sopenharmony_ci int32_t ret; 952e41f4b71Sopenharmony_ci DevHandle handle = NULL; 953e41f4b71Sopenharmony_ci uint8_t data[TEST_DATA_LEN] = {0}; 954e41f4b71Sopenharmony_ci struct SdioFunctionConfig config = {1, 0x123, 0x456}; 955e41f4b71Sopenharmony_ci uint8_t val; 956e41f4b71Sopenharmony_ci uint32_t addr; 957e41f4b71Sopenharmony_ci 958e41f4b71Sopenharmony_ci /* Open an SDIO controller whose bus number is 1. */ 959e41f4b71Sopenharmony_ci handle = SdioOpen(1, &config); 960e41f4b71Sopenharmony_ci if (handle == NULL) { 961e41f4b71Sopenharmony_ci HDF_LOGE("SdioOpen: failed!\n"); 962e41f4b71Sopenharmony_ci return; 963e41f4b71Sopenharmony_ci } 964e41f4b71Sopenharmony_ci /* Claim a host exclusively. */ 965e41f4b71Sopenharmony_ci SdioClaimHost(handle); 966e41f4b71Sopenharmony_ci /* Enable the SDIO device. */ 967e41f4b71Sopenharmony_ci ret = SdioEnableFunc(handle); 968e41f4b71Sopenharmony_ci if (ret != 0) { 969e41f4b71Sopenharmony_ci HDF_LOGE("SdioEnableFunc: failed, ret %d\n", ret); 970e41f4b71Sopenharmony_ci goto ENABLE_ERR; 971e41f4b71Sopenharmony_ci } 972e41f4b71Sopenharmony_ci /* Claim an SDIO IRQ. */ 973e41f4b71Sopenharmony_ci ret = SdioClaimIrq(handle, SdioIrqFunc); 974e41f4b71Sopenharmony_ci if (ret != 0) { 975e41f4b71Sopenharmony_ci HDF_LOGE("SdioClaimIrq: failed, ret %d\n", ret); 976e41f4b71Sopenharmony_ci goto CLAIM_IRQ_ERR; 977e41f4b71Sopenharmony_ci } 978e41f4b71Sopenharmony_ci /* Set the block size to 2 bytes. */ 979e41f4b71Sopenharmony_ci ret = SdioSetBlockSize(handle, TEST_BLOCKSIZE); 980e41f4b71Sopenharmony_ci if (ret != 0) { 981e41f4b71Sopenharmony_ci HDF_LOGE("SdioSetBlockSize: failed, ret %d\n", ret); 982e41f4b71Sopenharmony_ci goto COMM_ERR; 983e41f4b71Sopenharmony_ci } 984e41f4b71Sopenharmony_ci /* Read 3-byte data from the incremental address of an SDIO device. */ 985e41f4b71Sopenharmony_ci addr = TEST_FBR_BASE_ADDR * TEST_FUNC_NUM + TEST_ADDR_OFFSET; 986e41f4b71Sopenharmony_ci ret = SdioReadBytes(handle, data, addr, TEST_DATA_LEN); 987e41f4b71Sopenharmony_ci if (ret != 0) { 988e41f4b71Sopenharmony_ci HDF_LOGE("SdioReadBytes: failed, ret %d\n", ret); 989e41f4b71Sopenharmony_ci goto COMM_ERR; 990e41f4b71Sopenharmony_ci } 991e41f4b71Sopenharmony_ci /* Write 3-byte data into the incremental address of an SDIO device. */ 992e41f4b71Sopenharmony_ci ret = SdioWriteBytes(handle, data, addr, TEST_DATA_LEN); 993e41f4b71Sopenharmony_ci if (ret != 0) { 994e41f4b71Sopenharmony_ci HDF_LOGE("SdioWriteBytes: failed, ret %d\n", ret); 995e41f4b71Sopenharmony_ci goto COMM_ERR; 996e41f4b71Sopenharmony_ci } 997e41f4b71Sopenharmony_ci /* Read 1-byte data from the SDIO device. */ 998e41f4b71Sopenharmony_ci ret = SdioReadBytes(handle, &val, addr, 1); 999e41f4b71Sopenharmony_ci if (ret != 0) { 1000e41f4b71Sopenharmony_ci HDF_LOGE("SdioReadBytes: failed, ret %d\n", ret); 1001e41f4b71Sopenharmony_ci goto COMM_ERR; 1002e41f4b71Sopenharmony_ci } 1003e41f4b71Sopenharmony_ci /* Write 1-byte data into the SDIO device. */ 1004e41f4b71Sopenharmony_ci ret = SdioWriteBytes(handle, &val, addr, 1); 1005e41f4b71Sopenharmony_ci if (ret != 0) { 1006e41f4b71Sopenharmony_ci HDF_LOGE("SdioWriteBytes: failed, ret %d\n", ret); 1007e41f4b71Sopenharmony_ci goto COMM_ERR; 1008e41f4b71Sopenharmony_ci } 1009e41f4b71Sopenharmony_ci /* Read 3-byte data from the fixed address of an SDIO device. */ 1010e41f4b71Sopenharmony_ci ret = SdioReadBytesFromFixedAddr(handle, data, addr, TEST_DATA_LEN, 0); 1011e41f4b71Sopenharmony_ci if (ret != 0) { 1012e41f4b71Sopenharmony_ci HDF_LOGE("SdioReadBytesFromFixedAddr: failed, ret %d\n", ret); 1013e41f4b71Sopenharmony_ci goto COMM_ERR; 1014e41f4b71Sopenharmony_ci } 1015e41f4b71Sopenharmony_ci /* Write 1-byte data to the fixed address of an SDIO device. */ 1016e41f4b71Sopenharmony_ci ret = SdioWriteBytesToFixedAddr(handle, data, addr, 1, 0); 1017e41f4b71Sopenharmony_ci if (ret != 0) { 1018e41f4b71Sopenharmony_ci HDF_LOGE("SdioWriteBytesToFixedAddr: failed, ret %d\n", ret); 1019e41f4b71Sopenharmony_ci goto COMM_ERR; 1020e41f4b71Sopenharmony_ci } 1021e41f4b71Sopenharmony_ci /* Read 1-byte data from SDIO function 0. */ 1022e41f4b71Sopenharmony_ci addr = 0x02; 1023e41f4b71Sopenharmony_ci ret = SdioReadBytesFromFunc0(handle, &val, addr, 1); 1024e41f4b71Sopenharmony_ci if (ret != 0) { 1025e41f4b71Sopenharmony_ci HDF_LOGE("SdioReadBytesFromFunc0: failed, ret %d\n", ret); 1026e41f4b71Sopenharmony_ci goto COMM_ERR; 1027e41f4b71Sopenharmony_ci } 1028e41f4b71Sopenharmony_ci /* Write 1-byte data into SDIO function 0. */ 1029e41f4b71Sopenharmony_ci ret = SdioWriteBytesToFunc0(handle, &val, addr, 1); 1030e41f4b71Sopenharmony_ci if (ret != 0) { 1031e41f4b71Sopenharmony_ci HDF_LOGE("SdioWriteBytesToFunc0: failed, ret %d\n", ret); 1032e41f4b71Sopenharmony_ci goto COMM_ERR; 1033e41f4b71Sopenharmony_ci } 1034e41f4b71Sopenharmony_ciCOMM_ERR: 1035e41f4b71Sopenharmony_ci /* Release the SDIO IRQ. */ 1036e41f4b71Sopenharmony_ci ret = SdioReleaseIrq(handle); 1037e41f4b71Sopenharmony_ci if (ret != 0) { 1038e41f4b71Sopenharmony_ci HDF_LOGE("SdioReleaseIrq: failed, ret %d\n", ret); 1039e41f4b71Sopenharmony_ci } 1040e41f4b71Sopenharmony_ciCLAIM_IRQ_ERR: 1041e41f4b71Sopenharmony_ci /* Disable the SDIO device. */ 1042e41f4b71Sopenharmony_ci ret = SdioDisableFunc(handle); 1043e41f4b71Sopenharmony_ci if (ret != 0) { 1044e41f4b71Sopenharmony_ci HDF_LOGE("SdioDisableFunc: failed, ret %d\n", ret); 1045e41f4b71Sopenharmony_ci } 1046e41f4b71Sopenharmony_ciENABLE_ERR: 1047e41f4b71Sopenharmony_ci /* Release the exclusively claimed host. */ 1048e41f4b71Sopenharmony_ci SdioReleaseHost(handle); 1049e41f4b71Sopenharmony_ci /* Close an SDIO controller. */ 1050e41f4b71Sopenharmony_ci SdioClose(handle); 1051e41f4b71Sopenharmony_ci} 1052e41f4b71Sopenharmony_ci```