STM32GENERIC/docs/usb_msc/index.html

330 lines
9.4 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="../img/favicon.ico">
<title>USB Mass Storage - STM32GENERIC</title>
<link href="../css/bootstrap-custom.min.css" rel="stylesheet">
<link href="../css/font-awesome-4.0.3.css" rel="stylesheet">
<link rel="stylesheet" href="../css/highlight.css">
<link href="../css/base.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<script src="../js/jquery-1.10.2.min.js"></script>
<script src="../js/bootstrap-3.0.3.min.js"></script>
<script src="../js/highlight.pack.js"></script>
</head>
<body>
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="..">STM32GENERIC</a>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav">
<li >
<a href="..">Installation</a>
</li>
<li >
<a href="../upload/">Uploading</a>
</li>
<li class="dropdown active">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation <b class="caret"></b></a>
<ul class="dropdown-menu">
<li >
<a href="../menu_options/">Menu options</a>
</li>
<li >
<a href="../arduino_api/">Arduino API</a>
</li>
<li >
<a href="../spi/">SPI</a>
</li>
<li >
<a href="../i2c/">I2C</a>
</li>
<li >
<a href="../i2s/">I2S</a>
</li>
<li >
<a href="../sdio/">SDIO</a>
</li>
<li >
<a href="../uart/">UART Serial</a>
</li>
<li >
<a href="../usb_cdc/">USB Serial</a>
</li>
<li class="active">
<a href="./">USB Mass Storage</a>
</li>
<li >
<a href="../stm32_hal/">STM32 HAL</a>
</li>
</ul>
</li>
<li >
<a href="../libraries/">Libraries</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">STM32 Boards <b class="caret"></b></a>
<ul class="dropdown-menu">
<li >
<a href="../boards/">Boards list</a>
</li>
<li >
<a href="../add_board/">Adding a board</a>
</li>
<li >
<a href="../test/">Testing a board</a>
</li>
</ul>
</li>
<li >
<a href="../about/">About</a>
</li>
</ul>
<!-- Search, Navigation and Repo links -->
<ul class="nav navbar-nav navbar-right">
<li>
<a href="#" data-toggle="modal" data-target="#mkdocs_search_modal">
<i class="fa fa-search"></i> Search
</a>
</li>
<li >
<a rel="next" href="../usb_cdc/">
<i class="fa fa-arrow-left"></i> Previous
</a>
</li>
<li >
<a rel="prev" href="../stm32_hal/">
Next <i class="fa fa-arrow-right"></i>
</a>
</li>
</ul>
</div>
</div>
</div>
<div class="container">
<div class="col-md-3"><div class="bs-sidebar hidden-print affix well" role="complementary">
<ul class="nav bs-sidenav">
<li class="main active"><a href="#usb-mass-storage">USB: Mass Storage</a></li>
<li class="main "><a href="#this-library-is-in-beta-and-the-api-implementation-is-for-testing-only">This library is in beta, and the API / implementation is for testing only!</a></li>
</ul>
</div></div>
<div class="col-md-9" role="main">
<h2 id="usb-mass-storage">USB: Mass Storage</h2>
<h2 id="this-library-is-in-beta-and-the-api-implementation-is-for-testing-only"><strong>This library is in beta, and the API / implementation is for testing only!</strong></h2>
<p>Until there is an official API, you can test mass storage with the following code:</p>
<pre><code class="c++">#include &quot;msc/usbd_msc.h&quot;
const uint8_t MSC_Inquirydata[] = {
/* LUN 0 */
0x00,
0x80,
0x02,
0x02,
(STANDARD_INQUIRY_DATA_LEN - 5),
0x00,
0x00,
0x00,
'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer : 8 bytes */
'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product : 16 Bytes */
' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
'0', '.', '0' ,'1', /* Version : 4 Bytes */
};
const uint16_t blockSize = 512;
const uint32_t blockCount = 100;
uint8_t ramdisk[blockSize * blockCount] = {0};
namespace Testing {
// See UM1734, 6.2.4
// See usbd_msc.h
USBD_StorageTypeDef USBD_DISK_fops = {
//Init
[](uint8_t lun) -&gt; int8_t {
return USBD_OK;
},
//GetCapacity
[](uint8_t lun, uint32_t *block_num, uint16_t *block_size) -&gt; int8_t {
*block_num = blockCount;
*block_size = blockSize;
return USBD_OK;
},
//IsReady
[](uint8_t lun) -&gt; int8_t {
return USBD_OK;
},
//IsWriteProtected
[](uint8_t lun) -&gt; int8_t {
return USBD_OK;
},
//Read
[](uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) -&gt; int8_t {
memcpy(buf, ramdisk + blk_addr * blockSize, blk_len * blockSize);
return USBD_OK;
},
//Write
[](uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) -&gt; int8_t {
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
memcpy(ramdisk + blk_addr * blockSize, buf, blk_len * blockSize);
return USBD_OK;
},
//GetMaxLun
[]() -&gt; int8_t {return 0;},
(int8_t *)MSC_Inquirydata
};
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
}
</code></pre></div>
</div>
<footer class="col-md-12">
<hr>
<center>Documentation built with <a href="http://www.mkdocs.org/">MkDocs</a>.</center>
</footer>
<script>var base_url = '..';</script>
<script data-main="../mkdocs/js/search.js" src="../mkdocs/js/require.js"></script>
<script src="../js/base.js"></script>
<div class="modal" id="mkdocs_search_modal" tabindex="-1" role="dialog" aria-labelledby="Search Modal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="exampleModalLabel">Search</h4>
</div>
<div class="modal-body">
<p>
From here you can search these documents. Enter
your search terms below.
</p>
<form role="form">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search..." id="mkdocs-search-query">
</div>
</form>
<div id="mkdocs-search-results"></div>
</div>
<div class="modal-footer">
</div>
</div>
</div>
</div>
</body>
</html>