Skip to content

Commit 282aff5

Browse files
authored
Merge pull request #24 from arduino/opta
Add support for OPTA
2 parents ade74f4 + 26dedb1 commit 282aff5

File tree

5 files changed

+229
-14
lines changed

5 files changed

+229
-14
lines changed

app/board.h

+68-1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@
7373
#define BOARD_RED_LED PK_5
7474
#define BOARD_BLUE_LED PK_7
7575

76+
#define BOARD_LED_OFF 1
77+
7678
#define BOARD_USB_RESET PJ_4
7779
#define BOARD_ETH_RESET PJ_15
7880
#define BOARD_BOOT_SEL PI_8
@@ -142,6 +144,8 @@
142144
#define BOARD_RED_LED PE_3
143145
#define BOARD_BLUE_LED PF_4
144146

147+
#define BOARD_LED_OFF 1
148+
145149
#define BOARD_USB_RESET PA_2
146150

147151
#define BOARD_I2C_SCL PF_1
@@ -204,8 +208,71 @@
204208
#define BOARD_USB_OTG_HS_DIR_ALTERNATE (GPIO_AF10_OTG2_HS)
205209
#define BOARD_USB_OTG_HS_DIR_GPIO (GPIOC)
206210

207-
#else
211+
#elif defined TARGET_OPTA
212+
#define BOARD_GREEN_LED PH_12
213+
#define BOARD_RED_LED PH_11
214+
#define BOARD_BLUE_LED PE_5
215+
216+
#define BOARD_LED_OFF 0
217+
218+
#define BOARD_ETH_RESET PJ_15
219+
220+
#define BOARD_USBD_VID 0x2341
221+
#define BOARD_USBD_PID 0x0364
222+
223+
#define BOARD_USBD_STRING "Opta"
224+
225+
#define BOARD_QSPI_SO0 PD_11
226+
#define BOARD_QSPI_SO1 PD_12
227+
#define BOARD_QSPI_SO2 PE_2
228+
#define BOARD_QSPI_SO3 PD_13
229+
#define BOARD_QSPI_SCK PB_2
230+
#define BOARD_QSPI_CS PG_6
208231

232+
#define BOARD_USB_OTG_FS_DM_DP_PIN (GPIO_PIN_11 | GPIO_PIN_12)
233+
#define BOARD_USB_OTG_FS_DM_DP_MODE (GPIO_MODE_AF_PP)
234+
#define BOARD_USB_OTG_FS_DM_DP_PULL (GPIO_PULLUP)
235+
#define BOARD_USB_OTG_FS_DM_DP_SPEED (GPIO_SPEED_FREQ_VERY_HIGH)
236+
#define BOARD_USB_OTG_FS_DM_DP_ALTERNATE (GPIO_AF10_OTG1_FS)
237+
#define BOARD_USB_OTG_FS_DM_DP_GPIO (GPIOA)
238+
239+
#define BOARD_USB_OTG_HS_CLK_PIN (GPIO_PIN_5)
240+
#define BOARD_USB_OTG_HS_CLK_MODE (GPIO_MODE_AF_PP)
241+
#define BOARD_USB_OTG_HS_CLK_PULL (GPIO_NOPULL)
242+
#define BOARD_USB_OTG_HS_CLK_SPEED (GPIO_SPEED_FREQ_VERY_HIGH)
243+
#define BOARD_USB_OTG_HS_CLK_ALTERNATE (GPIO_AF10_OTG2_HS)
244+
#define BOARD_USB_OTG_HS_CLK_GPIO (GPIOA)
245+
246+
#define BOARD_USB_OTG_HS_D0_PIN (GPIO_PIN_3)
247+
#define BOARD_USB_OTG_HS_D0_MODE (GPIO_MODE_AF_PP)
248+
#define BOARD_USB_OTG_HS_D0_PULL (GPIO_NOPULL)
249+
#define BOARD_USB_OTG_HS_D0_SPEED (GPIO_SPEED_FREQ_VERY_HIGH)
250+
#define BOARD_USB_OTG_HS_D0_ALTERNATE (GPIO_AF10_OTG2_HS)
251+
#define BOARD_USB_OTG_HS_D0_GPIO (GPIOA)
252+
253+
#define BOARD_USB_OTG_HS_D1_D7_PIN (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_5 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13)
254+
#define BOARD_USB_OTG_HS_D1_D7_MODE (GPIO_MODE_AF_PP)
255+
#define BOARD_USB_OTG_HS_D1_D7_PULL (GPIO_NOPULL)
256+
#define BOARD_USB_OTG_HS_D1_D7_ALTERNATE (GPIO_AF10_OTG2_HS)
257+
#define BOARD_USB_OTG_HS_D1_D7_GPIO (GPIOB)
258+
259+
#define BOARD_USB_OTG_HS_STP_PIN (GPIO_PIN_0)
260+
#define BOARD_USB_OTG_HS_STP_MODE (GPIO_MODE_AF_PP)
261+
#define BOARD_USB_OTG_HS_STP_PULL (GPIO_NOPULL)
262+
#define BOARD_USB_OTG_HS_STP_ALTERNATE (GPIO_AF10_OTG2_HS)
263+
#define BOARD_USB_OTG_HS_STP_GPIO (GPIOC)
264+
265+
#define BOARD_USB_OTG_HS_NXT_PIN (GPIO_PIN_3)
266+
#define BOARD_USB_OTG_HS_NXT_MODE (GPIO_MODE_AF_PP)
267+
#define BOARD_USB_OTG_HS_NXT_PULL (GPIO_NOPULL)
268+
#define BOARD_USB_OTG_HS_NXT_ALTERNATE (GPIO_AF10_OTG2_HS)
269+
#define BOARD_USB_OTG_HS_NXT_GPIO (GPIOC)
270+
271+
#define BOARD_USB_OTG_HS_DIR_PIN (GPIO_PIN_2)
272+
#define BOARD_USB_OTG_HS_DIR_MODE (GPIO_MODE_AF_PP)
273+
#define BOARD_USB_OTG_HS_DIR_PULL (GPIO_NOPULL)
274+
#define BOARD_USB_OTG_HS_DIR_ALTERNATE (GPIO_AF10_OTG2_HS)
275+
#define BOARD_USB_OTG_HS_DIR_GPIO (GPIOC)
209276
#endif
210277

