Network Component
Version 7.19.0
MDK Middleware for IPv4 and IPv6 Networking
|
The steps to create a microcontroller application that uses TCP/IP communication are:
Only a few steps are necessary to complete the RTE Component selection:
The Network Device Driver and the Network Controller of the microcontroller need to be correctly configured. This means:
For Ethernet network communication, usually an external Ethernet PHY is required to interface the physical line to the digital MAC of the microcontroller device. The MAC usually contains two buses:
SMI is used to access the PHY’s internal registers to read the state of the link (up/down), duplex mode, speed, and to restart auto-negotiation etc. SMI is a serial bus, which allows to connect up to 32 devices. Devices on the bus are accessed using a 5-bit device address. A default device address is hardware configurable by pin-strapping on the device (some pins are sampled when a reset is asserted or at power-up).
The device’s internal weak pull-up or pull-down resistors define a default device address. This address can be changed by connecting strong pull-up or pull-down resistors externally. In this case, the ETH_PHY_ADDR
in the PHY driver needs to be changed accordingly to be able to control the PHY and to communicate with it. Use the Options for Component dialog to override the default setting for ETH_PHY_ADDR:
All configuration files for the Network Component are listed in the Project window below the Component Class Network.
The Network Core configuration file Net_Config.c contains the setting for the Local Host Name. This is a name under which the network device can be accessed on a local area network (LAN). This requires a NetBIOS Name Service to be enabled in the configuration. This name is very useful if you don't know the IP address that has been assigned to your device by the DHCP server.
The Memory Pool Size specifies the amount of RAM in bytes allocated for the memory pool. The buffers for the network packets are allocated from this memory pool. Usually, the default value of 12000 bytes is sufficient.
Many Network Services are started by the Network Core automatically. If you disable Start System Service, you need to enable/start them at runtime using the dedicated functions for that.
To change the default OS resource settings for the Network Core, use Core Thread Stack Size. The default value is 1024 bytes. The default Core Thread priority is osPriorityNormal. You can change this priority by changing the NET_THREAD_PRIORITY defined in this configuration file. This priority must be lower than the priorities of the network interface threads.
The Network Interface configuration files Net_Config_Interface_n.h contain general IP address and other settings. You also need to specify the hardware driver number that is to be used with the network interface. In case of Ethernet for example, this is usually 0. If you are using a SLIP or PPP over a serial connection, you need to specify the hardware driver number of the exact UART you wish to use. All settings for the different interfaces are described here:
Usually, the needs of most applications are served by using the default settings for the sockets. Of course, there are configuration files for all three socket types that are specified in
The configuration files for all the Network Services are explained in the respective section:
The mbed TLS component provides an API for secure communication. When selecting this software component, the mbedTLS_config.h configuration file is added to the project. The proper usage of this file is out of the scope of this document. For further information, check the online documentation of .
For proper operation, the Network Component requires some system configuration settings. The requirements are:
Stack_Size
).netCore_Thread
and netETH_Thread
).For more information, check the Network Component's Resource Requirements section.
Before using the networking communications, the Network Core must be initialized with the function netInitialize. The function initializes the Network system resources and creates threads and other RTOS objects. The initialization is usually executed from the app_main thread.
The initialization process is different depending on which network interface is used:
files provide access to all functions that are required to communicate over the Network. The available functions are explained in the Reference section of the Network Component. These routines can be adapted to the needs of the microcontroller application, in case more functionality is needed.
The following templates are available for the Network component:
Template Name | User Functions |
---|---|
DNS_Client.c | dns_cbfunc (Callback function for notification about DNS client events), resolve_host (DNS resolving process) |
FTP_Client_UIF.c | netFTPc_Process (Request parameters for FTP client session), netFTPc_Notify (Notify the user application when FTP client operation ends) |
FTP_Server_Access.c | netFTPs_AcceptClient (Accept or deny connection from remote FTP client) |
FTP_Server_Event.c | netFTPs_Notify (Notify the user application about events in FTP server service) |
FTP_Server_Multiuser.c | netFTPs_CheckUsername (Check if an user account exists), netFTPs_CheckPassword (Check user account password), netFTPs_FileAccess (Check if remote user is allowed to access a file) |
HTTP_Server_Access.c | netHTTPs_AcceptClient (Accept or deny connection from remote HTTP client) |
HTTP_Server_CGI.c | netCGI_ProcessQuery (Process query string received by GET request), netCGI_ProcessData (Process data received by POST request), netCGI_Script (Generate dynamic web data from a script line) |
HTTP_Server_Error.c | net_http_error (Define user-friendly HTTP error messages) |
HTTP_Server_Multiuser.c | netHTTPs_CheckAccount (Check if an user account exists), netHTTPs_FileAccess (Check if remote user is allowed to access a file) |
SMTP_Client_UIF.c | netSMTPc_Process (Request parameters for SMTP client session), netSMTPc_Notify (Notify the user application when SMTP client operation ends), netSMTPc_AcceptAuthentication (Accept or deny authentication requested by SMTP server) |
SNMP_Agent_MIB.c | mib_table (Defines MIB information data table), register_mib_table (Registers a MIB table in SNMP agent) |
TCP_Socket_Client.c | tcp_cb_client (Notify the user application about TCP socket events), send_data (Connect to TCP server and send data) |
TCP_Socket_Server.c | tcp_cb_server (Notify the user application about TCP socket events) |
Telnet_Server_Access.c | netTELNETs_AcceptClient (Accept or deny connection from remote Telnet client) |
Telnet_Server_Multiuser.c | netTELNETs_CheckUsername (Check if an user account exists), netTELNETs_CheckPassword (Check user account password) |
Telnet_Server_UIF.c | netTELNETs_ProcessMessage (Request message for Telnet server session), netTELNETs_ProcessCommand (Process a command and generate response) |
TFTP_Client_UIF.c | tftp_client_notify (Notify the user application when TFTP client operation ends) |
TFTP_Server_Access.c | netTFTPs_AcceptClient (Accept or deny connection from remote TFTP client) |
UDP_Socket.c | udp_cb_func (Notify the user application about UDP socket events), send_udp_data (Send UDP data to destination client) |
The Network Component is distributed in library form and doesn't allow direct code debug. However, it can be configured to generate debug events and provide dynamic visibility to the component operation.
The following variants can be selected for the Network:Core component in the Manage Run-Time Environment window:
The figure below shows selection of IPv4/IPv6 Debug variant as an example.
The Debug Events describes the events implemented in Network Services.
is a powerful tool that provides visibility to the dynamic execution of the program. The Network Component generates a broad set of Debug Events for the Event Recorder and implements required infrastructure to interface with it.
To use the Event Recorder together with Network Component, it is required to create an image with event generation support. The necessary steps are:
Now, when the network services generate event information, it can be viewed in the .
The Network debug variant generates lots of debug events. This might have an impact on the operation of the Network library. It is a good idea to disable debug for modules, which are not used, or at least to reduce the number of messages, that are generated. Therefore, enable Error events for such modules and enable Debug events only for the modules you are focused on.
The network component uses the following event IDs:
Component | Event ID |
---|---|
Net_SYS | 0xC0 |
Net_MEM | 0xC1 |
Net_ETH | 0xC2 |
Net_WiFi | 0xDD |
Net_PPP | 0xC3 |
Net_SLIP | 0xC4 |
Net_LOOP | 0xC5 |
Net_IP4 | 0xC6 |
Net_ICMP | 0xC7 |
Net_IGMP | 0xC8 |
Net_NBNS | 0xC9 |
Net_DHCP | 0xCA |
Net_ARP | 0xCB |
Net_IP6 | 0xCC |
Net_ICMP6 | 0xCD |
Net_DHCP6 | 0xCE |
Net_NDP | 0xCF |
Net_UDP | 0xD0 |
Net_TCP | 0xD1 |
Net_BSD | 0xD2 |
Net_HTTPs | 0xD3 |
Net_FTPs | 0xD4 |
Net_FTPc | 0xD5 |
Net_Teln | 0xD6 |
Net_TFTPs | 0xD7 |
Net_TFTPc | 0xD8 |
Net_SMTP | 0xD9 |
Net_DNS | 0xDA |
Net_SNMP | 0xDB |
Net_SNTP | 0xDC |
It is often necessary to change the parameters and mode of operation of the network interface at startup or runtime. System control functions allow reading and changing the settings of the network interface and the system (for example the hostname).
This is required for using the same application code for serial production of embedded devices. The runtime configuration feature enables reading of configuration parameters from an EEPROM or SD Card and configuring the network interface for each embedded device differently.
To control the network interface options, you can use:
The options which can be changed are defined in the netIF_Option enumerator. However, some interfaces do not support the complete set of available options. For example, the PPP interface does not have a MAC address. If you try to modify an unsupported option, an error is returned.
The localhost name is used to access the embedded system without knowledge of its IP address. netSYS_GetHostName is used to retrieve the localhost name, whereas netSYS_SetHostName changes the localhost name.
The DHCP client can be disabled or enabled at runtime. When disabled, the user provided network parameters defined in the Net_Config_ETH_0.h or Net_Config_WiFi_0.h configuration files are used. Switch the state of the DHCP client using netDHCP_Disable and netDHCP_Enable.
Code Example