Hola a todos, resulta que estoy utilizando un PIC18F67J50 con un ENC28J60 como tarjeta de red para implementar un sistema ethernet y tengo un problema que no sé como solventar a ver si alguien que tenga mas experiencia en esto me echa una mano.
Con el pic estoy utilizando una memoria externa 25LC1024 que es la que viene por defecto en las librerías.
Si solo implemento el servidor telnet todo va bien, tengo comunicación y todo lo demás, pero si le implemento el servidor web ahí ya no me funciona el asunto.
Siguiendo el rastro del programa donde veo que se queda en espera es en este trozo de código que pertenece a la librería TCP.c
switch(vMedium)
{
#if TCP_ETH_RAM_SIZE > 0
case TCP_ETH_RAM:
ptrBaseAddress = wCurrentETHAddress;
wCurrentETHAddress += sizeof(TCB) + wTXSize+1 + wRXSize+1;
// Do a sanity check to ensure that we aren't going to use memory that hasn't been allocated to us.
// If your code locks up right here, it means you've incorrectly allocated your TCP socket buffers in TCPIPConfig.h. See the TCP memory allocation section. More RAM needs to be allocated to the base memory mediums, or the individual sockets TX and RX FIFOS and socket quantiy needs to be shrunken.
#if defined(WF_CS_TRIS)
while(wCurrentETHAddress > TCP_ETH_RAM_BASE_ADDRESS + WFGetTCBSize()/*TCP_ETH_RAM_SIZE*/);
#else
while(wCurrentETHAddress > TCP_ETH_RAM_BASE_ADDRESS + TCP_ETH_RAM_SIZE);
#endif
break;
#endif
#if TCP_PIC_RAM_SIZE > 0
case TCP_PIC_RAM:
ptrBaseAddress = ptrCurrentPICAddress;
ptrCurrentPICAddress += sizeof(TCB) + wTXSize+1 + wRXSize+1;
// Do a sanity check to ensure that we aren't going to use memory that hasn't been allocated to us.
// If your code locks up right here, it means you've incorrectly allocated your TCP socket buffers in TCPIPConfig.h. See the TCP memory allocation section. More RAM needs to be allocated to the base memory mediums, or the individual sockets TX and RX FIFOS and socket quantiy needs to be shrunken.
while(ptrCurrentPICAddress > TCP_PIC_RAM_BASE_ADDRESS + TCP_PIC_RAM_SIZE);
break;
#endif
#if TCP_SPI_RAM_SIZE > 1
case TCP_SPI_RAM:
ptrBaseAddress = wCurrentSPIAddress;
wCurrentSPIAddress += sizeof(TCB) + wTXSize+1 + wRXSize+1;
// Do a sanity check to ensure that we aren't going to use memory that hasn't been allocated to us.
// If your code locks up right here, it means you've incorrectly allocated your TCP socket buffers in TCPIPConfig.h. See the TCP memory allocation section. More RAM needs to be allocated to the base memory mediums, or the individual sockets TX and RX FIFOS and socket quantiy needs to be shrunken.
while(wCurrentSPIAddress > TCP_SPI_RAM_BASE_ADDRESS + TCP_SPI_RAM_SIZE);
break;
#endif
default:
while(1); // Undefined allocation medium. Go fix your TCPIPConfig.h TCP memory allocations.
}
se queda esperando en el while(1); //Undefined allocation medium. Go fix your TCPIPConfig.h TCP memory allocations., según dice ahí, si la traducción no me falla, Indefinida la localización de medium, ve a TCPIPConfig.h localización de la memoria TCP.
yo voy al archivo de configuración y lo que veo es esto
/* TCP Socket Memory Allocation
* TCP needs memory to buffer incoming and outgoing data. The
* amount and medium of storage can be allocated on a per-socket
* basis using the example below as a guide.
*/
// Allocate how much total RAM (in bytes) you want to allocate
// for use by your TCP TCBs, RX FIFOs, and TX FIFOs.
#define TCP_ETH_RAM_SIZE (3927ul)
#define TCP_PIC_RAM_SIZE (0ul)
#define TCP_SPI_RAM_SIZE (0ul)
#define TCP_SPI_RAM_BASE_ADDRESS (0x00)
// Define names of socket types
#define TCP_SOCKET_TYPES
#define TCP_PURPOSE_GENERIC_TCP_CLIENT 0
#define TCP_PURPOSE_GENERIC_TCP_SERVER 1
#define TCP_PURPOSE_TELNET 2
#define TCP_PURPOSE_FTP_COMMAND 3
#define TCP_PURPOSE_FTP_DATA 4
#define TCP_PURPOSE_TCP_PERFORMANCE_TX 5
#define TCP_PURPOSE_TCP_PERFORMANCE_RX 6
#define TCP_PURPOSE_UART_2_TCP_BRIDGE 7
#define TCP_PURPOSE_HTTP_SERVER 8
#define TCP_PURPOSE_DEFAULT 9
#define TCP_PURPOSE_BERKELEY_SERVER 10
#define TCP_PURPOSE_BERKELEY_CLIENT 11
#define END_OF_TCP_SOCKET_TYPES
#if defined(__TCP_C)
// Define what types of sockets are needed, how many of
// each to include, where their TCB, TX FIFO, and RX FIFO
// should be stored, and how big the RX and TX FIFOs should
// be. Making this initializer bigger or smaller defines
// how many total TCP sockets are available.
//
// Each socket requires up to 56 bytes of PIC RAM and
// 48+(TX FIFO size)+(RX FIFO size) bytes of TCP_*_RAM each.
//
// Note: The RX FIFO must be at least 1 byte in order to
// receive SYN and FIN messages required by TCP. The TX
// FIFO can be zero if desired.
#define TCP_CONFIGURATION
ROM struct
{
BYTE vSocketPurpose;
BYTE vMemoryMedium;
WORD wTXBufferSize;
WORD wRXBufferSize;
} TCPSocketInitializer[] =
{
//{TCP_PURPOSE_GENERIC_TCP_CLIENT, TCP_ETH_RAM, 125, 100},
//{TCP_PURPOSE_GENERIC_TCP_SERVER, TCP_ETH_RAM, 20, 20},
{TCP_PURPOSE_TELNET, TCP_ETH_RAM, 200, 150},
{TCP_PURPOSE_TELNET, TCP_ETH_RAM, 200, 150},
{TCP_PURPOSE_TELNET, TCP_ETH_RAM, 200, 150},
//{TCP_PURPOSE_FTP_COMMAND, TCP_ETH_RAM, 100, 40},
//{TCP_PURPOSE_FTP_DATA, TCP_ETH_RAM, 0, 128},
{TCP_PURPOSE_TCP_PERFORMANCE_TX, TCP_ETH_RAM, 200, 1},
{TCP_PURPOSE_TCP_PERFORMANCE_RX, TCP_ETH_RAM, 40, 1500},
//{TCP_PURPOSE_UART_2_TCP_BRIDGE, TCP_ETH_RAM, 256, 256},
{TCP_PURPOSE_HTTP_SERVER, TCP_ETH_RAM, 200, 200},
{TCP_PURPOSE_HTTP_SERVER, TCP_ETH_RAM, 200, 200},
//{TCP_PURPOSE_DEFAULT, TCP_ETH_RAM, 200, 200},
//{TCP_PURPOSE_BERKELEY_SERVER, TCP_ETH_RAM, 25, 20},
//{TCP_PURPOSE_BERKELEY_SERVER, TCP_ETH_RAM, 25, 20},
//{TCP_PURPOSE_BERKELEY_SERVER, TCP_ETH_RAM, 25, 20},
//{TCP_PURPOSE_BERKELEY_CLIENT, TCP_ETH_RAM, 125, 100},
};
#define END_OF_TCP_CONFIGURATION
#endif
creo que van por aquí los tiros pero he probado muchas combinaciones pero no doy con la tecla.
Según creo, una vez que implementes el servidor web, con la herramienta MPSF2 que viene en la librería cargarías la web en la memoria SPI vía ethernet ¿Cierto o tengo que cargar el fichero con un programador de eeprom y ese es el problema?.
He de decir que estoy utilizando una PCB desarrollada por mi, nada de desarrollos comerciales