• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение Вопрос по использованию пинов

A_D

Active member
Добрый день!
В свободное время начал прорабатывать проект печатной платы ESP8266 с минимальным набором переферии и пригодным по большей части для использования там, где нужен SPI и\или RS485\UART. Так же попытаться поправить при этом полёты чудесной китайской инженерной мысли в их ESP-01 и т.д.
Снимок.PNG
Планирую на плате следующие узлы расположить :
- драйвер RS-485 подключенный к UART0 (при необходимости - сразу можно использовать как есть TCP2UART от pvvx)
- крен 1117 с 5в до 3.3в (сама плата от 5в питаться будет, при необходимости всё это можно выпаять и питать 3.3в напрямую)
- выведены HSPI пины и дополнительные на 2,54мм гребёнку, питание так же.
- добавлен держатель батареи 1,2в для RTC пина (пока не определился с легко доставаемым его типом... все что на ALI встречаются - дешевые, но PDF нету нигде....а применять что то типа BK-5091 - дороговато.)
- добавлены фильтрующие емкости по питанию где надо.
- согласующие резисторы для внешней Flash.
- отдельная гребёнка для подключения авто-программатора (никаких кнопок для прошивки!).
- обвязка для Deep-Sleep так же будет добавлена (еще не мало в схеме не готово).
- пин ADC выведу просто точкой подпайки - для галочки, ADC тут не особо хороший и не вижу надобности делать для него обвязку.
- плату по хорошему постараюсь сделать 2х слойную. В крайнем случае 4 слоя - но тогда цена в 2 раза выше....

Буду заказывать на https://oshpark.com/ - выложу ссылку для прямого заказа платы. Схема, плата так же выложены будут тут (работаю в Altium Designer).
Собственно вопрос такой появился:
- я хотел бы наружу вывести HSPI - пины обозначил на схеме, но на GPIO15 помимо CS HSPI есть же и RTS UART0 - который нужнее.
Можно ли использовать HSPI с каким либо другим CS пином, пусть и программно дерганым и при этом GPIO15 что бы управлял потоком (RTS) UART0 ?
 
Последнее редактирование:

A_D

Active member
AlexMelven, так собственно и вопрос не о плате, а о программном решении вопроса с максимально развернутым описанием применения. Интересует только - можно ли использовать оба интерфейса, причем пересекающийся для обоих интерфейсов пин GPIO15 что бы работал как RTS UART0 + к этому будет ли работать HSPI без CS железного (т.е. не инициализировать для него GPIO15 как CS, программным путем думаю это решить вполне можно, если не требуются максимальные скорости и минимальные задержки) ?
 

AlexMelven

New member
а почему батарейку 1.2 вольта (1.5?), может все-таки 3 вольтовую литиевую?
PS. Тут видимо в основном народ уже готовые модули пользует, платы не много кто еще сам паял - хотел предупредить, чтобы на мои грабли не наступали. Микруха оказалась нежной сильно, когда образцы паяешь феном - скорее всего она сдохнет когда включишь и начнешь играться. Я убил месяц, пока понял почему у меня чипы дохнут :) некоторые час работали, некоторые дохли через 10 минут после включения. Первым отваливался ком-порт - начинало туда сыпаться непонятно что. Потом исчезала точка в эфире и все.. Вопросы в китайскую поддержку ничего не дали, видимо они образцы не паяли, сразу серию и на линии :) Отослали к нашему представительству, которые отослали к китайцам. Но так как наши на первой трудности не сдаются - я продолжал убивать чипы. Штук 15 спалил точно. Сначала было подозрение что китайцы что-то недоговаривают и возможно какой-то пин висит и накапливает заряд. Все что можно повесил на резюки - не помогло. Разобрал пару китайских модулей, стер маску - там ничего фантастического не нашел. А чипы то закончились. И вот последняя мысль была - проверить как-то режимы пайки. Поехал к товарищу, у него была какая-никакая паяльная станция с подогревом платы снизу 120 градусов. Сначала плата греется какое-то время, потом включается фен сверху и через несколько секунд микросхема припаяна. А я феном сверху грел минуту или даже больше. Причем пробовал разные температуры - даже 240, т.к. подозревал что может дохнуть от этого. Но она все-равно дохла. Раньше такого ни с одним чипом у меня не случалось.
 
Последнее редактирование:

A_D

Active member
AlexMelven, с батарейкой ошибся - да, там 1,5в :) на RTC пин максимум надо 1,1в подавать.. pvvx уже писал об этом и собственно я взял его идею с диодом - должно от обычной LR44 около 3х лет работать, что достаточно.
по поводу перепайки чипа - читал Ваше сообщение ранее гдето - спасибо еще раз за предостережение, всё равно будем пробовать.
И всё таки по первому вопросу - может документ какой есть или пример работы ? или не получиться так одновременной работы (только HSPI или UART0 c RTS пином)?
 

AlexMelven

New member
вроде pvvx писал что нашел в коде китайцев что ком-порты можно вообще на любые ноги вывести и даже использовать 2 полноценных ком-порта. Наверное если это действительно так, проще RTS ком-порта перебросить на другой пин..
 

PostLast

Member
Писали тут http://esp8266.ru/forum/threads/hspi-i-gpio15.620/
Но при использовании HSPI slave похоже не работает. Сейчас сам разбираюсь.
pvvx закидает сейчас, но значение RTS несколько преувеличено. Решается на уровне протоколов. Даже для создания полноценного виртуального COM порта надо не просто uart->tcp, а и надстройка для управления как минимум скоростью в одном месте, а не в двух.
 

AlexMelven

New member
PostLast, я так понял там про swap spi разговор, я не смотрел какие пины spi куда при этом переходят, но судя по аналогичному com swap - просто в пределах тех же ног переставляются сигналы, а A_D нужно чтобы SPI и COM не пересекались. Ну как вариант наверное еще можно другой SPI использовать, на котором сидит флешка - режим SPI OVERLAP and CS2 - там CS выводится на GPIO0. Хотя я вижу по схеме что GPIO0 тоже планируется использовать..
А про то что pvvx обнаружил, написано в этом посте:
Тут новая фича выпла - Выводы UART-ов переключаются как угодно, в пределах их сигналов RX/TX/RTS/CTS/DSR/DTR, т.е. даже между UART1 и UART0 :confused: и главное что прямо на ходу, битами в 0x3ff00028...
http://esp8266.ru/forum/threads/raz...go-webservera-na-esp8266.56/page-23#post-5012
 

AlexMelven

New member
на RTC пин максимум надо 1,1в подавать.. pvvx уже писал об этом
перечитал тот пост еще раз - он не писал что туда можно максимум 1.1в подавать. Он писал что у него севшая батарейка нашлась, на которой было 1.25 вольта. Я конечно ничего не утверждаю, возможно 3 вольта туда нельзя никак подавать. Я сам поставил внешнюю микруху для часов и батарейку 3 вольта, т.к. Espressif в форуме на мой вопрос ответили что этот пин не задействован в чипе и его нужно оставить висячим. Когда я спросил - а как же батарейное питание часов? Мне что, городить внешние часы значит - решили промолчать. Если бы в тот момент они что-то ответили толковое или я бы нашел пост pvvx, я бы возможно остановился на варианте с часами ESP8266. Но внешняя микруха у меня еще будет отслеживать ноль фазы сети и мерить ток, а у ESP8266 только один АЦП вход и то не уверен, справится он с отслеживанием нуля на 50 герцах или нет..
 

nikolz

Well-known member
Можно взять за основу плату nodemcu и ее расширить. Она сделана хорошо у меня никогда с ней проблем не было, ничего к ней не паял типа кондеров и резисторов, все пины выведены есть 3.3 наружу автоматом притягивается пин для программирования ну и т д
 

pvvx

Активный участник сообщества
перечитал тот пост еще раз - он не писал что туда можно максимум 1.1в подавать. Он писал что у него севшая батарейка нашлась, на которой было 1.25 вольта.
При более 1.1В увеличивается ток экспоненциально, т .е. до выхода из строя RTC.
Замеры тока давались: Потребление по питанию часов (по ноге RTC_VDD)
Проблема у часов одна - точность хода на встроенном RC генераторе...
 

A_D

Active member
AlexMelven, Спасибо за ссылку, но к сожалению RTS/CTS если поменять - то точно уже не выйдет, HSPI MOSI получается перекрыт! А 1,1в - эту величину с даташита взял, там описано, что на пине RTC 1,1в (10я страница). Вложил сюда копию. Ну и подтверждено это всё постом pvvx - поэтому и решил не мудрить ничего, просто повторить в этом плане схему.
nikolz, да, тоже видел её - тут с обвязками для прошивки\работы всё понятно то, а вот с 2мя интерфейсами не очень, чего на схеме nodemcu как раз и не используется...
pvvx, А Вы никогда не пробовали использовать оба указанных интерфейса ? (собственно вопрос в самом первом сообщении - работает ли HSPI без его железного CS (выбрать просто CS пин любой свободный и дергать им когда потребуется) и при этом тогда этот пин задействовать как RTS UART0 как думаете?)
 

Вложения

pvvx

Активный участник сообщества
(собственно вопрос в самом первом сообщении - работает ли HSPI без его железного CS (выбрать просто CS пин любой свободный и дергать им когда потребуется) и при этом тогда этот пин задействовать как RTS UART0 как думаете?)
Будет просто медленно работать.
Вообще не понятна цель. Готовые модули давно есть.
Например забыли про I2S, а он нужен для подключения DAC и прочего...
 

A_D

Active member
pvvx, понял, спасибо! опробую тогда работу этого дела - напишу пример с использованием обоих интерфейсов, заодно и повникаю.
А идея проста - I2S, ADC как связанные с аналогом не особо нужны, SPI, UART(RS485) - как цифровые для тестирования чего либо очень даже хорошо подходят.
485 - не мало и по работе используется, да и у себя - поэтому почему бы и не сделать мелкое технологическое оборудование, с которым можно было бы быстро проверить работоспособность шины или устройств на ней (+ к этому на C# вполне легко пишется ПО верхнего уровня для ПК или телефона на WP)
SPI - больше как вспомогательная вещь, поцепить на него дисплей или расширитель портов или еще чего, что по надобности будет нужно и не в одном количестве - почему и про CS спрашиваю, а скорость не так и шибко тут важна имхо.

В целом же идею понял, на 485 RTS тогда на плате SMT перемычку лучше предусмотреть - что бы если понадобится - то выпаять её, а остальные пины просто вывести на гребёнку.
 

AlexMelven

New member
В целом же идею понял, на 485 RTS тогда на плате SMT перемычку лучше предусмотреть - что бы если понадобится - то выпаять её, а остальные пины просто вывести на гребёнку.
не выпаять, а переткнуть. Это ведь проще. Или переключатель поставить.
 

PostLast

Member
SPI - больше как вспомогательная вещь, подцепить на него дисплей или расширитель портов
Стоит упражняться с HSPI PORT OVERLAP http://bbs.espressif.com/viewtopic.php?t=56
получите еще 2 CS но емкости соединения очень критичны.

Кстати если кто-то (наверное pvvx :) ) занимались HSPI slave возможноли обойти их "протокол" 8J-ESP8266__SPI-WiFi_Passthrough_2-Interrupt_Mode__EN_v1.0.pdf
2.2. Communication format supported by the SPI slave
изменить формат команды (0х02 и 0х03) и заставить адрес работать как адрес а не как затычку. хотя если этот байт можно получить где-то еще то уже гуд.
 
Последнее редактирование:
  • Like
