Other Parts Discussed in Thread: DP83640
Hi,
I have Lwip driver, how to make use of it for tcp/ip?
Can you please share me the demo application code for tcp/ip.
Regards,
Immanuel
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
Hi Wang,
Thanks for your reply.
I have downloaded that already. but need a demo code for using TCP/IP in that driver code.
Regards,
Immanuel
Hi Wang,
we are not getting any clue for it.Please give your suggestions for the implementation of UDP communication using this lwip driver.
Regards,
Immanuel
Hi Wang,
The Functions
EMAC_LwIP_Main(emacAddress);; is making many server configurations.
we have included the header as you mentioned.
int main()
{
struct pbuf *Tx;
uint16_t length=0;
char msg[5],error,pcb;
_enable_IRQ();
EMAC_LwIP_Main(emacAddress);
IP4_ADDR(&src, 162, 192, 37, 29);
IP4_ADDR(&dst, 162, 192, 37, 28);
IP4_ADDR(&snet, 255, 255, 255, 0);
IP4_ADDR(&nnet, 0, 0, 0, 0);
pcb=udp_new();
error=udp_bind(pcb,&src,6031);
error=udp_connect(pcb,&dst,49668);
length = 5;
Tx=pbuf_alloc(PBUF_TRANSPORT,length, PBUF_RAM);
Tx->next=0;
Tx->len=Tx->tot_len=length;
memcpy (Tx->payload, msg, Tx->len);
udp_sendto(pcb, Tx, &dst, 49668);
pbuf_free(Tx);
}
void EMAC_LwIP_Main (uint8_t * macAddress)
{
unsigned int ipAddr;
uint8_t testChar;
struct in_addr devIPAddress;
//iommUnlock();
//iommMuxEnableMdio();
//iommMuxEnableMii();
//iommLock();
sciInit();
/* Enable the interrupt generation in CPSR register */
IntMasterIRQEnable();
_enable_FIQ();
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
sciDisplayText(scilinREG, txtTitle, sizeof(txtTitle));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
sciDisplayText(scilinREG, txtTI, sizeof(txtTI));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
#ifdef __little_endian__
sciDisplayText(scilinREG, txtLittleEndian, sizeof(txtLittleEndian));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
#else
sciDisplayText(scilinREG, txtBigEndian, sizeof(txtBigEndian));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
#endif
/* Initialze the lwIP library, using DHCP.*/
sciDisplayText(scilinREG, txtEnetInit, sizeof(txtEnetInit));
ipAddr = lwIPInit(0, macAddress,0xA2C0251C,0xFFFF0000, 0, IPADDR_USE_STATIC);
sciDisplayText(scilinREG, (uint8_t*)"..DONE", sizeof("..DONE"));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
if (0 == ipAddr) {
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
sciDisplayText(scilinREG, txtErrorInit, sizeof(txtErrorInit));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
} else {
/* Convert IP Address to string */
devIPAddress.s_addr = ipAddr;
txtIPAddrItoA = (uint8_t *)inet_ntoa(devIPAddress);
LocatorConfig(macAddress, "HDK enet_lwip");
/* Initialize the sample httpd server. */
sciDisplayText(scilinREG, (uint8_t*)"Starting Web Server", sizeof("Starting Web Server"));
httpd_init();
sciDisplayText(scilinREG, (uint8_t*)"..DONE", sizeof("..DONE"));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
/* Loop forever. All the work is done in interrupt handlers. */
//while(1)
{
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
sciDisplayText(scilinREG, txtTitle, sizeof(txtTitle));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
sciDisplayText(scilinREG, txtTI, sizeof(txtTI));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
#ifdef __little_endian__
sciDisplayText(scilinREG, txtLittleEndian, sizeof(txtLittleEndian));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
#else
sciDisplayText(scilinREG, txtBigEndian, sizeof(txtBigEndian));
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
#endif
sciDisplayText(scilinREG, txtIPAddrTxt, sizeof(txtIPAddrTxt));
sciDisplayText(scilinREG, txtIPAddrItoA, 16);
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
sciDisplayText(scilinREG, txtNote1, sizeof(txtNote1));
sciDisplayText(scilinREG, txtIPAddrItoA, 16);
sciDisplayText(scilinREG, txtCRLF, sizeof(txtCRLF));
/* Before printing the next set, wait for a character on the terminal */
// sciReceive(scilinREG, 1, &testChar);
}
}
}
The UDP is not working . The DP83640 is generating ARP with both src and dst IP as same address.
we are not getting any idea about it,kindly give your suggestions.
Regards,
Immanuel
Hello,
My comments are in blue:
int main()
{
extern unsigned int len,Tot_len;
struct udp_pcb *pcb;
struct ip_addr ipaddr, netmask, gw,Src,Dst;
struct pbuf *Tx;
uint16_t length=0;
char msg[5],error,pcb;
_enable_IRQ();
EMAC_LwIP_Main(emacAddress);
//The IP address should be the IP address of your boards
IP4_ADDR(&src, 162, 192, 37, 29);
IP4_ADDR(&dst, 162, 192, 37, 28);
IP4_ADDR(&snet, 255, 255, 255, 0);
IP4_ADDR(&nnet, 0, 0, 0, 0);
//This is for gatway
IP4_ADDR(&gw, 192, 168, 0, 1);
pcb=udp_new();
//are those numbers valid for you?
error=udp_bind(pcb,&src,6031);
error=udp_connect(pcb,&dst,49668); //not a valid number for UDP
length = 5;
Tx=pbuf_alloc(PBUF_TRANSPORT,length, PBUF_RAM);
Tx->next=0;
Tx->len=Tx->tot_len=length;
memcpy (Tx->payload, msg, Tx->len);
udp_sendto(pcb, Tx, &dst, 49668); //not a valid number for UDP
pbuf_free(Tx);
}