********
Microchip TCP/IP Stack Version Log:
********
Note: Please file bug-reports/bug-fixes at http://support.microchip.com/ or post
to the Microchip TCP/IP -> Ethernet Forum at http://forum.microchip.com/
Look for stack updates at http://www.microchip.com/tcpip/
********
v5.25 07 May 2010
********
Changes:
1. Added support for the Microchip MRF24WB0 802.11 WiFi controller (module
part number MRF24WB0MA). This product is intended as a backwards
compatible, drop in replacement to the ZG2100. The MRF24WB0MA should work
with previous TCP/IP Stack versions as if it were a ZG2100M, but when the
MRF24WB0MA is used with this (5.25) and future TCP/IP Stack versions,
feature improvements inside the MRF24WB0 allow the TCP/IP Stack code/RAM
size to be smaller and run faster.
2. Dropped support for the ZeroG ZG2100 802.11 WiFi controller. Applications
that must stay with this device should continue to use TCP/IP Stack
version 5.20b or earlier. All new projects or preexisting projects
undergoing updates should be developed with the MRF24WB0 instead. Contact
Microchip if you have a ZeroG ZG2100 802.11 WiFi PICtail Plus daughter card
and are interested in the MRF24WB0MA 802.11 WiFi PICtail Plus daughter
card.
3. The WiFi connection management state machines now run on the MRF24WB0
instead of the PIC host, freeing up code and data space. Connection profiles
can be created and the connection algorithm fine-tuned by the PIC
application. In the WiFi demos see the WF_Connect function in MainDemo.c for
an example of how to configure and then establish a WiFi connection. The
programming model has changed to an API model which is documented in
'TCPIP Stack Help.chm'.
4. Changed "VERSION" macro definition in TCPIP.h to "TCPIP_STACK_VERSION".
"VERSION" is overly generic and will likely conflict with other identical
tokens one may use in their application code or source libraries.
5. Added support for the PIC24FJ256GA110, PIC24FJ256GB110 and PIC24FJ256GB210
PIMs for the Explorer 16. Note that when using the PIC24FJ256GA110
general purpose PIM, the Ethernet PICtail Plus, Fast 100Mbps Ethernet
PICtail Plus, MRF24WB0MA Wi-Fi PICtail Plus, or other SPI PICtail daughter
board should be installed in the middle SPI2 slot of the Explorer 16, not
the ordinary topmost SPI1 slot used by other PIMs, including the
PIC24FJ256GB110 and PIC24FJ256GB210 ones. The software is set up to use
SPI2 for the PIC24FJ256GA110 PIM to avoid incompatibilities with silicon
revision A3, which does not allow the SCK1 pin to be configured as a PPS
output.
6. Added support for the PIC24FJ256DA210 Development Board.
7. Added TFTPUploadRAMFileToHost(), TFTPUploadFragmentedRAMFileToHost() and
TFTPGetUploadStatus() APIs to the TFTPc.c file. These APIs provide a very
simple means of uploading a whole file to a remote TFTP server without
requiring a great deal of application state machine logic. These APIs
require the DNS client module to be enabled (STACK_USE_DNS must be defined,
in addition to STACK_USE_TFTP_CLIENT).
8. Added a dummy DNS Server module. This server always sends the local IP
address in response to all queries received. When using the PIC DHCP
server, its purpose is to allow a user to type anything into a web browser
(ex: http://asdf/) and still receive the web page provided by the PIC, much
as a hotel or airport WiFi router will serve to you before you've paid or
agreed to the network's terms of service. This DNS server module is
implemented in DNSs.c, requires one UDP socket, and is enabled via the
STACK_USE_DNS_SERVER option in TCPIPConfig.h.
9. Changed SPIFlash.h file defaults to target an SST SPI Flash with 4096 byte
sectors instead of a Spansion Flash with 65536 byte sectors. These new
defaults are, among other reasons, in support of the PIC24FJ256DA210
Development Board, which has an SST SST25VF016B on it.
10. Made TCP Keep-Alive packets consistently get sent TCP_KEEP_ALIVE_TIMEOUT
(default 10 seconds) after the last socket TX or RX activity. In earlier
stack versions, if the local node transmitted some data and then let the
socket go idle, the first Keep-Alive packet sent would use the
TCP_START_TIMEOUT_VAL (default 1 second) timer value before getting sent.
While benign in terms of application behavior, these faster than normal
keep-alive transmissions were distracting when viewed in Wireshark or other
packet capture tools.
11. Disabled STACK_USE_DYNAMICDNS_CLIENT option in TCPIPConfig.h by default for
the TCPIP Demo App and TCPIP ENCX24J600 Demo App projects. This option was
enabled by default in earlier stack releases. This was done to save code
size and allow out-of-box compilation on devices with 128KB of Flash when
not using compiler optimizations. The TCPIP PIC32 ETH Demo App project
continutes to have this option enabled by default.
12. Added SNMP v2 TRAP PDU format. Macro SNMP_STACK_USE_V2_TRAP is used to
enable the SNMP v2 trap format. New API function SNMPV2TrapDemo() is
included to support more than one variable binding to the SNMPv2 TRAP. This
API can be used for a single SNMPv2 TRAP variable varbind and is part of
CustomSNMPApp.c. A multiple variable binding demo can be enabled
MainDemo.c. One should not enable both SNMPTrapDemo and SNMPV2TrapDemo
simultaneously. Global flag "gSetTrapSendFlag" is used to indicate the
start and end of SNMPv2 trap varbinds. If gSetTrapSendFlag is FALSE, then
very next variable varbind for the SNMPv2 TRAP, is the last or only one
variable varbind. If gSetTrapSendFlag is TRUE, then there is another
variable varbind available to be part of the SNMPv2 TRAP PDU.
13. Added support for PIC32MX6XX/7XX external PHY's: SMSC 8700LAN and National
DP83640.
14. Added schematics and BOM for the PIC32 Ethernet Starter Kit.
15. Added the Google PowerMeter demo project. Consult the "Reference
Implementation for Google PowerMeter.chm" help file for more information.
16. Modified the SSL and TCP modules to create the TCPStartSSLClientEx function.
This function will enable the SSL module to store supplementary data
(currently only SSL Certificate Public Keys) in a structure.
17. Moved the HTTP_PORT, HTTPS_PORT, HTTP_MAX_DATA_LEN, and HTTP_MIN_CALLBACK_FREE
macros from HTTP2.c to TCPIPConfig.h.
Fixes:
1. The SPIFlashEraseSector() function in the SPIFlash.c file incorrectly erased
the sector specified by the current write pointer (set by calling
SPIFlashBeginWrite()) instead of the specified dwAddr parameter address.
This error had no impact on any TCP/IP Stack code as these parameters always
matched. However, application code using the API would have been affected.
Thanks go to Marc Boon for reporting this issue on the Microchip Ethernet
forum.
2. Fixed ENC424J600/624J600 driver for PSP modes 2, 4, 6, and 10. The PIC's
PMP PMMODE<9:8> bits were not set correctly.
3. Removed from lingering references to TickGetDiff() in FTP.c, TFTPc.c and
UARTConfig.c.
4. Fixed DNS client module from returning the DNS server IP address if the DNS
query failed due to a server error (i.e. DNS did respond, but did not
return any records, such as when attempting to resolve a name that isn't in
the DNS). DNSIsResolved() will now return 0.0.0.0 on any non-recoverable
DNS error or timeout.
5. Fixed HTTP2 MPFS upload page being accessible from URLs that weren't an
exact match. For example, in 5.20 and earlier, accessing
http://mchpboard/mpfsuploadASDF would still have opened the mpfsupload page.
Thanks go to Andrea Rivolta on the Microchip Ethernet Forum for identifying
this error.
6. Improved UDP TX checksum code for the special case when the computed
checksum was 0x0000. According to the UDP RFC, for this corner case, the
checksum should be converted to 0xFFFF before transmission to differentiate
from the checksum disabled case, improving error detection by a minuscule
amount.
7. Fixed GetCLKOUT() function in ENCX24J600.c driver file. Previously, 0x00
would always be returned, regardless of the value in the COCON bits of
ECON2. The function documentation for SetCLKOUT() and GetCLKOUT() was also
corrected (had obsolete information ported over from ENC28J60 driver file).
8. Fixed DHCP client rebinding bug in which the DHCP client would request the
wrong IP address if an unrelated DHCP OFFER or ACK message were received
after we transmitted a DHCP REQUEST but before we received our DHCP ACK.
Under rare conditions, this would have resulted in the TCP/IP stack
reverting to the static or AutoIP assigned address for a few seconds
between DHCP lease renewals.
9. Fixed TFTP Internet Bootloader bug in which uncommon .hex files containing
a certain data pattern could not be uploaded correctly to the PIC18F97J60
family device. For these problem .hex files, a block of 32 program words
(64 bytes) would remain unprogrammed (left as 0xFFFF) due to a parsing error
in the bootloader's DecodeHex() function. The TFTP upload operation would
succeed without reporting a programming error. The problem can be detected
by using an ICD3 or similar ICSP programmer and reading the program Flash
out of a device that is programmed with the bootloader and application .hex
files. Compare the resulting memory dump to a device programmed only with
the application .hex file. If you have devices deployed in the field with
the previous bootloader and happen to generate a problem application .hex
file, you can potentially work around the bootloader bug by opening the
application .hex file with Notepad and appending dummy address records to
the beginning to move the data around in the file. For example, at the very
top of the .hex file, add lines containing ":020000040000FA" until the
bootload process works correctly. You may alternatively try adding spaces
at the end of any line, although this may make the .hex file incompatible
with some programming utilities. Thanks go to Jonathan Seidmann for
identifying and reporting this bug.
10. Fixed SNMPv2 TRAP format issue where SNMP browser was displaying all the
SNMPv2 traps as SNMP version 1. SNMP v2 TRAP pdu format is rectified.
Macro SNMP_STACK_USE_V2_TRAP is used to form and send a SNMPv2 TRAP PDU.
SNMPTrapDemo API is used for both SNMPv1 and SNMPv2 single variable
varbind trap.
11. Fixed an HTTP2.c server module initialization bug when using the
PIC32MX7XX/6XX series internal Ethernet module. During initialization the
HTTPLoadConn() function would overwrite over 100 bytes of PIC RAM past the
end of the reserved memory allocated for the HTTP2 module. This problem
would manifest itself by locking up the TCPIP PIC32 ETH Demo App-C32 demo
shortly after power up if you compiled TCP/IP Stack version 5.20 with the
MPLAB C Compiler for PIC32 MCUs (C32) version 1.11.
12. Fixed SSL client from incorrectly parsing for the server's public key in
rare cases where the RSA Public Key Algorithm identifier was received, but
the key hadn't been received by TCP yet. Thanks go to Kevin Maimdnet for
identifing this error in SSL.c and reporting it via
http://support.microchip.com/.
13. Fixed Tick.c TickGet(), TickGetDiv256() and TickGetDiv64K() APIs sometimes
returning the wrong value on PIC32 platforms. On the PIC32MX3XX/4XX family
devices a wrong return result would sometimes occur if using -O3 compiler
optimizations (maximum speed) with the Microchip MPLAB C Compiler for PIC32
MCUs (C32). On the PIC32MX5XX/6XX/7XX family devices, such as the
PIC32MX795F512L device used on the PIC32 Ethernet Starter Kit, wrong values
could be returned, regardless of the compiler optimization level.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
3. HI-TECH PICC-18 compilers are not supported in this release. The supplied
HI-TECH PICC-18 MPLAB projects usually will not compile and/or link.
4. LCDBlocking.c timing for the LCD_E_IO enable signal is too fast to meet
published data sheet limits for various LCD controllers when compiling for
a PIC32 running at > 43MHz. Despite this potential timing violation, the
LCD does normally work correctly on the precompiled PIC32 demos for the
Explorer 16 at 80MHz.
********
v5.20 18 November 2009
********
Changes:
1. Added PIC32MX7XX/6XX Family integrated Ethernet controller support. The
"TCPIP PIC32 ETH Demo App" folder was added to compile for the PIC32
Ethernet Starter Kit. Ethernet driver files "ETHPIC32ExtPhy.c" and
"ETHPIC32IntMac.c" were added, in addition to the "ETHPIC32ExtPhyDP83848.c"
file, which is a specific driver file for the National DP83848 10/100 PHY.
2. Added RFC 3927 Auto IP module. This module will automatically assign a
local IP address to the node in the 169.254.xxx.xxx private address range
(subnet mask 255.255.0.0) if a DHCP server is not present on the network or
the DHCP client is disable. The exact IP address chosen will be
pseudo-random, but as required by the protocol, it will perform gratuatous
ARPs to avoid clobbering anyone else's IP address. Also, unless there is an
address collision with a preexisting node on the network, the IP address
generated by the Auto IP module will not change between power cycle events
(random number generator is seeded by local MAC address). To enable this
module, STACK_USE_AUTO_IP must be defined in TCPIPConfig.h. When compiled
in, the module defaults to enabled, but will automatically yield to the
DHCP client module, which has higher priority.
3. Added "TCPIP MDD Demo App" beta application projects. Projects in this
folder store the HTTP2 web pages in external FAT16/FAT32 formatted SD card
or USB Mass Storage media instead of an MPFS2 formatted EEPROM or SPI Flash.
For more information on these projects, see the "Running the TCPIP MDD Demo
App (Beta Release).pdf" file in the Microchip\Help folder.
4. Expanded XEEReadArray() API's third length parameter from a BYTE to a WORD.
5. Converted all variable declarations and type casts of TICK data type to
DWORD. The TICK typedef is now deprecated and will be removed in a future
stack release. This data type conflicts with the TICK structure used in
certain other Microchip software libraries.
6. Added TCP_WINDOW_UPDATE_TIMEOUT_VAL option to the TCP.c file (default
200ms). This timeout controls the time after calling TCPGet() or
TCPGetArray() before the stack will transmit a RX window update to the
remote node. Historically, the TCP_AUTO_TRANSMIT_TIMEOUT_VAL value was
used for this purpose (default 40ms). This change decreases the net window
update transmission overhead. If this adversely affects your application
RX performance (unlikely, but possible for certain communications patterns),
set TCP_WINDOW_UPDATE_TIMEOUT_VAL equal to or shorter than
TCP_AUTO_TRANSMIT_TIMEOUT_VAL to get the same or better behavior relative
to previous stack versions.
7. Split TCP_MAX_SEG_SIZE configuration constant in TCP.c into separate
TCP_MAX_SEG_SIZE_TX and TCP_MAX_SEG_SIZE_RX configuration constants.
Previously, TCP_MAX_SEG_SIZE was used to limit both the maximum size of
transmit and receive packets. In cases where large TX FIFOs are allocated,
and the remote node advirtises a large Maximum Segment Size TCP option, this
change improves TCP transmit performance by roughly 10%.
8. Renamed "Internet Radio App", "Internet Bootloader App" and "WiFi Iperf
App" folders to "TCPIP Internet Radio App", "TCPIP Internet Bootloader App"
and "TCPIP WiFi Iperf App" respectively. These new names ensure consistent
folder placement when viewing the Microchip Solutions folder with other
Microchip Application Libraries installed.
Fixes:
1. Fixed SSL functionality (ex: HTTPS server) from failing when using the
ENC424J600 and ENC624J600 Ethernet controllers. In stack versions 5.00 and
5.10, the BFSReg() and BFCReg() functions were being incorrectly used to set
and clear CRYPTEN (EIR<15>). ENC424J600/624J600 silicon errata #6 on
production silicon revision A2 prevents BFSReg() and BFCReg() from being
able to modify CRYPTEN. This resulted in the SSL RSA encrypt/decrypt
operations from ever finishing. The ENC424J600/624J600 errata #6 workaround
is now implemented in the ToggleCRYPTEN() function in ENCX24J600.c.
2. Fixed an RSA padding error in the ENCX24J600.c's version of RSASetData() and
RSASetE() functions. This fixes the Bad Record MAC problem when using SSL
client APIs with the ENC424J600 and ENC624J600, as mentioned in the 5.10
stack release notes' Known Problems section. Although unknown at the time
of release this problem also occurred in stack version 5.00.
3. Fixed DNS client from mishandling DNS responses that did not use name
compression. Thanks go to Will Stone on the Microchip Ethernet forum for
identifying this bug.
4. Fixed an ExtractURLFields() API bug which would incorrectly parse the URLs
containing other URLs. Ex:
"http://www.google.com/search?q=http://www.microchip.com/"
5. Fixed TickGet(), TickGetDiv256(), and TickGetDiv64K() APIs from potentially
returning an incorrect time value (0x10000 ticks less than it should have)
on rare occasions when using a PIC32 and with compiler optimizations turned
on. The Tick.c module was also revised so that the IEC0 register does not
get written to via a load-modify-store operation on PIC32s so that it is
now possible for other application ISR functions to write to IEC0 without
risking state corruption.
6. Fixed PIC32 Starter Kit Debugger losing access to the PIC32 target when the
project was run. JTAG was being disabled at run time, but the PIC32
Starter Kit Debugger requires JTAG to communicate with the debug
executive. JTAG is now conditionally disabled on PIC32s when the
__MPLAB_DEBUGGER_PIC32MXSK macro is undefined.
7. Fixed a Berkeley sockets API bug in which calling closesocket() on a
SOCK_STREAM type socket (TCP) did not actually close the socket if the
remote node did not first send a FIN to the local node. This would leak a
TCP socket each time the affected API calling sequence occurred and result
in no FIN getting transmitted to the remote node.
8. Fixed an HTTP2 filename parsing bug that would occur when a web browser
submitted a request for a file with hex encoded characters in it. For
example, with stack version 5.10 and Firefox 3.5.3, typing
"http://mchpboard/%70rotect" into the URL field would have resulted in an
HTTP 404 not found error when "http://mchpboard/protect/index.htm" should
have been returned instead. Thanks go to Steve Tuttle for reporting this
issue and suggesting a solution.
9. Fixed a Berkeley sockets API bug in which calling recvfrom() on a datagram
type socket (UDP) would return an incorrect remote IP address and port
number when the from pointer was non-NULL.
10. Fixed HTTP2 server bug in which the HTTPReadPostName() function was failing
to convert the field name from URL encoding to plain-text. If the browser
posted, for example, a field named "Stock Remaining", it would have been
incorrectly returned from HTTPReadPostName() as "Stock+Remaining".
11. In Stack 5.10, any new values you saved into AppConfig via the Network
Configuration demo web page would have been mishandled for WiFi projects.
HTTPPostConfig() in CustomHTTPApp.c of the TCPIP WiFi Demo App and TCPIP
Iperf Demo App projects were corrected so that they now write a magic 0x61
marker into EEPROM/SPI Flash address 0x0000 to inidicate that the AppConfig
structure is valid in EEPROM/SPI Flash. This prevents the InitAppConfig()
function in MainDemo.c from restoring the default settings when changing
the values through the Network Configuration page.
12. For WiFi projects, a Gratuitous ARP Work-around was implemented to work
around cases where access points send broadcast messages at data rates that
the ZG2100 cannot listen to. The define USE_GRATUITOUS_ARP (in
TCPIPConfig.h) turns this feature on or off.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
3. HI-TECH PICC-18 compilers are not supported in this release. The supplied
HI-TECH PICC-18 MPLAB projects usually will not compile and/or link.
4. ENC624J600 PSP modes 2, 4, 6, and 10 do not work at this time. Some
Parallel Bit Bang modes may not work either. Some minor firmware changes
are needed.
5. TCPIP ENCX24J600 Demo App-C18.mcp project does not compile by default using
MPLAB C Compiler for PIC18 MCUs (C18) version 3.34. There is not quite
enough program memory available on the PIC18F97J60 for the large number of
selected stack features to allow linking. To get this project to compile,
turn on compiler optimizations or disable one of the modules in
TCPIPConfig.h (ex: comment out STACK_USE_DYNAMICDNS_CLIENT).
********
v5.10 29 July 2009
********
Changes:
1. Added SSL capability to the Telnet server. If STACK_USE_SSL_SERVER is
defined, the Telnet server will now listen on port 992 for SSL secured
connections. If you do not have a telnets client, you can use an SSL proxy,
such as stunnel (http://www.stunnel.org/) to add SSL/TLS support to any
telnet client.
2. Moved a number of string pointer tables in the HTTP.c, HTTP2.c, FTP.c, and
DynDNS.c files to allocate in ROM instead of RAM. This reduces around 120
bytes of RAM usage in the HTTP2 server when compiled for the PIC18 or
PIC24/dsPIC platforms. The gains are even greater on PIC32 platforms.
3. Added redefinition of SPIRAM*(), SPIFlash*(), and XEEPROM*() functions so
that when compiled and used without proper HardwareProfile.h definitions,
a more descript linker error will be generated instead of a mysterious
symbol not found error.
4. Added several new APIs:
- ExtractURLFields() in Helpers.c. This function provides an easy
means of parsing an URL string and extracting the protocol, hostname,
port, file path, etc. Currently, this function is commented out to save
code space as no stack modules require it. However, it should work
correctly if you simply uncomment it (remove the #if 0...#endif around
it).
- strnchr() in Helpers.c. Finds the first occurrence of a character within
a string but limited to a maximum length before giving up.
- TCPPeek() and TCPPeekArray() in TCP.c. Reads from a TCP socket's RX
FIFO buffer without removing the data from the stream.
- TCPClose() in TCP.c. Disconnects a socket from the remote node (if
connected) and closes the socket handle, including for server type
sockets. This function is identical to the TCPDisconnect() API except
for the handling of server sockets. TCPDisconnect() returns server
sockets to the listning state and maintains the socket handle. TCPClose()
closes the socket and frees all associated resources, invalidating the
socket handle.
5. Updated the DHCP client module:
- Modified so that it wouldn't attempt to transmit DHCP Discover packets
when the MAC layer reports no link (MACIsLinked() == FALSE). This avoids
main() while(1) loop performance degredation when you unplug the Ethernet
cable or lose association to your access point.
- Added capability of performing DHCP discovers and requests without
setting the BOOTP broadcast flag. Now, the DHCP client module will start
up and attempt to obtain an IP address with the broadcast flag set, but
if it fails the next DHCP retry will attempt to obtain the IP address
with the broadcast flag cleared. The flag will toggle back and fourth
between unicast mode and broadcast mode if no DHCP server responds. This
feature improves compatibility with certain DHCP servers and WiFi access
points.
- Added several new APIs including DHCPInit(), DHCPIsEnabled(),
DHCPStateChanged(), DHCPIsBound(), and DHCPIsServerDetected().
- Removed the DHCPFlags DHCP_CLIENT_FLAGS global variable. Use the above
named APIs now to get equivalent functionality.
- Removed the DHCPBindCount global variable. To detect if the DHCP state
has changed, poll the new DHCPStateChanged() function.
- Removed the DHCPReset() API. To perform this operation, now call the
DHCPInit() API. Use 0x00 for the vInterface parameter.
6. Removed deprecated TickGetDiff() macro. To get a tick difference, just
subtract the two values in-line. This macro was removed because it promoted
confusing code. Ex: a-b is different from b-a. However, it was not
contextually obvious which of the two was returned when TickGetDiff(a, b)
was called.
7. Added PIC32MX460F512L USB and dsPIC33FJ256GP710 PIM support to the Explorer
16 hardware profile for the TCPIP WiFi Demo App and WiFi IPerf App projects.
8. Added all files needed for SSL (assuming the crypto libraries are present)
to the TCPIP WiFi Demo App-C30 and TCPIP WiFi Demo App-C32 projects.
9. Converted TCPIP Demo App, TCPIP WebVend App, Internet Radio App, and
Internet Bootloader App MPLAB Build Directory Policy to compile in the
project folder instead of the source folder. This reduces the depedancies
on the MPLAB project include path and allows new projects to be created by
copying one of the pre-existing folders (ex: copy "TCPIP Demo App" to
"My App") without having problems including the wrong HardwareProfile.h and
TCPIPConfig.h files.
10. Changed EEPROM/SPI Flash AppConfig record valid flag from 0x60 to 0x61 in
the TCPIP WiFi Demo App and WiFi Iperf App projects. This will force the
various EEPROM settings to get erased when switching between Ethernet and
WiFi projects. This is done since the AppConfig structure changes when
using WiFi (SSID string is added).
11. The Wifi Iperf App and TCPIP WiFi Demo App projects have been optimized for
better performance.
Fixes:
1. Fixed a TCPDisconnect() API bug in which the last few bytes of data (up to
the TCP socket's TX FIFO size less 532 bytes) was not transmitted and no
FIN was sent out if the TX FIFO was full of data when TCPDisconnect()
was called. This problem could have only occurred for TCP sockets with a
large TX FIFO (>=532 bytes). This problem could have been observed in
stack version 5.00's "TCPIP Demo App-C32 EXPLORER_16 32MX360F512L ENC624J600
PSP 9.hex" precompiled application, among others, if you connected to the
TCPPerformanceTest.c module and then attempted to simultaneously access the
web server. The web server was returning data very slowly and failing to
send the last parts of each file requested by the browser.
2. Eliminted a potential buffer overflow vulnerability from the
HTTPHeaderParseContentLength() function in HTTP2.c. If an oversized or
malformed Content-Length header is sent from the web client, the function
will now gracefully fail by returning an HTTP 400 Bad Request error page.
Thanks go to Mark Philipp for identifying this error and suggesting a
solution.
3. Fixed a TCPOpen() problem in which the stack would continuously flood the
network with nearly back-to-back ARP query packets if a client socket was
created that specified a non-reachable remote IP address (ex: local gateway
was offline, or for destinations on the same subnet, the actual remote node
was offline). This problem would occur only after a few minutes (<10) had
passed since the PIC was last reset. Thanks go to Sergey of DPS TELECOM for
reporting this problem.
4. Fixed linking problem with BigInt_helpers.S (PIC24/dsPIC only) when
targeting a PIC with more than 8KB of RAM. The interface registers (_iA,
_xA, _iB, _xB, _iR, and _wC) are now forced into near RAM.
5. Cleaned up some uninitialized variable warnings in SNMP.c.
6. Fixed a sequence variable traversal bug in SNMP.c.
7. Cleaned up a large number of unsigned integer to signed integer comparison
warnings produced by the MPLAB C Compiler for PIC18 MCUs (C18) version
3.32. With earlier versions of this compiler, these warnings would only be
generated as messages, so they did not get displayed by default.
8. Some ENCX24J600 parallel bit bang modes work now. PSP Mode 5 indirect has
been tested.
9. SSL client and server capabilities now work when using the ZeroG ZG2100M
WiFi interface. In the 5.00 stack release, attempting to enable the
STACK_USE_SSL_CLIENT or STACK_USE_SSL_SERVER TCPIPConfig.h options with
this network controller would have resulted in an error trap. If an LCD
was present, the LCD would display encRdPtrRAWId = encWrPtrRAWId when the
error occurred.
10. The WiFi Iperf App demo locked up when an invalid command was entered at
the serial port console. This is now fixed.
11. The WiFi Iperf App demo locked up when running with a PIC32 if iwconfig was
typed at the serial port console. This is now fixed.
12. The Wifi Iperf App demo, when running on the PIC24 and PIC32, and compiled
with the Os option (min code size optimization), did not work. This is
now fixed.
13. Change a lot of BerkeleyAPI.c internals. This may fix a number of BSD
API problems.
14. Fix a problem with SNMP variables being inaccessible with certain unique
PEN numbers.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
3. HI-TECH PICC-18 compilers are not supported in this release. The supplied
HI-TECH PICC-18 MPLAB projects usually will not compile and/or link.
4. ENC624J600 PSP modes 2, 4, 6, and 10 do not work at this time. Some
Parallel Bit Bang modes may not work either. Some minor firmware changes
are needed.
5. SSL client code doesn't work with ENC424J600/624J600 devices. The remote
server terminates the connection reporting a bad record MAC (Message
Authentication Code). The SSL client does work with other controllers.
********
v5.00 27 April 2009
********
Changes:
1. Added ZeroG ZG2100 802.11 WiFi controller support. The new TCPIP WiFi Demo
App and WiFi Iperf App projects have been added, which default to using this
controller.
2. Added Microchip ENC424J600/624J600 10/100 Ethernet controller support.
Support for this controller is provided by the new ENCX24J600.c/.h files
which perform the same role as the ENC28J60.c/.h or ETH97J60.c/.h files.
Precompiled .hex files for the ENC624J600 controller require the use of the
new Fast 100Mbps Ethernet PICtail Plus daughter card (AC164132). This
product is not available at the time of the 5.00 TCP/IP stack release.
However, it is anticipated to be available for purchase on
www.microchipdirect.com in CQ3 2009.
3. Significantly updated the Internet Radio App project. Previously, radio
stations were hard coded into program memory at compile time. Now, a
dynamic Shoutcast directory client has been implemented which allows
retrieval of radio stations at run time, offering endless stations you can
tune into. The web pages for the radio have also been updated to allow
control and status reporting of the board from a web browser.
4. Update SNMP Server (Agent) module to support SNMPv2C. The default Demo App
web pages now include an SNMP reconfiguration capability to set the read
and write community strings.
5. Added ICMPSendPingToHost() and ICMPSendPingToHostROM() APIs to ICMP (ping)
client module. These two APIs are available only when STACK_USE_ICMP_CLIENT
and STACK_USE_DNS is defined in TCPIPConfig.h. These functions allow
pinging of DNS hostnames directly without the need for the application to
convert the hostname to an IP address first by manually calling the DNS
client APIs. With this addition, the PingDemo.c file was updated to ping
the hostname "ww1.microchip.com" instead of a static IP address. Previously,
the PingDemo would stop working a couple of months after the stack was
released, due to the IP address of the www.microchip.com server dynamically
changing. If the DNS module is not enabled, the ping demo will instead ping
the local gateway IP address instead of ww1.microchip.com.
6. Updated TCPPerformanceTest.c code. The previous version would generate
incorrect speed calculations at high data rates (ex: >1Mbyte/sec).
7. Added multiple connection support to Telnet server example module. To
allow multiple connections, define MAX_SIMULTANEOUS_CONNECTIONS in Telnet.c
greater than 1 and create an equal number of TCP_PURPOSE_TELNET type TCP
sockets in the TCPSocketInitializer[] definition in TCPIPConfig.h.
8. Added more randomness to the local port selection when opening a client-mode
TCP socket. This reduces the risk of reusing a previously used port number
if the user power cycles the device.
9. Updated XEE* SPI EEPROM API functions. Writes are no longer required to
start on an EEPROM page boundary, and writes can now be arbitrarily long
without having to call XEEEndWrite() at each page boundary. Additionally,
the XEEWriteArray() API has been added, which performs a similar operation
to the SPIFlashWriteArray() API (but with no special erase cases to worry
about).
10. Decoupled AppConfig storage in external SPI EEPROM or SPI Flash option from
MPFS_USE_EEPROM and MPFS_USE_SPI_FLASH options. MainDemo.c will now save
the AppConfig structure in external non-volatile memory, even if MPFS is
unused (no HTTP or SNMP server modules enabled) or MPFS is using internal
Flash program memory to store web pages/bib information. This change also
allows the XEE*() and SPIFlash*() non-volatile read/write functions to be
available at all times (even if MPFS is unused), as long as the appropriate
hardware pinout definitions are present in HardwareProfile.h. SPI Flash and
SPI EEPROM are no longer mutually exclusive with each other. However, if
both are enabled simultaneously, AppConfig will be stored in the EEPROM, not
the SPI Flash.
11. Added required SSL files to TCPIP Demo App MPLAB projects. SSL capabilities
can now be turned on directly via the STACK_USE_SSL_SERVER and
STACK_USE_SSL_CLIENT options in TCPIPConfig.h for these projects, assuming
appropriate crypto libraries are installed (SW300052 available from
https://www.microchipdirect.com/). With this change, the historical "SSL
Demo App" folder has been removed.
13. Updated HardwareProfile.h files. This includes the addition of PIC18
Explorer board support, removal of the PICDEM Z profile, changes to the
HI-TECH PICC-18 profiles for newer compilers, among other changes.
14. Added a TCP and UDP performance test measurements table to TCPIP Stack
Help (TCPIP Stack Help.chm). Access this from the "Microchip TCP/IP Stack"
book, "Stack Performance" page.
15. Updated MPFSlib project (Microchip.MPFS.dll file) so that C18 and C32 output
from the MPFS2.exe utility is now identical for MPFS2 images. The generated
.c file is now compatible with both C18 and C32 compilers simultaneously.
Previously, the images generated for C18 would compile successfully for C32
projects, but would potentially operate incorrectly when compiler
optimizations were turned on. Images generated for C32 would compile
successfully and work on C18 projects, but the C18 compiler would take a very
long time to process the file each time you rebuilt your MPLAB project. Now,
the image generated for C18 matches the image generated for C32 and it will
compile fast and work correctly on both platforms, even with compiler
optimizations turned on.
16. Added schematics and BOMs for the Ethernet PICtail, Ethernet PICtail Plus,
Fast 100Mbps Ethernet PICtail Plus, Internet Radio, PICDEM.net 2, and ZeroG
ZG2100M PICtail development boards to the "Microchip\TCPIP Stack\Demo Board
Files" folder.
Fixes:
1. Fixed a denial of service vulnerability in the NBNSGetName() function of the
NBNS.c file. Previously, if a deliberately malformed packet was received,
the PIC RAM could have become corrupted. Thanks go to David Talmage for
finding this vulnerability.
2. Fixed Timer1 interrupt flag clearing code on PIC32 products. Previously,
the Tick.c module was clearing the interrupt flag in an unsafe manner which
could have corrupted other interrupt flags in the IFS0 register. Thanks go
to Leon van Snippenberg working on the AVIX-RT RTOS for pointing this error
out on the Microchip forums.
3. Fixed SNMP up-time variable. Previously the CustomSNMPApp.c module would
respond with the number of Tick API ticks that elapsed, not the number of
10ms time slices that elapsed. The SNMP standard uses 10ms as its time base.
4. Fixed BigInt_helper.asm's _masBI() and _masBIROM() functions when the Br
parameter's length modulo 4 was equal to 1 or 2. This bug previously caused
the BigIntMod() function to sometimes go into an endless calculation loop on
PIC18 products when using the SSL libraries and certain combinations of
modulus data and length were used. Thanks go to Vasil Stoianov on the
Microchip Ethernet forum for running into this defect and reporting it.
5. Fixed SSLSessionNew() so that it wouldn't "lose" SSL sessions after waiting a
few hours. This would previously make it impossible to make new SSL
connections after a while, but then after a few more hours, the sessions
would become free again. Thanks go to Jim Stephens for identifying this
issue and finding the solution.
6. Fixed an SSL 2.0 antique client hello record length calculation bug occurring
when a received record was > 255 bytes.
7. Added retransmission capability to SendNotification() function in
CustomSNMPApp.c. Previously, if an SNMP trap were sent, but the initial ARP
query or response was lost on the network, the SendNotification() code would
have deadlocked, and suppressed all future transmission of SNMP traps.
8. Fixed DNS client timeout if the DNS server is unable to be ARPed.
Previously, the DNS client would retry ARPing the DNS server indefinitely if
it was offline. Now, the DNS client will correctly abort if too many
attempts to ARP the DNS server fail. Thanks go to Phil "andersop" on the
Microchip Ethernet forum for identifying this error.
9. Suppressed transmission of a TCP RST packet to an unknown IP or MAC address
if the TCPDisconnect() function was called on a client mode socket that was
not finished with ARP or DNS resolution yet. Thanks go to Phil "andersop" on
the Microchip Ethernet forum for pointing this behavior out.
10. Fixed TCP socket from disconnecting if the remote receive window was zero and
TCPFlush() was still called. Thanks go to Bob Topper for identifying this
issue and suggesting a solution.
11. Fixed Tick.c module returning incorrect values when TickGet() or other API
was used with compiler optimizations turned on. Wrong values were observed
when using MPLAB C Compiler for PIC24 MCUs and dsPIC DSCs version 3.12.
12. Fixed a number of SPI communications problems that could occur when compiler
optimizations were turned on. The ENC28J60 was observed to not work
correctly on the dsPIC33FJ256GP710 processor when compiled with MPLAB C
Compiler for PIC24 MCUs and dsPIC DSCs version 3.12.
13. Fixed possible MPFS2 error when using an ASM30 .s image where MPFS_Start
would be read using the wrong PSVPAG setting. You must rebuild your MPFS2
image file (ex: MPFSImg2.s) with this stack version's MPFS2.exe utility to
get this correction applied.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
3. HI-TECH PICC-18 compilers are not supported in this release. The supplied
HI-TECH PICC-18 MPLAB projects usually will not compile and/or link.
4. ENC624J600 PSP modes 2, 4, 6, and 10 do not work at this time. Parallel Bit
Bang mode does not work either. Some minor firmware changes are needed.
********
v4.55 10 November 2008
********
SSL Note:
RSA.c and ARCFOUR.c have not changed between the 4.50 and 4.55 releases.
Although the precompiled SSL Demo App .hex files will differ, you can
continue to use the previous TCP/IP Stack v4.50 Encryption Add-on with this
4.55 stack version.
Changes:
1. Added DNS client support for a secondary DNS server address. Previously, the
AppConfig.SecondaryDNSServer setting was unused. Now, the DNS client module
will automatically swap the AppConfig.PrimaryDNSServer and
AppConfig.SecondaryDNSServer values after any DNS query timeout (or ARP
timeout for the DNS server) and attempt the query with the alternative
server. If AppConfig.SecondaryDNSServer is disabled by setting it to the IP
address 0.0.0.0, the DNS client will only use the AppConfig.PrimaryDNSServer
value and never swap the values. With this change, the DHCP client was also
updated. If the DHCP server does not specify a secondary DNS server, then
the DHCP client will now set the AppConfig.SecondaryDNSServer value to
0.0.0.0. Previously, it would change the AppConfig.SecondaryDNSServer
setting only if the remote DHCP server offered a secondary DNS server.
Fixes:
1. Updated Internet Bootloader App project to correctly detect if the
configuration bits are being changed or not. Previously, the bootloader
always thought the configuration bits were being changed and thus had to
always erase the last Flash page (largest memory address) twice for each
firmware update. This did not cause any functional problems or
specification violations, but it would decrease the effective Flash
endurance of the last page.
2. Fixed a TCP socket memory corruption bug that would occur if
TCPGetRemoteInfo() API was called twice with different socket handles
without an intermediate call to any other TCP API that takes a
TCP_SOCKET input. Thanks go to Bob Topper for identifying this problem and
suggesting a solution.
3. Fixed the UDPIsGetReady() function so that it returns the number of bytes
remaining in the packet based on the current read location. This is the
same behavior as stack versions 4.18 and earlier. In stack versions 4.50
and 4.51, the UDPIsGetReady() function would always return the total number
of bytes in the current packet, regardless of how many bytes the read
pointer had been advanced through the UDPGet() and UDPGetArray() functions.
Thanks go to Bob Topper for identifying this problem and suggesting a
solution.
4. Fixed demo admin web page in TCPIP Demo App project so that the last byte of
the MAC address can be changed, independent of the format it was entered by
the user.
5. Fixed a buffer overflow bug that would occur when using the SSL server during
hashing of the server certificate for the initial handshake. This error
previously caused several bytes of random variables elsewhere in the project
to get overwritten for each SSL connection.
6. BSD sockets API was updated to fix some issues.
7. LCDBlocking.c was updated to relax start up timing. This timing fix is
specifically needed to support Explorer 16 boards with a Truly TSB1G7000
display (Novatek NT7603H controller).
8. Removed four uses of Arial Black font in MPFS2.exe utility. On some rare PC
configurations, the use of this font caused the executable to not run.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
3. HI-TECH PICC-18 projects may not compile when targeting the external
ENC28J60 chip on the PICDEM.net 2 development board (instead of the
internal Ethernet controller). This problem only applies when a
PIC18F97J60 family part is the target. I.e. it compiles correctly for the
HPC_EXPLORER + Ethernet PICtail.
4. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a
functional problem, just a compile-time configuration test. Ensure that you don't
over allocate TCP_ETH_RAM_SIZE or MAX_HTTP_CONNECTIONS.
5. HI-TECH PICC-18 STD 9.51PL1 cannot compile DynDNS.c. It raises an
"inconsistent type" error while trying to perform a ROM pointer to integer
cast. The older 9.50PL3 compiler release is required to compile this file.
6. HI-TECH PICC-18 STD 9.50PL3 does not initialize several static variables
correctly on reset. This behavior breaks many stack modules in the
TCPIP Demo App and TCPIP WebVend App projects. Additionally, string
printing functions do not work correctly, so the supplied
"TCPIP Demo App-HITECHPICC18 PICDEMNET2 18F97J60.hex" and "TCPIP WebVend
App-HITECHPICC18 PICDEMNET2 18F97J60.hex" files may not correctly print the
board's DHCP assigned IP address on the board's LCD (if present) and UART. To
avoid these severe problems, use the Microchip MPLAB C Compiler for PIC18 MCUs.
A free student edition can be downloaded from http://www.microchip.com/c18.
********
v4.51 24 July 2008
********
IMPORTANT NOTE: You must use MPLAB 8.10 or higher to successfully open the
MPLAB projects.
SSL Note:
RSA.c and ARCFOUR.c have not changed between the 4.50 and 4.51 releases.
Although the precompiled SSL Demo App .hex files will differ, you can
continue to use the previous TCP/IP Stack v4.50 Encryption Add-on with this
4.51 stack version.
Changes:
None. This release includes bug fixes only. It is very important that
applications using the ENC28J60 get fix item 7, below.
Fixes:
1. TCPOpen() was previously failing if you used it to start a connection with a
remote hostname, but the DNS module failed to resolve the remote address on
the first try. This, for example, would occur if you powered up your board
and tried to connect to a remote server before the Ethernet cable was
attached. Once the Ethernet cable was attached, the socket would attempt to
resolve and connect to a garbage address. The Internet Radio application
would sometimes not begin playing the default station upon power up because
of this problem.
2. Set SEQ.ACK = 0 for outbound TCP SYN packets. This fixes a connection
compatibility problem with certain paranoid TCP/IP stacks that would validate
this field even though the ACK flag was clear. This problem would previously
cause the Microchip TCP/IP stack to be unable to connect client-mode TCP
sockets to certain rare servers/services. Thanks go to Jean LE TUTOUR for
finding one of these problem servers.
3. MPFSOpen() and MPFSOpenROM() for MPFS2 could leak a file handle if a name
hash matched but no complete file name did. This has been corrected to
prevent potential DOS attacks on the HTTP2 web server. Thanks to David Tan
on the Microchip Ethernet formus for identifying this issue.
4. Fixed a bug in MPFS2.1 that caused compile errors when MPFS Classic images
were generated for ASM30 containing files whose length was either zero or
a multiple of 12.
5. Fixed an issue in HTTPPostConfig() that caused it to ignore the flag that
was set when invalid IP address input was detected. This issue only affects
the example configuration page and only exists in v4.50 (prior versions
functioned correctly). Also corrected an issue where user input could
potentially overflow into part of the shadow AppConfig in the same function.
Thanks to prinz3nroll3 on the Microchip Ethernet forums for identifying
both of these issues.
6. Implemented Explorer 16 development board 5V LCD errata workaround to
LCDBlocking.c. This corrects the A/D converter from returning erratic
readings on certain Explorer 16 boards. LCD I/O pins are now continuously
driven by the microcontroller instead of going high impedance when idle.
7. Fixed a critical ENC28J60 revision B7 errata workaround problem in the
ENC28J60.c, MACFlush() function. Previously, the code was checking for an
EREVID register value of 0x07 for silicon revision B7. This was incorrect.
Silicon revision B7 actually has an EREVID value of 0x06. Note that this
problem was caused by an incorrect EREVID value published in DS80349A, the B7
silicon errata documentation. Make sure to use DS80349B or later.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
3. HI-TECH PICC-18 projects may not compile when targeting the external
ENC28J60 chip on the PICDEM.net 2 development board (instead of the
internal Ethernet controller). This problem only applies when a
PIC18F97J60 family part is the target. I.e. it compiles correctly for the
HPC_EXPLORER + Ethernet PICtail.
4. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a
functional problem, just a compile-time configuration test. Ensure that you don't
over allocate TCP_ETH_RAM_SIZE or MAX_HTTP_CONNECTIONS.
5. HI-TECH PICC-18 STD 9.51PL1 cannot compile DynDNS.c. It raises an
"inconsistent type" error while trying to perform a ROM pointer to integer
cast. The older 9.50PL3 compiler release is required to compile this file.
6. HI-TECH PICC-18 STD 9.50PL3 does not initialize several static variables
correctly on reset. This behavior breaks many stack modules in the
TCPIP Demo App and TCPIP WebVend App projects. Additionally, string
printing functions do not work correctly, so the supplied
"TCPIP Demo App-HITECHPICC18 PICDEMNET2 18F97J60.hex" and "TCPIP WebVend
App-HITECHPICC18 PICDEMNET2 18F97J60.hex" files may not correctly print the
board's DHCP assigned IP address on the board's LCD (if present) and UART. To
avoid these severe problems, use the Microchip MPLAB C Compiler for PIC18 MCUs.
A free student edition can be downloaded from http://www.microchip.com/c18.
********
v4.50 02 June 2008
********
IMPORTANT NOTE: You must use MPLAB 8.10 or higher to successfully open the
MPLAB projects. Also, ensure that the latest C compiler is used. This
release was tested against MPLAB C Compiler for PIC18 MCUs version 3.20,
MPLAB C Compiler for PIC24 MCUs and dsPIC DSCs version 3.10, MPLAB C
Compiler for PIC32 MCUs version 1.01, and HI-TECH PICC-18 version
9.50PL3 (STD). Earlier compilers may not be able to compile this TCP/IP
stack release.
Changes:
1. Added SSL 3.0 client capabilities, including SMTP over SSL. The SSL
modules supports up to 1024-bit RSA handshakes and 128-bit ARCFOUR
bulk encryption. This can be demonstrated using the SMTP client. SSL
server support is functional, but a key generation utility is not yet
provided and support over HTTPS is not yet reliable with all browsers.
IMPORTANT: Encryption software is covered by US Export Control law, so
it is not directly downloadable from the Microchip website. To use the
encryption modules, you must order SW300052 from microchipDIRECT
[ https://www.microchipdirect.com/ ] and install the required libraries.
2. Added Berkeley Sockets Distribution (BSD) API translation layer. You can
now call the well know Berkeley APIs instead of or in addition to the
Microchip specific APIs. To use this new functionality, define
STACK_USE_BERKELEY_API and configure BSD_SOCKET_COUNT in TCPIPConfig.h.
Three new source code demos are provided to demonstrate this API:
BerkeleyTCPClientDemo.c, BerkeleyTCPServerDemo.c, and
BerkeleyUDPClientDemo.c. The TCP client demo is identical to the
GenericTCPClient.c demo, but implemented using Berkeley Sockets. The UDP
client demo is similarly identical to the SNTP.c client. The TCP server
demo listens on TCP port 9764 and will echo any traffic received back to the
sender. It allows up to 3 simultaneous connections when there are an
adequate number of sockets defined in the TCPSocketInitializer[] array in
TCPIPConfig.h.
3. Added support for Dynamic DNS services. See the Dynamic DNS Client module in
the TCP/IP Stack Help for details. Presently, dyndns.org, dyndns.com,
no-ip.com, and dns-o-matic.com are supported.
4. Added the Microchip TCP/IP Configuration Wizard to the Utilities folder,
facilitating easier configuration of the TCP/IP Stack through a
graphical application.
5. Restructured TCPIPConfig.h to remove rule-enforcement logic, placing the
removed sections in TCPIP.h. Many other project structure changes were also
made to clean up the general distribution appearance.
6. Increased DHCP Server default lease duration to 60 seconds instead of 15
seconds. Some computers were losing their IP lease before performing a renew
operation with only a 15 second lease.
7. Removed CLOCK_FREQ, INSTR_FREQ, and PERIPHERAL_FREQ macro definitions.
GetSystemClock(), GetInstructionClock(), and GetPeripheralClock() now return
these respective values. This change was made for compatibility with other
Microchip software libraries.
8. Added TCP Fast Retransmission capability. Whenever three duplicate ACK
packets arrive, the stack will now immediately perform a retransmit
operation. This greatly improves recovery latency whenever the network
loses a packet for applications that stream TX data using TCP.
9. Improved TCP Keep Alive mechanism to automatically close TCP sockets which
do not receive any keep-alive responses for TCP_MAX_UNACKED_KEEP_ALIVES
(default 6) times. This means that, by default, any connection that
catastrophically breaks without notifying us (ex: user unplugs cable,
Internet connection goes down, etc.) will time out and automatically close
after 60 seconds (TCP_MAX_UNACKED_KEEP_ALIVES * TCP_KEEP_ALIVE_TIMEOUT).
Server oriented sockets will return to the listening state. Client oriented
sockets will close, but the TCP_SOCKET handle will continue to remain valid
until the application calls TCPDisconnect(). Applications can check if the
socket became disconnected and reset by calling TCPWasReset() or
TCPIsConnected(). Note that this keep alive implementation will only close
sockets that are broken (remote node is not responding to TCP requests). It
will not close or otherwise interfere with idle connections in which the
application is not transmitting or receiving data and wishes to keep the
connection open.
10.Added a TCP RX SYN queue of depth TCP_SYN_QUEUE_MAX_ENTRIES (default 3).
This queue automatically saves incoming SYN packets destined for a local
server port which is already connected to a different client. When the
client disconnects, the SYN data is pulled out of the queue and the socket
immediately attempts to connect to the next client. This improves connect
time performance since the remote client no longer has to retransmit the
SYN request if it was unserviceable the first time around. This is most
apparent with the HTTP/HTTP2 servers which previously performed poorly
with certain modern web browsers which attempt to open many simultaneous
connections to the web server, such as Mozilla Firefox 3 beta 5 and Apple
Safari 3.1. Entries in the queue automatically time out after
TCP_SYN_QUEUE_TIMEOUT (default 3 seconds) so as to prevent the queue from
filling up permanently if several connection requests arrive for a service
that is in use and will not be available for an extended period.
11.Modified the structure of the MPFS2 FAT (now known as MPFS2.1) to include
name hashes first. This speeds up opening files by 25%, and makes opening
index files nearly instant.
12.Updated the MPFS2 Utility. MPFS2.1 now supports the new FAT structure and
provides a cleaner interface. It also writes images to disk as they are
created, which eliminates the IndexOutOfBounds exceptions some users had
reported. Finally, uploads are now truly multi-threaded.
13.Source code to the MPFS2.exe PC utility is now released. Find it in the
Microchip Solutions\Microchip\TCPIP Stack\Utilities\Source\MPFS21 folder. This
project is designed to compile with Microsoft Visual C# 2008 Express Edition.
14.Added support for SST25VFxxxB serial flash parts in 2, 4, 8, 16, and 32Mbit
densities. These parts can be used to replace EEPROMs for storing MPFS
images (both versions) and custom data.
15.Added HTTPReadPostName, HTTPReadPostValue, and HTTPReadPostPair functions to
facilitate easier processing of data arriving via POST.
16.Split HTTPAuthenticate API into separate functions: HTTPNeedsAuth and
HTTPCheckAuth. This function was already split internally, and didn't
make sense as a single API.
17.Updated DHCP client to close its UDP socket when idle (bound state) to save
a small amount of resources.
18.Removed LED_IO macro from all hardware profiles because it is not suitable
for use on certain hardware platforms that have non-contiguous LEDs or
reversed bit ordering. Use the new LED_GET() and LED_PUT(val) macros to read
and write to all of the LEDs at once.
19.Added Ethernet Hash Table Calculator.exe to the Utilities folder and start menu.
This tool will calculate the correct bit that you must set in the EHT0-EHT7
registers on the ENC28J60 and PIC18F97J60 family devices for using the Hash
Table RX filter. This is useful only for fixed MAC addresses known at design
time. For addresses that are known at run time, use the SetRXHashTableEntry()
function in the ENC28J60.c or ETH97J60.c files to set the correct EHT0-EHT7 bit.
Fixes:
1. Fixed a buffer overflow data corruption issue in the FTP module that arises
when too many parameters were passed on the command line.
2. Moved TCPWasReset checking in HTTP2 to execute for every socket on every
loop. Previously, it would only execute when a socket reconnected, which
caused the RX buffer to not resize until after data was received. Some
platforms (notably FF2 on Ubuntu) would stall if the initial advertised RX
window was too small, and this change corrects that issue.
3. Updated SendSystemReset() and MACInit() initialization routine in ENC28J60.c.
Previously, if the ENC28J60 was placed into sleep mode by calling
MACPowerDown(), the SendSystemReset() command would not work anymore. This
would leave the ENC28J60 in power down if the host PIC was ever reset.
SendSystemReset() should work for all conditions with this update.
Thanks go to Rob Haverkort on the Microchip Ethernet forum for identifying
this problem.
4. Fixed an alignment bug in HTTP2 that caused redirects to fail when the MPFS2
image was stored in Flash program memory. Thanks to Todd Boaz on the
Microchip Ethernet forum for identifying this bug, and Chen Qu for posting
a solution.
5. Fixed SNTP client from losing accuracy if you called SNTPGetUTCSeconds()
10s of thousands of times since the last server synchronization. Thanks go to
"pic123" on the Microchip Ethernet forum for noticing this error.
6. Fixed a TickGet*() API problem where the returned tick value could be off by 64K
ticks occasionally on PIC24, dsPIC30/33, and PIC32 processors. This bug was
previously fixed in stack versions 4.13 and 4.16, but it was unintentionally
recreated in 4.18 due to PIC32 changes.
7. Fixed UART2TCPBridge module from failing to connect to a remote server when
USE_REMOTE_TCP_SERVER was defined.
8. Fixed an issue that prevented SNMP SETs on 16 and 32 bit parts when using
MPFS2. Thanks go to Milena K on the Microchip Ethernet forum for identifying
this problem.
9. Fixed a rare buffer corruption issue that could occur with UDP if TCP was also
enabled.
10.Fixed a Tick rollover error in HTTP2. Thanks go to Paul Bixel on the Microchip
Ethernet forum for identifying this problem.
11.Fixed an MPFS2 bug in which an excessive value to MPFS_SEEK_REWIND may have
failed to return an error. Thanks go to Paul Bixel on the Microchip Ethernet
forum for identifying this problem as well.
12.SMTP Client now sends EHLO when using authentication. Previously, the HELO
command was used, even with authentication enabled. Using HELO with
authentication creates incompatibilities with certain SMTP servers.
13.Improved Internet Bootloader robustness by retransmitting ACKs in response to
data retransmissions by the remote sending node. Previously, if an ACK packet
was lost before reaching the sending node, the TFTP upload would fail and need
to be restarted. Thanks go to "coolvibe" Dave Collier on the Microchip Ethernet
forum for identifying this behavior.
14.Fixed TFTP Internet Bootloader from not being accessible from Linux TFTP clients
which were setting the IP header "Don't Fragment" flag bit.
15.Changed TCP so that unsent data that is automatically flushed by the
TCP_AUTO_TRANSMIT_TIMEOUT_VAL timer includes the PSH flag. This improves GUI
responsiveness for certain applications which rely on this automatic flush
feature, such as the UART2TCPBridge module.
16.Fixed TCP socket loss issue which could occur if the TCP TX FIFO size was
greater than 536 bytes (TCP_MAX_SEG_SIZE). Before the fix, the socket
would have gotten tied up indefinitely performing retransmissions every 1.0
seconds without detecting that the remote node was disconnected.
17.Fixed TCP socket hang issue that would occur if the PIC sent out a FIN and the
remote node never responded with a corresponding FIN. The socket would have
gotten stuck indefinitely in the TCP_FIN_WAIT_2 state. Thanks go to Mr. Kyle
Strickland with AW North Carolina for identifying this bug.
18.Fixed UDPSetRxBuffer() function from not working if it was called before having
called UDPGet() or UDPGetArray() at least once.
19.Fixed an offset error of +2 milliseconds being returned from
TickConvertToMilliseconds(). Thanks go to Andrés ("saturn") on the Microchip
Ethernet forum for finding this error. Note that due to integer truncation
during division, this function can be off by 0.2% or so, depending on the value
returned by GetPeripheralClock().
20.Updated DelayMs() macro for MPLAB C Compiler for PIC18s to work correctly
when a large parameter was given. You should now be able to delay between
0 and 65535 milliseconds across all supported compilers without ending up
with an unexpectedly short delay.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
3. HI-TECH PICC-18 projects may not compile when targeting the external
ENC28J60 chip on the PICDEM.net 2 development board (instead of the
internal Ethernet controller). This problem only applies when a
PIC18F97J60 family part is the target. I.e. it compiles correctly for the
HPC_EXPLORER + Ethernet PICtail.
4. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a
functional problem, just a compile-time configuration test. Ensure that you don't
over allocate TCP_ETH_RAM_SIZE or MAX_HTTP_CONNECTIONS.
5. HI-TECH PICC-18 STD 9.51PL1 cannot compile DynDNS.c. It raises an
"inconsistent type" error while trying to perform a ROM pointer to integer
cast. The older 9.50PL3 compiler release is required to compile this file.
6. HI-TECH PICC-18 STD 9.50PL3 does not initialize several static variables
correctly on reset. This behavior breaks many stack modules in the
TCPIP Demo App and TCPIP WebVend App projects. Additionally, string
printing functions do not work correctly, so the supplied
"TCPIP Demo App-HITECHPICC18 PICDEMNET2 18F97J60.hex" and "TCPIP WebVend
App-HITECHPICC18 PICDEMNET2 18F97J60.hex" files may not correctly print the
board's DHCP assigned IP address on the board's LCD (if present) and UART. To
avoid these severe problems, use the Microchip MPLAB C Compiler for PIC18 MCUs.
A free student edition can be downloaded from http://www.microchip.com/c18.
********
v4.18 28 November 2007
********
Changes:
1. Added C32 and PIC32MX support. Some things were cleaned up in the process.
2. Removed linker scripts from C30 MPLAB projects. MPLAB IDE 8.00
can automatically select the correct linker script for 16-bit and 32-bit
products.
3. Updated TCPPerformanceTest.c module. Now it automatically calculates the TX
throughput and displays it for you. Also, there is now an RX throughput
testing mode, which listens on a separate TCP socket (port 9763) when a TCP
socket of type TCP_PURPOSE_TCP_PERFORMANCE_RX is allocated in TCPIPConfig.h.
The RX socket is by default not enabled to save memory, so you must create a
TCP_PURPOSE_TCP_PERFORMANCE_RX socket in TCPIPConfig.h and ensure that enough
memory is allocated to accommodate it to test the RX performance test. When
connected to port 9763, send a large amount of data and the PIC
microcontroller will send back a count of how many bytes were received per
second.
4. UDPPerformanceTest.c module now transmits 1024 packets on start up and then
stops to prevent continually broadcast flooding your network. To transmit
more packets after 1024 is reached, hold down BUTTON3 (left-most button on
most boards).
5. Significantly improved the speed of the MD5 and SHA-1 functions. Gains for
the 8-bit compilers were 50-75%, while 16-bit parts saw more modest
improvements (~10%).
6. Reimplemented TCP_CLOSE_WAIT TCP state ("CLOSE WAIT" in RFC793). Now, TCP
sockets that receive a FIN from the remote node will hold off transmitting
a FIN back to the remote node until the TCP_CLOSE_WAIT_TIMEOUT (defined at
the top of TCP.c) elapses or immediately when the application calls the
TCPDisconnect() function. This makes it possible for the application to
transmit a response back to the remote node before the socket becomes closed
on our end. Similarly, it simplifies application usage of the last RX bytes
received as these bytes are now assured to still be in the RX FIFO for at
least TCP_CLOSE_WAIT_TIMEOUT seconds. TCP_CLOSE_WAIT_TIMEOUT defaults to
200ms in this stack version.
7. Pushed the SNTP requery on failure timeout up some. It was ~14 seconds and
is now ~20 seconds.
8. Added TFTPOpenROMFile() API to complement TFTPOpenFile() when using PIC18
products.
9. Added a fourth parameter to newAJAXCommand() in mchp.js, allowing data to be
POSTed along with the AJAX request.
10.Deprecated the TCP Loopback functions, which includes TCPOpenLoopback,
TCPCloseLoopback, TCPIsLoopback, TCPInject, and TCPSteal. These functions
were added in 4.10 for future SSL support, but have since become
unnecessary. They are of limited usefulness, and so are being removed to save
code space. The functions are still available in this version, but will
be removed in the next release.
11.Added SMTPClient.ServerPort field to the SMTP API. This allows the remote
server port number to be specified dynamically at run time instead of being
hard coded to the SMTP_PORT value defined at the top of SMTP.c. SMTP_PORT is
now only a default.
12.Added web interface to the SMTP module in the TCPIP Demo App applications.
You can now configure the SMTP module and send emails directly from within
your web browser. The HTTPPostEmail() function in CustomHTTPApp.c also
demonstrates how to send MIME encoded attachments in emails. The default demo
will send button states, LED states, and the current potentiometer reading as
a CSV file attached to the email.
13.Changed SMTPDemo() in MainDemo.c to trigger on BUTTON2 and BUTTON3
simultaneously held down instead of BUTTON0 only.
Fixes:
1. Fixed an ENC28J60.c MACGetArray() bug which would overwrite one byte of memory
at address 0xFFFFFFFF if you provided NULL for the destination address pointer.
2. Fixed an MPFS2.c MPFSGet() bug which would overwrite memory address 0x00000000
if a NULL pointer was provided as the destination.
3. Fixed a bug in the HTTP2 server accessing incorrect sockets if an inadequate
number of sockets were available on POR.
4. Fixed Internet Bootloader project from failing with a timeout if an ARP packet
arrived during the Erase/Write operation.
5. Fixed DHCP client RFC non-compliance where it would send the ciaddr field in
the initial SELECTING state. Also, in the RENEWING state, the Requested IP
Address option was being sent, which is illegal. These changes may fix
compatibility problems with certain DHCP servers.
6. Fixed TFTP Client's TFTPCloseFile() function from sending data using a wrong
UDP socket if StackTsk() was called after TFTPIsFileOpened() was last called.
7. Added two zero bytes to the ICMP echo request payload to improve compatibility
with some buggy NAT routers.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
3. HI-TECH PICC-18 projects may not compile when targeting the external
ENC28J60 chip on the PICDEM.net 2 development board (instead of the
internal Ethernet controller). This problem only applies when a
PIC18F97J60 family part is the target. I.e. it compiles correctly for the
HPC_EXPLORER + Ethernet PICtail.
4. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a
functional problem, just a compile-time configuration test. Ensure that you don't
over allocate TCP_ETH_RAM_SIZE or MAX_HTTP_CONNECTIONS.
********
v4.16 06 November 2007
********
Changes:
1. Added Internet Radio application. This is a TCP client application which
downloads streaming MP3 audio from a Shoutcast server and then plays it back to
stereo earphones via a VLSI VS1011 audio decoder.
2. Added SPIRAM.c module. This module is intended for interfacing to an AMI
Semiconductor N256S0830HDA SPI RAM chip. The TCP module can now interface
directly to this SPIRAM module to store TCP socket FIFO buffers and other TCB
data in the external RAM.
3. Added TCP_OPTIMIZE_FOR_SIZE compile time configuration macro to TCP.c file. When
optimizing for small code size, the TCP module ROM footprint shrinks up to 6KB,
but performance may slow down on some processors (namely PIC18s, where the
penalty is approximately 15%).
4. Added USE_EEPROM_25LC1024 compile time configuration macro to TCPIPConfig.h.
Enable this definition if you are storing your MPFS[2] on a 1Mbit 25LC1024 or
similar EEPROM device that uses 24-bit addressing and a 256 byte write page size.
5. Changed LCDBlocking.c module initialization code. It should now be possible to
use 4-bit mode on certain "unusual" LCD controllers, like the Samsung S6A0032.
Most PICDEM.net 2 and Explorer 16 boards use an LCD with this controller.
6. SNTP client now attempts to requery the SNTP server about every 14 seconds if the
last query attempt fails. This allows the internal time value to become valid
quickly should the board be powered up before an Ethernet cable is attached or if
the DHCP client doesn't obtain an IP address quickly enough. Previously, it would
take up to 10 minutes after plugging the Ethernet cable in to get a correct time
value from the SNTP server.
7. Added UDP_USE_TX_CHECKSUM compile time configuration macro to TCPIPConfig.h.
When enabled, all UDP packets will have a correct UDP checksum computed and
inserted into the UDP header of outbound packets. If you do not define this
macro, the UDP checksum will be disabled (left as 0x0000), which is how previous
stack versions operated. Note that enabling checksum generation cuts your
maximum UDP TX throughput by nearly half due to the required computations.
8. Substantially changed TCP socket RX and TX FIFO allocation. Now, sockets can be
stored either in Ethernet RAM, PIC RAM, or external (SPI) RAM. Previously,
sockets could only be allocated in Ethernet RAM, which was not scalable.
9. Added TCPOpen() API function. This replaces TCPListen() and TCPConnect().
TCPOpen() supports a large number of options that will make the creation of
client mode sockets much easier. You can specify the remote node as a hostname
that needs DNS and ARP resolution, an IP address that only needs ARP resolution,
or legacy NODE_INFO pointer for direct compatibility with the previous
TCPListen() and TCPConnect() APIs. TCPOpen() also supports a socket type
parameter which will allow you to use the new TCP socket RAM allocation system.
10.Added TCP Keep Alive mechanism defined by RFC 1122 section 4.2.3.6 to the TCP
module. This helps automatically detect lost connections. If the remote node
sends back an RST, this immediately closes the lost connection on our end.
Currently, no action is taken if the keep alive gets no response. Note that this
feature deviates from the standard by defaulting to only 10 seconds instead of
over 2 hours. Also deviating from the standard, this feature is enabled by
default. To disable it, undefine TCP_KEEP_ALIVE_TIMEOUT at the top of TCP.c.
11.Moved TCPPerformanceTest.c module from default port 12345 to 9762.
12.Moved UDPPerformanceTest.c module from default port 12345 to 9, the "discard"
protocol port.
Fixes:
1. The DHCP client now specifically requests the previous IP address when a DHCP
renewal occurs.
2. The SNTP client now correctly maintains time when repetitively calling
SNTPGetUTCSeconds() between an NTP requery event. Thanks go to Rob Haverkort on
the Microchip Ethernet forum for noticing the time value incrementing far faster
than it should have.
3. TCP module will not transmit a bunch of unnecessary duplicate ACK packets when
data is ready to be transmitted but the remote RX window is zero. This previously
didn't cause anything to break, but would waste CPU time and bandwidth sometimes.
4. TCP sockets will no longer automatically close if the remote RX window stays zero
for several seconds.
5. Fixed TFTP Internet Bootloader project from corrupting the configuration fuses.
Previously, this would result in the Watchdog timer being enabled and causing an
unintentional reboot every few minutes with the demo TCP/IP stack.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. TFTPc module has not been tested with this version.
3. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
4. HI-TECH PICC-18 projects may not compile when targeting the external
ENC28J60 chip on the PICDEM.net 2 development board (instead of the
internal Ethernet controller). This problem only applies when a
PIC18F97J60 family part is the target. I.e. it compiles correctly for the
HPC_EXPLORER + Ethernet PICtail.
5. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a
functional problem, just a compile-time configuration test. Ensure that you don't
over allocate MAX_TCP_SOCKETS, TCP_TX_FIFO_SIZE, TCP_RX_FIFO_SIZE, or
MAX_HTTP_CONNECTIONS.
********
v4.13 02 October 2007
********
Changes:
1. Added command line support to the MPFS2.exe tool. You can now generate MPFS
output files using batch scripts or other console applications.
2. Added dynamic variable parameter capabilities to the MPFS2 utility. To use, add
the parameters you wish to pass to the end of the dynamic variable. All
parameters are passed as WORD values. (ex: ~myArray(2,5)~ )
3. Added TCPWasReset() API to allow the application layer to be notified if an
underlying socket reset has occurred (ex: remote node disconnects, cable is
disconnected and times out, user calls TCPDisconnect(), etc.). The reset state is
latching, which allows the application layer to detect if a remote node disconnects
and a new connection occurs on the same socket before the application can detect
the original disconnection through the TCPIsConnected() API.
4. Added a counter to the UDPPerformanceTest module and made it supress transmission
if an Ethernet link is not present.
5. Added TCPIP WebVend App example application to the main stack distribution. This
corresponds to three new Microchip Webinars being published on the HTTP2 server
usage topic.
Fixes:
1. Fixed MPFS2.exe PC utility from crashing if you attempt to generate an MPFS
classic .bin/.c/.s output file.
2. Fixed RCONbits definition for HPC_EXPLORER hardware profile when using the HI TECH
PICC-18 compiler.
3. Fixed a MPFSGetFilename() bug when using C30 and MPFS2 images stored in program
memory. Thanks to Billy Walton on the Microchip Ethernet forum for identifying
this issue.
4. Fixed a TCP RX FIFO corruption problem which would occur if the remote node sent
more data than could fit in our RX FIFO in a single packet. The GeneticTCPClient.c
module was subject to experiencing this problem when connected to www.google.com's
servers.
5. Fixed a DHCP client UDP socket leak if you called DHCPDisable() after the DHCP
client had already obtained a UDP socket. Thanks go to Matthew Kendall on the
Microchip Ethernet forum for identifying this problem.
6. Fixed a SNMP Server module bug testing a string length (with respect to
SNMP_COMMUNITY_MAX_LEN) being off by one, resulting in possible memory corruption.
Thanks go to Matthew Kendall on the Microchip Ethernet forum for identifying this
problem.
7. Cleaned up some C30 compiler warnings related to macro definitions with inadequate
parenthesis in them.
8. Fixed HTTP2 module sometimes returning a 501 error instead of a correct web page
when being bombarded with new connection requests.
9. Fixed a TickGet*() API problem where the returned tick value could be off by 64K
ticks occasionally on PIC24 and dsPIC processors.
10.Fixed SMTP client module failing to send email when attempting to send an email
with a `CC' or `BCC' field that was in ROM while the `To' field was in RAM or visa
versa.
11.Fixed TCP module sending an incorrect sequence number in RST packets sent when in
the TCP_SYN_SENT state and an invalid segment arrives. In prior stack versions,
some TCP client applications might take a very long time to recover in the event
of a power failure, reset, and subsequent reconnect to a remote server that still
thinks the old connection is still active. With this fix, reconnections should be
possible almost immediately after a power failure because the correct RST packet
will cause the old connection to get closed right away.
12.Fixed a TCP socket leak problem that would occur over if the local PIC called
TCPDisconnect() and the remote node didn't send us a correct FIN response.
Sockets could previously get lost in the TCP_FIN_WAIT_2 state and wouldn't
recover unless the application called TCPDisconnect() a second time with the same
socket handle.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. TFTPc module has not been tested with this version.
3. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
4. HI-TECH PICC-18 projects may not compile when targeting the external
ENC28J60 chip on the PICDEM.net 2 development board (instead of the
internal Ethernet controller). This problem only applies when a
PIC18F97J60 family part is the target. I.e. it compiles correctly for the
HPC_EXPLORER + Ethernet PICtail.
5. HI-TECH PICC-18 projects will not correctly set the processor configuration fuses
through code using the __CONFIG() macro. Ensure that the configuration fuses are
manually set correctly via the MPLAB IDE Configuration Bits dialog. This problem
has been observed with compiler version 9.50PL3.
6. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a
functional problem, just a compile-time configuration test. Ensure that you don't
over allocate MAX_TCP_SOCKETS, TCP_TX_FIFO_SIZE, TCP_RX_FIFO_SIZE, or
MAX_HTTP_CONNECTIONS.
7. GenericTCPClient example of downloading a web page from www.google.com is extremely
slow. The default TCP socket has too little RX space to accept a full packet sent
from Google's servers, so the remote server must retransmit a lot of data, slowing
the transfer down a lot. Making TCP_RX_FIFO_SIZE 536 bytes or bigger and
correspondingly shrinking MAX_TCP_SOCKETS will correct this problem.
********
v4.11 27 August 2007
********
IMPORTANT NOTE: You must use MPLAB 7.62 or higher to successfully open the
MPLAB projects.
Changes:
1. Added a Microchip TCP/IP Stack Users' Guide to document the stack
features/modules/and APIs and address the stale AN833 documentation. Note that this
is a work in progress. Many modules have yet to be documented in the Users' Guide.
2. Added HTTP2 module. This HTTP module includes a whole new API and supreme new
features, such as POST support, cookies support, browser authentication support, and
more.
3. Added MPFS2 module. This module is required for the new HTTP2 module and performs
better while having fewer limitations. Long filenames and folders are now
supported.
4. Added a new GUI based MPFS2.exe PC utility. The older MPFSv2.exe GUI application
and MPFS.exe command line tool has been retired. The new utility has advanced
features, such as MPFS2 file format support, GZIP compress, etc.
5. Added a TFTP bootloader. This is a stand alone project and currently only supports
the PIC18F97J60 family of PIC processors with internal Ethernet.
6. Added UART2TCPBridge.c file and STACK_USE_UART2TCP_BRIDGE option to TCPIPConfig.h.
This new module acts as a TCP and UART bridge, with a high priority UART interrupt
and dedicated UART TX and RX FIFOs for minimum UART latency and maximum performance.
By default, the bridge acts as a TCP server and listens on port 9761. The UART baud
rate defaults to 19200. The bridge can be reconfigured to act as a TCP client.
7. Added Simple Network Time Protocol (SNTP) client. This module automatically
obtains the current time (date) from the Internet. Enable this module by defining
STACK_USE_SNTP_CLIENT in TCPIPConfig.h. Obtain the current time (in seconds since
00:00:00 1970) by calling the SNTPGetUTCSeconds() API.
8. Added support functions Base64Encode() and Base64Decode() in Helpers.c. Base 64 is
required for the new HTTP2 module, but of general use to many applications.
9. Added SMTP Authentication support to the SMTP Client. To use this, set the
SMTPClient.Username and SMTPClient.Password string pointers to a non-NULL value
before calling SMTPSendMail(). Applications implementing email transmission
capabilities should expose these options to the end-user for configuration. To use
SMTP servers that do not support the AUTH LOGIN authentication command, simply
leave the SMTPClient.Username and SMTPClient.Password pointers as their default
NULL value.
10.Converted DHCPDisable() from a macro to a real function and added the complementary
DHCPEnable() function. These two functions can be used at run time to dynamically
switch between using a static IP address and configuration and DHCP assigned IP
address and configuration.
11.Updated StringToIPAddress() to work more robustly, including the ability to decode
host name strings and determine if they contain a valid IP address or not. Also,
the complementary ROMStringToIPAddress() function was added.
12.Updated the DNS module. Now, if you give it an IP address string to resolve, it
will convert the string to an IP address and immediately return without querying
the DNS.
13.Shrunk the advertised TCP Maximum Segment Size from 576 bytes to 528 bytes. This
might improve compatibility if your TCP data has to propagate over nodes with small
MTUs and you have a correspondingly large TCP RX FIFO defined.
14.Performed some maintenance on the FTP.c file. No significant functionality has
been changed, but some potential problems were corrected.
15.Altered Tick.c file and API. Now, the Tick module can operate maximum precision,
returning the value of the actual Timer as it is counting, without disturbing the
timer count by writing to it or disabling it. Three new APIs were added,
TickGetDiv256(), TickGetDiv64K(), and TickConvertToMilliseconds(). Internally the
tick counter is now 48-bits wide and as accurate as your Timer clock source,
allowing you to use it as a Real Time Clock.
16.Added PIC24FJ64GA004_PIM hardware profile. This hardware profile is intended for
use with the PIC24FJ64GA004 PIM on the Explorer 16 development board. In this mode,
BUTTON2 and BUTTON3 and several of the LEDs do not work correctly due to lack of
I/O pins on this device. Also, you cannot have the POT and TEMP jumpers on the PIM
bridged because these signals are multiplexed with the SDO1/SDI1 pins needed for
the Ethernet PICtail Plus.
17.Removed most ROM APIs when using a 16-bit compiler (C30). PIC24s and dsPICs usually
don't need separate ROM functions since the Program Space Visibility feature maps
ROM into RAM space. All ROM APIs are still supported, but they are now macros to
base RAM APIs. This change saves a couple of kilobytes of code space on PIC24 and
dsPICs.
18.Improved MyTCB structure caching. This should reduce TCP packet processing
overhead with the ENC28J60 where TCBs are stored in the Ethernet RAM.
19.MAX_RETRY_COUNTS TCP configuration option has been renamed to TCP_MAX_RETRIES.
20.FTP server is no longer enabled by default. HTTP2 now supports POST, so you can
upload new webpages through the /mpfsupload page now. FTP required two precious TCP
sockets.
21.Began adding hooks for an SSL/TLS transport for secure HTTPS and other future stack
modules. Note that these cryptographic modules are not available at this time.
Configuration options such as MAX_SSL_CONNECTIONS do nothing and should not be
modified.
22.Username has changed for all of the modules. Now all modules have a default
username of "admin" and password of "microchip". Previously, the FTP and Telnet
modules used "ftp" and "telnet" respectively for the usernames.
Fixes:
1. Fixed a SendFile() bug in HTTP.c where parsing dynamic cgi files could send garbage
back to the web browser sometimes. Thanks go to Matt Watkins on the Microchip
Ethernet forum for identifying this issue.
2. Fixed an off by one error in the calculation of RESERVED_TCP_MEMORY. Previously,
the last TCP socket's RX FIFO would incorrectly overlap with the Ethernet RX buffer,
causing incoming packets to occasionally be corrupted or the incoming data on the
last socket to get corrupted.
3. Fixed the QWORD_VAL's dword struct element types. dword.LD and dword.HD were
incorrectly defined as WORDs instead of DWORDs. Thanks go to Iñaki Esparza on the
Microchip Ethernet forum for identifying this issue.
4. Fixed the incorrect processing of received IP fragments with a non-zero offset.
This stack does not support IP packet reconstruction due to the limited amount of
available RAM. Thanks go to Iñaki Esparza on the Microchip Ethernet forum for
noticing this behavior.
5. Board now only responds to ping requests to our IP address, the directed subnet
broadcast address, or the broadcast address of 255.255.255.255. Previously, it
would respond to any ping request to any IP address, assuming the MAC address was
correct.
6. Fixed a memory corruption/UDP packet loss problem when handling incoming UDP
packets. Previously, StackTask() would incorrectly continue processing more
packets if it came upon a UDP packet. Thanks go to Iñaki Esparza on the Microchip
Ethernet forum for identifying this issue.
7. Fixed the SMTPClient.ROMPointers.Server flag having an inverted meaning.
Previously, the SMTP client module would treat the SMTPClient.Server pointer as a
ROM pointer if this bit was cleared. In most cases, this would cause the SMTP
client to return an error code of 0x8000 when the SMTPClient.SMTPServer address
pointer was set.
8. Fixed the DHCP Server module from incorrectly parsing received packets which had a
DHCP_PARAM_REQUEST_IP_ADDRESS option followed by more options. Previously due to
the length miscalculation, the parser would enter a random state, depending on the
packet's contents. Thanks go to Iñaki Esparza on the Microchip Ethernet forum for
identifying this issue.
9. Fixed potential incorrect results when UDPIsGetReady() was called and a previous
application did not call UDPDiscard() on an RX packet. Now, StackTsk() calls
UDPDiscard() as appropriate to let it know when it's old RX data is being thrown
away. This fixes a potential bug in the DHCP Server module and makes the UDP API
more robust. Thanks go to Iñaki Esparza on the Microchip Ethernet forum for
identifying the potential DHCP server issue.
10.Fixed a potential ARP bug where the Gateway's MAC address would be returned for an
IP address on the local subnet. This unusual case would occur when two application
tasks were using the ARP module at the same time and the second application was
trying to resolve an IP address off of our subnet. Thanks go to Iñaki Esparza on
the Microchip Ethernet forum for pointing this issue out.
11.Fixed an PIC18F97J60 family MAC layer bug where MACGetArray() might not correctly
increment the Ethernet read pointer if a NULL pointer was given for the
destination. The C compiler might have optimized the function so that it would
increment the read pointer one less than it was supposed to.
12.The TCP module now acknowledges TCP Keep-Alive packets which will help prevent
connection loss if the remote node fills up our RX FIFO and then our window-update
packet gets lost on the network/Internet. In stack version 4.02, a zero-window
probe would have been required to restore the communications.
13.Fixed a TCP RX FIFO corruption issue that would occur in (uncommon) circumstances
when too many out-of-order segments arrived such that a second "hole" would have
been required to accommodate the data. Thanks go to Iñaki Esparza and his eagle
eyes on the Microchip Ethernet forum for finding this corner case bug.
14.Inline assembly in the ETH97J60.c file has been modified to accommodate the C18
Extended mode and C18 Auto default storage class. Previously, the Ethernet module
would transmit garbage packets when using the C18 parameter stack.
15.Fixed potential buffer overflow in NBNS.c's NBNSGetName() function where an
unexpected string length retrieved from the packet could cause random memory
corruption.
16.Fixed some potential PIC18F97J60 family Ethernet module transmit lockup conditions
that occur on some networks. Previously blocking while() loops would wait
indefinitely for the ECON1<TXRTS> bit to become clear by hardware, which the
hardware might never have done.
17.In MainDemo.c, a call to DelayMs() was being made using a value of 100ms. This was
too long for the underlying Delay1KTCYx() C18 function and would result in a
shorter than expected delay when compiled with C18. This has been fixed with a
loop. Thanks go to Andy123 on the Microchip Ethernet forum for pointing this
problem out.
18.Fixed a potential C18 memory overlaying problem in the TickUpdate() function.
Previously, the local variable used in this function might have been overlayed on
other memory, resulting in random memory corruption as the ISR occurred.
19.The demo AJAX web pages in the TCPIP Demo App\WebPages folder now correctly display
and self-refresh in Firefox 2. Previously, it would work in Firefox 1.5 and
Microsoft Internet Explorer, but not Firefox 2. Thanks go to "gohsthb" on the
Microchip Ethernet forum for identifying this correction.
20.Rewrote the GenericTCPServer.c example to not use an application RAM FIFO for
buffering. Since the TCP module implements its own FIFOing, the application has
limited need for its own FIFO too. This fixes a previous bug where the
GenericTCPServer was not checking the number of incoming bytes with the remaining
size available of the App FIFO. This would have previously resulted in a buffer
overflow, corrupting the RX data if too much arrived all at once.
21.Fixed a potential MPFS classic inline ASM30 assembly code problem where web pages
stored in internal Flash and C30 with optimizations enabled could result in data
corruption.
22.Fixed a UDPPut() tracking problem that would result in extra bytes being appended
to the end of a packet if the UDPSetTxBuffer() function was used. This previously
caused the SNMP module to send some junk data at the end of its packets.
23.Fixed a potential TCP problem where transmitted FIN packets might not get
retransmitted properly if the remote node never acknowledged the data that was
transmitted just before the FIN was sent.
24.Fixed a NetBIOS Name Service bug where the response packet would sometimes get sent
to an incorrect address. It now consistently responds to the unicast MAC/IP
address of the NBNS query packet.
25.Added padding to all transmitted DHCP messages to make the minimum UDP payload at
least 300 bytes. This fixes compatibility with some older BOOTP relay devices
which discard smaller packets. Thanks go to Dave Collier on the Microchip Ethernet
forum for pointing this problem out.
26.Substantially shrunk the number of retransmission attempts made in the
TCP_SYN_RECEIVED state. This improves recovery time when attacked by a SYN flood
Denial of Service event. The recovery time is now 7 seconds (3 total packets)
instead of 31 seconds (6 total packets)
27.Fixed the possibility of the NetBIOS Name Service module giving out the board's
static IP address before a DHCP lease could be obtained. NBNS requests are now
only serviced when originating from nodes on the same subnet.
28.Fixed storage of MPFS classic in internal program memory when using the HI-TECH
PICC-18 compiler.
29.Substantially revised TCP.c, fixing many TCP bugs and possibly adding new ones.
Thanks go to Michael Rubinstein for finding several of these TCP problems.
30.The DNS client module will now time out and return failure if the DNS server cannot
be ARPed or does not respond to the DNS query. Each timeout is set to 1 second and
3 total ARP and 3 total DNS query attempts are possible. Previously, it would
retry indefinitely, causing the calling application to deadlock.
Known Problems:
1. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
2. TFTPc module has not been tested with this version.
3. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to reenable it's DHCP server.
4. HI-TECH PICC-18 projects may not compile when targeting the external
ENC28J60 chip on the PICDEM.net 2 development board (instead of the
internal Ethernet controller). This problem only applies when a
PIC18F97J60 family part is the target. I.e. it compiles correctly for the
HPC_EXPLORER + Ethernet PICtail.
5. HI-TECH PICC-18 projects will not correctly set the processor configuration fuses
through code using the __CONFIG() macro. Ensure that the configuration fuses are
manually set correctly via the MPLAB IDE Configuration Bits dialog. This problem
has been observed with compiler version 9.50PL3.
Testing and Performance Notes:
1. Make sure to use MPLAB IDE 7.62 or higher with this version. Versions below 7.61
will not work. Version 7.62 has cool new features like C auto-word complete and
function parameter tooltips that can be enabled (disabled by default).
2. Testing was done using MPLAB C18 version 3.12, MPLAB C30 version 3.01, and HI-TECH
PICC-18 version 9.50PL3. Make sure to upgrade your tools to at least these
versions.
********
v4.02 10 April 2007
********
IMPORTANT NOTE: You must use MPLAB 7.41 or higher to successfully open the
MPLAB projects.
IMPORTANT NOTE2:If an external serial EEPROM memory is used to store AppConfig,
it's contents will be invalidated the first time you run this
version, restoring the AppConfig defaults. The AppConfig
structure has been optimized.
IMPORTANT NOTE3:If an external serial EEPROM memory for MPFS, you will need to
recreate the MPFS image and program your EEPROM. A 32 bit
addressing format is now used.
Changes:
1. Implemented TCP RX packet order correction logic. The stack can now accept
TCP frames that arrive out-of-order without requiring the remote node to go
through a retransmit cycle. This dramatically improves RX performance when
communicating over the Internet.
2. UDPOpen() now can handle a NULL pointer for remoteNode. In this case, the
broadcast IP/MAC addresses will be used for the remoteNode (destination
address of outbound packets).
3. Recreated MPLAB projects for the HI-TECH PICC-18 compiler. These were
temporarily absent from 4.00RC. This project works with the PIC18F97J60
with internal Ethernet module, assuming the correct compiler version is
present.
4. Moved all the headers around. Most of them are in
"Microchip Solutions\Microchip\Include\TCPIP Stack" now. This change was
made to again be more compatible with other (future) Microchip software
libraries.
5. New UDPPut() behavior. Now, if space in the Ethernet TX buffer runs out,
the packet will not automatically be transmitted. You must call UDPFlush()
to cause the packet to be transmitted.
6. Added UDPGetArray(), UDPPutArray(), UDPPutROMArray(), UDPPutString() and
UDPPutROMString() user API functions. These functions perform substantially
better than calling UDPPut() successively and allow greater application
programming flexibility.
7. Changed TCPPutString() and TCPPutROMString() APIs to now return an updated
string pointer instead of a count of bytes successfully placed in the TX
buffer.
8. Added UDPPerformanceTest.c. By default this module causes UDP packets
containing 1024 bytes of application data to be broadcasted on UDP port
12345. Use a packet sniffer, such as Wireshark (http://www.wireshark.com/)
to capture and derive stack overhead/UDP TX performance characteristics with
this module. Note that this test uses the UDPPutROMArray() function.
Applications which use successive calls to UDPPut() will be slower. To
enable this module, #define STACK_USE_UDP_PERFORMANCE_TEST in TCPIPConfig.h.
9. Added TCPPerformanceTest.c. By default this module listens on TCP port
12345. When a remote client connects, this server module will being
transmitting the maximum possible amount of application data that it can,
given your TCP TX FIFO size. Use a packet sniffer, such as Wireshark
(http://www.wireshark.com/) to capture and derive stack overhead/TCP TX
performance characteristics with this module. Any TCP client can be used,
including readily available utilities such as the telnet.exe utility
available on Microsoft Windows XP. To use it to connect to the test module,
run: "telnet.exe xxx.xxx.xxx.xxx 12345" where xxx.xxx.xxx.xxx is the board's
IP address. Note that this test uses the TCPPutROMArray() function.
Applications which use successive calls to TCPPut() will be slower. To
enable this module, #define STACK_USE_TCP_PERFORMANCE_TEST in TCPIPConfig.h.
10.Added Reboot.c module. By default, this module listens on UDP port 30304.
If the application byte 0x00 arrives on this port, the PIC will reset. This
is primarily useful for remote Bootloader entry.
#define STACK_USE_REBOOT_SERVER in TCPIPConfig.h to enable this module.
Note that since no encrypted challenge/response algorithm is currently
implemented, this module is a Denial of Service vulnerability, so it should
not be enabled unless there is a specific need for it.
11.Made the TickUpdate() ISR routine execute in the low priority ISR instead of
the default high priority ISR. The Microchip TCP/IP stack does not need any
interrupts except this low priority timer.
12.Renamed STACK_USE_DHCP macro to STACK_USE_DHCP_CLIENT
13.Added STACK_USE_MPFS macro.
14.Changed UDPIsPutReady() to return a WORD instead of a BOOL. The WORD is the
number of bytes that can be put into the buffer.
15.Changed MACGetArray() to accept a NULL pointer. If NULL, the retrieved data
will simply be discarded. This also changes the behavior of UDPGetArray()
and TCPGetArray() to match, throwing bytes away if a NULL pointer is given.
16.Added a very simple DHCP Server module. This module has limitations and is
useful for a single client only. Its purpose is to allow you to directly
connect the board to a standard PC through a crossover cable (no other
network nodes attached). The server is coded to automatically disable
itself if the DHCP client is also enabled and another DHCP server is
detected on the network. This allows both the DHCP server and DHCP client
to coexist without any manual reconfiguration.
17.Added DNSResolveROM() function for resolving host names that are stored in
program memory, ex: literal strings.
18.Added a TCP automatic transmit/window update timer. It defaults to
TCP_AUTO_TRANSMIT_TIMEOUT_VAL (40ms) after the first get or put operation
following the last automatic transmit/window update. This timer enhances
performance, especially when streaming data over the Internet where round
trip times can be several tens to low hundreds of milliseconds. This also
improves application coding flexibility as TCPFlush() need not be called
anymore.
19.Added TCP delayed ACKnowledgement timer. This conserves bandwidth by
transmitting fewer ACKs and prevents inadvertently influencing remote slow
start/collision avoidance and fast retransmit algorithms.
20.Completely rewrote ICMP (ping) server module. It is now much smaller (ROM
and RAM), faster, and can handle packets of 576 bytes or larger, if no IP
fragmentation occurs.
21.Rewrote StackTsk() stack manager. It is much simpler now.
22.Added TCPFind(), TCPFindArray(), and TCPFindROMArray() user API functions.
These functions peek inside a given TCP socket's RX FIFO (without removing
anything) and looks for a particular byte or array of bytes. This should
greatly simplify the creation of application code whenever variable length
fields are used (ex: text strings terminated by \r\n). It supports case
insensitive text searching or binary searching, as well as an offset to
start searching at.
23.Added TCPGetRxFIFOFree() user API. It returns the number of bytes of free
space in the TCP's RX FIFO.
24.Changed default TICK resolution to 1ms (from 10ms) and improved accuracy.
25.Added outbound ping capabilities (i.e. board can now ping another board or a
PC). To enable these features, define STACK_USE_ICMP_CLIENT. This will
enable several new APIs, including ICMPBeginUsage(), ICMPSendPing(),
ICMPGetReply(), and ICMPEndUsage(). The functions should be called in this
order. See the PingDemo() function in MainDemo.c for an example of how to
use them. By default, pushing BUTTON3 (left-most one) will cause a ping to
be sent to 4.78.194.159 (ww1.microchip.com). The response time will be
displayed on the LCD (assuming your development board has an LCD).
26.Cleaned up C30 3.00 signed/unsigned warnings.
27.Removed PIC18F97J60_TEST_BOARD hardware profile support. This stack no
longer supports it due to the old beta silicon (with errata) mounted on
these boards.
28.Added support for ROM pointers for all of the SMTP strings (To, From, CC,
Subject, etc.). If you use a ROM string, you must also set the
corresponding SMTPClient.ROMPointers.xxx bit to let the SMTP module know
which type of pointer was provided. See the SMTPDemo() code in MainDemo.c
for and example calling sequence using both ROM and RAM strings for the
various fields.
Fixes:
1. Fixed a critical TCP buffer corruption issue where the start of a TCB header
overlapped with the last byte of the RX FIFO from the previous socket. This
bug affected version 4.00RC only.
2. ETH97J60.c, TCPIP.h, and TCPIP Stack Version.txt were correctly readded to
the TCPIP Demo App-C18 project using relative paths instead of absolute
paths.
3. UDPOpen() now dynamically assigns a local port number if you call it and
give it a 0x0000 port number. This should fix some UDP applications from
not working (ex: DNS Client module) with some computers/routers/networks
which throw away traffic originating from the invalid port 0x0000 value.
4. Fixed a ENC28J60 bank selection error that would occur if an application
called GetCLKOUT() in ENC28J60. By default, this function is not called.
5. UnencodeURL() function in Helpers.c is now tested and working.
6. Fixed a TCP Window Update problem when TCPGetArray() was used. Before the
problem was fixed, performance could have been terrible on reception.
7. Fixed a unintended TCP connection close if the socket was idle for about a
minute. Now, TCP sockets will remain open indefinitely if there is no
traffic going on.
8. Serial numbers >32K are now displayed correctly on the serial port as a
positive value when C18 is used and the board is placed in configuration
mode (BUTTON0 is depressed on power up).
9. HI-TECH PICC-18 compiler would previously incorrectly initialize the
AppConfig structure.
10.Previously a processor reset was possible when accessing items in the
AppConfig strucutre on 16 bit MCUs (PIC24, dsPIC) due to unaligned word
accesses. This was fixed by reordering the Flags byte in the APP_CONFIG
structure.
11.Rewrote DHCP client state machine, fixing the previously known problem
where it would not perform a new discovery if it was trying to renew a lease
with an offline DHCP server.
12.Fixed a critical deadlock problem in the ETH97J60.c MAC layer driver for
the PIC18F97J60 family Ethernet controller. Previously, it was possible
(although rare) that the DMAST or TXRTS bits would get stuck set if too
much Ethernet traffic was received within a short interval. Previously, the
MACFlush() function was unnecessarily setting TXRST, which it should not do
while the Ethernet interface or DMA is being used.
13.Fixed an HTTP server state machine problem where a new connection occurring
too soon on a previously used socket could cause the HTTP server to no
longer respond.
14.Fixed a potential memory corruption error in the HTTPGetVar() callback
which would exceed the bounds of the VarString array when returning the
VAR_STACK_DATE variable.
15.Fixed a TCP transmission sequence tracking problem whenever data is
retransmitted and new unflushed data is also in the TX FIFO. Thanks go to
Matt Watkins on the Microchip Ethernet forum for identifying this issue.
Known Problems:
1. RTL8019AS MAC layer driver has not been updated for new TCP module. Users
requiring RTL8019AS support should continue to use stack version 3.75.
2. I2CEEPROM.c has not been tested or completed. Continue to use I2CEEPROM.c
from stack version 3.75 if this file is needed.
3. Telnet server module does not implement a lot of Telnet functions. As a
result, it will likely not display correctly or work at all with some Telnet
clients. The server was tested with the Microsoft telnet.exe utility which
is provided with Microsoft Windows.
4. TFTPc module has not been tested with this version.
5. The default demo web pages which use AJAX do not automatically refresh
themselves when viewed in Firefox 2.0.0.1. Earlier Firefox versions
(1.5ish) probably work without any problem.
6. Files may be inaccessible in your MPFS if compiled with C18 for internal
flash program memory and your total MPFS content is large (around 64KB or
larger). The code attempts to access the ROM memory using a near rom
pointer when a far rom pointer is needed.
7. If using MPLAB 7.52 all .s files that are compiled with C30 will not have
the corresponding object file get stored in the correct directory. As a
result, if you are compiling with C30 and with MPFS_USE_EEPROM not defined
(i.e. storing web pages in internal program memory), the project won't link
(throws a undefined reference to `MPFS_Start'). As a workaround, remove the
Intermediates Directory in the MPLAB project. Alternatively upgrade MPLAB
to a newer version. MPLAB IDE 7.60+ may have this fixed.
8. If the DHCP client and DHCP server are used at the same time and you connect
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
a crossover cable), a race condition can occur where both nodes will disable
their DHCP server and neither board will get a successful DHCP lease. If
this unlikely scenario occurs, as a work around, simply reset one of the
boards to renable it's DHCP server.
9. HI-TECH PICC-18 projects may not compile when MPFS_USE_EEPROM is not
defined and you are trying to store web page data in internal
FLASH program memory.
10.HI-TECH PICC-18 projects may not compile when targeting the external
ENC28J60 chip on the PICDEM.net 2 development board (instead of the
internal Ethernet controller). This problem only applies when a
PIC18F97J60 family part is the target. I.e. it compiles correctly for the
HPC_EXPLORER + Ethernet PICtail.
Testing and Performance Notes:
1. This stack version was compiled and tested with the following tool versions:
-MPLAB IDE 7.52
-Microchip C30 version 3.00
-Microchip C18 version 3.10
-HI-TECH PICC-18 version 9.50PL3
2. Using the UDPPerformanceTest.c module, the stack can transmit around
220KBytes/second (1.75Mbits/second) of UDP application data on the
PIC18F97J60 with internal Ethernet @ 41.66667MHz core clock, compiled using
C18 3.10 with debug optimization settings.
3. Using the UDPPerformanceTest.c module, the stack can transmit around
392KBytes/second (3.14Mbits/second) of UDP application data on the
PIC24HJ256GP610 with external ENC28J60 @ 40 MIPS, compiled using
C30 3.00 with debug optimization settings.
4. Using the TCPPerformanceTest.c module, the stack can transmit around
58KBytes/second (464Kbits/second) of TCP application data on the
PIC18F97J60 with internal Ethernet @ 41.66667MHz core clock, compiled using
C18 3.10 with debug optimization settings, over Ethernet when using a tiny
200 byte TX TCP FIFO. Note that performance can be improved significantly
by increasing the FIFO size and performance will drop significantly if the
round trip TCP acknowledgement time is increased (ex: testing over the
Internet instead of Ethernet).
5. Using the TCPPerformanceTest.c module, the stack can transmit around
69KBytes/second (558Kbits/second) of TCP application data on the
PIC24HJ256GP610 with external ENC28J60 @ 40 MIPS, compiled using
C30 3.00 with debug optimization settings, over Ethernet when using a tiny
200 byte TX TCP FIFO. Note that performance can be improved significantly
by increasing the FIFO size and performance will drop significantly if the
round trip TCP acknowledgement time is increased (ex: testing over the
Internet instead of Ethernet).
6. Using the TCPPerformanceTest.c module, the stack can transmit around
178KBytes/second (1.42Mbits/second) of TCP application data on the
PIC24HJ256GP610 with external ENC28J60 @ 40 MIPS, compiled using
C30 3.00 with debug optimization settings, over Ethernet when using a larger
2000 byte TX TCP FIFO. Note that performance will drop significantly if the
round trip TCP acknowledgement time is increased (ex: testing over the
Internet instead of Ethernet).
********
v4.00RC 28 December 2006
********
IMPORTANT NOTE: If an external serial EEPROM memory is used to store AppConfig,
it's contents will be invalidated the first time you run this
version, restoring the AppConfig defaults. The AppConfig
structure has been optimized.
IMPORTANT NOTE2: If an external serial EEPROM memory for MPFS, you will need to
recreate the MPFS image and program your EEPROM. A 32 bit
addressing format is now used.
Changes:
1. Added Simple Mail Transfer Protocol (SMTP) client module and updated
MainDemo.c to exercise the Email transmission functionality when a user
pushes BUTTON0.
2. Added beta Telnet server module. See Known Problems section.
3. Completely revamped the TCP module. A real transmit FIFO and receive FIFO
are allocated for each TCP socket now. This greatly enhances RFC compliance,
communications robustness, and makes application development easier. New
APIs were added for putting and getting arrays and strings (including ROM
variants). Several TCP related bugs are now fixed as a result. Please
report any bugs found in the new implementation.
4. Added TCPPutArray() API.
5. Added TCPPutROMArray() API.
6. Added TCPPutString() API.
7. Added TCPPutROMString() API.
8. Added TCPGetArray() API.
9. Changed TCPIsPutReady() API. Instead of returning a BOOL, it now returns a
WORD. The WORD is a count of the number of bytes that TCPPut(),
TCPPutArray(), etc. can immediately place in the output buffer. MAKE SURE
THAT YOUR CODE DOES NOT COMPARE THE RETURN RESULT OF TCPIsPutReady()
DIRECTLY TO TRUE. For example, "if(TCPIsPutReady(MySocket) == TRUE){...}"
must be converted over to: "if(TCPIsPutReady(MySocket)){...}".
10.Changed TCPIsGetReady() API. Instead of returning a BOOL, it now returns a
WORD. The WORD is a count of the number of bytes that TCPGet() or
TCPGetArray() can immediately obtain. MAKE SURE THAT YOUR CODE DOES NOT
COMPARE THE RETURN RESULT OF TCPIsGetReady() DIRECTLY TO TRUE. For example,
"if(TCPIsGetReady(MySocket) == TRUE){...}" must be converted over to:
"if(TCPIsGetReady(MySocket)){...}".
11.Changed TCPDiscard() return type from BOOL to void.
12.Removed TCP_NO_WAIT_FOR_ACK option. It was defaulted to disabled in the
last two releases of the stack and is not needed with the new TCP module.
13.Updated DNS module to include two new required APIs: DNSBeginUsage() and
DNSEndUsage(). These functions control a one bit ownership semaphore to
allow multiple applications to use the DNS module in series. If invoked
correctly, this will prevent unintended bugs resulting from two applications
trying to use the DNS module at the same time. Old applications, such as
those based around the GenericTCPClient.c example must be updated to use
these functions.
14.Started using a new project structure and folders. You must use MPLAB 7.41
or higher (stack is tested on MPLAB 7.50) to use the default
workspaces/projects, which include files using relative paths. This should
improve compatibility with some future code libraries released by Microchip.
StackTsk.h was broken into TCPIPConfig.h, HardwareProfile.h, and StackTsk.h.
TCPIPConfig.h now includes all stack configuration options and
HardwareProfile.h contains all hardware options. No macros need be globally
defined in MPLAB project now. TCPIP.h is the only header applications must
include now, for any/all modules used.
15.Combined ARP.c/ARP.h and ARPTsk.c/ARPTsk.h into a single file pair:
ARP.c/ARP.h. Applications built using a prior stack revision must remove
all instances including "ARPTsk.h" and replace it with "ARP.h" instead. The
ARP module is now simpler, more linear (easier to read), and being in one
source file, allows the C compiler to optimize better.
16.Added PIC18F67J60_TEST_BOARD hardware profile to HardwareProfiles.h. This
hardware profile is designed for 05-60091 (Rev 1), a development board that
is not in production at this time.
17.Added DSPICDEMNET1 and DSPICDEMNET2 hardware profiles to HardwareProfiles.h
for eventual support of the Microchip dsPICDEM.net 1 and dsPICDEM.net 2
demo boards. These two boards use the RTL8019AS Ethernet controller and a
24LC515 EEPROM. These changes are currently incomplete and these profiles
cannot be used.
18.Began rewriting I2CEEPROM.c to support 16 bit CPUs, including the
dsPIC30F6014 used on the dsPICDEM.net 1 and 2 demo boards. Note that work
here is incomplete and cannot be used as a result -- see Known Problems
section.
19.Partially updated RTL8019AS.c to support 16 bit CPUs, including the
dsPIC30F6014 used on the dsPICDEM.net 1 and 2 demo board. Note that work
here is incomplete and cannot be used as a result -- see Known Problems
section.
20.Updated SNMP.c to use new typedefs in GenericTypedefs.h. Also SNMP was
tested in this version. SNMP.mib was updated some to better reflect current
hardware.
21.Added AN870 SNMP callbacks to MainDemo.c (a feature that was missing in
3.xx releases). This code will get compiled when STACK_USE_SNMP_SERVER is
defined in TCPIPConfig.h.
22.Removed all instances of MPFS_USE_PGRM for storing in internal FLASH program
memory. Storage in internal program memory is now the default. Define
MPFS_USE_EEPROM to override the default and store MPFS in an external EEPROM
memory.
23.Decreased program memory needed for Announce.c module by about 180 bytes.
Multiple inline calls to UDPPut() were removed.
24.UDP checksum checking logic has been improved. The UDP layer now avoids
writing the pseudo header checksum in the RX buffer.
25.Swapped endianess of the returned checksum from CalcIPBufferChecksum().
Rewrote CalcIPBufferChecksum() in Helpers.c. This improves consistency.
26.Improved swapl() in Helpers.c.
27.Improved USART baud rate (SPBRG) calculation for PIC18s. Rounding is now
done to chose the most optimal value and the code will automatically select
high baud rate mode (BRGH=1) if possible. Additional improvements can be
made if using a newer PIC18 with the 16 bit baud rate generator.
28.Added GenericTCPServer.c example file to complement GenericTCPClient.c. The
server is enabled by defining STACK_USE_GENERIC_TCP_SERVER_EXAMPLE in
TCPIPConfig.h.
29.Renamed STACK_USE_GENERIC_TCP_EXAMPLE definition to
STACK_USE_GENERIC_TCP_CLIENT_EXAMPLE for consistency with new server
example.
30.Defaulted MPFS.exe to generate binary MPFS images using 32 bit addressing.
MPFS.h has been modified to also default to use 32 bit addressing of
external EEPROM images. You must rebuild any old MPFS images and reprogram
them if upgrading from a previous TCP/IP stack revision, which defaulted to
use 16 bit addressing.
31.Updated MPFS.exe to #include "TCPIP.h" instead of "..\Headers\Compiler.h" in
C files generated by the utility.
32.Added MPFSv2.exe PC utility for generating large MPFS images in program
memory (ASM30 code) for C30 users. Previously, the C30 compiler placed a
limit of less than 32KB of total MPFS size due to the PSV window size
limitation on PIC24/dsPIC devices. To get around the limitation, use the
new MPFSv2.exe utility to generate an .s file which can be included in your
project instead of the .c file generated by the traditional MPFS.exe utility.
Fixes:
1. Fixed a bug in ARPProcess() which would incorrectly send an ARP response to
an incorrect MAC & IP address if a TX buffer wasn't immediately available.
2. Fixed a TCP bug where TCPIsGetReady() would return TRUE even if no data was
left in the recieved packet. Previously you had to call TCPGet() one last
time and have it fail before TCPIsGetReady() would return FALSE.
3. Modified TCP state machine. Established connections will no longer
automatically close if left idle for approximately 45 seconds. Note that
your application needs to ensure that no sockets unintentionally get lost
(For example: a server socket that received data only is established and the
cable breaks while connected. In this case, the socket would never be
detected as being disconnected since the server never attempts to transmit
anything).
4. Stopped overclocking dsPIC33 and PIC24H devices. Previously PLLFBD was
incorrectly set to 39 instead of 38 to yield a resulting Fosc of 84MHz
(42MIPS) instead of 80MHz (40MIPS) with the default Explorer 16 development
board. Thanks go to Matt Watkins on the Microchip Ethernet Forum for
pointing this error out.
5. Corrected a bug in IP.c where IPHeaderLen would not be properly initialized
if a NON_MCHP_MAC was used (ex: RTL8019AS) and IPSetRxBuffer() was called.
This bug did not affect ENC28J60 or PIC18F97J60 family support. Thanks go
to Darren Rook for identifying this issue.
6. Updated checksum checking code in ENC28J60.c for latest silicon DMA checksum
errata.
7. Declared TickCount in Tick.c/Tick.h as volatile and implemented an interrupt
safe reading procedure in TickGet(). Since this multibyte variable is
modified in the ISR and read in the mainline code, these changes are needed
to prevent rare inconsistency bugs.
8. Fixed Announce.c so the unicast remoteNode of the requesting packet would be
used rather than the remoteNode of the last received packet, which may not
be correct when transmitting. Thanks go to Brett Caulton for identifying
this issue.
9. Fixed a DHCP bug which would cause DHCP renewals to continually occur after
only 60 seconds once the original lease expired. Thanks go to Brett Caulton
for identifying this issue and fix.
10.Fixed a potential TCP socket leak in the FTP module. Previously
FTPDataSocket would not be reliably initialized nor closed if the connection
was killed forcefully (user killed application, cable disconnected while
transferring, etc.).
Known Problems:
1. RTL8019AS MAC layer driver has not been updated for new TCP module. Users
requiring RTL8019AS support should continue to use stack version 3.75.
2. I2CEEPROM.c has not been tested or completed. Continue to use I2CEEPROM.c
from stack version 3.75 if this file is needed.
3. Telnet server module is still in development. No user authentication
features are currently implemented. Some telnet clients may render the
telnet server output incorrectly (in the wrong locations or wrong colors).
Testing has only been done with the Microsoft Windows telnet.exe utility
that comes Windows XP.
4. DHCP will continually send out DHCP Request packets when the lease expires and the
original DHCP server that gave the lease is offline. The board will continue to
use the expired IP address until the DHCP server comes back online, at which point
the lease will be renewed or a new discovery will occur. A new discovery should
occur after timing out, instead. It is believed that this problem has always
existed in previous stack revisions.
5. DHCP will continually send out DHCP Request packets when the lease expires and the
original DHCP server that gave the lease does not include Option 54, the Server
Identifier. A new discovery should occur after timing out. It is believed that
this problem has always existed in previous stack revisions.
6. TFTPc module has not been tested with this version.
7. Serial numbers >32K will be displayed on the serial port as a negative value when
C18 is used and the board is placed in configuration mode (RB0 button is depressed
on power up).
********
v3.75 14 August 2006
********
Changes:
1. Added beta DNS client module (DNS.c). DHCP was also updated to obtain a DNS
server address. Added AppConfig.PrimaryDNSServer IP address. Added STACK_USE_DNS
configuration macro. To use the DNS client, call DNSResolve() with the server name,
ex: DNSResolve("www.microchip.com"), and then periodically call DNSIsResolved()
until it returns TRUE, ex: DNSIsResolved(&IPAddressDestination). Only one DNS
resolution can be in progress at a time. Because the DNS client is a beta module,
the API or code may change before being finalized. No formal DNS API documentation
is available yet.
2. Added beta NetBIOS Name Service responder module (NBNS.c). Added
AppConfig.NetBIOSName string. Added STACK_USE_NBNS configuration macro. Added
MY_DEFAULT_HOST_NAME macro in StackTsk.h. Now, whenever a NetBIOS broadcast
attempting to resolve AppConfig.NetBIOSName arrives, a response will be made.
This form of name resolution only works on a single subnet. Off the subnet,
manual registration in a DNS server or other means will be needed to allow the
local Host Name to be recognized and translated to an IP address. The default
NetBIOS name for the board is "MCHPBOARD". To test the NetBIOS Name Service
module, try entering http://MCHPBOARD/ into your web browser instead of the board's
IP address.
3. Added beta HTTP client module (GenericTCPClient.c). This module demonstrates how
to make a TCP client application. To test this module, uncomment the
STACK_USE_GENERIC_TCP_EXAMPLE macro in StackTsk.h, recompile, and then press the
BUTTON1 button while the stack is running. RemoteURL[] should be downloaded from
ServerName[] and written to the UART. For the default values of ServerName[] and
RemoteURL[], the HTML search page for "Microchip" will be fetched from
"www.google.com" and written to the serial port. No formal documentation is
available for this example yet.
4. Added Embedded Ethernet Device Discoverer PC project to aid in embedded product
discovery when connected to a network and demonstrate how to write PC applications
which can communicate with embedded devices. The source code for this device is
included. It can be built using the Microsoft Visual C# 2005 Express Edition
compiler. At the time of stack release, this 3rd party PC development tool can be
downloaded at no cost from http://msdn.microsoft.com/vstudio/express/. If using
only the Microchip Device Discoverer executable file without the Visual C# compiler,
the .NET Framework 2.0 must be installed on the local PC. The application setup
utility should allow dynamic downloading of this component if the target machine
does not already have it installed.
5. Updated Announce.c to listen and respond to discovery requests sent to UDP port
30303 starting with the character 'D'. To test this functionality, use the
Embedded Ethernet Device Discoverer on a PC connected to the same subnet.
6. Updated UART configuration menu to accommodate the new beta module configuration
options (DNS server address, device host name).
7. Increased MPFS reserve block to 64 bytes from 32. Also, because the APP_CONFIG
structure was updated, all current MPFS images and data stored in deployed EEPROMs
needs to be updated.
8. Added a means to erase (invalidate) the onboard EEPROM using the BUTTON0 momentary
switch (right-most switch on demo boards with multiple switches). To erase the
EEPROM, hold down BUTTON0, RESET the board (press and release MCLR switch), and
then continue to hold down BUTTON0 for an additional 4 seconds. If you press MCLR
again, the EEPROM contents will now be invalid. If you press '0' on the UART, the
same configuration that was read prior to invalidating the contents will be
written back into the EEPROM. Invalidating the EEPROM allows the MY_DEFAULT_*
constants to get loaded into a previously programmed EEPROM chip. Because of
change #7, this procedure should be done for all currently programmed EEPROMs to
prevent anomalous values from being read.
9. remoteNode in StackTsk.c was changed from private to global scope. Now external
modules can reference the address of the last received packet. Announce.c uses
this to send a unicast response to a broadcast discovery request.
10.All stack modules that can be disabled (DHCP.c, FTP.c, etc) now will no longer
emit a compiler error if you have it in the project without defining the
appropriate macro (STACK_USE_DHCP, STACK_USE_FTP, etc). It will simply generate
no machine code when compiled and the stack will not use that module. Make sure
the proper macro is defined for each module that you wish to use.
11.Added SetRXHashTableEntry() to ENC28J60.c. This function can be used to set the
appropriate bit in the Hash Table registers to join a particular multicast group.
12.Added Realtek RTL8019AS Ethernet controller support to the stack. MAC.c was
renamed to RTL8019AS.c. This Ethernet controller is not recommended for new
designs. RTL8019AS support was reintroduced to provide ongoing assistance to
former Application designs implementing this chip. For new applications, use the
Microchip ENC28J60 or PIC18F97J60 family of microcontrollers.
13.Added I2C EEPROM support for MPFS storage. In older 2.xx stack revisions, I2C
EEPROM was supported by the XEEPROM.c file. This file has been renamed to
I2CEEPROM.c. It is mutually exclusive with SPIEEPROM.c, and only one may be
included in the project at a time.
14.Added new hardware definitions to Compiler.h. Pin mappings for the PICDEMNET and
PIC18F97J60_TEST_BOARD boards have been added. FS_USB was also defined; however,
it is untested and not recommended. See Compiler.h. The PIC18F97J60_TEST_BOARD is
a non-production board that some Early Adopters of the PIC18F97J60 family parts
have.
15.Changed type definitions for BYTE_VAL, WORD_VAL, DWORD_VAL, and moved the generic
typedefs to GenericTypeDefs.h from StackTsk.h. This should improve compatibility
with some future code libraries released by Microchip.
16.LCDBlocking.c module was modified to support 4-bit interfaces to LCD modules. The
PICDEM.net board has the module wired using a 4-bit bus.
Fixes:
1. Fixed a serious MAC TXBuffer leak in TCP.c. Previously TCP.c would allocate a
buffer for each socket in use, but under heavy traffic conditions (ex: user holds
down F5 on web browser), the buffer handle might have been discarded before
releasing the buffer. As a result all TCP connections would have lost the ability
to send any application data after the TXBuffer pool ran out.
2. In the TCP_SYN_SENT TCP state, ACKs may only be received (as opposed to SYN+ACK
packets) if the remote node thinks the connection is already open. A RST is now
sent in response to an unexpected ACK, which may improve reconnection time when
this (rare) condition occurs.
3. A bug was present in the UDP module where remote MAC addresses would be cached for
each socket, even when UDPInit() or UDPClose() was called, or the microcontroller
was reset. As a result, responses to incoming packets could have been sent to the
wrong MAC address. UDP Sockets are now properly initialized/closed.
4. Fixed a potential timing bug in LCDBlocking.c. For lower values of CLOCK_FREQ,
insufficient delay time was given to the LCD module, potentially causing improper
operation.
5. Changed PIC24F to default to the XT oscillator fuse rather than HS. The
PIC24FJ128GA010 data sheet, rev. C reports that 8MHz should be used with XT mode,
not HS mode like prior data sheets.
6. Added a couple of wait states to the Realtek RTL8019AS MAC layer module for
NICPut() and NICGet(). Previously, the PICmicro could not operate above
approximately 25MHz without losing communication with the RTL8019AS chip.
7. Updated PC based MPFS utility. When generating C files to be added to your MPLAB
project, the include path to "Compiler.h" is now "..\Include\Compiler.h". The
output file, ex: "MPFSImg.c" should be placed in the "Source" subfolder before
compiling. For example, if you are in the main stack folder with the MPLAB
projects, type: "mpfs /c WebPages Source\MPFSImg.c"
8. IP Gleaning will now get properly disabled when, through the RS232 configuration
application, DHCP and IP Gleaning are disabled. The stack will still respond to
ping requests which have the wrong destination IP address, but a correct MAC
address. However, the stack will continue to keep its statically defined IP
address when DHCP/IP Gleaning are disabled and the ping arrives.
9. SPIEEPROM.c now saves and reconfigures the EEPROM_SPICON1 register (SSPCON1) before
reading or writing to the SPI. After the read/write, it restores the saved state.
This allows the SPI bus to operate at different speeds, depending on what
peripheral is being accessed if other devices share the bus and can support
different speeds. In particular, this fixes the SPI @ 10.4MHz problem on the
PICDEM.net 2 board when using the ENC28J60.
Known Problems:
1. DHCP will continually send out DHCP Request packets when the lease expires and the
original DHCP server that gave the lease is offline. The board will continue to
use the expired IP address until the DHCP server comes back online, at which point
the lease will be renewed or a new discovery will occur. A new discovery should
occur after timing out, instead. It is believed that this problem has always
existed in previous stack revisions.
2. DHCP will continually send out DHCP Request packets when the lease expires and the
original DHCP server that gave the lease does not include Option 54, the Server
Identifier. A new discovery should occur after timing out. It is believed that
this problem has always existed in previous stack revisions.
3. When an MPFS .c image file is added to a C30 project, a linking error reporting
insufficient contiguous .const memory may occur when too much data is in the MPFS
image (PSV window size limitation). Using the PSV window, 1 out of every 3 program
memory bytes is wasted.
4. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested
and possibly do not work.
5. SNMP, TFTPc modules have not been tested with this version.
6. Serial numbers >32K will be displayed on the serial port as a negative value when
C18 is used and the board is placed in configuration mode (RB0 button is depressed
on power up).
7. The C30 linker may misplace the __CONFIG2 section or disallow usage of MPFS images
that are too big (add too much to the .const code section). The consequences of
this are that the first configuration word at 0x157FC may not get set through code
(must use the Configuration Bits dialog instead), and/or the project will not
compile. This problem has been observed with C30 ver. 2.02 on the PIC24FJ128GA010
product. To work around this problem, the p24FJ128GA010.gld linker script has
been modified. Specifically, line 68 has been commented out, which causes the
linker to place all .text sections after placing all absolute sections. SSR 25966
in the C30 2.02 release notes may be related.
8. It is observed with the Realtek RTL8019AS Ethernet controller and the demo AJAX
web page which self refreshes rapidly, that occasional HTTP GET requests sent by
the computer do not get received by the HTTP server. This is believed to be a
RTL8019AS MAC layer bug. The TCP protocol handles the packet loss, but
application performance suffers while waiting for the TCP retransmission. This
problem is not observed with ENC28J60.c or ETH97J60.c MAC layers.
9. The HI-TECH compiler version 9.50PL1 crashes when compiling LCDBlocking.c with 4
bit mode (PICDEMNET) and using a warning level of -3 or higher. To work around
the problem, the HI TECH projects were set to use warning level -4.
Guiding Notes:
1. To use the stack on a classic PICDEM.net demo board with the Realtek Ethernet
controller, a PIC18F452 processor, and Microchip C18:
-Use the C18EEPROM MPLAB project
-Change the processor in the MPLAB IDE
-Change linker script to "18f452i.lkr" in the MPLAB project. Use the one provided
in the Linker subfolder, it has been modified to make more RAM available.
-Update the hardware definitions macro. Click on Project -> Build Options... ->
Project -> MPLAB C18 -> Add PICDEMNET, remove HPC_EXPLORER)
-Remove ENC28J60.c from the project
-Remove SPIEEPROM.c from the project
-Add RTL8019AS.c to the project
-Add I2CEEPROM.c to the project
-Enable all compiler optimizations (Project -> Build Options... -> Project -> MPLAB
C18 -> Categories Optimization -> Enable all)
********
v3.60 12 July 2006
********
General Information:
This stack version is being publicly released, so the following changes are with
respect to the prior public stack release (v3.02). Interim stack changes for version
3.16 and 3.50 are documented below for those using non-public releases, but can be
ignored by most people.
Troubleshooting notes:
1. If you have an Ethernet PICtail revision 2.1 and are having reliability issues when
viewing the fast-refresh demo web page, you may need to install resistors in series
with the ENC28J60 SI, nCS, and SCK pins. The recommended value is 100 to 200 ohms.
This will reduce signal undershoot caused by long traces (parasitic inductance),
which can violate the absolute maximum electrical specs and cause SPI data
corruption. The HPC Explorer Rev 5 has fairly long traces to the PICtail connector.
2. Enabling C30 2.02 compiler optimizations on the dsPIC33FJ256GP710, PIC24HJ256GP610
ES chips may produce unreliable code.
3. When changing a C30 project to a PIC24H or dsPIC33F processor on the Explorer 16
demo board, the JTAG configuration fuse should be disabled to free the I/O pins
associated with it. JTAG is enabled by default.
4. This stack release was tested using MPLAB 7.40, C18 version 3.03, C30 version 2.02,
and HI TECH PICC18 version 9.50PL1.
5. When using the Ethernet PICtail board and HPC Explorer demo boards, make sure to
plug the power into the Ethernet PICtail and not the HPC Explorer. The HPC
Explorer's power regulator cannot provide enough current.
Changes:
1. Source files have been split into separate directories. To compile old
applications with this new stack, application source files may need to be updated
to include the proper path to the stack header files.
2. New MPLAB projects have been created:
-C18EEPROM: Equivalent to the previously named "mpnicee" project. Designed for
PIC18's using the C18 compiler. Web page content, board's IP address,
MAC address, DHCP enabled state, etc. is stored in an external SPI
EEPROM (25LC256 on demo boards). FTP Server demo is included.
-C30EEPROM: New supporting PIC24 and dsPIC controllers using the C30 compiler.
Similar to C18EEPROM.
-C18ProgramMem: Equivalent to the previously named "mpnicpg" project. Web page
content stored in internal FLASH program memory. Board's IP
address, MAC address, DHCP enabled state, etc. is stored only in
RAM and defaults are loaded from MY_DEFAULT_* constants in
StackTsk.h. FTP Server demo is not included. Web pages cannot be
updated remotely.
-C30ProgramMem: New supporting PIC24 and dsPIC controllers using the C30 compiler.
Similar to C18ProgramMem.
-HTC18EEPROM: Equivalent to the previously named "htnicee" project. Designed for
PIC18's using the HI TECH PICC18 compiler. Similar to C18EEPROM.
-HTC18ProgramMem: Equivalent to the previously named "htnicpg" project. Designed
for PIC18's using the HI TECH PICC18 compiler. Similar to
C18ProgramMem.
3. Created hardware definitions (pins, interrupt flags, special registers, etc) in
Compiler.h for easy changing of hardware. Four demo board combinations are
supported out-of-box now:
-EXPLORER_16: Explorer 16 motherboard + Ethernet PICtail Plus daughter card.
Tested with dsPIC33FJ256GP710, PIC24HJ256GP610, and
PIC24F128GA010 ES PIMs.
-HPC_EXPLORER: PICDEM HPC Explorer motherboard + Ethernet PICtail daughter
card. Tested with PIC18F8722 onboard and PIC18F87J10 PIM.
-DSPICDEM11: dsPICDEM 1.1 motherboard + Ethernet PICtail daughter card
(manually air wired). See Compiler.h for proper pins to air wire.
Tested with dsPIC30F6014A PIM.
-PICDEMNET2: PICDEM.net 2 motherboard (PIC18F97J60)
Change boards by changing the defined macro (Project -> Build Options... ->
Project -> MPLAB Cxx -> Add macro). When moving to custom hardware, add an
appropriate profile to Compiler.h. YOUR_BOARD is present as a placeholder.
4. Added Ethernet PICtail Plus schematic (reference ENC28J60 daughter card design for
Explorer 16 demo board). These boards have a Microchip part number of AC164123.
5. Latest ENC28J60 rev. B5 errata workarounds added. The code checks the EREVID
register and implements the appropriate workarounds as needed for the silicon
revision, so rev. B1, B4, and B5 are all supported in this stack release.
6. Significantly revised demonstration web page content in WebPages folder to use
AJAX technology. Using asynchronous JavaScript code executing in the web browser,
the status sections of the page are updated rapidly from the web server without
doing a full page refresh. As a result, a virtually real time update of the
potentiometer and button values can be displayed. Due to the constant use of new
TCP sockets, multiple simultaneous users are not recommended. See the Index.cgi
file for a simple static method of retrieving dynamic variables from the HTTP
server.
7. Changed IP Gleaning procedure. Now, if DHCP is enabled, the DHCP module will
continue to look for a new IP address/renew existing IP address if the IP address
is configured using IP Gleaning. Previously, the DHCP module would be disabled
once a successful ICMP packet was received and used to configure the IP address.
8. MAX_RETRY_COUNTS is 3 (previously it was 3, but an interim release changed it to 5).
9. Updated TCP state machine. It now includes the TCP_FIN_WAIT_2 state. Some other
changes were made to handle errors more robustly.
10.AN0String and AN1String now return all characters excluding the null terminator
when the HTTP server calls HTTPGetVar (except when the string is 0 length).
Previously, the null terminator was returned as well.
11.Dynamic pages (ie: .cgi files) are now served with an expired HTTP header to
prevent browser caching and allow more dynamic content to be displayed.
12.Support for the HI TECH PICC18 compiler has changed. Special Function Register
bits and other definitions have changed substantially from the previous HI TECH
PICC18 projects in TCP/IP stack version 3.02 and earlier. The C18/C30 SFR and
SFRbits naming conventions are now used and special remapping macros in Compiler.h
are used to maintain a consistent syntax. The HI TECH PICC18 projects were tested
with compiler version 9.50PL1 on the HPC Explorer board (PIC18F8722).
13.FTP client hash printing has been added to the FTP server. Now, whenever a chunk
of data is successfully uploaded to the device, a '#' character will appear on the
FTP client screen. The numbers of bytes each '#' represents is variable.
14.To improve maintainability, built in support for the "Compatible" A/D converter
present on older PIC18 parts (ex: PIC18F452) has been removed.
15.Removed old LCD code originally provided for the PICDEM.net demo board.
16.Added LCDBlocking.c and LCDBlocking.h, which implement simple routines for writing
to the LCD module on the Explorer 16 and PICDEM.net 2 development boards. The LCD
on the dsPICDEM 1.1 board is not supported. The stack version and IP address are
shown on the LCD on power up.
17.UART functions in MainDemo.c were replaced with C18 and C30 peripheral library
functions. However, because the UART peripheral libraries are not being updated
for newer silicon devices, the code was copied into UART.c and is compiled with
the stack.
18.Multiple TX buffer support has been implemented. Most stack layers have been
touched. ENC28J60.c has the most extensive changes. Each socket may use only one
TX buffer.
19.Implemented TCP retransmission support regardless of if TCP_NO_WAIT_FOR_ACK is
defined or not.
20.TCP_NO_WAIT_FOR_ACK in StackTsk.h has been undefined by default. This should
increase default TCP connection robustness. Packets sent from the stack to the
remote node will now be detected and retransmitted if lost or corrupted.
21.All TCP packets are now retransmitted immediately after being initially transmitted
when TCP_NO_WAIT_FOR_ACK is undefined. This improves throughput greatly when
communicating with systems which wait a long time before transmitting ACKs. TCP/IP
stacks, such as that used by Microsoft Windows, implement the TCP Delayed
Acknowledgement algorithm, which is why this retransmission is necessary for high
performance. The double transmission feature can be disabled in the Microchip
TCP/IP stack by defining "DEBUG" either in the TCP.c file or the project compiler
macros section. Using DEBUG mode can be useful when trying to look for errors
using Ethreal [ http://www.ethereal/ ].
22.Lowered TCP_START_TIMEOUT_VAL from 60 seconds to 3 seconds. 60 seconds is an
unreasonably long timeout for modern day network speeds.
23.Native support for the SLIP module has been dropped.
Fixes:
1. A new IP address obtained via IP Gleaning will now update the LCD (if present),
invoke the Announce module (for MCHPDetect.exe), and output the new address out
the RS232 port.
2. DHCP client will now correctly use the first DHCP offer received when connected
to a network running multiple DHCP servers. Previously, the board would get no
IP address when attached to a network with multiple DHCP servers (unless the DHCP
request was transmitted before a second DHCP offer was received -- a relatively
rare event). Additionally, DHCPLeaseTime does not get reset to 60 seconds or
the value stored in the last DHCP packet received prior to receiving the ACK.
3. UDPProces() will now correctly process received UDP packets that have a 0x0000
checksum field. The UDP protocol specifies that 0x0000 means the checksum is
disabled. Packets with a 0x0000 checksum were previously thrown away unless the
calculated checksum also happened to be 0x0000.
4. The TCPIsPutReady() function will now honor the remote node's TCP window size. In
other words, if the remote application pauses or cannot handle the incoming data
rate, the TCP flow control feature will correctly function. Previously, if the
remote node ran out of incoming buffer memory, the TCP layer would still allow
more data to be transmitted. This would result in the loss or corruption of
application data, with a potentially broken connection. The change requires 2 more
bytes of RAM per TCP socket (TCB array).
Known Problems:
1. On PICDEM.net 2 board ENC28J60 and 25LC256 EEPROM share the same SPI1 module. At
3.3V, the 25LC256 is only rated to 5MHz SPI clock, but the code is setting it to
10.4MHz because the MACInit() function reconfigures the same SPI1 module.
2. DHCP will continually send out DHCP Request packets when the lease expires and the
original DHCP server that gave the lease is offline. The board will continue to
use the expired IP address until the DHCP server comes back online, at which point
the lease will be renewed or a new discovery will occur. A new discovery should
occur after timing out, instead. It is believe that this problem has always
existed in previous stack revisions.
3. DHCP will continually send out DHCP Request packets when the lease expires and the
original DHCP server that gave the lease does not include Option 54, the Server
Identifier. A new discovery should occur after timing out. It is believe that
this problem has always existed in previous stack revisions.
4. The MPFS utility has not been updated. When creating a .c image file, the include
path for the Compiler.h file will be incorrect and need to be manually updated to
"..\Include\Compiler.h".
5. When an MPFS .c image file is added to a C30 project, a linking error reporting
insufficient contiguous .const memory may occur when too much data is in the MPFS
image (PSV window size limitation). Using the PSV window, 1 out of every 3 program
memory bytes is wasted.
6. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested
and possibly do not work.
7. SNMP, TFTPc modules have not been tested with this version.
8. Serial numbers >32K will be displayed on the serial port as a negative value when
C18 is used and the board is placed in configuration mode (RB0 button is depressed
on power up).
9. IP Gleaning may not get disabled when, through the RS232 configuration application,
DHCP and IP Gleaning are disabled.
10.The C30 linker may misplace the __CONFIG2 section or disallow usage of MPFS images
that are too big (add too much to the .const code section). The consequences of
this are that the first configuration word at 0x157FC may not get set through code
(must use the Configuration Bits dialog instead), and/or the project will not
compile. This problem has been observed with C30 ver. 2.02 on the PIC24FJ128GA010
product. To work around this problem, the p24FJ128GA010.gld linker script has
been modified. Specifically, line 68 has been commented out, which causes the
linker to place all .text sections after placing all absolute sections. SSR 25966
in the C30 2.02 release notes may be related.
Guiding Notes:
1. To change processors using a C18* project:
-Change the processor in the MPLAB IDE
-Change linker script (ex: 18f87j10i.lkr) in the MPLAB project. Use *i.lkr
if the ICD2 is going to be used to debug with.
-Update the hardware definitions in Compiler.h or change your demo board
selection macro. (Project -> Build Options... -> Project -> MPLAB Cxx ->
PICDEMNET2, etc)
2. To change processors using a HTC18* project:
-Change the processor in the MPLAB IDE
-Update the hardware definitions in Compiler.h or change your demo board
selection macro. (Project -> Build Options... -> Project -> MPLAB Cxx ->
PICDEMNET2, etc)
3. To change processors using a C30* project:
-Change the processor in the MPLAB IDE
-Change linker script (ex: p33FJ256GP710.gld) in the MPLAB project.
-Update the hardware definitions in Compiler.h or change your demo board
selection macro. (Project -> Build Options... -> Project -> MPLAB Cxx ->
DSPICDEM11, etc)
-Disable JTAG configuration fuse, if enabled
4. When using the PICDEM.net 2 board, to write code targeting the PIC18F97J60 family
Ethernet module:
-Remove ENC28J60.c from the project
-Add ETH97J60.c to the project
-Plug the Ethernet cable into the left-most RJ45 jack (next to LCD)
5. When using the PICDEM.net 2 board, to write code targeting the ENC28J60 Ethernet
device:
-Make sure ENC28J60.c is in the project
-Make sure that ETH97J60.c is not in the project
-Plug the Ethernet cable into the right-most RJ45 jack (next to board edge)
6. When using the PICDEM.net 2 board, to write code targeting an Ethernet PICtail
module (ENC28J60):
-Make sure ENC28J60.c is in the project
-Make sure that ETH97J60.c is not in the project
-Make sure that the Ethernet PICtail J9 jumper is in the 2-3 position (default).
-Properly update the hardware profile in Compiler.h. ENC_CS_TRIS and ENC_CS_IO
need to be changed from D3 to B3.
-Plug the Ethernet cable into the PICtail
-Plug power into the PICDEM.net 2 board
7. When using the Explorer 16 and Ethernet PICtail Plus demo boards, make sure to mate
the PICtail to the motherboard using the topmost socket position, leaving the cable
hanging over prototyping area. If SPI2 is desired, the PICtail should have the
same orientation but be installed in the middle slot. Using SPI2, the hardware
profile will need to be updated in Compiler.h.
********
v3.50 13 April 2006
********
Changes:
1. Improved dsPIC33F and PIC24H support. UART functions are included now instead of
precompiled object files for the PIC24F. The 12-bit A/D converter is now shown in
use on the demo web content. When changing a C30 project to a PIC24H or dsPIC33F
processor on the Explorer 16 demo board, the JTAG configuration fuse should be
disabled to free the I/O pins associated with it. JTAG is enabled by default.
2. Added LCDBlocking.c and LCDBlocking.h, which implement simple routines for writing
to the LCD module on the Explorer 16 development board. The stack version and IP
address are shown on the LCD on power up.
3. Added "C18ProgramMem" and "C30ProgramMem" MPLAB projects for MPFS storage (web page
content) on on-chip program memory. These projects are equivalent to the previously
named "mpnicpg" project in prior stack releases.
4. Multiple TX buffer support has been implemented. Most stack layers have been
touched. ENC28J60.c has the most extensive changes. Each socket may use only one
TX buffer.
5. Implemented TCP retransmission support when TCP_NO_WAIT_FOR_ACK is undefined.
6. TCP_NO_WAIT_FOR_ACK in StackTsk.h has been undefined by default. This should
increase default TCP connection robustness.
7. All TCP packets are now retransmitted immediately after being initially transmitted
when TCP_NO_WAIT_FOR_ACK is undefined. This improves throughput greatly when
communicating with systems which wait a long time before transmitting ACKs.
8. Lowered TCP_START_TIMEOUT_VAL from 60 seconds to 3 seconds.
9. Increased MAX_RETRY_COUNTS from 3 to 5 times.
10. The example HTTP server now returns a content expiration date which has already
past. This prevents web browser caching and allows more dynamic content to be
displayed.
11. Added WebPages_JScript folder, with new web pages that support dynamic page updates
without a full page reload. A tiny page of dynamic variables is returned by the
web server and Javascript executing on the target web browser changes DOM elements
as needed. Button S5 (RA7) on the Explorer 16 demo board and S1 (RB0) on the HPC
Explorer demo board changes the page color scheme. The rapid dynamic updates do
not work on some web browsers (Internet Explorer works, Firefox does not).
Known Problems:
1. MPFS utility has not been updated. When creating a .c image file, the include path
for the compiler.h file will be incorrect and need to be manually updated.
2. When an MPFS .c image file is added to a C30 project, a linking error reporting
insufficient contiguous .const memory may occur (PSV window size limitation).
3. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and
possibly do not work.
4. SNMP, TFTPc, SLIP modules have not been tested with this version.
5. Serial numbers >32K will be displayed on the serial port as a negative value when
C18 is used and the board is placed in configuration mode (RB0 button is depressed
on power up).
6. IP Gleaning may not get disabled when, through the RS232 configuration application,
DHCP and IP Gleaning are disabled.
7. The IP address being outputted out the RS232 port and through the Announce module
does not happen when the IP address is configured using IP Gleaning.
8. On the PIC24F with C30 compiler optimizations enabled (such as Option 3, maximum
speed), the project may not work. The PIC24F headers that come with C30 ver. 2.01
declare several SFRs without using the volatile keyword.
9. dsPIC30 support is incomplete. Currently PIC18, PIC24F, PIC24H, and dsPIC33F
processors are supported.
********
v3.16.00: 06 March 2006
********
Changes:
1. Added unified support for both the Microchip C18 and C30 compilers. The intention
is to allow one code base to be compiled for any PIC18, PIC24F/H, dsPIC30, or
dsPIC33 product (with adequate memory). See the "Tested Using" section for what is
known to work.
2. To improve maintainability, support for the HI-TECH PICC18 compiler has been
dropped.
3. New project workspaces have been created, "C30EEPROM.mcw" and "C18EEPROM.mcw".
C18EEPROM.mcw is equivalent to the previously named "mpnicee.mcw." C30EEPROM is
intended to be used for PIC24 and dsPIC 16-bit controllers.
4. Source files have been split into separate directories.
5. Latest ENC28J60 rev. B5 errata workarounds added. The code checks the EREVID
register and implements the appropriate workarounds as needed for the silicon
revision, so rev. B1, B4, and B5 are all supported in this stack release.
6. Removed old LCD code originally provided for the PICDEM.net demo board.
7. To improve maintainability, built in support for the "Compatable" A/D converter
present on older PIC18 parts (ex: PIC18F452) has been removed.
8. UART functions in MainDemo.c were replaced with C18 and C30 peripheral library
functions.
Tested Using:
1. Software:
-MPLAB version 7.31.01
-C18 version 3.02
-C30 version 2.01
2. Hardware:
-PICDEM HPC Explorer rev. 4 (PIC18F8722) + Ethernet PICtail Daughter Board (ENC28J60
B1)
-Explorer 16 rev. 4 (PIC24FJ128GA010 ES and dsPIC33FJ256GP710 ES) + Ethernet PICtail+
Daughter card (ENC28J60 B1).
3. Notes:
-MPLAB 7.31.01 is a development build. The publicly available version 7.31
should work fine, with the exception of being unable to program dsPIC33 and PIC24H
parts with the ICD 2.
-No dsPIC30 or PIC24H parts have been tested yet.
Known Problems:
1. MPFS utility has not been updated. When creating a .c image file, the include path
for the compiler.h file will be incorrect and need to be manually updated.
2. When an MPFS .c image file is added to a C30 project, a linking error reporting
insufficient contiguous .const memory may occur.
3. On the PIC24FJ128GA010, it is observed that some inbound packets are lost from time
to time with no anticipated reason.
4. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and
possibly do not work.
5. SNMP, TFTPc, SLIP modules have not been tested with this version.
6. Serial numbers >32K will be displayed on the serial port as a negative value when
C18 is used and the board is placed in configuration mode (RB0 button is depressed
on power up).
7. IP Gleaning may not get disabled when, through the RS232 configuration application,
DHCP and IP Gleaning are disabled.
8. The IP address being outputted out the RS232 port and through the Announce module
does not happen when the IP address is configured using IP Gleaning.
9. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c.
Stack behavior when TCP_NO_WAIT_FOR_ACK is undefined may be unexpected.
********
v3.02.00: 20 Feb 2006
********
Fixes:
1. Changed TXSTART in ENC28J60.c to stop wasting a byte.
2. Changed RXSTOP in ENC28J60.c to always be an odd value to properly implement an
ENC28J60 silicon errata workaround.
3. Changed initialization of ERXRDPT in MACInit() to agree with the current errata.
Changes:
1. Licence agreement
2. Schematics and other board files to the Ethernet PICtail Daughter Board have been
updated to revision 5. Of significant note, the nRESET pin has been freed and
200 ohm resistors were added to the ENC28J60 SI, nCS, and SCK pins. The added
resistors reduce undershoot caused by stray trace inductance and strong host output
drivers.
Known Problems:
1. Testing on the PICDEM.net demo board with the Realtek RTL8019AS Ethernet controller
has not been done. Moving to the HPC Explorer demo board has resulted in pinout
and other hardware changes.
2. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and
possibly do not work.
3. SNMP, TFTPc, LCD, SLIP modules have not been tested with this version.
4. The stack may behave incorrectly if compiled using the Hitech compiler with a high
optimizations setting.
5. Serial numbers >32K will be displayed on the serial port as a negative value when
C18 is used and the board is placed in configuration mode (RB0 button is depressed
on power up).
6. IP Gleaning may not get disabled when, through the RS232 configuration application,
DHCP and IP Gleaning are disabled.
7. The IP address being outputted out the RS232 port and through the Announce module
does not happen when the IP address is configured using IP Gleaning.
8. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c.
Stack behavior when TCP_NO_WAIT_FOR_ACK is undefined may be unexpected.
********
v3.01.00: 18 Jan 2006
********
Fixes:
1. Implemented latest ENC28J60 silicon errata workarounds.
2. Fixed a bug in TCP.c and UDP.c which would incorrectly write the packet checksum
into the RX buffer incorrectly when the checksum field was exactly spanning the RX
wrapparound boundary in the ENC28J60. This problem would have caused packets to be
discarded in rare circumstances
Known Problems:
1. Testing on the PICDEM.net demo board with the Realtek RTL8019AS Ethernet controller
has not been done. Moving to the HPC Explorer demo board has resulted in pinout
and other hardware changes.
2. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and
possibly do not work.
3. SNMP, TFTPc, LCD, SLIP modules have not been tested with this version.
4. The stack may behave incorrectly if compiled using the Hitech compiler with a high
optimizations setting.
5. Serial numbers >32K will be displayed on the serial port as a negative value when
C18 is used and the board is placed in configuration mode (RB0 button is depressed
on power up).
6. IP Gleaning may not get disabled when, through the RS232 configuration application,
DHCP and IP Gleaning are disabled.
7. The IP address being outputted out the RS232 port and through the Announce module
does not happen when the IP address is configured using IP Gleaning.
8. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c.
Stack behavior when TCP_NO_WAIT_FOR_ACK is defined may be unexpected.
********
v3.00.00: 16 Jan 2006
********
Changes:
1. The stack now targets the PICDEM HPC Explorer demo board (PIC18F8722 MCU) with an
attached Ethernet PICtail Daughter Board (with the Microchip ENC28J60 Ethernet
controller).
2. IP Gleaning is no longer enabled (STACK_USE_IP_GLEANING is not defined) by any of
the default project files.
3. The IP address, whenever it changes, is outputted out the RS232 serial port in
human readable form. Any terminal program, such as HyperTerminal can be used to
read it. This allows the IP address to be easily determined when DHCP is used.
The serial port defaults to 19200 baud when CLOCK_FREQ in Compiler.h is properly
defined.
Additions:
1. Microchip ENC28J60 Ethernet controller support. Support is included through the
ENC28J60.c and ENC28J60.h files. Various other files were modified to take
advantage of ENC28J60 specific features, like the hardware DMA/IP checksum engine.
This new MAC driver incorporates several new functions which can be called from any
layer above the MAC. The functions are:
MACSetDuplex()
MACPowerDown()
MACPowerUp()
MACSetPMFilter()
MACDisablePMFilter()
CalcIPBufferChecksum()
MACCalcRxChecksum()
MACCalcTxChecksum()
MACCopyRxToTx()
See the ENC28J60.c file comments for function descriptions. The ENC28J60.c file
also incroporates TestMemory() which can do a power on self test of various hardware
functions. TestMemory() is included and used when MAC_POWER_ON_TEST is defined in
StackTsk.h. It is undefined by default. Defining it will require some program
memory.
2. Announce module. Announce.c and announce.h have been added. When included in the
project, STACK_USE_ANNOUNCE must be defined. This module will broadcast a UDP
message to port 30303 containing the local MAC address whenever the local IP
address changes. This addition is intended to facilitate device discovery on DHCP
enabled networks and eliminate the need for an RS232 connection if board
reconfiguration is not needed. To retrieve the UDP message on your computer, use
the new MCHPDetect.exe program included in the \MCHPDetect subfolder.
3. The spieeprom.c file was added to support SPI EEPROM chips for MPFS storage.
ENC28J60.c and spieeprom.c may both be included and they will share the same SPI
module.
Improvements:
1. Renamed files/edited files so that the HI-TECH compiler won't raise messages stating
that include files were spelled wrong.
2. Moved MAX_ICMP_DATA_LEN from StackTsk.c to ICMP.h file for easier maintenance.
3. Corrected STACK_USE_SIIP typo in dhcp.c file - Thanks to Gisle J.B.
4. Implemented UDP checksum logic in UDPProcess() in UDP.c file.
5. Renamed CalcTCPChecksum() in tcp.c file to CalcIPBufferChecksum().
6. Moved CalcIPBufferChecksum() to helpers.c to reuse it for UDP checksum calculation.
7. Modified UDPProcess() in UDP.c and TCPProcess() in TCP.c to include localIP as third
new parameter. This makes pseudo header checksum calculation correct in both
functions. StackTsk.h, UDP.h and TCP.h files were also modified to reflect these
changes.
8. Modified TCP.C file to include compile-time check of STACK_USE_TCP define. If it is
not defined, an error will be displayed.
9. Removed an unnecessary call to MACDiscardRx() when an IP packet is received but
fails version, options length, or header checksum tests.
10. Changed LCD code to be compile time removable by undefining USE_LCD.
Fixes:
1. IPHeaderLen in IP.c is initialized properly now when IPGetHeader() is called.
2. Under some circumstances, HandleTCPSeg() would acknowlege, but throw valid received
TCP packets away, resulting in loss of application data. An invalid comparison in
HandleTCPSeg() has been fixed to prevent this situation from occuring.
*** Thanks go to Richard Shelquist for identifying this problem.
3. Fixed StackTsk.c file so that if a static IP address is used and the LINK is
removed, the node IP address is not cleared.
4. Invalid ICMP echo replies are no longer generated for echo requests with a data
length of 33 (one more than the configured maximum).
5. Changed MAX_OPTIONS_LEN from 20 to 40. The maximum IP options length is now in
agreement with the IP RFC.
6. Changed IPSetRxBuffer() from a macro to a function. The function takes into
account any options which may be present in the header of received IP packets.
Previously, possible options were not taken into account when calculating the
offset.
Known Problems:
1. Testing on the PICDEM.net demo board with the Realtek RTL8019AS Ethernet controller
has not been done. Moving to the HPC Explorer demo board has resulted in pinout
and other hardware changes.
2. Sometimes when the FTP sever is used, an attempt to put a file is unsuccessful.
The problem may be caused when an HTTP request to GET a file is made at the wrong
time.
3. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and
possibly do not work.
4. SNMP, TFTPc, LCD, SLIP modules have not been tested with this version.
5. The stack may behave incorrectly if compiled using the Hitech compiler with a high
optimizations setting.
6. Serial numbers >32K will be displayed on the serial port as a negative value when
C18 is used and the board is placed in configuration mode (RB0 button is depressed
on power up).
7. IP Gleaning may not get disabled when, through the RS232 configuration application,
DHCP and IP Gleaning are disabled.
8. The IP address being outputted out the RS232 port and through the Announce module
does not happen when the IP address is configured using IP Gleaning.
9. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c.
Stack behavior when TCP_NO_WAIT_FOR_ACK is defined may be unexpected.
********
v2.20.04.01: 9/24/03
********
1. Recreated MPLAB projects to avoid problems when source is not at \MCHPStack location.
********
v2.20.04: 9/5/03
********
Fixes:
1. Modified DHCPReset() in DHCP.c to not reset DHCP state machine if it was previously
disabled using DHCPDisable(). This would make sure that if DHCP module was enabled
and application had run-time disabled DHCP and network cable is disconnected,
stack will not clear its IP address.
2. Rebuilt mib2bib.exe file with static library options. This fixes problem where
one tries to execute this exe, an error occurs about missing DLLs.
********
v2.20.03:
********
Improvements:
1. When DHCP is enabled, LINK is monitored and IP address is reset on disconnect.
New IP configuration is obtained on LINK reconnect. - For RealTek only.
Modified DHCP.c to add DHCPReset()
Modified MAC.c to add MACIsLinked()
Modified StackTsk.h to add BYTE_VAL def.
Changes:
1. Modified SMSC91c111.c to add empty MACIsLinked() - will be populated in next rev.
Bug Fixes:
1. Corrected DHCP logic to accept first DHCP offer instead of second response.
2. Corrected DHCP logic to check for chaddr in DHCP offer and accept one that
matches with local MAC address. This will fix problem where if multiple
nodes were on bus and all requested DHCP address, all would accept response
from one server instead of verifying who was intended node.
3. Fixed UDPClose() in UDP.c to use INVALID_UDP_PORT instead of INVALID_UDP_SOCKET
because of which a closed socket would not be scanned correctly.
4. Modified UDP.h to use long contsant designators for INVALID_UDP_OPRT
to explicitly state that it is a long.
********
v2.20.02:
********
Beta version containing TFTP client module.
Addition:
1. TFTP Client module - See TFTPc.* and TFTPcDemo.c for more information.
See MpTFTPcDemo and HtTFTPcDemo projects for build information.
Bug Fix:
1. UDPIsGetReady() was modified to overcome compiler rule where only 8-bit value was
used to evaluate non-zero condition.
2. ARPResolve() in ARPTsk was fixed to clear Cache.IPAddr value.
********
v2.20.01:
********
Bug fix:
1. Fixed SMSC91C111.c where MACInit() would hand if ethernet link is not detected.
********
v2.20:
********
Bug Fixes:
1. General - Removed most of harmless warnings.
2. C18Cfg.asm - Fixed "include" instead of "define".
3. DHCP.c - Increased DHCP_TIMEOUT_VAL to 2 seconds.
Fixed problem where UDP active socket was not set before calling UDP
functions
in SM_DHCP_BROADCAST state.
4. MAC.c - Fixed MACIsTxReady() where under heavy traffic it would always return
FALSE.
This fixes bug where all high level applications would stop
transmitting.
5. TCP.c - Enabled portion of code that performs timeout logic even if
TCP_NO_WAIT_ACK
is defined. This fixes bug where occasionally, tcp applications such as
HTTP server would stop working after few hours.
6. UDP.c - Fixed UDPGet() where it would return FALSE on last good byte.
Fixed UDPProcess() where it was calculating incorrect length.
Added bFirstRead flag with UDP sockets similar to TCP sockets
so that whenever first UDP byte is read, MAC read pointer will be
reset to begining of correct packet.
This change fixes problem where if one transmits a packet while
UDP packet is pending in a socket, next get to pending UDP socket would
return wrong data. (This is apparent only when there is heavy network
traffic)
Known Issues:
1. HiTech v8.20 PL4 with all optimization enabled may not work properly.
2. C18 "Static" and "Auto" mode may not be used - there are too many local variables to
fit
in standard stack of 256 bytes. One may modify linker script file to avoid this
limitation.
Improvements:
1. Modified TICK def. in Tick.h to unsigned long to support 32-bit wide SNMP tick.
2. Added SNMP Module (SNMP.c)
3. Added Two new demo projects - DemoSNMPApp and HtDemoSNMPApp.
4. Created MPLAB 6.X projects for different demo configurations.
5. MAC.c - Added MACGetTxOffset().
6. MPFS.c - Added MPFSSeek(), MPFSTell().
7. MPFSImg.*- Rebuilt to reflect v2.20, footprint changes etc.
8. StackTsk.h- Enhanced WORD_VAL, DWORD_VAL defs.
Added STACK_USE_SNMP and related compile-time checks.
9. UDP.h - Added UDPSetTx and UDPSetRx macros.
Moved UDP_SOCKET_INFO structure to header file.
10. WebSrvr.c- Modifed MCHPStack version message and added DATE info to BoardSetup
menu.
11. Added support for SMSC LAN91C111 10/100 Non-PCI ethernet controller
Use "SMSC91C111.C" instead of MAC.c.
"mpnicee_smsc" is a sample project that uses PIC18F8720 and SMSC NIC.
"MasterDemo.c" is a main source file for above project that includes
all modules - must use device with more than 32KB of memory.
********
v2.11:
********
Bug Fixes:
1. Fixed dhcp.c to make it work with new C18 startup code.
Improvements:
1. Modified websrvr.c DownloadMPFS() to make use of compiler allocated XMODEM data block
rather than use fixed address block starting at 0x400.
********
v2.10: 7/9/02
********
Bug Fixes:
1. Fixed HTTP Server bug where a form submission with empty parameter value would not
parse correctly.
********
v2.0: 5/22/02
********
********
New Modules:
********
1. Added UDP, DHCP, FTP and IP Gleaning
2. Added PICDEM.net LCD support
3. Added board setup through RS-232.
********
Improvements:
********
1. Optimized serial EEPROM access routines in terms of speed and size
(Replaced ee256.* files with eeprom*.h)
2. Improved board setup through RS-232.
********
Known Issues:
********
1. LCD may not display properly on MCLR only.
Workaround: 1. Debug XLCDInit() routine in "xlcdlh"
2. Always do POR reset.
2. SLIP connection is not very robust.
Workaround: None at this time.
3. Hi-Tech Compiler:
1. Aggressive optimization breaks the functionality.
Workaround: Apply optimization listed in each source file comment
header.
2. In order to use V8.12, you will need to remove "FTP Server" from
Ht*.pjt.
You will also need to disable all optimizations.
4. C18 Compler: 1. Static model does not compile.
Workaround: None at this time.
2. Overlay model breaks the functionality.
Workaround: None at this time.
3. All modules does not fit in 32KB memory.
Workaround: 1. None at this time.
2. Sample project disables some modules.
********
New Files:
********
========================================================================================
====================================
File Purpose
========================================================================================
====================================
1. delay.* Provides CLOCK_FREQ depenent delay routines.
2. dhcp.* DHCP client support
3. ftp.* FTP server
4. udp.* UDP socket support
5. xeeprom.* Improved ee256.* and renamed.
6. xlcd.* External LCD support.
7. version.log To track changes and history.
********
Changes:
********
========================================================================================
====================================
File Change
To-do for v1.0 stack applications
========================================================================================
====================================
1. arptsk.c 1. Fixed STACK_CLIENT_MODE compile errors.
None
2. Modifed ARPIsResolved() to support IP Gleaning
None
2. c18cfg.asm 1. Added PIC18F452 configuration
None
2. Fixed "include" errors.
None
3. compiler.h 1. Included "stdlib.h" in both C18 and Hi-Tech compilers.
None
2. Moved CLOCK_FREQ from "stacktsk.h" to this file.
None
3. Added PORTA defs.
None
4. htnicee.pjt 1. Removed "ee256.c".
None
2. Added "udp.c", "dhcp.c", "ftp.c", "xlcd.c", "xeeprom.c" files
Add these files if needed.
5. htnicpg.pjt None
6. htslee.pjt 1. Removed "ee256.c".
None
2. Added "ftp.c", "xlcd.c", "xeeprom.c" files
None
7. http.c 1. Included compile-time verification that HTTP module is included.
None
2. Put HTTP message strings into one array "HTTPMessages".
None
3. Modified to return "Service Unavailable" message if MPFS is being
None
remotely programmed.
4. Modified SendFile() to make use of sequential EEPROM read.
None
8. ip.c 1. Added one more paramter to IPGetHeader() to support IP Gleaning
Custom apps using IP needs to be
modified.
9. mac.c 1. Replaced fixed delay routines with CLOCK_FREQ dependent
None
routines
10. mpfs.c 1. Replaced ee256.h with xeeprom.h.
None
2. Added MPFSFormat(), MPFSPut() etc. routines
None
3. Added sequential read and page write operations
Custom apps using MPFS directly
needs to be modified.
4. Defined MPFS_WRITE_PAGE_SIZE for MPFSPut operations.
Apps using different EEPROM page size
needs to be modified.
11. mpnicee.pjt 1. Removed "ee256.c"
None
2. Added "xcld.c", "xeeprom.c" files
None
12. stacktsk.c 1. Replaced ee256.h with xeeprom.h
None
2. Added IP Gleaning and DHCP support.
None
13. stacktsk.h 1. Moved CLOCK_FREQ to compiler.h
None
2. Added STACK_USE_DHCP, STACK_USE_FTP_SERVER etc. options
None
3. Added compile-time enable/disable of modules based on selection
of higher level modules.
None
4. Modified MY_DEFAULT_MAC_BYTE? to use Microchip OUI id.
None
5. Added compiler-time check to confirm available TCP sockets
None
6. Added MSB and LSB macros.
None
7. Added SerialNumber etc. to AppConfig structure
None
8. Commented module selection defines: They are defined by cmopiler
None
command-line options.
Real application should define them here in this file.
14. tcp.c 1. Moved TCP_STATE and TCP_INFO to .h file.
None
2. Fixed TCPIsConnected()
None
3. Fixed TCPDisconnect()
None
4. Modified TransmitTCP() to set receive window of one segment
None
5. Modified TransmitTCP() to use max segment size equal to
predefined value.
None
6. Improved TCP State machine
None
15. tick.c 1. Modified TICK type to 16-bit.
None
2. Made use of TICK_PRESCALE_VALUE
None
3. Added code to blink PICDEM.net "System LED"
Remove if not required.
16. websrvr.c 1. Added LCD support
N/A
2. Made TickUpdate() on Timer0 interrupt
N/A
3. Added code to save/restore board configuration
N/A
4. Added board setup via RS-232.
N/A
5. Added call to FTP modules
If needed, add this.
|