Подождите, подождите. А разве "свалка" от pvvx не избавлена от SDK Espressif в части работы с TCP стеком? А то я тут уже на этой свалке себе сервер пилить начал....Сам жду когда избавятся от их SDK
Подождите, подождите. А разве "свалка" от pvvx не избавлена от SDK Espressif в части работы с TCP стеком? А то я тут уже на этой свалке себе сервер пилить начал....Сам жду когда избавятся от их SDK
"Свалка" в части web не использует глючные функции espconn, а базируется на LwIP и при полном избавлении от SDK LwIP останется. Может версия его будет 1.4.1...Подождите, подождите. А разве "свалка" от pvvx не избавлена от SDK Espressif в части работы с TCP стеком? А то я тут уже на этой свалке себе сервер пилить начал.
fifo rx и tx по 128 байт.Поэтому вопрос - какими порциями можно слать данные в уарт? И какого размера у него FIFO?
uint8 *ptr = &buf;
int cnt = 0;
while((sizebuf--) && (READ_PERI_REG(UART_STATUS(UART0)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S))) {
*ptr++ = READ_PERI_REG(UART_FIFO(UART0));
cnt++;
}
while ( READ_PERI_REG ( UART_STATUS ( UART0 ) ) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S) )
{
temp = READ_PERI_REG ( UART_FIFO ( UART0 ) );
// Эхо
uart0_sendByte ( temp );
/*
// сохраняем байт в буфере
cmdBuffer [ cmdBufferWriteIdx ++ ] = temp;
// Закольцовываем
if ( cmdBufferWriteIdx == CMD_BUFFER_SIZE )
cmdBufferWriteIdx = 0;
*/
} // while
Не снято прерывание и не сконфигурированы установки UART.Кидаю 10 байт и меньше - нормально всё, эхо проходит. 11 и больше - глухой висяк..
Нет. Fifo 128 байт, а у вас в конфигах UART назначено RXFIFO_FULL_INT по 16-ти байтам.Послал 16 байт, получил в ответ это сообщение . Т.е. входной буфер == 16 байт. Если, конечно, я это правильно понимаю.
Может быть. А где это задаётся?Fifo 128 байт, а у вас в конфигах UART назначено RXFIFO_FULL_INT по 16-ти байтам.
//Stupid bit of code that does the bare minimum to make os_printf work.
/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42):
* Jeroen Domburg <jeroen@spritesmods.com> wrote this file. As long as you retain
* this notice you can do whatever you want with this stuff. If we meet some day,
* and you think this stuff is worth it, you can buy me a beer in return.
* ----------------------------------------------------------------------------
*/
#include <esp8266.h>
#include <uart_hw.h>
#include "serial_transfer.h"
typedef struct {
uint32 RcvBuffSize;
uint8 *pRcvMsgBuff;
uint8 *pWritePos;
uint8 *pReadPos;
uint8 TrigLvl; //JLU: may need to pad
RcvMsgBuffState BuffState;
} RcvMsgBuff;
static RcvMsgBuff rcv_buff;
LOCAL void
uart0_rx_intr_handler(void *para)
{
uint8 RcvChar;
uint8 uart_no = UART0;//UartDev.buff_uart_no;
if(UART_FRM_ERR_INT_ST == (READ_PERI_REG(UART_INT_ST(uart_no)) & UART_FRM_ERR_INT_ST))
{
os_printf("FRM_ERR\r\n");
WRITE_PERI_REG(UART_INT_CLR(uart_no), UART_FRM_ERR_INT_CLR);
}
if(UART_RXFIFO_FULL_INT_ST == (READ_PERI_REG(UART_INT_ST(uart_no)) & UART_RXFIFO_FULL_INT_ST))
{
os_printf("fifo full\r\n");
ETS_UART_INTR_DISABLE();
WRITE_PERI_REG(UART_INT_CLR(uart_no), UART_RXFIFO_FULL_INT_CLR);
while (READ_PERI_REG(UART_STATUS(uart_no)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S))
{
RcvChar = READ_PERI_REG(UART_FIFO(uart_no)) & 0xFF;
//os_printf("%02X", RcvChar);
get_package_char(RcvChar);
}
}
else if(UART_RXFIFO_TOUT_INT_ST == (READ_PERI_REG(UART_INT_ST(uart_no)) & UART_RXFIFO_TOUT_INT_ST))
{
ETS_UART_INTR_DISABLE();
WRITE_PERI_REG(UART_INT_CLR(uart_no), UART_RXFIFO_TOUT_INT_CLR);
while (READ_PERI_REG(UART_STATUS(uart_no)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S))
{
RcvChar = READ_PERI_REG(UART_FIFO(uart_no)) & 0xFF;
//os_printf("%02X", RcvChar);
get_package_char(RcvChar);
}
}
else if(UART_RXFIFO_TOUT_INT_ST != 0)
{
ETS_UART_INTR_DISABLE();
os_printf("stat:%02X",*(uint8 *)UART_INT_ENA(uart_no));
WRITE_PERI_REG(UART_INT_CLR(uart_no), 0xFFFF);
}
//ETS_UART_INTR_ENABLE();
}
static void ICACHE_FLASH_ATTR stdoutUartTxd(char c) {
//Wait until there is room in the FIFO
while (((READ_PERI_REG(UART_STATUS(0))>>UART_TXFIFO_CNT_S)&UART_TXFIFO_CNT)>=126) ;
//Send the character
WRITE_PERI_REG(UART_FIFO(0), c);
}
static void ICACHE_FLASH_ATTR stdoutPutchar(char c) {
//convert \n -> \r\n
if (c=='\n') stdoutUartTxd('\r');
stdoutUartTxd(c);
}
void ICACHE_FLASH_ATTR stdoutInit() {
ETS_UART_INTR_ATTACH(uart0_rx_intr_handler, &(rcv_buff));
//Enable TxD pin
PIN_PULLUP_DIS(PERIPHS_IO_MUX_U0TXD_U);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_U0RTS);
//Set baud rate and other serial parameters to 115200,n,8,1
uart_div_modify(0, UART_CLK_FREQ/BIT_RATE_115200);
WRITE_PERI_REG(UART_CONF0(0), (STICK_PARITY_DIS)|(ONE_STOP_BIT << UART_STOP_BIT_NUM_S)| \
(EIGHT_BITS << UART_BIT_NUM_S));
//Reset tx & rx fifo
SET_PERI_REG_MASK(UART_CONF0(0), UART_RXFIFO_RST|UART_TXFIFO_RST);
CLEAR_PERI_REG_MASK(UART_CONF0(0), UART_RXFIFO_RST|UART_TXFIFO_RST);
//Clear pending interrupts
//set rx fifo trigger
WRITE_PERI_REG(UART_CONF1(0),
((0x10 & UART_RXFIFO_FULL_THRHD) << UART_RXFIFO_FULL_THRHD_S) |
((0x10 & UART_RX_FLOW_THRHD) << UART_RX_FLOW_THRHD_S) |UART_RX_FLOW_EN |
(0x02 & UART_RX_TOUT_THRHD) << UART_RX_TOUT_THRHD_S | UART_RX_TOUT_EN);
SET_PERI_REG_MASK(UART_INT_ENA(0), UART_RXFIFO_TOUT_INT_ENA | UART_FRM_ERR_INT_ENA);
WRITE_PERI_REG(UART_INT_CLR(0), 0xffff);
SET_PERI_REG_MASK(UART_INT_ENA(0), UART_RXFIFO_FULL_INT_ENA);
//Install our own putchar handler
os_install_putc1((void *)stdoutPutchar);
ETS_UART_INTR_ENABLE();
}
void ICACHE_FLASH_ATTR get_package_char(char DataUART)
{
//Some packet function
WRITE_PERI_REG(0X60000914, 0x73);
if(UART_RXFIFO_FULL_INT_ST == (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_FULL_INT_ST))
{
WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR);
}
else if(UART_RXFIFO_TOUT_INT_ST == (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_TOUT_INT_ST))
{
WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_TOUT_INT_CLR);
}
ETS_UART_INTR_ENABLE();
}
Чёт не понял что значит SDK? С ним я смогу переписать прошивку самого SIM900??? Я просто по этой ссылке не вижу никаких сдк,, пдфок много, еще какой-то сервер, поммогите пожалуйста понять как загрузить это сдк, и перепрошивать? У SIM900 есть sdk http://microchip.ua/simcom/?link=/SIM900x .
static void ICACHE_FLASH_ATTR recvTask(os_event_t *events)
{
uint8_t i;
while (READ_PERI_REG(UART_STATUS(UART0)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S))
{
WRITE_PERI_REG(0X60000914, 0x73); //WTD
uint16 length = 0;
while ((READ_PERI_REG(UART_STATUS(UART0)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S)) && (length<MAX_UARTBUFFER))
uartbuffer[length++] = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF;
for (i = 0; i < MAX_CONN; ++i)
if (connData[i].conn)
espbuffsent(&connData[i], uartbuffer, length);
}
if(UART_RXFIFO_FULL_INT_ST == (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_FULL_INT_ST))
{
WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR);
}
else if(UART_RXFIFO_TOUT_INT_ST == (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_TOUT_INT_ST))
{
WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_TOUT_INT_CLR);
}
ETS_UART_INTR_ENABLE();
}
os_printf() - это в SDK os_printf_plus():Во многих проектах их авторы используют в тексте os_printf для вывода отладочной информации, но на деле через uart в terminal 1.9 ничего не выводится. Судя по описанию, достаточно подключить osapi.h, но нет... В чём секрет? Единственный рабочий способ, который я знаю, находился в UDK (функция console_print).