Part Number: BEAGLEBK
Tool/software: TI-RTOS
Hi,
Here is the system setup that I am using:
Platform: Beaglebone Black
EDMA3 Low Level Driver 2.12.5
NDK 3.40.1.01
SYS/BIOS 6.73.1.01
am335x PDK 1.0.13
Base Source: NIMU_BasicExample_bbbAM335x_armExampleProject
I want to use Sockets API to send/receive data on my host computer. First I tried with making my board as client and host computer as server. The code of the client looks as follows. I start the server at my host computer and start debugging the application. The application exits with Data Abort exception when I try to connect to the host computer.
void client() { SOCKET s; int status; char data[] = "Hello"; struct sockaddr_in cli_addr; s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (s <0) { UART_printf("Socket not created: %d\n", fdError()); } memset(&cli_addr, 0, sizeof(cli_addr)); cli_addr.sin_family = AF_INET; cli_addr.sin_addr.s_addr = inet_addr("192.168.1.10"); cli_addr.sin_port = 17225; int err = NDK_connect(s, (struct sockaddr *)&cli_addr, sizeof(cli_addr)); if(err<0) { UART_printf("%x\n",fdError()); } while(1) { err = NDK_send(s, data, sizeof(data), 0); if(err<0) { UART_printf("%x\n",fdError()); } } }
Then, I try to make my board as server and host computer as client. The code for the server app on board looks as follows. I launch the application on board and connect the host computer using telnet. The host computer connects successfully. However, I am not able to receive any data on the board (NDK_recvfrom)and I get the fdError as 16 (DEVICE_BUSY in serrno.h). I am not able to understand this strange behavior.
SOCKET s; struct sockaddr_in local_addr, cli_addr; char buffer[256]; s = NDK_socket(AF_INET, SOCK_STREAM, 0); if (s == INVALID_SOCKET) { UART_printf("%x\n", fdError()); } /*I am adding a comment 3*/ memset(&local_addr,0,sizeof(local_addr)); local_addr.sin_family = AF_INET; local_addr.sin_addr.s_addr = INADDR_ANY; local_addr.sin_port = 17225; int err = NDK_bind(s,(struct sockaddr *)&local_addr, sizeof(local_addr)); if(err<0) { UART_printf("%d\n", fdError()); } int size = sizeof(cli_addr); err = NDK_listen(s, 10); UART_printf("%d\n", err); if(err<0) { UART_printf("%d\n", fdError()); } SOCKET computer = NDK_accept(s,(struct sockaddr *)&cli_addr, &size); if(computer ==INVALID_SOCKET) { UART_printf("Error: %x\n", fdError()); } while(1) { int bytes = NDK_recvfrom(s, buffer,sizeof(buffer),0,(struct sockaddr *)&cli_addr, &size); if(bytes<0) { UART_printf("Error: %x\n", fdError()); } if (bytes>0) { int bytesSent = sendto(s, buffer, bytes, 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr)); } }
I would request TI to please help me with following:
1. Is there any TCP/UDP Echo example for AM335x or Beaglebone Black? (I know there are examples from TIVA C and I followed the same procedure, what is in there but I get exceptions)
2. It seems to me that something is wrong with the configuration of the Ethernet. Do you think above errors are because of incorrect configuration?
Regards
Vishav