ESP32 Custom Board Mini

Небольшая плата ESP32 с дисплеем. Идея была сделать аналог референсного esp32-lyrat, но в меньших размерах. На плате разведен дисплей ES8388 ADC-DAC, вывод на стерео наушники и внешний усилитель моно, а также микрофон, кнопки и джойстик

lknmvv4-_9wgveeeie3udzcbypi.jpeg


8 MB Flash / 8 MB PSRAM
ST7789 Display
ES8388 ADC-DAC / PAM8302
SDCARD
CP2102
zsnqxyd-luc3lttp_a4bimrz_e4.png

Пришла в голову идея сделать плату с 2.4-GHz Inverted F антеной. По сравнению с PCB антенной которую используют для USB dongle reference design, F антенна обладает лучшими характеристиками, но имеет немного большие размеры, и широкую полоса пропускания

Импеданс сопротивления антенны 50 Ом требует согласования с ESP32

mblww2rcjw5h5otg0bwgbfoqhgw.png

«The output impedance of the RF pins of ESP32 (QFN 6×6) and ESP32 (QFN 5×5) are (30+j10) Ω and (35+j10) Ω, respectively»

Воспользуемся калькулятором для расчета.


ST7789 это дешевый компактный 128×128 цветной дисплей. Подключается через SPI интерфейс как и в предыдуший статье

v074ahmkcijhsk2pdx6w75lqims.png

Ресет дисплея работает только по включению. Схема сброса дисплея это резистор 10 КОм к VDD. Если во время вывода изображения вызвать ресет ESP32 то картинка уже не будет отображаться. Надо делать отдельным выводом на ногу ESP32 или пробовать подводить к AEN сброса самого микроконтроллера. Так же забыл вывести CS. Пришлось вешать волосок на землю. Вопрос нужно ли отключать подсветку или можно CS управлять энергопотреблением дисплея


ЦАП выполнен на ES8388. В нем так же имеется АЦП. Ранее я уже запускал аналогичный АЦП от 
Everest ES8374. ES8374 в отличии от ES8388 имеет моно выход с усилителем около 1 ватта.

2kvrd6bv5c_e3uebaiwnkfn_tho.png

При запуске ES8388 однако возникли проблемы. Неясная ситуация с выходом на наушники. В референсной esp32-lyrat-v4.2 выходы на наушники LOUT1 и ROUT1, но микросхема DAC8388 имеет дифференциальные выходы левого и правого канала. То что я слышал в наушниках это шум и слабый уровень сигнала. Надо разобраться как включать выходы в правильном режиме. В примерах для этих референсных плат нет особого кода переключения.


zu9bkaeekazbajk1yzn5_jseqe4.png
Внешний усилитель планировал поставить из линейки PAM. Они хорошо известны по усилителю
Class-D and Class-AB PAM8406. Но мне потребовался моно вариант. Его пока не распаивал
knavhg5dtkbcwlcqdznfh8ffy80.png
ICS-43432 микрофон подключается по шине SPI. Вывод LR отвечает за конфигурирование левого или правого канала. Левый на землю, правый на VDD
Забыл вывести 7 вывод PSRAM. PSRAM вешается параллельно W25Q64 за исключением вывода тактирования и CS. CS надо подтянуть резистором к VDD
Внешнее управление организовано на резистивном делителе. Уровни напряжения определяются внутренним АЦП. В зависимости от того какая кнопка нажата формируется определенное для делителя напряжение. Померяв на входе АЦП уровень можно определить нажатую кнопку
UART интерфейс традиционно на CP2102. Тут лотерея если покупать у Китайцев. В одной партии могут быть разные ID. Например у меня определялась #lsusb как Verifon и устройства /dev/ttyUSB не обнаруживалось. Добавил примерно так где 10c4 804c это vid pid. Кстати слетает после перезагрузки.

sudo modprobe cp210x
sudo -s
echo 10c4 804c > /sys/bus/usb-serial/drivers/cp210x/new_id


WiFi заработал не сразу. BT так и не получилось связаться. В режиме BT колонки устройство видно, но соединение установить не получается. Очень важно, как оказалось правильно подвести питание на чип ESP32. Дорожки должны быть как можно толще. На каждый внутренний блок, к которому подводится питание должен стоять шунтирующий конденсатор. Только когда я пропаял сверху дорожку и повесил дополнительно в одном месте конденсатор по питанию прямо на дорожку, чип завел Wi-Fi. До этого в логах начинался мусор и все висло когда доходило до старта WiFi

