From d718b1f5392c76e51265c095970690e5903ecc47 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Mon, 23 Jul 2018 13:49:04 -0400 Subject: [PATCH 1/4] Enable HCI UART mode on boot if SS is LOW --- arduino/cores/esp32/wiring_digital.c | 5 +++ arduino/cores/esp32/wiring_digital.h | 2 ++ main/sketch.ino.cpp | 46 ++++++++++++++++++++++++++++ sdkconfig | 23 ++++++++++++-- 4 files changed, 73 insertions(+), 3 deletions(-) diff --git a/arduino/cores/esp32/wiring_digital.c b/arduino/cores/esp32/wiring_digital.c index 03e509a..05435df 100644 --- a/arduino/cores/esp32/wiring_digital.c +++ b/arduino/cores/esp32/wiring_digital.c @@ -42,3 +42,8 @@ void digitalWrite(uint32_t pin, uint32_t val) { gpio_set_level((gpio_num_t)pin, val); } + +int digitalRead(uint32_t pin) +{ + return gpio_get_level(pin); +} diff --git a/arduino/cores/esp32/wiring_digital.h b/arduino/cores/esp32/wiring_digital.h index 7bc1e8e..6788aeb 100644 --- a/arduino/cores/esp32/wiring_digital.h +++ b/arduino/cores/esp32/wiring_digital.h @@ -36,6 +36,8 @@ extern void pinMode(uint32_t pin, uint32_t mode); extern void digitalWrite(uint32_t pin, uint32_t val); +extern int digitalRead(uint32_t pin); + #ifdef __cplusplus } #endif diff --git a/main/sketch.ino.cpp b/main/sketch.ino.cpp index 89273f2..c1a780c 100644 --- a/main/sketch.ino.cpp +++ b/main/sketch.ino.cpp @@ -21,6 +21,8 @@ extern "C" { #include + #include + #include } #include @@ -77,6 +79,9 @@ void setDebug(int d) { } } +void setupWiFi(); +void setupBluetooth(); + void setup() { setDebug(debug); @@ -84,6 +89,47 @@ void setup() { pinMode(15, INPUT); pinMode(21, INPUT); + pinMode(5, INPUT); + if (digitalRead(5) == LOW) { + setupBluetooth(); + } else { + setupWiFi(); + } +} + +// #define UNO_WIFI_REV2 + +void setupBluetooth() { + periph_module_enable(PERIPH_UART1_MODULE); + periph_module_enable(PERIPH_UHCI0_MODULE); + +#ifdef UNO_WIFI_REV2 + uart_set_pin(UART_NUM_1, 1, 3, 33, 0); // TX, RX, RTS, CTS +#else + uart_set_pin(UART_NUM_1, 23, 12, 18, 5); +#endif + uart_set_hw_flow_ctrl(UART_NUM_1, UART_HW_FLOWCTRL_CTS_RTS, 5); + + esp_bt_controller_config_t btControllerConfig = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); + + btControllerConfig.hci_uart_no = UART_NUM_1; +#ifdef UNO_WIFI_REV2 + btControllerConfig.hci_uart_baudrate = 115200; +#else + btControllerConfig.hci_uart_baudrate = 912600; +#endif + + esp_bt_controller_init(&btControllerConfig); + while (esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_IDLE); + esp_bt_controller_enable(ESP_BT_MODE_BLE); + esp_bt_sleep_enable(); + + while (1) { + vTaskDelay(portMAX_DELAY); + } +} + +void setupWiFi() { SPIS.begin(); if (WiFi.status() == WL_NO_SHIELD) { diff --git a/sdkconfig b/sdkconfig index c836f3c..cd9ac31 100644 --- a/sdkconfig +++ b/sdkconfig @@ -119,9 +119,26 @@ CONFIG_AWS_IOT_SDK= # # Bluetooth # -CONFIG_BT_ENABLED= +CONFIG_BT_ENABLED=y +CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE_0=y +CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE_1= CONFIG_BTDM_CONTROLLER_PINNED_TO_CORE=0 -CONFIG_BT_RESERVE_DRAM=0 +CONFIG_BTDM_CONTROLLER_HCI_MODE_VHCI= +CONFIG_BTDM_CONTROLLER_HCI_MODE_UART_H4=y + +# +# HCI UART(H4) Options +# +CONFIG_BT_HCI_UART_NO=1 +CONFIG_BT_HCI_UART_BAUDRATE=115200 + +# +# MODEM SLEEP Options +# +CONFIG_BTDM_CONTROLLER_MODEM_SLEEP=y +CONFIG_BTDM_MODEM_SLEEP_MODE_ORIG= +CONFIG_BTDM_MODEM_SLEEP_MODE_EVED=y +CONFIG_BT_RESERVE_DRAM=0x10000 # # Driver configurations @@ -213,7 +230,6 @@ CONFIG_ESP32_XTAL_FREQ_26= CONFIG_ESP32_XTAL_FREQ_AUTO= CONFIG_ESP32_XTAL_FREQ=40 CONFIG_DISABLE_BASIC_ROM_CONSOLE= -CONFIG_NO_BLOBS= CONFIG_ESP_TIMER_PROFILING= CONFIG_COMPATIBLE_PRE_V2_1_BOOTLOADERS= CONFIG_ESP_ERR_TO_NAME_LOOKUP=y @@ -221,6 +237,7 @@ CONFIG_ESP_ERR_TO_NAME_LOOKUP=y # # Wi-Fi # +CONFIG_SW_COEXIST_ENABLE= CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=10 CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=32 CONFIG_ESP32_WIFI_STATIC_TX_BUFFER= From 74819289923c3db3283fd8099363257f039b8758 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Tue, 6 Nov 2018 17:52:01 -0500 Subject: [PATCH 2/4] Build options for Uno WiFi Rev2 --- Makefile | 5 +++++ combine.py | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index fe753a2..9746d31 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,11 @@ CFLAGS += -DNDEBUG -DCONFIG_FREERTOS_ASSERT_DISABLE -Os -DLOG_LOCAL_LEVEL=0 CPPFLAGS += -DNDEBUG -Os endif +ifeq ($(UNO_WIFI_REV2),1) +CFLAGS += -DUNO_WIFI_REV2 +CPPFLAGS += -DUNO_WIFI_REV2 +endif + include $(IDF_PATH)/make/project.mk firmware: all diff --git a/combine.py b/combine.py index 7ad35fc..0471b46 100644 --- a/combine.py +++ b/combine.py @@ -1,5 +1,7 @@ #!/usr/bin/env python +import sys; + booloaderData = open("build/bootloader/bootloader.bin", "rb").read() partitionData = open("build/partitions.bin", "rb").read() appData = open("build/nina-fw.bin", "rb").read() @@ -29,7 +31,11 @@ for i in range(0, len(certsData)): # zero terminate the pem file outputData[0x10000 + len(certsData)] = 0 +outputFilename = "NINA_W102.bin" +if (len(sys.argv) > 1): + outputFilename = sys.argv[1] + # write out -with open("NINA_W102.bin","w+b") as f: +with open(outputFilename,"w+b") as f: f.seek(0) f.write(outputData) From 25b73d5196ce7f3f19f67d8f3ab09a16ced0a4d5 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Mon, 12 Nov 2018 16:41:13 -0500 Subject: [PATCH 3/4] Erase NVS flash on init failure --- arduino/cores/esp32/wiring.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arduino/cores/esp32/wiring.c b/arduino/cores/esp32/wiring.c index d0ec63e..e06b699 100644 --- a/arduino/cores/esp32/wiring.c +++ b/arduino/cores/esp32/wiring.c @@ -22,5 +22,9 @@ #include "Arduino.h" void init() { - nvs_flash_init(); + if (nvs_flash_init() != ESP_OK) { + nvs_flash_erase(); + + nvs_flash_init(); + } } From f83faa4fd2ba8a12ad2f98a56b83b07149f97e1e Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Mon, 12 Nov 2018 17:06:18 -0500 Subject: [PATCH 4/4] Suspend task --- main/sketch.ino.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main/sketch.ino.cpp b/main/sketch.ino.cpp index c1a780c..f4d98ce 100644 --- a/main/sketch.ino.cpp +++ b/main/sketch.ino.cpp @@ -124,6 +124,8 @@ void setupBluetooth() { esp_bt_controller_enable(ESP_BT_MODE_BLE); esp_bt_sleep_enable(); + vTaskSuspend(NULL); + while (1) { vTaskDelay(portMAX_DELAY); }