📄 mmc_8c-source.html
字号:
00378 <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(0xff);00379 <a class="code" href="board_8h.html#a41">SPIWait</a>();00380 *<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++=<a class="code" href="board_8h.html#a44">SPI_RESULT_BYTE</a>;00381 <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(0xff);00382 <a class="code" href="board_8h.html#a41">SPIWait</a>();00383 *<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++=<a class="code" href="board_8h.html#a44">SPI_RESULT_BYTE</a>;00384 <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(0xff);00385 <a class="code" href="board_8h.html#a41">SPIWait</a>();00386 *<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++=<a class="code" href="board_8h.html#a44">SPI_RESULT_BYTE</a>;00387 <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(0xff);00388 <a class="code" href="board_8h.html#a41">SPIWait</a>();00389 *<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++=<a class="code" href="board_8h.html#a44">SPI_RESULT_BYTE</a>;00390 }00391 00392 <span class="preprocessor">#ifdef MMCDEBUG</span>00393 <span class="preprocessor"></span> ConsoleWrite(<span class="stringliteral">"R>"</span>);00394 <span class="preprocessor">#endif</span>00395 <span class="preprocessor"></span>00396 }00397 <a name="l00399"></a><a class="code" href="mmc_8c.html#a7">00399</a> <span class="keywordtype">void</span> <a class="code" href="mmc_8c.html#a7">ConsoleDecipherMMCResponse</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c){00400 00401 ConsoleWrite (<span class="stringliteral">"\rSeek failed, MMC returns "</span>);00402 ConsolePutHex8 (c);00403 ConsoleWrite (<span class="stringliteral">"h ("</span>);00404 00405 <span class="keywordflow">if</span> (c&128) ConsoleWrite(<span class="stringliteral">"which is NOT an R1 response!!"</span>);00406 <span class="keywordflow">else</span>{00407 <span class="keywordflow">if</span> (c&64) ConsoleWrite(<span class="stringliteral">"ParameterError "</span>);00408 <span class="keywordflow">if</span> (c&32) ConsoleWrite(<span class="stringliteral">"AddressError "</span>);00409 <span class="keywordflow">if</span> (c&16) ConsoleWrite(<span class="stringliteral">"EraseSequenceError "</span>);00410 <span class="keywordflow">if</span> (c&8) ConsoleWrite(<span class="stringliteral">"CommandCrcError "</span>);00411 <span class="keywordflow">if</span> (c&4) ConsoleWrite(<span class="stringliteral">"IllegalCommandCode "</span>);00412 <span class="keywordflow">if</span> (c&2) ConsoleWrite(<span class="stringliteral">"EraseCancelled "</span>);00413 <span class="keywordflow">if</span> (c&1) ConsoleWrite(<span class="stringliteral">"Idle "</span>);00414 }00415 00416 ConsoleWrite (<span class="stringliteral">") for sector "</span>);00417 ConsolePutUInt (<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a>);00418 ConsoleWrite(<span class="stringliteral">".\rFurther reading data returns: \r"</span>);00419 <span class="keywordflow">for</span> (c=0; c<255; c++){00420 ConsolePutHex8(<a class="code" href="board_8c.html#a1">SPIGetChar</a>()); 00421 }00422 ConsolePutChar(13);00423 <span class="keywordflow">while</span> (!<a class="code" href="board_8h.html#a14">KEY_BUTTON</a>);00424 00425 00426 }00427 00428 00429 00430 <span class="comment">/* Unconditionally (really just do it!) seek MMC at offset sectorN*512 */</span><a name="l00431"></a><a class="code" href="mmc_8h.html#a2">00431</a> <a class="code" href="board_8h.html#a45">Public</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="mmc_8h.html#a2">SeekSector</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> sectorN){00432 00433 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c;00434 00435 <span class="preprocessor">#ifdef MMCDEBUG </span>00436 <span class="preprocessor"></span> ConsoleWrite(<span class="stringliteral">"{s"</span>); <span class="comment">//Seek called</span>00437 <span class="preprocessor">#endif</span>00438 <span class="preprocessor"></span>00439 <span class="keywordflow">do</span>{00440 <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> = sectorN * 2; <span class="comment">//convert to bytes (combined with 8bit shift)</span>00441 c=<a class="code" href="mmc_8c.html#a0">MmcCommand</a>(0x51,<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o2">b2</a>,<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o1">b1</a>,00442 <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o0">b0</a>, 0);00443 <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> = <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> >> 1; <span class="comment">//convert back to blocks</span>00444 00445 <span class="comment">//if MMC returs "nothing" (0xff) or 0x81(busy), </span>00446 <span class="comment">//toggle chip select and retry</span>00447 <span class="keywordflow">if</span> ((c==0xff)||(c==0x81)){00448 c=0xff;00449 <a class="code" href="mmc_8c.html#a4">RebootMMC</a>();00450 }00451 <span class="keywordflow">if</span> (c==0x01){ <span class="comment">//MMC says "busy"</span>00452 c=0xff; <span class="comment">//try again</span>00453 }00454 00455 }<span class="keywordflow">while</span>(c==0xff); <span class="comment">//repeat until we get signal from MMC.</span>00456 00457 <span class="keywordflow">if</span> ((c & 0xfe)){ <span class="comment">//MMC returns something else than idle or busy signal</span>00458 <a class="code" href="mmc_8c.html#a7">ConsoleDecipherMMCResponse</a>(c);00459 <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a31">MMC_NOT_SELECTED</a>;00460 00461 <span class="preprocessor">#ifdef MMCDEBUG</span>00462 <span class="preprocessor"></span> ConsoleWrite(<span class="stringliteral">"!s}"</span>);00463 <span class="preprocessor">#endif</span>00464 <span class="preprocessor"></span> <span class="keywordflow">return</span> 7; <span class="comment">/* failed to execute mmc command */</span>00465 }00466 00467 <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a31">MMC_NOT_SELECTED</a>;00468 00469 <span class="preprocessor">#ifdef MMCDEBUG</span>00470 <span class="preprocessor"></span> ConsoleWrite(<span class="stringliteral">"s}"</span>);00471 <span class="preprocessor">#endif</span>00472 <span class="preprocessor"></span> <span class="keywordflow">return</span> 0; <span class="comment">//ok return</span>00473 }00474 00475 00476 <span class="comment">/* Wait for data start token and read 512 bytes to global buffer */</span><a name="l00477"></a><a class="code" href="mmc_8h.html#a3">00477</a> <a class="code" href="board_8h.html#a45">Public</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="mmc_8c.html#a9">ReadPhysicalSector</a>(){00478 00479 <a class="code" href="board_8h.html#a10">RED_LED</a> = <a class="code" href="board_8h.html#a12">LED_ON</a>; <span class="comment">/* Disk Read LED on */</span>00480 00481 <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a30">MMC_SELECTED</a>;00482 <span class="comment">//ConsoleWrite("<wait>");</span>00483 <a class="code" href="mmc_8c.html#a1">MmcWaitForData</a>();00484 00485 <span class="comment">//ConsoleWrite("<read>");</span>00486 <a class="code" href="mmc_8c.html#a6">PerformBlockRead</a>();00487 00488 <span class="comment">//ConsoleWrite("<deselect>");</span>00489 <span class="comment">/* generate SPI clock edges to finish up the command */</span>00490 00491 <a class="code" href="board_8h.html#a48">SPI8Clocks</a>(4); <span class="comment">//Send 8*4=32 clocks (4 ff's) to MMC to be nice.</span>00492 <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a31">MMC_NOT_SELECTED</a>;00493 <a class="code" href="board_8h.html#a48">SPI8Clocks</a>(4); <span class="comment">//Again, give the poor MMC some clocks, it likes them.</span>00494 00495 <a class="code" href="board_8h.html#a10">RED_LED</a> = <a class="code" href="board_8h.html#a13">LED_OFF</a>; <span class="comment">/* Disk Read LED off */</span>00496 00497 <span class="keywordflow">return</span> 0; <span class="comment">//ok return</span>00498 }00499 00500 <a name="l00502"></a><a class="code" href="mmc_8h.html#a4">00502</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="mmc_8c.html#a10">WritePhysicalSector</a>(){00503 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c; 00504 00505 <span class="preprocessor">#ifdef MMCDEBUG</span>00506 <span class="preprocessor"></span> ConsoleWrite(<span class="stringliteral">"<W"</span>);00507 <span class="preprocessor">#endif </span>00508 <span class="preprocessor"></span>00509 <a class="code" href="board_8h.html#a10">RED_LED</a> = <a class="code" href="board_8h.html#a12">LED_ON</a>;00510 <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> = <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> * 2; <span class="comment">//convert to bytes (combined with 8bit shift)</span>00511 c=<a class="code" href="mmc_8c.html#a0">MmcCommand</a>(24 | 0x40 ,<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o2">b2</a>,<a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o1">b1</a>,00512 <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o1">b</a>.<a class="code" href="structAddress_1_1B.html#o0">b0</a>, 0);00513 <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> = <a class="code" href="buffer_8c.html#a2">sectorAddress</a>.<a class="code" href="unionAddress.html#o0">l</a> >> 1; <span class="comment">//convert back to blocks</span>00514 <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a30">MMC_SELECTED</a>;00515 00516 00517 <a class="code" href="buffer_8c.html#a1">dataBufPtr</a> = <a class="code" href="buffer_8c.html#a0">diskSect</a>.<a class="code" href="unionDiskBlock.html#o1">raw</a>.<a class="code" href="structDiskBlock_1_1Raw.html#o0">buf</a>;00518 <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(0xFE);00519 <a class="code" href="board_8h.html#a41">SPIWait</a>();00520 00521 <span class="keywordflow">for</span> (c=0;c<128;c++){00522 <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(*<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++); 00523 <a class="code" href="board_8h.html#a41">SPIWait</a>();00524 <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(*<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++); 00525 <a class="code" href="board_8h.html#a41">SPIWait</a>();00526 <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(*<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++); 00527 <a class="code" href="board_8h.html#a41">SPIWait</a>();00528 <a class="code" href="board_8h.html#a43">SPIPutCharWithoutWaiting</a>(*<a class="code" href="buffer_8c.html#a1">dataBufPtr</a>++); 00529 <a class="code" href="board_8h.html#a41">SPIWait</a>();00530 }00531 00532 <a class="code" href="mmc_8c.html#a1">MmcWaitForData</a>(); <span class="comment">//Wait for 0xFE token</span>00533 <span class="keywordflow">while</span> (<a class="code" href="board_8c.html#a1">SPIGetChar</a>()==0) 00534 ; <span class="comment">// Wait until MMC not busy. </span>00535 00536 <span class="preprocessor">#ifdef MMCDEBUG</span>00537 <span class="preprocessor"></span> ConsoleWrite(<span class="stringliteral">"W>"</span>);00538 <span class="preprocessor">#endif </span>00539 <span class="preprocessor"></span>00540 00541 <a class="code" href="board_8h.html#a48">SPI8Clocks</a>(16);00542 <a class="code" href="board_8h.html#a29">MMC_XCS</a> = <a class="code" href="board_8h.html#a31">MMC_NOT_SELECTED</a>;00543 <a class="code" href="board_8h.html#a48">SPI8Clocks</a>(16);00544 00545 <a class="code" href="board_8h.html#a10">RED_LED</a> = <a class="code" href="board_8h.html#a13">LED_OFF</a>;00546 00547 }00548 00549 </div></pre><hr><FONT SIZE="-1">All software copyright 2000-2004 <a href="http://www.vlsi.fi/"> VLSI Solution OY.</a>Redistribution of these software modules are limited to promotional use onlyand only with the VS1011 / VS1002 / VS1003 MP3-Evakit evaluation boards. Free orcommercial use of these software modules in MP3 players is ok if theproduct includes MP3 decoder chip(s) from VLSI. You can request the complete(compilable) package from mp3@vlsi.fi</FONT>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -