Skip to content

Commit 25c0d90

Browse files
committed
USBHOST STM : add more board
NUCLEO : F411RE, L476VG, F746ZG DISCO : L476VG
1 parent 8336904 commit 25c0d90

File tree

5 files changed

+147
-13
lines changed

5 files changed

+147
-13
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
/* Copyright (c) 2016 mbed.org, MIT License
2+
*
3+
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
4+
* and associated documentation files (the "Software"), to deal in the Software without
5+
* restriction, including without limitation the rights to use, copy, modify, merge, publish,
6+
* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
7+
* Software is furnished to do so, subject to the following conditions:
8+
*
9+
* The above copyright notice and this permission notice shall be included in all copies or
10+
* substantial portions of the Software.
11+
*
12+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
13+
* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
14+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
15+
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17+
*/
18+
#ifndef USBHALHOST_DISCOL476VG
19+
#define USBHALHOST_DISCOL476VG
20+
21+
#define USBHAL_IRQn OTG_FS_IRQn
22+
23+
#define HCCA_SIZE sizeof(HCD_HandleTypeDef)
24+
#define ED_SIZE sizeof(HCED)
25+
#define TD_SIZE sizeof(HCTD)
26+
27+
#define TOTAL_SIZE (HCCA_SIZE + (MAX_ENDPOINT*ED_SIZE) + (MAX_TD*TD_SIZE))
28+
/* STM device FS have 11 channels (definition is for 60 channels) */
29+
static volatile uint8_t usb_buf[TOTAL_SIZE];
30+
typedef struct
31+
{
32+
/* store the request ongoing on each endpoit */
33+
/* 1st field of structure avoid giving knowledge of all structure to
34+
* endpoint */
35+
volatile uint32_t addr[MAX_ENDPOINT];
36+
USBHALHost *inst;
37+
void (USBHALHost::*deviceConnected)(int hub, int port, bool lowSpeed, USBHostHub * hub_parent);
38+
void (USBHALHost::*deviceDisconnected)(int hub, int port, USBHostHub * hub_parent, volatile uint32_t addr);
39+
void (USBHALHost::*transferCompleted)(volatile uint32_t addr);
40+
}USBHALHost_Private_t;
41+
42+
static gpio_t gpio_vbus;
43+
44+
#define VBUS_OFF 1
45+
#define VBUS_ON 0
46+
#define USB_VBUS_CONFIG \
47+
do {\
48+
gpio_init_out_ex(&gpio_vbus, PC_9, VBUS_OFF);\
49+
}while(0);
50+
51+
52+
void usb_vbus( uint8_t state)
53+
{
54+
if(state == 0)
55+
{
56+
gpio_write(&gpio_vbus, VBUS_OFF);
57+
}
58+
else
59+
{
60+
gpio_write(&gpio_vbus, VBUS_ON);
61+
}
62+
wait(0.2);
63+
}
64+
65+
66+
USBHALHost::USBHALHost() {
67+
instHost = this;
68+
HCD_HandleTypeDef *hhcd;
69+
USBHALHost_Private_t *HALPriv = new(USBHALHost_Private_t);
70+
memset(HALPriv, 0, sizeof(USBHALHost_Private_t));
71+
memInit();
72+
memset((void*)usb_hcca, 0, HCCA_SIZE);
73+
hhcd = (HCD_HandleTypeDef *)usb_hcca;
74+
hhcd->Instance = USB_OTG_FS;
75+
hhcd->pData = (void*)HALPriv;
76+
hhcd->Init.Host_channels = 11;
77+
/* for now failed with dma */
78+
hhcd->Init.dma_enable = 0;
79+
hhcd->Init.speed = HCD_SPEED_FULL;
80+
hhcd->Init.phy_itface = HCD_PHY_EMBEDDED;
81+
hhcd->Init.use_external_vbus = 1;
82+
HALPriv->inst = this;
83+
HALPriv->deviceConnected = &USBHALHost::deviceConnected;
84+
HALPriv->deviceDisconnected = &USBHALHost::deviceDisconnected;
85+
HALPriv->transferCompleted = &USBHALHost::transferCompleted;
86+
for (int i = 0; i < MAX_ENDPOINT; i++) {
87+
edBufAlloc[i] = false;
88+
HALPriv->addr[i]=(uint32_t)-1;
89+
}
90+
for (int i = 0; i < MAX_TD; i++) {
91+
tdBufAlloc[i] = false;
92+
}
93+
__HAL_RCC_PWR_CLK_ENABLE();
94+
#ifdef TARGET_STM32L4
95+
HAL_PWREx_EnableVddUSB();
96+
#endif
97+
98+
/* Configure USB HS GPIOs */
99+
__HAL_RCC_GPIOA_CLK_ENABLE();
100+
101+
/*USB DM and DP */
102+
pin_function(PA_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
103+
pin_function(PA_12, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
104+
105+
/* Configure VBUS Pin */
106+
__HAL_RCC_GPIOC_CLK_ENABLE();
107+
pin_function(PC_11, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF10_OTG_FS));
108+
/* Configure POWER_SWITCH IO pin */
109+
USB_VBUS_CONFIG;
110+
__HAL_RCC_SYSCFG_CLK_ENABLE();
111+
112+
/* Enable USB FS Clocks */
113+
__HAL_RCC_USB_OTG_FS_CLK_ENABLE();
114+
/* Set USBFS Interrupt priority */
115+
HAL_NVIC_SetPriority(USBHAL_IRQn, 5, 0);
116+
NVIC_SetVector(USBHAL_IRQn, (uint32_t)&_usbisr);
117+
}
118+
#endif

features/unsupported/USBHost/USBHost/TARGET_STM/USBHALHost_STM_144_64pins.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ USBHALHost::USBHALHost() {
9696
for (int i = 0; i < MAX_TD; i++) {
9797
tdBufAlloc[i] = false;
9898
}
99+
__HAL_RCC_PWR_CLK_ENABLE();
100+
#ifdef TARGET_STM32L4
101+
HAL_PWREx_EnableVddUSB();
102+
#endif
99103
/* Configure USB FS GPIOs */
100104
__HAL_RCC_GPIOA_CLK_ENABLE();
101105

@@ -105,6 +109,7 @@ USBHALHost::USBHALHost() {
105109
/*USB ID */
106110
pin_function(PA_10, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS));
107111

112+
__HAL_RCC_SYSCFG_CLK_ENABLE();
108113
/* Configure POWER_SWITCH IO pin */
109114
USB_VBUS_CONFIG;
110115
/* Enable USB FS Clocks */

features/unsupported/USBHost/USBHost/TARGET_STM/USBHALHost_STM_TARGET.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818

1919
/* 144 pins boards */
2020
#if defined(TARGET_NUCLEO_F429ZI) || defined(TARGET_NUCLEO_F446ZE) || defined(TARGET_NUCLEO_F207ZG) \
21-
|| defined(TARGET_NUCLEO_F767ZI)
21+
|| defined(TARGET_NUCLEO_F767ZI) || defined(TARGET_NUCLEO_F746ZG)
2222
#include "USBHALHost_STM_144_64pins.h"
2323
#endif
2424

2525
/* 64 pins boards */
26-
#if defined(TARGET_NUCLEO_F401RE)
26+
#if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_L476RG) || defined(TARGET_NUCLEO_F411RE)
2727
#define USBHALHOST_64pins
2828
#include "USBHALHost_STM_144_64pins.h"
2929
#endif
@@ -33,3 +33,7 @@
3333
#ifdef TARGET_DISCO_F429ZI
3434
#include "USBHALHost_DISCOF429ZI.h"
3535
#endif
36+
37+
#ifdef TARGET_DISCO_L476VG
38+
#include "USBHALHost_DISCOL476VG.h"
39+
#endif

targets/targets.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@
842842
"supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"],
843843
"inherits": ["Target"],
844844
"detect_code": ["0740"],
845-
"macros": ["TRANSACTION_QUEUE_SIZE_SPI=2", "USB_STM_HAL"],
845+
"macros": ["TRANSACTION_QUEUE_SIZE_SPI=2", "USB_STM_HAL", "USBHOST_OTHER"],
846846
"device_has": ["ANALOGIN", "ERROR_RED", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"],
847847
"release_versions": ["2", "5"],
848848
"device_name": "STM32F411RE"
@@ -949,7 +949,7 @@
949949
"extra_labels": ["STM", "STM32F7", "STM32F746", "STM32F746ZG", "F746_F756"],
950950
"supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"],
951951
"default_toolchain": "ARM",
952-
"macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"],
952+
"macros": ["TRANSACTION_QUEUE_SIZE_SPI=2", "USBHOST_OTHER"],
953953
"supported_form_factors": ["ARDUINO"],
954954
"detect_code": ["0816"],
955955
"device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"],
@@ -1068,7 +1068,7 @@
10681068
"supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"],
10691069
"inherits": ["Target"],
10701070
"detect_code": ["0765"],
1071-
"macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"],
1071+
"macros": ["TRANSACTION_QUEUE_SIZE_SPI=2","USBHOST_OTHER"],
10721072
"device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"],
10731073
"release_versions": ["2", "5"],
10741074
"device_name": "stm32l476rg"
@@ -1233,7 +1233,7 @@
12331233
"extra_labels": ["STM", "STM32L4", "STM32L476VG"],
12341234
"supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"],
12351235
"detect_code": ["0820"],
1236-
"macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"],
1236+
"macros": ["TRANSACTION_QUEUE_SIZE_SPI=2", "USBHOST_OTHER"],
12371237
"device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"],
12381238
"release_versions": ["2", "5"],
12391239
"device_name": "stm32l476vg"