211278
#endif /* __BOARD_H */

app/main.cpp

+29-12
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,13 @@
4141
#define USE_PLL_HSE_XTAL 0x4 // Use external xtal (X3 on board - not provided by default)
4242
#define USE_PLL_HSI 0x2 // Use HSI internal clock
4343

44+
#if ((CLOCK_SOURCE) & USE_PLL_HSI)
45+
extern "C" uint8_t SetSysClock_PLL_HSI(void);
46+
#elif ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC)
4447
extern "C" uint8_t SetSysClock_PLL_HSE(uint8_t bypass, bool lowspeed);
48+
#else
49+
50+
#endif
4551

4652
volatile const uint8_t bootloader_data[] __attribute__ ((section (".bootloader_version"), used)) = {
4753
BOOTLOADER_CONFIG_MAGIC,
@@ -63,23 +69,24 @@ volatile const uint8_t bootloader_identifier[] __attribute__ ((section (".bootlo
6369
USBD_HandleTypeDef USBD_Device;
6470
#endif
6571

66-
DigitalOut red(BOARD_RED_LED, 1);
67-
DigitalOut green(BOARD_GREEN_LED, 1);
68-
DigitalOut blue(BOARD_BLUE_LED, 1);
69-
#if defined(TARGET_NICLA_VISION)
70-
bool boot_sel = false;
71-
#else
72+
DigitalOut red(BOARD_RED_LED, BOARD_LED_OFF);
73+
DigitalOut green(BOARD_GREEN_LED, BOARD_LED_OFF);
74+
DigitalOut blue(BOARD_BLUE_LED, BOARD_LED_OFF);
75+
76+
#if defined (BOARD_BOOT_SEL)
7277
DigitalIn boot_sel(BOARD_BOOT_SEL,PullDown);
78+
#else
79+
bool boot_sel = false;
7380
#endif
7481

7582
Ticker swap_ticker;
7683
bool debug_enabled = false;
7784

7885
static void led_swap_feedback_off(void) {
7986
swap_ticker.detach();
80-
red = 1;
81-
green = 1;
82-
blue = 1;
87+
red = BOARD_LED_OFF;
88+
green = BOARD_LED_OFF;
89+
blue = BOARD_LED_OFF;
8390
}
8491

8592
static void led_swap_feedback() {
@@ -133,7 +140,14 @@ static int debug_init(void) {
133140
static int start_dfu(void) {
134141
RTCSetBKPRegister(RTC_BKP_DR0, 0);
135142

143+
#if ((CLOCK_SOURCE) & USE_PLL_HSI)
144+
SetSysClock_PLL_HSI();
145+
#elif ((CLOCK_SOURCE) & USE_PLL_HSE_EXTC)
136146
SetSysClock_PLL_HSE(1, false);
147+
#else
148+
149+
#endif
150+
137151
SystemCoreClockUpdate();
138152

139153
led_swap_feedback_off();
@@ -235,8 +249,11 @@ int main(void) {
235249
HAL_Delay(500);
236250
}
237251

252+
#if defined (BOARD_USB_RESET)
238253
DigitalOut usb_reset(BOARD_USB_RESET, 0);
239-
#if BOARD_HAS_VIDEO
254+
#endif
255+
256+
#if defined (BOARD_HAS_VIDEO) && (BOARD_HAS_VIDEO)
240257
DigitalOut video_enable(BOARD_VIDEO_ENABLE, 0);
241258
DigitalOut video_reset(BOARD_VIDEO_RESET, 0);
242259
#endif
@@ -248,16 +265,16 @@ int main(void) {
248265
HAL_FLASH_Unlock();
249266

250267
power_init();
251-
252268
HAL_Delay(10);
253269

270+
#if defined (BOARD_USB_RESET)
254271
usb_reset = 1;
255272
HAL_Delay(10);
256273
usb_reset = 0;
257274
HAL_Delay(10);
258275
usb_reset = 1;
259-
260276
HAL_Delay(10);
277+
#endif
261278

262279
if (magic != 0xDF59) {
263280
if (boot_empty_keys()) {

generate_rel.sh

+15-1
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,25 @@ echo
5959
echo Generating binaries for NICLA VISION
6060
mbed compile -c -m NICLA_VISION -t GCC_ARM --app=mbed_app_nicla_vision.json --profile=custom.json -N mcuboot_nicla_vision
6161
mkdir -p release/NICLA_VISION
62-
mv ./libbootutil.a ./release/NICLA_VISION
62+
cp ./libbootutil.a ./release/NICLA_VISION
6363
cp ./BUILD/NICLA_VISION/GCC_ARM-CUSTOM/mcuboot_nicla_vision.bin ./release/NICLA_VISION/mcuboot_nicla_vision.bin
6464
cp ./BUILD/NICLA_VISION/GCC_ARM-CUSTOM/mcuboot_nicla_vision_application.elf ./release/NICLA_VISION/mcuboot_nicla_vision.elf
6565
xxd -i ./release/NICLA_VISION/mcuboot_nicla_vision.bin > ./release/NICLA_VISION/mcuboot_nicla_vision.h
6666
sed -i "s/unsigned char __release_NICLA_VISION_mcuboot_nicla_vision_bin/const unsigned char mcuboot_nicla_vision_bin/" ./release/NICLA_VISION/mcuboot_nicla_vision.h
6767
sed -i "s/__release_NICLA_VISION_mcuboot_nicla_vision_bin_len/mcuboot_nicla_vision_bin_len/" ./release/NICLA_VISION/mcuboot_nicla_vision.h
6868
tar -czvf ./release/NICLA_VISION.tar.gz -C ./release/ NICLA_VISION
6969
fi
70+
71+
if [[ $1 == "opta" ]] || [[ $1 == "all" ]]; then
72+
echo
73+
echo Generating binaries for OPTA
74+
mbed compile -c -m OPTA -t GCC_ARM --app=mbed_app_opta.json --profile=custom.json -N mcuboot_opta
75+
mkdir -p release/OPTA
76+
mv ./libbootutil.a ./release/OPTA
77+
cp ./BUILD/OPTA/GCC_ARM-CUSTOM/mcuboot_opta.bin ./release/OPTA/mcuboot_opta.bin
78+
cp ./BUILD/OPTA/GCC_ARM-CUSTOM/mcuboot_opta_application.elf ./release/OPTA/mcuboot_opta.elf
79+
xxd -i ./release/OPTA/mcuboot_opta.bin > ./release/OPTA/mcuboot_opta.h
80+
sed -i "s/unsigned char __release_OPTA_mcuboot_opta_bin/const unsigned char mcuboot_opta_bin/" ./release/OPTA/mcuboot_opta.h
81+
sed -i "s/__release_OPTA_mcuboot_opta_bin_len/mcuboot_opta_bin_len/" ./release/OPTA/mcuboot_opta.h
82+
tar -czvf ./release/OPTA.tar.gz -C ./release/ OPTA
83+
fi

mbed_app.json

+17
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,23 @@
111111
"SE050"
112112
],
113113
"mcuboot.application-sdcard": null
114+
},
115+
"OPTA": {
116+
"target.clock_source": "USE_PLL_HSE_EXTC",
117+
"target.use-mpu": false,
118+
"target.macros_add": [
119+
"USE_USB_FS",
120+
"LOWSPEED=1",
121+
"BOARD_HAS_VIDEO=0",
122+
"BOARD_RAM_SIZE=0"
123+
],
124+
"target.usb_speed": "USE_USB_OTG_FS",
125+
"target.components_remove" : [
126+
"WHD",
127+
"4343W_FS",
128+
"CYW43XXX"
129+
],
130+
"mcuboot.application-sdcard": null
114131
}
115132
}
116133
}

mbed_app_opta.json

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
{
2+
"requires": [
3+
"bare-metal",
4+
"mbedtls",
5+
"mcuboot",
6+
"flashiap-block-device",
7+
"spif-driver",
8+
"qspif",
9+
"mbed-trace",
10+
"filesystem",
11+
"fat_chan",
12+
"littlefs",
13+
"rtos",
14+
"cmsis-cmsis5-rtos2",
15+
"events"
16+
],
17+
"macros": [
18+
"MBED_FAULT_HANDLER_DISABLED",
19+
"MBEDTLS_USER_CONFIG_FILE=\"mbedtls_config.h\""
20+
],
21+
"config": {
22+
"serial-bootloader-enable": {
23+
"help": "Build bootloader with serial update support",
24+
"value": 0
25+
}
26+
},
27+
"target_overrides": {
28+
"OPTA": {
29+
"target.restrict_size": "0x20000",
30+
"target.c_lib": "small",
31+
"target.printf_lib": "minimal-printf",
32+
"target.i2c_timing_value_algo": false,
33+
"target.extra_labels_remove" : ["CORDIO"],
34+
"target.features_remove" : ["BLE"],
35+
"target.device_has_remove": [
36+
"USBDEVICE",
37+
"EMAC",
38+
"CAN",
39+
"SPI_ASYNCH",
40+
"SPISLAVE",
41+
"SPI",
42+
"SERIAL_FC",
43+
"PWMOUT",
44+
"ANALOGIN",
45+
"ANALOGOUT",
46+
"I2CSLAVE",
47+
"I2C_ASYNC",
48+
"OSPI",
49+
"TRNG",
50+
"DAC",
51+
"CRC",
52+
"WATCHDOG",
53+
"RTC",
54+
"LPTICKER",
55+
"SLEEP"
56+
],
57+
"target.clock_source": "USE_PLL_HSE_EXTC",
58+
"target.use-mpu": false,
59+
"target.macros_add": [
60+
"USE_USB_FS",
61+
"LOWSPEED=1",
62+
"BOARD_HAS_VIDEO=0",
63+
"BOARD_RAM_SIZE=0"
64+
],
65+
"target.usb_speed": "USE_USB_OTG_FS",
66+
"target.components_remove" : [
67+
"WHD",
68+
"4343W_FS",
69+
"CYW43XXX"
70+
],
71+
"platform.minimal-printf-enable-floating-point": false,
72+
"platform.minimal-printf-enable-64-bit": false,
73+
"platform.stdio-flush-at-exit": false,
74+
"platform.stdio-baud-rate": 115200,
75+
"fat_chan.ff_use_mkfs": 0,
76+
"fat_chan.ff_use_lfn": 0,
77+
"fat_chan.ff_fs_rpath": 0,
78+
"mcuboot.log-level": "MCUBOOT_LOG_LEVEL_INFO",
79+
"mcuboot.primary-slot-address": "0x8020000",
80+
"mcuboot.slot-size": "0x1E0000",
81+
"mcuboot.scratch-address": "0x9000000",
82+
"mcuboot.scratch-size": "0x20000",
83+
"mcuboot.max-img-sectors": "0x3C0",
84+
"mcuboot.max-align": 32,
85+
"mcuboot.bootstrap": true,
86+
"mcuboot.application-hooks": true,
87+
"mcuboot.application-littlefs": true,
88+
"mcuboot.application-dfu": true,
89+
"mcuboot.application-sdcard": null,
90+
"mcuboot.signature-algorithm": "SIGNATURE_TYPE_EC256",
91+
"mcuboot.encrypt-ec256": true,
92+
"mcuboot.include-keys": null,
93+
"mcuboot.bootloader-build": false,
94+
"mcuboot.encrypt-scratch": true,
95+
"mcuboot.swap-buf-size": 131072,
96+
"mbed-trace.enable": false,
97+
"mbed-trace.fea-ipv6": false
98+
}
99+
}
100+
}

0 commit comments

Comments
 (0)