Boot WiFi scan Log
rst:0×1 (POWERON_RESET), boot:0×13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0×00, q_drv:0×00, d_drv:0×00, cs0_drv:0×00, hd_drv:0×00, wp_drv:0×00
mode: DIO, clock div:2
load:0×3fff0030, len:4
load:0×3fff0034, len:7068
load:0×40078000, len:14600
load:0×40080400, len:4160
0×40080400: _init at?:?

entry 0×40080684
I (29) boot: ESP-IDF v4.2-dev-2243-gcf056a7d0-dirty 2nd stage bootloader
I (29) boot: compile time 17:00:41
I (30) boot: chip revision: 1
I (34) boot_comm: chip revision: 1, min. bootloader chip revision: 0
I (51) boot.esp32: SPI Speed: 40MHz
I (52) boot.esp32: SPI Mode: DIO
I (52) boot.esp32: SPI Flash Size: 4MB
I (54) boot: Enabling RNG early entropy source…
I (60) boot: Partition Table:
I (63) boot: ## Label Usage Type ST Offset Length
I (71) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (78) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (86) boot: 2 factory factory app 00 00 00010000 00100000
I (93) boot: End of partition table
I (97) boot_comm: chip revision: 1, min. application chip revision: 0
I (104) esp_image: segment 0: paddr=0×00010020 vaddr=0×3f400020 size=0×1b81c (112668) map
I (162) esp_image: segment 1: paddr=0×0002b844 vaddr=0×3ffb0000 size=0×03b04 (15108) load
I (169) esp_image: segment 2: paddr=0×0002f350 vaddr=0×40080000 size=0×00404 (1028) load
0×40080000: _WindowOverflow4 at /home/dm/esp/esp-idf/components/freertos/xtensa/xtensa_vectors.S:1730

I (170) esp_image: segment 3: paddr=0×0002f75c vaddr=0×40080404 size=0×008bc (2236) load
I (179) esp_image: segment 4: paddr=0×00030020 vaddr=0×400d0020 size=0×78d34 (494900) map
0×400d0020: _stext at?:?

I (401) esp_image: segment 5: paddr=0×000a8d5c vaddr=0×40080cc0 size=0×194d0 (103632) load
I (466) boot: Loaded app from partition at offset 0×10000
I (466) boot: Disabling RNG early entropy source…
I (478) psram: This chip is ESP32-D0WD
E (479) psram: PSRAM ID read error: 0xffffffff
E (479) spiram: SPI RAM enabled but initialization failed. Bailing out.
I (486) cpu_start: Failed to init external RAM; continuing without it.
I (493) cpu_start: Pro cpu up.
I (497) cpu_start: Starting app cpu, entry point is 0×400816d8
0×400816d8: call_start_cpu1 at /home/dm/esp/esp-idf/components/esp_system/port/cpu_start.c:109

I (0) cpu_start: App cpu up.
I (518) cpu_start: Pro cpu start user code
I (518) cpu_start: Application information:
I (518) cpu_start: Project name: scan
I (523) cpu_start: App version: v4.2-dev-2243-gcf056a7d0-dirty
I (530) cpu_start: Compile time: Nov 6 2020 17:00:39
I (536) cpu_start: ELF file SHA256: 7ea95a8a24884f2f…
I (542) cpu_start: ESP-IDF: v4.2-dev-2243-gcf056a7d0-dirty
I (550) heap_init: Initializing. RAM available for dynamic allocation:
I (556) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (562) heap_init: At 3FFB9510 len 00026AF0 (154 KiB): DRAM
I (569) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (575) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (581) heap_init: At 4009A190 len 00005E70 (23 KiB): IRAM
I (589) spi_flash: detected chip: generic
I (592) spi_flash: flash io: dio
W (596) spi_flash: Detected size (8192k) larger than the size in the binary image header (4096k). Using the size in the binary image header.
I (611) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (735) wifi: wifi driver task: 3ffc1ed4, prio:23, stack:6656, core=0
I (735) system_api: Base MAC address is not set
I (735) system_api: read default base MAC address from EFUSE
I (765) wifi: wifi firmware version: bbe4b67
I (765) wifi: wifi certification version: v7.0
I (765) wifi: config NVS flash: enabled
I (765) wifi: config nano formating: disabled
I (765) wifi: Init data frame dynamic rx buffer num: 32
I (775) wifi: Init management frame dynamic rx buffer num: 32
I (775) wifi: Init management short buffer num: 32
I (785) wifi: Init static tx buffer num: 16
I (785) wifi: Init static rx buffer size: 1600
I (795) wifi: Init static rx buffer num: 10
I (795) wifi: Init dynamic rx buffer num: 32
I (895) phy: phy_version: 4182, f1ba940, Jun 4 2020, 19:40:07, 0, 0
I (905) wifi: mode: sta (98: f4: ab:6c: ed: c4)
I (3005) scan: Total APs scanned = 5
I (3005) scan: SSID ___1_____
I (3005) scan: RSSI -48
I (3005) scan: Authmode WIFI_AUTH_WPA_WPA2_PSK
I (3005) scan: Pairwise Cipher WIFI_CIPHER_TYPE_CCMP
I (3015) scan: Group Cipher WIFI_CIPHER_TYPE_CCMP
I (3015) scan: Channel 12

