Difference between revisions of "Ethernet Module"
Jump to navigation
Jump to search
Line 3: | Line 3: | ||
*The entire Ethernet Module consists of: | *The entire Ethernet Module consists of: | ||
#Hardware: a LAN card based on [http://www.davicom.com.tw/eng/index.htm Davicom] DM9000A chip | #Hardware: a LAN card based on [http://www.davicom.com.tw/eng/index.htm Davicom] DM9000A chip | ||
− | #Software: a TCP/IP stack based on [http://www.sics.se/~adam/uip/ uIP] 1.0 | + | #Software: a TCP/IP stack based on [http://www.sics.se/~adam/uip/ uIP] 1.0 or [http://savannah.nongnu.org/projects/lwip/ lwIP] |
===Useful Links=== | ===Useful Links=== | ||
Line 89: | Line 89: | ||
*It is more powerful than uIP but requires more memory. | *It is more powerful than uIP but requires more memory. | ||
*lwIP is under the [http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5 Modified BSD License] | *lwIP is under the [http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5 Modified BSD License] | ||
+ | ====Porting==== | ||
+ | *To be added | ||
Line 98: | Line 100: | ||
*Make sure your uip buffer size is large enough (DHCP messages from some server can be more than 500 bytes). In my setting, I use 1536 in "uip-config.h" | *Make sure your uip buffer size is large enough (DHCP messages from some server can be more than 500 bytes). In my setting, I use 1536 in "uip-config.h" | ||
#define UIP_CONF_BUFFER_SIZE 1536 | #define UIP_CONF_BUFFER_SIZE 1536 | ||
− | *Change PT_WAIT_UNTIL(...) to PT_YIELD_UNTIL(...) in line 259 and 276 in dhcpc.c [This is a known bug in dhcpc.c] | + | *Include the dhcpc.h header file in "uip-config.h" |
+ | #include "dhcpc.h" | ||
+ | *Change PT_WAIT_UNTIL(...) to PT_YIELD_UNTIL(...) in line 259 and 276 in "dhcpc.c" [This is a known bug in dhcpc.c] | ||
*In your main loop, initialize your MAC address and DHCP if UIP_FIXEDADDR is 0 in "uip-opt.h", for example: | *In your main loop, initialize your MAC address and DHCP if UIP_FIXEDADDR is 0 in "uip-opt.h", for example: | ||
int main(void) | int main(void) | ||
Line 131: | Line 135: | ||
===Web Server=== | ===Web Server=== | ||
− | * | + | *Include the "webserver.h" header file in "uip-config.h" |
+ | #include "webserver.h" | ||
+ | *Modify httpd.c | ||
+ | **added #include "httpd-hget.h" in line 63 | ||
+ | **added httpd_hget(s->filename) in line 224 | ||
+ | *Modify httpd-fs.h | ||
+ | **HTTPD_FS_STATISTICS set to 0 | ||
+ | *Modify httpd-fs.c | ||
+ | **changed #include "httpd-fsdata.c" to #include <httpd-fsdata.c> | ||
+ | *Create httpd-hget.h | ||
+ | **added to generate dynamic pages, e.g. /abc.shtml?button=Refresh | ||
+ | #ifndef __HTTPD_HGET_H__ | ||
+ | #define __HTTPD_HGET_H__ | ||
+ | extern void httpd_hget(char *name); | ||
+ | #endif | ||
+ | *Create httpd-hget.c | ||
+ | **an example is shown [ here] | ||
+ | *Create a website using HTML tags with/without Javascript | ||
Revision as of 02:52, 16 August 2007
Contents
Introduction
- This project aims to develop an Ethernet Module, to be used in conjunction with a 8/16 bits embedded system such as the dsPic33F development board.
- The entire Ethernet Module consists of:
- Hardware: a LAN card based on Davicom DM9000A chip
- Software: a TCP/IP stack based on uIP 1.0 or lwIP
Useful Links
DM9000A
- DM9000A Description
- DM9000A Datasheet
- Application Circuit
- Layout Guidelines
- Application Note
- DM9000A Official Drivers
dsPic33F Development Board
uIP
lwIP
HTML
- W3 Schools: Learning how to write HTML and JavaScript
- Nvu: Open source HTML Editor
SNMP
Hardware
Component List
Special Item | Description | Quantity |
---|---|---|
DM9000AEP | Ethernet Controller | 1 |
HR911102A | RJ45 Connector with Integrated Magnetics for 10/100 Base-TX | 1 |
93LC46B-I/SN | 1K Serial EEPROM | 1 (Optional) |
25MHz Crystal | Crystal | 1 |
22pF | For Crystal Use | 2 |
220uF | For RXVDD25/TXVDD25 | 1 |
49.9ohm | For RX+/RX-/TX+/TX- | 4 |
6.8kohm | For BGRES/BGGND | 1 |
510ohm | For LEDs | 2 |
Circuit and PCB
in gEDA format and its gEDA sym and footprints
Software Driver
- Download dm9000a.c
- Download dm9000a.h
- Base on FreeRTOS and dsPIC33 platform
- Using POSIX-like API:
- int dmfe_open(int flags): initialize the Ethernet controller for 10MHz Half-Duplex
- int dmfe_close(): turn off the PHY layer
- int dmfe_read(void): copy a packet to the default buffer
- int dmfe_write(unsigned char device, unsigned char *buf, int count): copy count bytes of the data from buf and transmit
- void dmfe_interrupt(void): process the transmit interrupt from DM9000A
TCP/IP Stack
- uIP and lwIP are light weight TCP/IP Stack designed for 8-bit/16-bit embedded systems.
uIP
- Develped by Adam Dunkels of the Networked Embedded Systems group at the Swedish Institute of Computer Science.
- uIP is under the BSD-style license
Porting
- The following files have been created to port uIP 1.0 to dsPic33F development board using FreeRTOS
- clock-arch.c: return the os tick counts since the system is turned on.
- clock-arch.h: a constant specifying the number of os ticks in one second.
- uip-config.h: configuration file your application.
lwIP
- lwIP is a small independent implementation of uIP.
- It is more powerful than uIP but requires more memory.
- lwIP is under the Modified BSD License
Porting
- To be added
uIP Ethernet Application
DHCP Client
- Enable UDP in "uip-config.h"
#define UIP_CONF_UDP 1
- Make sure your uip buffer size is large enough (DHCP messages from some server can be more than 500 bytes). In my setting, I use 1536 in "uip-config.h"
#define UIP_CONF_BUFFER_SIZE 1536
- Include the dhcpc.h header file in "uip-config.h"
#include "dhcpc.h"
- Change PT_WAIT_UNTIL(...) to PT_YIELD_UNTIL(...) in line 259 and 276 in "dhcpc.c" [This is a known bug in dhcpc.c]
- In your main loop, initialize your MAC address and DHCP if UIP_FIXEDADDR is 0 in "uip-opt.h", for example:
int main(void) { uip_ipaddr_t ipaddr; struct timer periodic_timer, arp_timer; struct uip_eth_addr mac = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06}; timer_set(&periodic_timer, CLOCK_SECOND / 2); timer_set(&arp_timer, CLOCK_SECOND * 10); tapdev_init(); uip_init(); uip_setethaddr(mac); dhcpc_init(&mac, 6); while(1){ //normal codes goes here } }
- Implement dhcpc_configured(). This function will be called after DHCP client has obtained an IP address. Basically, you have to at least set your IP address, subnet mask and default gateway, for example,
void dhcpc_configured(const struct dhcpc_state *s) { uip_sethostaddr(s->ipaddr); uip_setnetmask(s->netmask); uip_setdraddr(s->default_router); //you can print your ip addr to your console/lcd to see if you get a valid ip address }
- An example of using DHCP Client in the dsPic33F development board can be found here.
Web Server
- Include the "webserver.h" header file in "uip-config.h"
#include "webserver.h"
- Modify httpd.c
- added #include "httpd-hget.h" in line 63
- added httpd_hget(s->filename) in line 224
- Modify httpd-fs.h
- HTTPD_FS_STATISTICS set to 0
- Modify httpd-fs.c
- changed #include "httpd-fsdata.c" to #include <httpd-fsdata.c>
- Create httpd-hget.h
- added to generate dynamic pages, e.g. /abc.shtml?button=Refresh
#ifndef __HTTPD_HGET_H__ #define __HTTPD_HGET_H__ extern void httpd_hget(char *name); #endif
- Create httpd-hget.c
- an example is shown [ here]
- Create a website using HTML tags with/without Javascript
SNMP Agent
- Simple Network Management Protocol (SNMP) is a standard protocol to access variables to remote device via the Internet.
- It belongs to the Application Layer, as in HTTP.
- If a device is SNMP compatible, any SNMP compatible host system can monitor and control that device.
Components in a SNMP System
- Network Management Station (NMS)
- This is a client, initiating SNMP communication.
- This can be a PC with an NMS software, polling data from the SNMP agents periodically.
- SNMP Agents
- These are servers, responding to one or multiple NMS requests.
- Management Information Base (MIB)
- A special collection of variables managed by the SNMP agents.
- MIB has a tree-like structure.
- An Object Identifier (OID) is given for each node.
- Data are stored at the end-nodes.
- Private variables may be constructed under the "enterprise" sub-tree.
- The OID (41.6.1.4.X) for "enterprise" can be obtained from Internet Assigned Number Authority (IANA).
Abstract Syntax Notation
- Each MIB variable contains several attributes, such as data type, access type and object identifier.
- Abstract Syntax Notation version 1 (ASN.1) is a language to define these attributes in SNMP.