1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
33
34
37
38
41
42
46
47
48
51
52
53
59
60
61
62
67
68
69
70
71
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
141
142
143
144
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
172
173
176
177
180
183
184
187
188
191
192
195
196
197
198
199
200
201
202
203
204
207
208
209
210
211
212
213
214
215
218
219
222
223
226
227
230
/* ... */
#ifndef __USBH_MSC_BOT_H
#define __USBH_MSC_BOT_H
#ifdef __cplusplus
extern "C" {
#endif
#include "usbh_core.h"
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
typedef enum
{
BOT_OK = 0,
BOT_FAIL = 1,
BOT_PHASE_ERROR = 2,
BOT_BUSY = 3
...}
BOT_StatusTypeDef;
typedef enum
{
BOT_CMD_IDLE = 0,
BOT_CMD_SEND,
BOT_CMD_WAIT,
...}
BOT_CMDStateTypeDef;
typedef enum
{
BOT_CSW_CMD_PASSED = 0x00,
BOT_CSW_CMD_FAILED = 0x01,
BOT_CSW_PHASE_ERROR = 0x02,
...}
BOT_CSWStatusTypeDef;
typedef enum
{
BOT_SEND_CBW = 1,
BOT_SEND_CBW_WAIT,
BOT_DATA_IN,
BOT_DATA_IN_WAIT,
BOT_DATA_OUT,
BOT_DATA_OUT_WAIT,
BOT_RECEIVE_CSW,
BOT_RECEIVE_CSW_WAIT,
BOT_ERROR_IN,
BOT_ERROR_OUT,
BOT_UNRECOVERED_ERROR
...}
BOT_StateTypeDef;
typedef union
{
struct __CBW
{
uint32_t Signature;
uint32_t Tag;
uint32_t DataTransferLength;
uint8_t Flags;
uint8_t LUN;
uint8_t CBLength;
uint8_t CB[16];
...} field;
uint8_t data[31];
...}
BOT_CBWTypeDef;
typedef union
{
struct __CSW
{
uint32_t Signature;
uint32_t Tag;
uint32_t DataResidue;
uint8_t Status;
...} field;
uint8_t data[13];
...}
BOT_CSWTypeDef;
typedef struct
{
uint32_t data[16];
BOT_StateTypeDef state;
BOT_StateTypeDef prev_state;
BOT_CMDStateTypeDef cmd_state;
BOT_CBWTypeDef cbw;
uint8_t Reserved1;
BOT_CSWTypeDef csw;
uint8_t Reserved2[3];
uint8_t *pbuf;
...}
BOT_HandleTypeDef;
/* ... */
/* ... */
#define BOT_CBW_SIGNATURE 0x43425355U
#define BOT_CBW_TAG 0x20304050U
#define BOT_CSW_SIGNATURE 0x53425355U
#define BOT_CBW_LENGTH 31U
#define BOT_CSW_LENGTH 13U
#define BOT_SEND_CSW_DISABLE 0U
#define BOT_SEND_CSW_ENABLE 1U
#define BOT_DIR_IN 0U
#define BOT_DIR_OUT 1U
#define BOT_DIR_BOTH 2U
#define BOT_PAGE_LENGTH 512U
#define BOT_CBW_CB_LENGTH 16U
#define MAX_BULK_STALL_COUNT_LIMIT 0x04U
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
/* ... */
USBH_StatusTypeDef USBH_MSC_BOT_REQ_Reset(USBH_HandleTypeDef *phost);
USBH_StatusTypeDef USBH_MSC_BOT_REQ_GetMaxLUN(USBH_HandleTypeDef *phost, uint8_t *Maxlun);
USBH_StatusTypeDef USBH_MSC_BOT_Init(USBH_HandleTypeDef *phost);
USBH_StatusTypeDef USBH_MSC_BOT_Process(USBH_HandleTypeDef *phost, uint8_t lun);
USBH_StatusTypeDef USBH_MSC_BOT_Error(USBH_HandleTypeDef *phost, uint8_t lun);
/* ... */
#ifdef __cplusplus
}extern "C" { ... }
#endif
/* ... */
#endif
/* ... */
/* ... */
/* ... */
/* ... */