tools/build_travis.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,17 @@
5353
{ "target": "NUCLEO_F334R8", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "fat"] },
5454
{ "target": "NUCLEO_F401RE", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat", "usb_host"] },
5555
{ "target": "NUCLEO_F410RB", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "fat"] },
56-
{ "target": "NUCLEO_F411RE", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat"] },
56+
{ "target": "NUCLEO_F411RE", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat", "usb_host"] },
5757
{ "target": "NUCLEO_F412ZG", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "fat"] },
5858
{ "target": "NUCLEO_L432KC", "toolchains": "GCC_ARM", "libs": ["dsp", "fat"] },
59-
{ "target": "NUCLEO_L476RG", "toolchains": "GCC_ARM", "libs": ["dsp", "fat"] },
59+
{ "target": "NUCLEO_L476RG", "toolchains": "GCC_ARM", "libs": ["dsp", "fat", "rtos", "usb_host"] },
6060
{ "target": "NUCLEO_L011K4", "toolchains": "GCC_ARM", "libs": ["dsp"] },
6161
{ "target": "NUCLEO_L031K6", "toolchains": "GCC_ARM", "libs": ["dsp"] },
6262
{ "target": "NUCLEO_L073RZ", "toolchains": "GCC_ARM", "libs": ["dsp", "fat"] },
6363
{ "target": "NUCLEO_F429ZI", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat", "usb_host"] },
6464
{ "target": "NUCLEO_F446RE", "toolchains": "GCC_ARM", "libs": ["dsp", "fat"] },
6565
{ "target": "NUCLEO_F446ZE", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat", "usb_host"] },
66-
{ "target": "NUCLEO_F746ZG", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat" ] },
66+
{ "target": "NUCLEO_F746ZG", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat", "usb_host" ] },
6767
{ "target": "NUCLEO_F767ZI", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat", "usb_host"] },
6868

6969
{ "target": "MOTE_L152RC", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "fat"] },
@@ -126,7 +126,7 @@
126126
{ "target": "SAMD21J18A", "toolchains": "GCC_ARM", "libs": ["dsp", "fat"] },
127127
{ "target": "SAMD21G18A", "toolchains": "GCC_ARM", "libs": ["dsp", "fat"] },
128128
{ "target": "SAML21J18A", "toolchains": "GCC_ARM", "libs": ["dsp", "fat"] },
129-
{ "target": "DISCO_L476VG", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat"] },
129+
{ "target": "DISCO_L476VG", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat", "usb_host"] },
130130

131131
{ "target": "NUMAKER_PFM_NUC472", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat"] },
132132
{ "target": "NUMAKER_PFM_M453", "toolchains": "GCC_ARM", "libs": ["dsp", "rtos", "usb", "fat"] },
@@ -187,7 +187,7 @@
187187
"toolchains": "GCC_ARM",
188188
"tests": {"" : ["MBED_2", "MBED_10", "MBED_11", "MBED_16"],
189189
"rtos" : ["RTOS_1", "RTOS_2", "RTOS_3"],
190-
"usb" : ["USB_1", "USB_2" ,"USB_3"],
190+
"usb" : ["USB_1", "USB_2" ,"USB_3", "USB_10", "USB_11"],
191191
}
192192
},
193193
{"target": "NUCLEO_F429ZI",
@@ -208,7 +208,7 @@
208208
"toolchains": "GCC_ARM",
209209
"tests": {"" : ["MBED_2", "MBED_10", "MBED_11", "MBED_16"],
210210
"rtos" : ["RTOS_1", "RTOS_2", "RTOS_3"],
211-
"usb" : ["USB_1", "USB_2" ,"USB_3"],
211+
"usb" : ["USB_1", "USB_2" ,"USB_3", "USB_10", "USB_11"],
212212
}
213213
},
214214
{"target": "NUCLEO_F767ZI",
@@ -218,6 +218,13 @@
218218
"usb" : ["USB_1", "USB_2" ,"USB_3", "USB_10", "USB_11"],
219219
}
220220
},
221+
{"target": "NUCLEO_L476RG",
222+
"toolchains": "GCC_ARM",
223+
"tests": {"" : ["MBED_2", "MBED_10", "MBED_11", "MBED_16"],
224+
"rtos" : ["RTOS_1", "RTOS_2", "RTOS_3"],
225+
"usb" : [ "USB_10", "USB_11"],
226+
}
227+
},
221228
{"target": "DISCO_F429ZI",
222229
"toolchains": "GCC_ARM",
223230
"tests": {"" : ["MBED_2", "MBED_10", "MBED_11", "MBED_16"],
@@ -243,7 +250,7 @@
243250
"toolchains": "GCC_ARM",
244251
"tests": {"" : ["MBED_2", "MBED_10", "MBED_11", "MBED_16"],
245252
"rtos" : ["RTOS_1", "RTOS_2", "RTOS_3"],
246-
"usb" : ["USB_1", "USB_2" ,"USB_3"],
253+
"usb" : ["USB_1", "USB_2" ,"USB_3", "USB_10", "USB_11"],
247254
}
248255
},
249256
{"target": "NUMAKER_PFM_NUC472",

0 commit comments

Comments
 (0)