330 lines
9.4 KiB
HTML
330 lines
9.4 KiB
HTML
|
<!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 "msc/usbd_msc.h"
|
||
|
|
||
|
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) -> int8_t {
|
||
|
return USBD_OK;
|
||
|
},
|
||
|
|
||
|
//GetCapacity
|
||
|
[](uint8_t lun, uint32_t *block_num, uint16_t *block_size) -> int8_t {
|
||
|
*block_num = blockCount;
|
||
|
*block_size = blockSize;
|
||
|
return USBD_OK;
|
||
|
},
|
||
|
|
||
|
//IsReady
|
||
|
[](uint8_t lun) -> int8_t {
|
||
|
return USBD_OK;
|
||
|
},
|
||
|
|
||
|
//IsWriteProtected
|
||
|
[](uint8_t lun) -> int8_t {
|
||
|
return USBD_OK;
|
||
|
},
|
||
|
|
||
|
//Read
|
||
|
[](uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) -> 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) -> int8_t {
|
||
|
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
|
||
|
memcpy(ramdisk + blk_addr * blockSize, buf, blk_len * blockSize);
|
||
|
return USBD_OK;
|
||
|
},
|
||
|
|
||
|
//GetMaxLun
|
||
|
[]() -> 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">×</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>
|