102 lines
5.0 KiB
Plaintext
102 lines
5.0 KiB
Plaintext
|
Readme - Simple Socket Server Software Example
|
||
|
|
||
|
DESCRIPTION:
|
||
|
A Simple Socket Server that controls development board LEDs.
|
||
|
|
||
|
This software application may be targeted for TSE design having RGMII interface
|
||
|
media between Ethernet MAC and Ethernet Phy.
|
||
|
|
||
|
RGMII (Reduced Gigabit Media Independent Interface) is intended to be an
|
||
|
alternative to GMII. The principle objective of RGMII is to reduce the number
|
||
|
of pins from 22 (GMII) down to 12 in a cost-effective manner. RGMII interface
|
||
|
require a 1.5 to 2ns delay (90 degree phase shift) on the transmitted clock
|
||
|
over the data bus. This timing requirement can be achieved through a PCB trace
|
||
|
delay, or optionally of introducing the delay on-chip at the physical layer
|
||
|
transceiver chip. This example software include a configuration file to enable
|
||
|
the on-chip delay method.
|
||
|
|
||
|
Requirements:
|
||
|
-RTOS Type - MicroC/OS-II
|
||
|
-Software Component - NicheStack TCP/IP Stack - Nios II Edition
|
||
|
-Period System Timer - SYS_CLK_TIMER
|
||
|
|
||
|
PERIPHERALS USED:
|
||
|
This example exercises the following peripherals:
|
||
|
- Ethernet MAC
|
||
|
- PIO, 8-bit output (named "led_pio" in SOPC Builder)
|
||
|
- PIO, 16-bit output (named "seven_seg_pio" in SOPC Builder) (optional)
|
||
|
- STDOUT device (UART or JTAG UART)
|
||
|
|
||
|
SOFTWARE SOURCE FILES:
|
||
|
This example includes the following software source files:
|
||
|
|
||
|
- iniche_init.c: Contains main() and SSSInitialTask() to initialize NicheStack
|
||
|
and then create the other tasks once network has been properly initialized.
|
||
|
Tasks which will use sockets, such as the SSSSimpleSocketServerTask() in this
|
||
|
example, must be created with TK_NEWTASK. All other tasks can be created by directly
|
||
|
calling the MicroC/OS-II API to create a task, i.e. OSTaskCreateExt().
|
||
|
|
||
|
- simple_socket_server.c: Implementation of a simple_socket_server including all necessary sockets
|
||
|
calls to handle a single socket connection & process received commands.
|
||
|
|
||
|
- network_utilities.c: Contains MAC address and IP address routines to
|
||
|
manage addressing. These are used by NicheStack during initialization, but are
|
||
|
implementation-specific (you set your MAC address to whatever you want.. or read
|
||
|
it from your own special non-volatile memory.
|
||
|
|
||
|
- network_utilities.h: Contains prototype for function get_board_mac_addr().
|
||
|
|
||
|
- led.c: Contains tasks to manage board LED commands and update LED displays.
|
||
|
LEDManagementTask interprets commands, and toggles the row of 8 LEDS or signals the
|
||
|
LED7SegLightshowTask in response to commands received from the host running telnet.
|
||
|
The LEDManagementTask reads data from a MicroC/OS-II SSSLEDCommandQ Queue which
|
||
|
receives its data from the SSSSimpleSocketServerTask. LED7SegLightshowTask controls the
|
||
|
7-segment display.
|
||
|
|
||
|
- simple_socket_server.h: Definitions for the entire example application.
|
||
|
|
||
|
- alt_error_handler.h: Definitions for 3 error handlers, one each for MicroC-OS/II, Network,
|
||
|
and Simple Socket Server Application.
|
||
|
|
||
|
- alt_error_handler.c: Implementation for 3 error handlers, one each for MicroC-OS/II,
|
||
|
Network, and Simple Socket Server Application.
|
||
|
|
||
|
- tse_my_system.c: Allow customization of tse_mac_device[] structure through global array initialization.
|
||
|
If using marvell phy, this can be set to RGMII mode in this file. Other Phys will operate in one mode or
|
||
|
the other depending on thier implementation in driver file altera_avalon_tse.c.
|
||
|
|
||
|
BOARD/HOST REQUIREMENTS:
|
||
|
Must contain a supported phy, and use a quartus project that uses tse and msgdma.
|
||
|
|
||
|
This example requires an Ethernet cable connected to the development board's
|
||
|
RJ-45 jack, and a JTAG connection with the development board. If the host
|
||
|
communication settings are changed from JTAG UART (default) to use a
|
||
|
conventional UART, a serial cable between board DB-9 connector and the host is
|
||
|
required.
|
||
|
|
||
|
If DHCP is available (and enabled in the Software component configuration page, from
|
||
|
the BSP properties configuration), NicheStack TCP/IP Stack will attempt
|
||
|
to obtain an IP address from a DHCP server. Otherwise, a static IP address (defined in
|
||
|
Simple_Socket_Server.h) will be assigned after a DHCP timeout.
|
||
|
|
||
|
ADDITIONAL INFORMATION:
|
||
|
|
||
|
This is an example socket server using NicheStack TCP/IP Stack on MicroC/OS-II. The server
|
||
|
implements simple commands to control board LEDs through a separate MicroC/OS-II
|
||
|
task. It is in no way a complete implementation of a telnet server.
|
||
|
|
||
|
A good introduction to sockets programming is the book "Unix Network Programming" by
|
||
|
Richard Stevens. Additionally, the text "Sockets in C", by Donahoo & Calvert, is a concise
|
||
|
& inexpensive text for getting started with sockets programming.
|
||
|
|
||
|
This example will not run on the Instruction Set Simulator (ISS).
|
||
|
|
||
|
Once the simple socket server example is running and has obtained an IP address (shown
|
||
|
in the terminal window of Nios II Software Build Tools for Eclipse),
|
||
|
you can connect to it over a network by typing the
|
||
|
following command in a command shell on a development host:
|
||
|
|
||
|
telnet <ip address> 30
|
||
|
|
||
|
This command will try to connect to the Simple Socket Server using port 30.
|