1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
4 <meta http-equiv=
"Content-Type" content=
"text/html; charset=iso-8859-1">
5 <meta http-equiv=
"Content-Style-Type" content=
"text/css">
6 <link rel=
"up" title=
"FatFs" href=
"../00index_e.html">
7 <link rel=
"alternate" hreflang=
"ja" title=
"Japanese" href=
"../ja/dread.html">
8 <link rel=
"stylesheet" href=
"../css_e.css" type=
"text/css" media=
"screen" title=
"ELM Default">
9 <title>FatFs - disk_read
</title>
14 <div class=
"para func">
16 <p>The disk_read function reads sector(s) from the storage device.
</p>
19 BYTE
<span class=
"arg">pdrv
</span>,
<span class=
"c">/* [IN] Physical drive number */
</span>
20 BYTE*
<span class=
"arg">buff
</span>,
<span class=
"c">/* [OUT] Pointer to the read data buffer */
</span>
21 DWORD
<span class=
"arg">sector
</span>,
<span class=
"c">/* [IN] Start sector number */
</span>
22 UINT
<span class=
"arg">count
</span> <span class=
"c">/* [IN] Number of sectros to read */
</span>
27 <div class=
"para arg">
31 <dd>Physical drive number to identify the target device.
</dd>
33 <dd>Pointer to the first item of the
<em>byte array
</em> to store read data.
</dd>
35 <dd>Start sector number in
32-bit LBA.
</dd>
37 <dd>Number of sectors to read.
</dd>
42 <div class=
"para ret">
46 <dd>The function succeeded.
</dd>
48 <dd>Any hard error occured during the read operation and could not recover it.
</dd>
50 <dd>Invalid parameter.
</dd>
52 <dd>The device has not been initialized.
</dd>
57 <div class=
"para desc">
59 <p>The data read/write operation to the storage devices is done in unit of
<em>sector
</em>. FatFs supports the sector size in range of from
512 to
4096 bytes. When FatFs is configured to fixed sector size (
<tt>_MIN_SS == MAX_SS
</tt>, this will be the most case), the read/write function must work at that sector size. When FatFs is configured to variable sector size (
<tt>_MIN_SS != MAX_SS
</tt>), sector size is inquired with
<tt>disk_ioctl
</tt> function following
<tt>disk_initialize
</tt> function.
</p>
60 <p>The memory address specified by
<tt class=
"arg">buff
</tt> is not that always aligned to word boundary because the argument is defined as
<tt>BYTE*
</tt>. The unaligned read/write request can occure at
<a href=
"appnote.html#fs1">direct transfer
</a>. If the bus architecture, especially DMA controller, does not allow unaligned memory access, it should be solved in this function. There are some workarounds described below to avoid this issue.
</p>
62 <li>Convert word transfer to byte transfer in this function if needed. - Recommended.
</li>
63 <li>On the
<tt>f_read
</tt> calls, avoid long read request that includes a whole of sector. - Any direct transfer never occures.
</li>
64 <li>On the
<tt>f_read
</tt> calls, make sure that
<tt>(((UINT)data
& 3) == (f_tell(fp)
& 3))
</tt> is true. - Word alignment of
<tt>buff
</tt> is guaranteed.
</li>
66 <p>Generally, a multiple sector transfer request must not be split into single sector transactions to the storage device, or you will not get good read throughput.
</p>
70 <p class=
"foot"><a href=
"../00index_e.html">Return
</a></p>