I (3025) scan: SSID _____2______
I (3025) scan: RSSI -64
I (3025) scan: Authmode WIFI_AUTH_WPA2_PSK
I (3035) scan: Pairwise Cipher WIFI_CIPHER_TYPE_CCMP
I (3035) scan: Group Cipher WIFI_CIPHER_TYPE_CCMP
I (3045) scan: Channel 7

I (3045) scan: SSID ______2_______
I (3055) scan: RSSI -83
I (3055) scan: Authmode WIFI_AUTH_WPA_WPA2_PSK
I (3065) scan: Pairwise Cipher WIFI_CIPHER_TYPE_TKIP_CCMP
I (3065) scan: Group Cipher WIFI_CIPHER_TYPE_TKIP
I (3075) scan: Channel 3

I (3075) scan: SSID ____3____
I (3075) scan: RSSI -92
I (3085) scan: Authmode WIFI_AUTH_WPA2_PSK
I (3085) scan: Pairwise Cipher WIFI_CIPHER_TYPE_CCMP
I (3095) scan: Group Cipher WIFI_CIPHER_TYPE_CCMP
I (3095) scan: Channel 3

I (3105) scan: SSID ___4______
I (3105) scan: RSSI -94
I (3105) scan: Authmode WIFI_AUTH_WPA2_PSK
I (3115) scan: Pairwise Cipher WIFI_CIPHER_TYPE_CCMP
I (3125) scan: Group Cipher WIFI_CIPHER_TYPE_CCMP
I (3125) scan: Channel 8


Запуск теста esp-idf-st7789

ST7789 test log

I (2992) FillTest: elapsed time[ms]:1650
I (7042) ColorBarTest: elapsed time[ms]:50
I (11322) ArrowTest: elapsed time[ms]:280
I (17422) LineTest: elapsed time[ms]:2100
I (23292) CircleTest: elapsed time[ms]:1870
I (29192) RoundRectTest: elapsed time[ms]:1900
I (39192) RectAngleTest: elapsed time[ms]:6000
I (50152) TriangleTest: elapsed time[ms]:6960
I (54632) DirectionTest: elapsed time[ms]:480
I (59682) HorizontalTest: elapsed time[ms]:1050
I (64722) VerticalTest: elapsed time[ms]:1040
I (68902) FillRectTest: elapsed time[ms]:180
I (73152) ColorTest: elapsed time[ms]:250
I (78182) BMPTest: elapsed time[ms]:1030
I (82322) JPEGTest: decode_image err=0 imageWidth=240 imageHeight=240
I (84732) JPEGTest: elapsed time[ms]:2550
I (95282) FillTest: elapsed time[ms]:1650
I (99332) ColorBarTest: elapsed time[ms]:50
I (103602) ArrowTest: elapsed time[ms]:270
I (109702) LineTest: elapsed time[ms]:2100
I (115572) CircleTest: elapsed time[ms]:1870
I (121472) RoundRectTest: elapsed time[ms]:1900
I (131472) RectAngleTest: elapsed time[ms]:6000
I (142432) TriangleTest: elapsed time[ms]:6960
I (146862) DirectionTest: elapsed time[ms]:430
I (151912) HorizontalTest: elapsed time[ms]:1050
I (156952) VerticalTest: elapsed time[ms]:1040
I (161162) FillRectTest: elapsed time[ms]:210
I (165412) ColorTest: elapsed time[ms]:250
I (170342) BMPTest: elapsed time[ms]:930


fkmmmy_mbufxl9ytsf53zs_jl84.png

Материалы по теме

© Habrahabr.ru