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
<em>byte array
</em> to store the read data.
</dd>
35 <dd>Start sector number in
32-bit LBA.
</dd>
37 <dd>Number of sectors to read in range of from
1 to
128..
</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. If variable sector size is selected (
<tt>_MIN_SS
< MAX_SS
</tt>), FatFs inquires the sector size with
<tt>disk_ioctl()
</tt> after initialization
</tt>.
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 misaligned read/write request can occure at
<a href=
"appnote.html#fs1">direct transfer
</a>. If the bus architecture, especially DMA controller, does not allow misaligned 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>For
<tt>f_read()
</tt>, avoid long read request that includes a whole of sector. - Direct transfer will never occure.
</li>
64 <li>For
<tt>f_read(fp, buff, btr,
&br)
</tt>, make sure that
<tt>(((UINT)buff
& 3) == (f_tell(fp)
& 3))
</tt> is true. - Word aligned direct transfer 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>