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![](figures/en-us_image_0000001160971556.png)
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>![](../public_sys-resources/icon-note.gif) **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![](figures/using-SDIO-process.png)
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```