📄 group__mmc.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Procyon AVRlib: MultiMedia and SD Flash Card Interface (mmc.c)</title><link href="dox.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.4.2 --><div class="qindex"><a class="qindex" href="main.html">Main Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related Pages</a></div><h1>MultiMedia and SD Flash Card Interface (mmc.c)<br><small>[<a class="el" href="group__driver__hw.html">Drivers (for external hardware)</a>]</small></h1><hr><a name="_details"></a><h2>Detailed Description</h2><div class="fragment"><pre class="fragment"><span class="preprocessor"> #include "<a class="code" href="mmc_8h.html">mmc.h</a>"</span> </pre></div> <dl compact><dt><b>Description</b></dt><dd>This library offers some simple functions which can be used to read and write data on a MultiMedia or SecureDigital (SD) Flash Card. Although MM and SD Cards are designed to operate with their own special bus wiring and protocols, both types of cards also provide a simple SPI-like interface mode which is exceptionally useful when attempting to use the cards in embedded systems.</dd></dl><dl compact><dt><b>Wiring</b></dt><dd>To work with this library, the card must be wired to the SPI port of the Atmel microcontroller as described below. Typical cards can operate at up to 25MHz maximum SPI clock rate (thus faster than most AVR's maximum SPI clock rate). <pre> _________________ / 1 2 3 4 5 6 78 | <- view of MMC/SD card looking at contacts / 9 | Pins 8 and 9 are present only on SD cards | MMC/SD Card | | | /\/\/\/\/\/\/\/\/\/\ 1 - CS (chip select) - wire to any available I/O pin(*) 2 - DIN (data in, card<-host) - wire to SPI MOSI pin 3 - VSS (ground) - wire to ground 4 - VDD (power, 3.3V only?) - wire to power (MIGHT BE 3.3V ONLY!) 5 - SCLK (data clock) - wire to SPI SCK pin 6 - VSS (ground) - wire to ground 7 - DOUT (data out, card->host) - wire to SPI MISO pin</pre></dd></dl>(*) you must define this chip select I/O pin in <a class="el" href="mmcconf_8h.html">mmcconf.h</a> <dl compact><dt><b>Note:</b></dt><dd><pre> This code is currently below version 1.0, and therefore is considered to be lacking in some functionality or documentation, or may not be fully tested. Nonetheless, you can expect most functions to work.</pre></dd></dl><p><table border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr><tr><td colspan="2"><br><h2>Defines</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga6" doxytag="mmc::MMC_GO_IDLE_STATE"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga6">MMC_GO_IDLE_STATE</a> 0</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">initialize card to SPI-type access <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga7" doxytag="mmc::MMC_SEND_OP_COND"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga7">MMC_SEND_OP_COND</a> 1</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">set card operational mode <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga8" doxytag="mmc::MMC_SEND_CSD"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga8">MMC_SEND_CSD</a> 9</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">get card's CSD <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga9" doxytag="mmc::MMC_SEND_CID"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga9">MMC_SEND_CID</a> 10</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">get card's CID <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga10" doxytag="mmc::MMC_SEND_STATUS"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_SEND_STATUS</b> 13</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga11" doxytag="mmc::MMC_SET_BLOCKLEN"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga11">MMC_SET_BLOCKLEN</a> 16</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Set number of bytes to transfer per block. <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga12" doxytag="mmc::MMC_READ_SINGLE_BLOCK"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga12">MMC_READ_SINGLE_BLOCK</a> 17</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">read a block <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga13" doxytag="mmc::MMC_WRITE_BLOCK"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga13">MMC_WRITE_BLOCK</a> 24</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">write a block <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga14" doxytag="mmc::MMC_PROGRAM_CSD"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_PROGRAM_CSD</b> 27</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga15" doxytag="mmc::MMC_SET_WRITE_PROT"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_SET_WRITE_PROT</b> 28</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga16" doxytag="mmc::MMC_CLR_WRITE_PROT"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_CLR_WRITE_PROT</b> 29</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga17" doxytag="mmc::MMC_SEND_WRITE_PROT"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_SEND_WRITE_PROT</b> 30</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga18" doxytag="mmc::MMC_TAG_SECTOR_START"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_TAG_SECTOR_START</b> 32</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga19" doxytag="mmc::MMC_TAG_SECTOR_END"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_TAG_SECTOR_END</b> 33</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga20" doxytag="mmc::MMC_UNTAG_SECTOR"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_UNTAG_SECTOR</b> 34</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga21" doxytag="mmc::MMC_TAG_ERASE_GROUP_START"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga21">MMC_TAG_ERASE_GROUP_START</a> 35</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Sets beginning of erase group (mass erase). <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga22" doxytag="mmc::MMC_TAG_ERARE_GROUP_END"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga22">MMC_TAG_ERARE_GROUP_END</a> 36</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Sets end of erase group (mass erase). <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga23" doxytag="mmc::MMC_UNTAG_ERASE_GROUP"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga23">MMC_UNTAG_ERASE_GROUP</a> 37</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Untag (unset) erase group (mass erase). <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga24" doxytag="mmc::MMC_ERASE"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga24">MMC_ERASE</a> 38</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Perform block/mass erase. <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga25" doxytag="mmc::MMC_CRC_ON_OFF"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga25">MMC_CRC_ON_OFF</a> 59</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Turns CRC check on/off. <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga26" doxytag="mmc::MMC_R1_BUSY"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga26">MMC_R1_BUSY</a> 0x80</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">R1 response: bit indicates card is busy. <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga27" doxytag="mmc::MMC_R1_PARAMETER"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_R1_PARAMETER</b> 0x40</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga28" doxytag="mmc::MMC_R1_ADDRESS"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_R1_ADDRESS</b> 0x20</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga29" doxytag="mmc::MMC_R1_ERASE_SEQ"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_R1_ERASE_SEQ</b> 0x10</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga30" doxytag="mmc::MMC_R1_COM_CRC"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_R1_COM_CRC</b> 0x08</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga31" doxytag="mmc::MMC_R1_ILLEGAL_COM"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_R1_ILLEGAL_COM</b> 0x04</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga32" doxytag="mmc::MMC_R1_ERASE_RESET"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_R1_ERASE_RESET</b> 0x02</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga33" doxytag="mmc::MMC_R1_IDLE_STATE"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_R1_IDLE_STATE</b> 0x01</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga34" doxytag="mmc::MMC_STARTBLOCK_READ"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga34">MMC_STARTBLOCK_READ</a> 0xFE</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">when received from card, indicates that a block of data will follow <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga35" doxytag="mmc::MMC_STARTBLOCK_WRITE"></a>#define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga35">MMC_STARTBLOCK_WRITE</a> 0xFE</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">when sent to card, indicates that a block of data will follow <br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga36" doxytag="mmc::MMC_STARTBLOCK_MWRITE"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_STARTBLOCK_MWRITE</b> 0xFC</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga37" doxytag="mmc::MMC_STOPTRAN_WRITE"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_STOPTRAN_WRITE</b> 0xFD</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga38" doxytag="mmc::MMC_DE_MASK"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_DE_MASK</b> 0x1F</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga39" doxytag="mmc::MMC_DE_ERROR"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_DE_ERROR</b> 0x01</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga40" doxytag="mmc::MMC_DE_CC_ERROR"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_DE_CC_ERROR</b> 0x02</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga41" doxytag="mmc::MMC_DE_ECC_FAIL"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_DE_ECC_FAIL</b> 0x04</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga42" doxytag="mmc::MMC_DE_OUT_OF_RANGE"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_DE_OUT_OF_RANGE</b> 0x04</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga43" doxytag="mmc::MMC_DE_CARD_LOCKED"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_DE_CARD_LOCKED</b> 0x04</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga44" doxytag="mmc::MMC_DR_MASK"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_DR_MASK</b> 0x1F</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga45" doxytag="mmc::MMC_DR_ACCEPT"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_DR_ACCEPT</b> 0x05</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga46" doxytag="mmc::MMC_DR_REJECT_CRC"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_DR_REJECT_CRC</b> 0x0B</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga47" doxytag="mmc::MMC_DR_REJECT_WRITE_ERROR"></a>#define </td><td class="memItemRight" valign="bottom"><b>MMC_DR_REJECT_WRITE_ERROR</b> 0x0D</td></tr><tr><td colspan="2"><br><h2>Functions</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga0">mmcInit</a> (void)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">u08 </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga1">mmcReset</a> (void)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">u08 </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga2">mmcSendCommand</a> (u08 cmd, u32 arg)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">u08 </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga3">mmcRead</a> (u32 sector, u08 *buffer)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">u08 </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga4">mmcWrite</a> (u32 sector, u08 *buffer)</td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">u08 </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mmc.html#ga5">mmcCommand</a> (u08 cmd, u32 arg)</td></tr></table><hr><h2>Function Documentation</h2><a class="anchor" name="ga5" doxytag="mmc.h::mmcCommand"></a><p><table class="mdTable" cellpadding="2" cellspacing="0"> <tr> <td class="mdRow"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td class="md" nowrap valign="top">u08 mmcCommand </td> <td class="md" valign="top">( </td> <td class="md" nowrap valign="top">u08 </td> <td class="mdname" nowrap> <em>cmd</em>, </td> </tr> <tr> <td class="md" nowrap align="right"></td> <td class="md"></td> <td class="md" nowrap>u32 </td>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -