Пытаюсь разбираться с SDK (IoT) от Espressif и модулем ESP-12. Правильно ли я понимаю, что не ковыряя модуль до UART1 не доберешься. Либо, похоже брать что-то типа ESP-12-e.
А I2C, по сути, не полноценный и можно самому назначить пины на которых он работает.
Кстати, может существует такая же библиотечка эмулирующая UART на произвольных пинах ?
Судя по этому:
1) UART0 используется для данных TX / RX, размер буфера RX является 0x100, c сигналом прерывания
* UART1 используется только для отладки
----------------------------------------
2) UART0 и uart1 по прерыванию объединеныr, когда прерывание происходит, см рег 0x3ff20020,
Бит 2, бит 0 представляет Uart1 и Uart0 соответственно
-----------------------------------
Вам придется написать самому драйвер для UART1
Это CTS и RTS от UART0.
UART1 имеет возможность вывести всего TX на GPIO2 - остальные выводы UART1 заняты Flash.
UART2 на чипе нету. Хватить баламутить народ.
можно ссылочку ? об UART2 я находил только одно упоминание на NodeMCU http://bbs.nodemcu.com/t/uart2-exists-in-nodemcu-esp8266/162
Причем там сказанно, что придется разделять во времени работу UART0 и UART2.
В пинмапах я не вижу упоминаний об UART2, так же как и в IoT SDK
UPD: И да - реализация разделения не входит в мои интересы... Собственно я надеялся оставить UART0 для себя - для отладочки... А для подключаемого модулька использовать еще один...
Discriminator,
ссылки не работают.
Могу либо выложить их схему либо ждемс когда у них заработает сайт.
То что я привел выше написано в софте.
Так как прерывание общее то придется самому делать обработчик прерываний
В софте для UART1 есть лишь вывод байта.
Буфер реализован лишь для UART0
Но там и сказано что uart1 используется для вывода отладочной информации .
Другой информации у меня нет.
Я обычно такие вопросы (т е о конкретной проблеме или реализации) задаю китайцам, они отвечают вполне конкретно и вежливо.
Рекомендую спросить у них.
и еще
"UartDev is defined and initialized in rom code."
полагаю, что настройка конкретики для уарт делается в заводских настройках.
Возможно что в nodeMCU сделано как указано на их схеме.
У UART0 и UART1 можно менять только их личные пины RTS<->TX CTS<->RX местами. Где-то на форуме есть тема, где разбирались с битами управления UART (там и не только это можно слепить с выходами UARTx, к примеру в моей свалке WEB ещё инверсия сигналов RX/TX/CTS/RTS). Но счас что-то не найти, т.к. по названию темы не найти, да и тут написано I2C ...
В Espressif SDK есть только смена выводов UART0 TX/RX на GPIO13 и GPIO15: system_uart_swap() : UART0 swap. Use MTCK as UART0 RX, MTDO as UART0 TX, so ROM log will not output from this new UART0. We also need to use MTDO (U0CTS) and MTCK (U0RTS) as UART0 in hardware.
pvvx,
Хоть и нет удовольствия с Вами беседовать,
но все же попробую помочь заблудшей душе и уберечь от блужданий в потемках лжи ищущих правду.
---------------------------------------------------
Начну с того, что данный рассказ основываю исключительно на своем опыте разработки
и использовании различных разработок не только китайских.
Во-первых, микропроцессорный(микроконтроллерный) DEVKIT никогда не делается голым железом.
Так как в этом случае - это мертвый выкидыш.
-------------------------------------------------
Вот и в данном случае, если Вы внимательно посмотрите на схему ,
которую я привел выше, то внезапно для себя увидите надпись в нижнем углу NODEMCU (и зачем это китайцы обманывают Вас?) .
---------------------------------------------------
Более того, данная схема , вместе со слоями печатной платы (т е вот обманщики даже документацию на печатную плату дают)
содержится в пакете nodeMCU devkit-master.
(совсем китайцы обнаглели думаю мы халяве рады(но Вы то бдительны?))
---------------------------------------------------------
Далее, так как я верю разработчикам, ( ну такой уж я доверчивый)
то я НЕ ЛЕЗУ в софт под названием SDK
(ну обманули они меня, подсунули зачем-то nodemcu-firmware и не сказали, что надо лезть в SDK)
Так вот, так как я не гуру,
то я беру nodemcu-firmware и смотрю в софт,
который сделан специально под NODEMCU DEVKIT.
---------------------------------------
и тут опять китайцы обманывают,
пишут в программе драйвера UART буквально следующее:
-------------------------------
* Copyright 2013-2014 Espressif Systems (Wuxi)
* FileName: uart.c
* Description: Two UART mode configration and interrupt handler.
* Check your hardware connection while use this mode.
* Modification history:
* 2014/3/12, v1.0 create this file.
*******************************************************************************/
[HASHTAG]#define[/HASHTAG] UART0 0
[HASHTAG]#define[/HASHTAG] UART1 1
// UartDev is defined and initialized in rom code.
extern UartDevice UartDev;
LOCAL void ICACHE_RAM_ATTR
uart0_rx_intr_handler(void *para);
/******************************************************************************
* FunctionName : uart_config
* Description : Internal used function
* UART0 used for data TX/RX, RX buffer size is 0x100, interrupt enabled
* UART1 just used for debug output
* Parameters : uart_no, use UART0 or UART1 defined ahead
* Returns : NONE
*******************************************************************************/
LOCAL void ICACHE_FLASH_ATTR
uart_config(uint8 uart_no)
{
if (uart_no == UART1) { PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);
} else {
/* rcv_buff size if 0x100 */
ETS_UART_INTR_ATTACH(uart0_rx_intr_handler, &(UartDev.rcv_buff));
PIN_PULLUP_DIS(PERIPHS_IO_MUX_U0TXD_U);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);
PIN_PULLUP_EN(PERIPHS_IO_MUX_U0RXD_U);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_U0RXD);
}
/******************************************************************************
* FunctionName : uart1_write_char
* Description : Internal used function
* Do some special deal while tx char is '\r' or '\n'
* Parameters : char c - character to tx
* Returns : NONE
*******************************************************************************/
LOCAL void ICACHE_FLASH_ATTR
uart1_write_char(char c)
{
if (c == '\n')
{
uart_tx_one_char(UART1, '\r');
uart_tx_one_char(UART1, '\n');
}
else if (c == '\r')
{
}
else
{
uart_tx_one_char(UART1, c);
}
}
--------------------------------------
Но Вы, конечно,разработчикам не верьте. Тоже Вам указ!!!
-------------------------------------------
Могу еще привести подобные примеры разработок.
И знаете, что удивительно, все делают именно так (даже немцы и американцы)
Очевидно китайцы учились в штатах,
А вы очевидно - нет.
Предупреждение: последний раз прячу за вас картинки и простыни кода под спойлер! (модератор)
Эк как тема повернула...
Вобщем буду делать примерно так:
Вар1: Вешаю девайс на "штатный" UART0, а "логи" кидаю по WiFi на "сервер".
Вар2: Вешаю девайс на GPIO13/15 GPIO1/3 использую для "логирования" и передачу данных на девайс... Соответственно в момент передачи данных на девайс или для получения с него переключаюсь свопом... Благо на девайсе есть выход, который вроде как срабатывает синхронно готовности очередной порции данных...