Реакции: A_D

A_D

Active member
PostLast, Спасибо за пример! Буду изучать, думаю это хорошее решение вопроса.
 

A_D

Active member
AlexMelven, что бы протестировать железо - решил чуть подербанить имеющийся ESP-01 в наличии. Не шибко церемонясь с чипом - сразу в спартанские условия его, протестировать на нагрев и паяемость, намазал слабеньким самодельным раствором спиртоканифоли (что было под рукой) обильно вокруг прогрел феном на 290 градусах - за 5 сек чип отпаялся, перерезал дорожку от общего к 13му пину, чуть почистил, намазал еще спиртоканифоли и сверху чип. Опять феном прошелся, чуть выровнял, подпаял внешний резистор к земле и включил:
- шьется норм (для теста залил последнюю свалку без изменений).
- не греется.
- wifi работает и телефон без проблем конектится.
- странички грузятся, всё ок.

Может вы долго слишком держали фен и перегревали чип ? по крайней мере я никаких хитростей не применял - паял как обычно любой чип и всё норм. Станция - самый ширпотреб - Люкей 702.
 

Вложения

Последнее редактирование:

A_D

Active member
что то не работает пин RTS в последней свалке...
что делаю - беру 0.5.4а релиз, компилирую - заливаю, открываю на сотике страничку Sample - в UART0 сыплет Hello!, для проверки сойдет. Хорошо, беру изменяю участок назначения пинов в файле uart_tcp.c в функции void ICACHE_FLASH_ATTR update_mux_uart0(void) вот так:

Код:
        if(PERI_IO_SWAP & PERI_IO_UART0_PIN_SWAP)
        { // swap uart0 pins (u0rxd <-> u0cts), (u0txd <-> u0rts) ?
            ....
        }
        else
        {
            MUX_TX_UART0 = VAL_FUNC_U0TX; // GPIO1/TX0, output
            MUX_RX_UART0 = VAL_FUNC_U0RX | ((UART0_CONF0 & UART_RXD_INV)? PULLDOWN : PULLUP);  // GPIO3/RX0, input
            if(uart0_flow_ctrl_flg)
            { // включен flow
                update_rts0();
                MUX_RTS_UART0 = VAL_FUNC_U0RTS | PULLDIS; // GPIO15/RTS, output
                //MUX_CTS_UART0 = VAL_FUNC_U0CTS | ((UART0_CONF0 & UART_CTS_INV)? PULLDOWN : PULLUP); // GPIO13/CTS, input                         <--------------------------------
                MUX_CTS_UART0 = VAL_MUX_CTS_UART0_OFF;  // ВОТ тут закоментил назначение пина CTS и добавил эту строку - всегда обычный пин. <--------------------------------
            }
            else
            {
                MUX_RTS_UART0 = VAL_MUX_RTS_UART0_OFF;
                MUX_CTS_UART0 = VAL_MUX_CTS_UART0_OFF;
            }
        }
    }
Компилирую, заливаю, включаю Flow Enable галочку - вижу RTS пин в 0, ок, захожу на Sample страничку - сыплет Hello, но... RTS пин как был в 0 так и остался на время посылки. Пробовал вернуть всё обратно в коде - заливал, теперь чип ожидает 1ки на CTS и только тогда сыплет данные, но RTS пин всеравно не меняется никогда. Притом, что Inverse на него работает, видно что он управляется.... или это изза того, что я для теста вызываю страничку Sample ? (попробовал с компа через утилиту USR-TCP232-Test.exe - данные шлет, но RTS пин всё так же не меняет своего состояния...)
Еще что забавно:
-Если включить LoopBack - то, CTS вообще перестает влиять на поток - всегда данные сыпятся, вне зависимости уровня на этом пине, зато если к LoopBack еще и включить галку Inverse RTS - то вообще ничего не приходит, как только отключаешь галку - все данные скопом вываливаются...
 
Последнее редактирование:
Сверху Снизу