Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
fee89d52
Commit
fee89d52
authored
Oct 13, 2013
by
Damien
Browse files
Implement crude but functional CDC + MSC USB device.
parent
ed65605e
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
stm/Makefile
View file @
fee89d52
...
...
@@ -9,7 +9,7 @@ LD = arm-none-eabi-ld
CFLAGS_CORTEX_M4
=
-mthumb
-mtune
=
cortex-m4
-mabi
=
aapcs-linux
-mcpu
=
cortex-m4
-mfloat-abi
=
hard
-DSTM32F40XX
-DHSE_VALUE
=
8000000
CFLAGS
=
-I
.
-I
$(PYSRC)
-I
$(FATFSSRC)
-I
$(STMSRC)
-Wall
-ansi
-std
=
gnu99
-Os
-DNDEBUG
$(CFLAGS_CORTEX_M4)
CFLAGS_PY
=
-DEMIT_ENABLE_THUMB
LDFLAGS
=
--nostdlib
-T
stm.ld
LDFLAGS
=
--nostdlib
-T
stm
32f405
.ld
SRC_C
=
\
main.c
\
...
...
@@ -63,10 +63,9 @@ SRC_STM = \
usbd_req.c
\
usbd_usr.c
\
usbd_desc.c
\
usbd_
cdc
_core.c
\
usbd_
pyb
_core.c
\
usbd_cdc_vcp.c
\
usbd_msc_bot.c
\
usbd_msc_core.c
\
usbd_msc_data.c
\
usbd_msc_scsi.c
\
usbd_storage_msd.c
\
...
...
stm/lib/usb_conf.h
View file @
fee89d52
...
...
@@ -170,9 +170,9 @@
#ifdef USB_OTG_FS_CORE
#define RX_FIFO_FS_SIZE 128
#define TX0_FIFO_FS_SIZE 32
#define TX1_FIFO_FS_SIZE
128
#define TX1_FIFO_FS_SIZE
64
#define TX2_FIFO_FS_SIZE 32
#define TX3_FIFO_FS_SIZE
0
#define TX3_FIFO_FS_SIZE
64
// #define USB_OTG_FS_LOW_PWR_MGMT_SUPPORT
// #define USB_OTG_FS_SOF_OUTPUT_ENABLED
...
...
stm/lib/usbd_cdc_conf.h
deleted
100644 → 0
View file @
ed65605e
/**
******************************************************************************
* @file usbd_conf.h
* @author MCD Application Team
* @version V1.1.0
* @date 19-March-2012
* @brief USB Device configuration file
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __USBD_VCP_CONF__H__
#define __USBD_VCP_CONF__H__
/* Includes ------------------------------------------------------------------*/
#include
"usb_conf.h"
/** @defgroup USB_CONF_Exported_Defines
* @{
*/
//#define USBD_CFG_MAX_NUM 1
//#define USBD_ITF_MAX_NUM 1
//#define USBD_SELF_POWERED
/** @defgroup USB_VCP_Class_Layer_Parameter
* @{
*/
#define CDC_IN_EP 0x81
/* EP1 for data IN */
#define CDC_OUT_EP 0x01
/* EP1 for data OUT */
#define CDC_CMD_EP 0x82
/* EP2 for CDC commands */
/* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
#ifdef USE_USB_OTG_HS
#define CDC_DATA_MAX_PACKET_SIZE 512
/* Endpoint IN & OUT Packet size */
#define CDC_CMD_PACKET_SZE 8
/* Control Endpoint Packet size */
#define CDC_IN_FRAME_INTERVAL 40
/* Number of micro-frames between IN transfers */
#define APP_RX_DATA_SIZE 2048
/* Total size of IN buffer:
APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > CDC_IN_FRAME_INTERVAL*8 */
#else
#define CDC_DATA_MAX_PACKET_SIZE 64
/* Endpoint IN & OUT Packet size */
#define CDC_CMD_PACKET_SZE 8
/* Control Endpoint Packet size */
#define CDC_IN_FRAME_INTERVAL 5
/* Number of frames between IN transfers */
#define APP_RX_DATA_SIZE 2048
/* Total size of IN buffer:
APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > CDC_IN_FRAME_INTERVAL */
#endif
/* USE_USB_OTG_HS */
#define APP_FOPS VCP_fops
/**
* @}
*/
/** @defgroup USB_CONF_Exported_Types
* @{
*/
/**
* @}
*/
/** @defgroup USB_CONF_Exported_Macros
* @{
*/
/**
* @}
*/
/** @defgroup USB_CONF_Exported_Variables
* @{
*/
/**
* @}
*/
/** @defgroup USB_CONF_Exported_FunctionsPrototype
* @{
*/
/**
* @}
*/
#endif //__USBD_VCP_CONF__H__
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
stm/lib/usbd_cdc_core.c
deleted
100644 → 0
View file @
ed65605e
This diff is collapsed.
Click to expand it.
stm/lib/usbd_cdc_core.h
View file @
fee89d52
...
...
@@ -45,8 +45,8 @@
/** @defgroup usbd_cdc_Exported_Defines
* @{
*/
#define USB_CDC_CONFIG_DESC_SIZ (
67
)
#define USB_CDC_DESC_SIZ (
67
-9)
#define USB_CDC_CONFIG_DESC_SIZ (
98
)
#define USB_CDC_DESC_SIZ (
98
-9)
#define CDC_DESCRIPTOR_TYPE 0x21
...
...
stm/lib/usbd_cdc_vcp.c
View file @
fee89d52
...
...
@@ -30,8 +30,8 @@
#endif
/* USB_OTG_HS_INTERNAL_DMA_ENABLED */
/* Includes ------------------------------------------------------------------*/
#include
"usbd_conf.h"
#include
"usbd_cdc_vcp.h"
#include
"usbd_cdc_conf.h"
#include
"std.h"
/* Private typedef -----------------------------------------------------------*/
...
...
stm/lib/usbd_conf.h
View file @
fee89d52
#ifndef __USBD_CONF__H__
#define __USBD_CONF__H__
#define USBD_CFG_MAX_NUM 1 // TODO need more than 1?
#define USBD_ITF_MAX_NUM 1 // TODO need more than 1?
#define USBD_CFG_MAX_NUM 1
#define USBD_ITF_MAX_NUM 1 // TODO need more than 1?
// CDC Endpoints parameters
#define CDC_IN_EP 0x81
/* EP1 for data IN */
#define CDC_OUT_EP 0x01
/* EP1 for data OUT */
#define CDC_CMD_EP 0x82
/* EP2 for CDC commands */
#define CDC_DATA_MAX_PACKET_SIZE 64
/* Endpoint IN & OUT Packet size */
#define CDC_CMD_PACKET_SZE 8
/* Control Endpoint Packet size */
#define CDC_IN_FRAME_INTERVAL 5
/* Number of frames between IN transfers */
#define APP_RX_DATA_SIZE 2048
/* Total size of IN buffer:
APP_RX_DATA_SIZE*8/MAX_BAUDARATE*1000 should be > CDC_IN_FRAME_INTERVAL */
// MSC parameters
#define MSC_IN_EP 0x83
#define MSC_OUT_EP 0x03
#define MSC_MAX_PACKET 64
#define MSC_MEDIA_PACKET 4096
// for both?
#define APP_FOPS VCP_fops
#endif //__USBD_CONF__H__
stm/lib/usbd_desc.c
View file @
fee89d52
...
...
@@ -104,26 +104,26 @@ USBD_DEVICE USR_desc =
#endif
#endif
/* USB_OTG_HS_INTERNAL_DMA_ENABLED */
/* USB Standard Device Descriptor */
__ALIGN_BEGIN
uint8_t
USBD_DeviceDesc
[
USB_SIZ_DEVICE_DESC
]
__ALIGN_END
=
{
0x12
,
/
*
bLength
*/
USB_DEVICE_DESCRIPTOR_TYPE
,
/
*
bDescriptorType
*/
0x00
,
/
*
bcdUSB
*/
__ALIGN_BEGIN
static
uint8_t
USBD_DeviceDesc
[
USB_SIZ_DEVICE_DESC
]
__ALIGN_END
=
{
0x12
,
/
/
bLength
USB_DEVICE_DESCRIPTOR_TYPE
,
/
/
bDescriptorType
0x00
,
/
/
bcdUSB
: v2.0
0x02
,
0x
00
,
/
*
bDeviceClass
*/
0x0
0
,
/
*
bDeviceSubClass
*/
0x0
0
,
/
*
bDeviceProtocol
*/
USB_OTG_MAX_EP0_SIZE
,
/*
bMaxPacketSize
*/
LOBYTE
(
USBD_VID
),
/
*
idVendor
*/
HIBYTE
(
USBD_VID
),
/
*
idVendor
*/
LOBYTE
(
USBD_PID
),
/
*
idVendor
*/
HIBYTE
(
USBD_PID
),
/
*
idVendor
*/
0x00
,
/
*
bcdDevice rel. 2.00
*/
0x
ef
,
/
/
bDeviceClass
: Miscellaneous Device Class
0x0
2
,
/
/
bDeviceSubClass
: Common Class
0x0
1
,
/
/
bDeviceProtocol
: Interface Association Descriptor
USB_OTG_MAX_EP0_SIZE
,
//
bMaxPacketSize
LOBYTE
(
USBD_VID
),
/
/
idVendor
HIBYTE
(
USBD_VID
),
/
/
idVendor
LOBYTE
(
USBD_PID
),
/
/
idVendor
HIBYTE
(
USBD_PID
),
/
/
idVendor
0x00
,
/
/
bcdDevice
:
rel. 2.00
0x02
,
USBD_IDX_MFC_STR
,
/*Index of manufacturer string*/
USBD_IDX_PRODUCT_STR
,
/*Index of product string*/
USBD_IDX_SERIAL_STR
,
/*Index of serial number string*/
USBD_CFG_MAX_NUM
/
*
bNumConfigurations
*/
USBD_CFG_MAX_NUM
/
/
bNumConfigurations
: 1
}
;
/* USB_DeviceDescriptor */
#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
...
...
stm/lib/usbd_desc.h
View file @
fee89d52
...
...
@@ -50,6 +50,7 @@
#define USB_STRING_DESCRIPTOR_TYPE 0x03
#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
#define USB_INTERFACE_ASSOCIATION_TYPE 0x0b
#define USB_SIZ_DEVICE_DESC 18
#define USB_SIZ_STRING_LANGID 4
...
...
@@ -77,7 +78,7 @@
/** @defgroup USBD_DESC_Exported_Variables
* @{
*/
extern
uint8_t
USBD_DeviceDesc
[
USB_SIZ_DEVICE_DESC
];
//
extern uint8_t USBD_DeviceDesc [USB_SIZ_DEVICE_DESC];
extern
uint8_t
USBD_StrDesc
[
USB_MAX_STR_DESC_SIZ
];
extern
uint8_t
USBD_OtherSpeedCfgDesc
[
USB_LEN_CFG_DESC
];
extern
uint8_t
USBD_DeviceQualifierDesc
[
USB_LEN_DEV_QUALIFIER_DESC
];
...
...
stm/lib/usbd_msc_bot.c
View file @
fee89d52
...
...
@@ -30,7 +30,7 @@
#include
"usbd_msc_scsi.h"
#include
"usbd_ioreq.h"
#include
"usbd_msc_mem.h"
#include
"usbd_
msc_
conf.h"
#include
"usbd_conf.h"
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
* @{
...
...
stm/lib/usbd_msc_conf.h
deleted
100644 → 0
View file @
ed65605e
/**
******************************************************************************
* @file usbd_conf.h
* @author MCD Application Team
* @version V1.1.0
* @date 19-March-2012
* @brief USB Device configuration file
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __USBD_CONF__H__
#define __USBD_CONF__H__
/* Includes ------------------------------------------------------------------*/
#include
"usb_conf.h"
/** @defgroup USB_CONF_Exported_Defines
* @{
*/
//#define USBD_CFG_MAX_NUM 1
//#define USBD_ITF_MAX_NUM 1
//#define USBD_SELF_POWERED
//#define USB_MAX_STR_DESC_SIZ 64
/* Class Layer Parameter */
#define MSC_IN_EP 0x81
#define MSC_OUT_EP 0x01
#ifdef USE_USB_OTG_HS
#ifdef USE_ULPI_PHY
#define MSC_MAX_PACKET 512
#else
#define MSC_MAX_PACKET 64
#endif
#else
/*USE_USB_OTG_FS*/
#define MSC_MAX_PACKET 64
#endif
#define MSC_MEDIA_PACKET 4096
/**
* @}
*/
/** @defgroup USB_CONF_Exported_TypesDefinitions
* @{
*/
/**
* @}
*/
/** @defgroup USB_CONF_Exported_Macros
* @{
*/
/**
* @}
*/
/** @defgroup USB_CONF_Exported_Variables
* @{
*/
/**
* @}
*/
/** @defgroup USB_CONF_Exported_FunctionsPrototype
* @{
*/
/**
* @}
*/
#endif //__USBD_CONF__H__
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
stm/lib/usbd_msc_core.c
deleted
100644 → 0
View file @
ed65605e
/**
******************************************************************************
* @file usbd_msc_core.c
* @author MCD Application Team
* @version V1.1.0
* @date 19-March-2012
* @brief This file provides all the MSC core functions.
*
* @verbatim
*
* ===================================================================
* MSC Class Description
* ===================================================================
* This module manages the MSC class V1.0 following the "Universal
* Serial Bus Mass Storage Class (MSC) Bulk-Only Transport (BOT) Version 1.0
* Sep. 31, 1999".
* This driver implements the following aspects of the specification:
* - Bulk-Only Transport protocol
* - Subclass : SCSI transparent command set (ref. SCSI Primary Commands - 3 (SPC-3))
*
* @endverbatim
*
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include
"usbd_msc_mem.h"
#include
"usbd_msc_core.h"
#include
"usbd_msc_bot.h"
#include
"usbd_msc_conf.h"
#include
"usbd_req.h"
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
* @{
*/
/** @defgroup MSC_CORE
* @brief Mass storage core module
* @{
*/
/** @defgroup MSC_CORE_Private_TypesDefinitions
* @{
*/
/**
* @}
*/
/** @defgroup MSC_CORE_Private_Defines
* @{
*/
/**
* @}
*/
/** @defgroup MSC_CORE_Private_Macros
* @{
*/
/**
* @}
*/
/** @defgroup MSC_CORE_Private_FunctionPrototypes
* @{
*/
uint8_t
USBD_MSC_Init
(
void
*
pdev
,
uint8_t
cfgidx
);
uint8_t
USBD_MSC_DeInit
(
void
*
pdev
,
uint8_t
cfgidx
);
uint8_t
USBD_MSC_Setup
(
void
*
pdev
,
USB_SETUP_REQ
*
req
);
uint8_t
USBD_MSC_DataIn
(
void
*
pdev
,
uint8_t
epnum
);
uint8_t
USBD_MSC_DataOut
(
void
*
pdev
,
uint8_t
epnum
);
uint8_t
*
USBD_MSC_GetCfgDesc
(
uint8_t
speed
,
uint16_t
*
length
);
#ifdef USB_OTG_HS_CORE
uint8_t
*
USBD_MSC_GetOtherCfgDesc
(
uint8_t
speed
,
uint16_t
*
length
);
#endif
uint8_t
USBD_MSC_CfgDesc
[
USB_MSC_CONFIG_DESC_SIZ
];
/**
* @}
*/
/** @defgroup MSC_CORE_Private_Variables
* @{
*/
USBD_Class_cb_TypeDef
USBD_MSC_cb
=
{
USBD_MSC_Init
,
USBD_MSC_DeInit
,
USBD_MSC_Setup
,
NULL
,
/*EP0_TxSent*/
NULL
,
/*EP0_RxReady*/
USBD_MSC_DataIn
,
USBD_MSC_DataOut
,
NULL
,
/*SOF */
NULL
,
NULL
,
USBD_MSC_GetCfgDesc
,
#ifdef USB_OTG_HS_CORE
USBD_MSC_GetOtherCfgDesc
,
#endif
};
#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
#if defined ( __ICCARM__ )
/*!< IAR Compiler */
#pragma data_alignment=4
#endif
#endif
/* USB_OTG_HS_INTERNAL_DMA_ENABLED */
/* USB Mass storage device Configuration Descriptor */
/* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
__ALIGN_BEGIN
uint8_t
USBD_MSC_CfgDesc
[
USB_MSC_CONFIG_DESC_SIZ
]
__ALIGN_END
=
{
0x09
,
/* bLength: Configuation Descriptor size */
USB_DESC_TYPE_CONFIGURATION
,
/* bDescriptorType: Configuration */
USB_MSC_CONFIG_DESC_SIZ
,
0x00
,
0x01
,
/* bNumInterfaces: 1 interface */
0x01
,
/* bConfigurationValue: */
0x04
,
/* iConfiguration: */
0xC0
,
/* bmAttributes: */
0x32
,
/* MaxPower 100 mA */
/******************** Mass Storage interface ********************/
0x09
,
/* bLength: Interface Descriptor size */
0x04
,
/* bDescriptorType: */
0x00
,
/* bInterfaceNumber: Number of Interface */
0x00
,
/* bAlternateSetting: Alternate setting */
0x02
,
/* bNumEndpoints*/
0x08
,
/* bInterfaceClass: MSC Class */
0x06
,
/* bInterfaceSubClass : SCSI transparent*/
0x50
,
/* nInterfaceProtocol */
0x05
,
/* iInterface: */
/******************** Mass Storage Endpoints ********************/
0x07
,
/*Endpoint descriptor length = 7*/
0x05
,
/*Endpoint descriptor type */
MSC_IN_EP
,
/*Endpoint address (IN, address 1) */
0x02
,
/*Bulk endpoint type */
LOBYTE
(
MSC_MAX_PACKET
),
HIBYTE
(
MSC_MAX_PACKET
),
0x00
,
/*Polling interval in milliseconds */
0x07
,
/*Endpoint descriptor length = 7 */
0x05
,
/*Endpoint descriptor type */
MSC_OUT_EP
,
/*Endpoint address (OUT, address 1) */
0x02
,
/*Bulk endpoint type */
LOBYTE
(
MSC_MAX_PACKET
),
HIBYTE
(
MSC_MAX_PACKET
),
0x00
/*Polling interval in milliseconds*/
};
#ifdef USB_OTG_HS_CORE
#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
#if defined ( __ICCARM__ )
/*!< IAR Compiler */
#pragma data_alignment=4
#endif
#endif
/* USB_OTG_HS_INTERNAL_DMA_ENABLED */
__ALIGN_BEGIN
uint8_t
USBD_MSC_OtherCfgDesc
[
USB_MSC_CONFIG_DESC_SIZ
]
__ALIGN_END
=
{
0x09
,
/* bLength: Configuation Descriptor size */
USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION
,
USB_MSC_CONFIG_DESC_SIZ
,
0x00
,
0x01
,
/* bNumInterfaces: 1 interface */
0x01
,
/* bConfigurationValue: */
0x04
,
/* iConfiguration: */
0xC0
,
/* bmAttributes: */
0x32
,
/* MaxPower 100 mA */
/******************** Mass Storage interface ********************/
0x09
,
/* bLength: Interface Descriptor size */
0x04
,
/* bDescriptorType: */
0x00
,
/* bInterfaceNumber: Number of Interface */
0x00
,
/* bAlternateSetting: Alternate setting */
0x02
,
/* bNumEndpoints*/
0x08
,
/* bInterfaceClass: MSC Class */
0x06
,
/* bInterfaceSubClass : SCSI transparent command set*/
0x50
,
/* nInterfaceProtocol */
0x05
,
/* iInterface: */
/******************** Mass Storage Endpoints ********************/
0x07
,
/*Endpoint descriptor length = 7*/
0x05
,
/*Endpoint descriptor type */
MSC_IN_EP
,
/*Endpoint address (IN, address 1) */
0x02
,
/*Bulk endpoint type */
0x40
,
0x00
,
0x00
,
/*Polling interval in milliseconds */
0x07
,
/*Endpoint descriptor length = 7 */
0x05
,
/*Endpoint descriptor type */
MSC_OUT_EP
,
/*Endpoint address (OUT, address 1) */
0x02
,
/*Bulk endpoint type */
0x40
,
0x00
,
0x00
/*Polling interval in milliseconds*/
};
#endif
#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
#if defined ( __ICCARM__ )
/*!< IAR Compiler */
#pragma data_alignment=4
#endif
#endif
/* USB_OTG_HS_INTERNAL_DMA_ENABLED */
__ALIGN_BEGIN
static
uint8_t
USBD_MSC_MaxLun
__ALIGN_END
=
0
;
#ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED
#if defined ( __ICCARM__ )
/*!< IAR Compiler */
#pragma data_alignment=4
#endif
#endif
/* USB_OTG_HS_INTERNAL_DMA_ENABLED */
__ALIGN_BEGIN
static
uint8_t
USBD_MSC_AltSet
__ALIGN_END
=
0
;
/**
* @}
*/
/** @defgroup MSC_CORE_Private_Functions
* @{
*/
/**
* @brief USBD_MSC_Init
* Initialize the mass storage configuration
* @param pdev: device instance
* @param cfgidx: configuration index
* @retval status
*/
uint8_t
USBD_MSC_Init
(
void
*
pdev
,