1 |
********
|
2 |
Microchip TCP/IP Stack Version Log:
|
3 |
********
|
4 |
|
5 |
Note: Please file bug-reports/bug-fixes at http://support.microchip.com/ or post
|
6 |
to the Microchip TCP/IP -> Ethernet Forum at http://forum.microchip.com/
|
7 |
Look for stack updates at http://www.microchip.com/tcpip/
|
8 |
|
9 |
********
|
10 |
v4.02 10 April 2007
|
11 |
********
|
12 |
IMPORTANT NOTE: You must use MPLAB 7.41 or higher to successfully open the
|
13 |
MPLAB projects.
|
14 |
IMPORTANT NOTE2:If an external serial EEPROM memory is used to store AppConfig,
|
15 |
it's contents will be invalidated the first time you run this
|
16 |
version, restoring the AppConfig defaults. The AppConfig
|
17 |
structure has been optimized.
|
18 |
IMPORTANT NOTE3:If an external serial EEPROM memory for MPFS, you will need to
|
19 |
recreate the MPFS image and program your EEPROM. A 32 bit
|
20 |
addressing format is now used.
|
21 |
|
22 |
Changes:
|
23 |
1. Implemented TCP RX packet order correction logic. The stack can now accept
|
24 |
TCP frames that arrive out-of-order without requiring the remote node to go
|
25 |
through a retransmit cycle. This dramatically improves RX performance when
|
26 |
communicating over the Internet.
|
27 |
2. UDPOpen() now can handle a NULL pointer for remoteNode. In this case, the
|
28 |
broadcast IP/MAC addresses will be used for the remoteNode (destination
|
29 |
address of outbound packets).
|
30 |
3. Recreated MPLAB projects for the HI-TECH PICC-18 compiler. These were
|
31 |
temporarily absent from 4.00RC. This project works with the PIC18F97J60
|
32 |
with internal Ethernet module, assuming the correct compiler version is
|
33 |
present.
|
34 |
4. Moved all the headers around. Most of them are in
|
35 |
"Microchip Solutions\Microchip\Include\TCPIP Stack" now. This change was
|
36 |
made to again be more compatible with other (future) Microchip software
|
37 |
libraries.
|
38 |
5. New UDPPut() behavior. Now, if space in the Ethernet TX buffer runs out,
|
39 |
the packet will not automatically be transmitted. You must call UDPFlush()
|
40 |
to cause the packet to be transmitted.
|
41 |
6. Added UDPGetArray(), UDPPutArray(), UDPPutROMArray(), UDPPutString() and
|
42 |
UDPPutROMString() user API functions. These functions perform substantially
|
43 |
better than calling UDPPut() successively and allow greater application
|
44 |
programming flexibility.
|
45 |
7. Changed TCPPutString() and TCPPutROMString() APIs to now return an updated
|
46 |
string pointer instead of a count of bytes successfully placed in the TX
|
47 |
buffer.
|
48 |
8. Added UDPPerformanceTest.c. By default this module causes UDP packets
|
49 |
containing 1024 bytes of application data to be broadcasted on UDP port
|
50 |
12345. Use a packet sniffer, such as Wireshark (http://www.wireshark.com/)
|
51 |
to capture and derive stack overhead/UDP TX performance characteristics with
|
52 |
this module. Note that this test uses the UDPPutROMArray() function.
|
53 |
Applications which use successive calls to UDPPut() will be slower. To
|
54 |
enable this module, #define STACK_USE_UDP_PERFORMANCE_TEST in TCPIPConfig.h.
|
55 |
9. Added TCPPerformanceTest.c. By default this module listens on TCP port
|
56 |
12345. When a remote client connects, this server module will being
|
57 |
transmitting the maximum possible amount of application data that it can,
|
58 |
given your TCP TX FIFO size. Use a packet sniffer, such as Wireshark
|
59 |
(http://www.wireshark.com/) to capture and derive stack overhead/TCP TX
|
60 |
performance characteristics with this module. Any TCP client can be used,
|
61 |
including readily available utilities such as the telnet.exe utility
|
62 |
available on Microsoft Windows XP. To use it to connect to the test module,
|
63 |
run: "telnet.exe xxx.xxx.xxx.xxx 12345" where xxx.xxx.xxx.xxx is the board's
|
64 |
IP address. Note that this test uses the TCPPutROMArray() function.
|
65 |
Applications which use successive calls to TCPPut() will be slower. To
|
66 |
enable this module, #define STACK_USE_TCP_PERFORMANCE_TEST in TCPIPConfig.h.
|
67 |
10.Added Reboot.c module. By default, this module listens on UDP port 30304.
|
68 |
If the application byte 0x00 arrives on this port, the PIC will reset. This
|
69 |
is primarily useful for remote Bootloader entry.
|
70 |
#define STACK_USE_REBOOT_SERVER in TCPIPConfig.h to enable this module.
|
71 |
Note that since no encrypted challenge/response algorithm is currently
|
72 |
implemented, this module is a Denial of Service vulnerability, so it should
|
73 |
not be enabled unless there is a specific need for it.
|
74 |
11.Made the TickUpdate() ISR routine execute in the low priority ISR instead of
|
75 |
the default high priority ISR. The Microchip TCP/IP stack does not need any
|
76 |
interrupts except this low priority timer.
|
77 |
12.Renamed STACK_USE_DHCP macro to STACK_USE_DHCP_CLIENT
|
78 |
13.Added STACK_USE_MPFS macro.
|
79 |
14.Changed UDPIsPutReady() to return a WORD instead of a BOOL. The WORD is the
|
80 |
number of bytes that can be put into the buffer.
|
81 |
15.Changed MACGetArray() to accept a NULL pointer. If NULL, the retrieved data
|
82 |
will simply be discarded. This also changes the behavior of UDPGetArray()
|
83 |
and TCPGetArray() to match, throwing bytes away if a NULL pointer is given.
|
84 |
16.Added a very simple DHCP Server module. This module has limitations and is
|
85 |
useful for a single client only. Its purpose is to allow you to directly
|
86 |
connect the board to a standard PC through a crossover cable (no other
|
87 |
network nodes attached). The server is coded to automatically disable
|
88 |
itself if the DHCP client is also enabled and another DHCP server is
|
89 |
detected on the network. This allows both the DHCP server and DHCP client
|
90 |
to coexist without any manual reconfiguration.
|
91 |
17.Added DNSResolveROM() function for resolving host names that are stored in
|
92 |
program memory, ex: literal strings.
|
93 |
18.Added a TCP automatic transmit/window update timer. It defaults to
|
94 |
TCP_AUTO_TRANSMIT_TIMEOUT_VAL (40ms) after the first get or put operation
|
95 |
following the last automatic transmit/window update. This timer enhances
|
96 |
performance, especially when streaming data over the Internet where round
|
97 |
trip times can be several tens to low hundreds of milliseconds. This also
|
98 |
improves application coding flexibility as TCPFlush() need not be called
|
99 |
anymore.
|
100 |
19.Added TCP delayed ACKnowledgement timer. This conserves bandwidth by
|
101 |
transmitting fewer ACKs and prevents inadvertently influencing remote slow
|
102 |
start/collision avoidance and fast retransmit algorithms.
|
103 |
20.Completely rewrote ICMP (ping) server module. It is now much smaller (ROM
|
104 |
and RAM), faster, and can handle packets of 576 bytes or larger, if no IP
|
105 |
fragmentation occurs.
|
106 |
21.Rewrote StackTsk() stack manager. It is much simpler now.
|
107 |
22.Added TCPFind(), TCPFindArray(), and TCPFindROMArray() user API functions.
|
108 |
These functions peek inside a given TCP socket's RX FIFO (without removing
|
109 |
anything) and looks for a particular byte or array of bytes. This should
|
110 |
greatly simplify the creation of application code whenever variable length
|
111 |
fields are used (ex: text strings terminated by \r\n). It supports case
|
112 |
insensitive text searching or binary searching, as well as an offset to
|
113 |
start searching at.
|
114 |
23.Added TCPGetRxFIFOFree() user API. It returns the number of bytes of free
|
115 |
space in the TCP's RX FIFO.
|
116 |
24.Changed default TICK resolution to 1ms (from 10ms) and improved accuracy.
|
117 |
25.Added outbound ping capabilities (i.e. board can now ping another board or a
|
118 |
PC). To enable these features, define STACK_USE_ICMP_CLIENT. This will
|
119 |
enable several new APIs, including ICMPBeginUsage(), ICMPSendPing(),
|
120 |
ICMPGetReply(), and ICMPEndUsage(). The functions should be called in this
|
121 |
order. See the PingDemo() function in MainDemo.c for an example of how to
|
122 |
use them. By default, pushing BUTTON3 (left-most one) will cause a ping to
|
123 |
be sent to 4.78.194.159 (ww1.microchip.com). The response time will be
|
124 |
displayed on the LCD (assuming your development board has an LCD).
|
125 |
26.Cleaned up C30 3.00 signed/unsigned warnings.
|
126 |
27.Removed PIC18F97J60_TEST_BOARD hardware profile support. This stack no
|
127 |
longer supports it due to the old beta silicon (with errata) mounted on
|
128 |
these boards.
|
129 |
28.Added support for ROM pointers for all of the SMTP strings (To, From, CC,
|
130 |
Subject, etc.). If you use a ROM string, you must also set the
|
131 |
corresponding SMTPClient.ROMPointers.xxx bit to let the SMTP module know
|
132 |
which type of pointer was provided. See the SMTPDemo() code in MainDemo.c
|
133 |
for and example calling sequence using both ROM and RAM strings for the
|
134 |
various fields.
|
135 |
|
136 |
Fixes:
|
137 |
1. Fixed a critical TCP buffer corruption issue where the start of a TCB header
|
138 |
overlapped with the last byte of the RX FIFO from the previous socket. This
|
139 |
bug affected version 4.00RC only.
|
140 |
2. ETH97J60.c, TCPIP.h, and TCPIP Stack Version.txt were correctly readded to
|
141 |
the TCPIP Demo App-C18 project using relative paths instead of absolute
|
142 |
paths.
|
143 |
3. UDPOpen() now dynamically assigns a local port number if you call it and
|
144 |
give it a 0x0000 port number. This should fix some UDP applications from
|
145 |
not working (ex: DNS Client module) with some computers/routers/networks
|
146 |
which throw away traffic originating from the invalid port 0x0000 value.
|
147 |
4. Fixed a ENC28J60 bank selection error that would occur if an application
|
148 |
called GetCLKOUT() in ENC28J60. By default, this function is not called.
|
149 |
5. UnencodeURL() function in Helpers.c is now tested and working.
|
150 |
6. Fixed a TCP Window Update problem when TCPGetArray() was used. Before the
|
151 |
problem was fixed, performance could have been terrible on reception.
|
152 |
7. Fixed a unintended TCP connection close if the socket was idle for about a
|
153 |
minute. Now, TCP sockets will remain open indefinitely if there is no
|
154 |
traffic going on.
|
155 |
8. Serial numbers >32K are now displayed correctly on the serial port as a
|
156 |
positive value when C18 is used and the board is placed in configuration
|
157 |
mode (BUTTON0 is depressed on power up).
|
158 |
9. HI-TECH PICC-18 compiler would previously incorrectly initialize the
|
159 |
AppConfig structure.
|
160 |
10.Previously a processor reset was possible when accessing items in the
|
161 |
AppConfig strucutre on 16 bit MCUs (PIC24, dsPIC) due to unaligned word
|
162 |
accesses. This was fixed by reordering the Flags byte in the APP_CONFIG
|
163 |
structure.
|
164 |
11.Rewrote DHCP client state machine, fixing the previously known problem
|
165 |
where it would not perform a new discovery if it was trying to renew a lease
|
166 |
with an offline DHCP server.
|
167 |
12.Fixed a critical deadlock problem in the ETH97J60.c MAC layer driver for
|
168 |
the PIC18F97J60 family Ethernet controller. Previously, it was possible
|
169 |
(although rare) that the DMAST or TXRTS bits would get stuck set if too
|
170 |
much Ethernet traffic was received within a short interval. Previously, the
|
171 |
MACFlush() function was unnecessarily setting TXRST, which it should not do
|
172 |
while the Ethernet interface or DMA is being used.
|
173 |
13.Fixed an HTTP server state machine problem where a new connection occurring
|
174 |
too soon on a previously used socket could cause the HTTP server to no
|
175 |
longer respond.
|
176 |
14.Fixed a potential memory corruption error in the HTTPGetVar() callback
|
177 |
which would exceed the bounds of the VarString array when returning the
|
178 |
VAR_STACK_DATE variable.
|
179 |
15.Fixed a TCP transmission sequence tracking problem whenever data is
|
180 |
retransmitted and new unflushed data is also in the TX FIFO. Thanks go to
|
181 |
Matt Watkins on the Microchip Ethernet forum for identifying this issue.
|
182 |
|
183 |
Known Problems:
|
184 |
1. RTL8019AS MAC layer driver has not been updated for new TCP module. Users
|
185 |
requiring RTL8019AS support should continue to use stack version 3.75.
|
186 |
2. I2CEEPROM.c has not been tested or completed. Continue to use I2CEEPROM.c
|
187 |
from stack version 3.75 if this file is needed.
|
188 |
3. Telnet server module does not implement a lot of Telnet functions. As a
|
189 |
result, it will likely not display correctly or work at all with some Telnet
|
190 |
clients. The server was tested with the Microsoft telnet.exe utility which
|
191 |
is provided with Microsoft Windows.
|
192 |
4. TFTPc module has not been tested with this version.
|
193 |
5. The default demo web pages which use AJAX do not automatically refresh
|
194 |
themselves when viewed in Firefox 2.0.0.1. Earlier Firefox versions
|
195 |
(1.5ish) probably work without any problem.
|
196 |
6. Files may be inaccessible in your MPFS if compiled with C18 for internal
|
197 |
flash program memory and your total MPFS content is large (around 64KB or
|
198 |
larger). The code attempts to access the ROM memory using a near rom
|
199 |
pointer when a far rom pointer is needed.
|
200 |
7. If using MPLAB 7.52 all .s files that are compiled with C30 will not have
|
201 |
the corresponding object file get stored in the correct directory. As a
|
202 |
result, if you are compiling with C30 and with MPFS_USE_EEPROM not defined
|
203 |
(i.e. storing web pages in internal program memory), the project won't link
|
204 |
(throws a undefined reference to `MPFS_Start'). As a workaround, remove the
|
205 |
Intermediates Directory in the MPLAB project. Alternatively upgrade MPLAB
|
206 |
to a newer version. MPLAB IDE 7.60+ may have this fixed.
|
207 |
8. If the DHCP client and DHCP server are used at the same time and you connect
|
208 |
two similar boards to each other (ex: two PICDEM.net 2 boards connected via
|
209 |
a crossover cable), a race condition can occur where both nodes will disable
|
210 |
their DHCP server and neither board will get a successful DHCP lease. If
|
211 |
this unlikely scenario occurs, as a work around, simply reset one of the
|
212 |
boards to renable it's DHCP server.
|
213 |
9. HI-TECH PICC-18 projects may not compile when MPFS_USE_EEPROM is not
|
214 |
defined and you are trying to store web page data in internal
|
215 |
FLASH program memory.
|
216 |
10.HI-TECH PICC-18 projects may not compile when targeting the external
|
217 |
ENC28J60 chip on the PICDEM.net 2 development board (instead of the
|
218 |
internal Ethernet controller). This problem only applies when a
|
219 |
PIC18F97J60 family part is the target. I.e. it compiles correctly for the
|
220 |
HPC_EXPLORER + Ethernet PICtail.
|
221 |
|
222 |
Testing and Performance Notes:
|
223 |
1. This stack version was compiled and tested with the following tool versions:
|
224 |
-MPLAB IDE 7.52
|
225 |
-Microchip C30 version 3.00
|
226 |
-Microchip C18 version 3.10
|
227 |
-HI-TECH PICC-18 version 9.50PL3
|
228 |
2. Using the UDPPerformanceTest.c module, the stack can transmit around
|
229 |
220KBytes/second (1.75Mbits/second) of UDP application data on the
|
230 |
PIC18F97J60 with internal Ethernet @ 41.66667MHz core clock, compiled using
|
231 |
C18 3.10 with debug optimization settings.
|
232 |
3. Using the UDPPerformanceTest.c module, the stack can transmit around
|
233 |
392KBytes/second (3.14Mbits/second) of UDP application data on the
|
234 |
PIC24HJ256GP610 with external ENC28J60 @ 40 MIPS, compiled using
|
235 |
C30 3.00 with debug optimization settings.
|
236 |
4. Using the TCPPerformanceTest.c module, the stack can transmit around
|
237 |
58KBytes/second (464Kbits/second) of TCP application data on the
|
238 |
PIC18F97J60 with internal Ethernet @ 41.66667MHz core clock, compiled using
|
239 |
C18 3.10 with debug optimization settings, over Ethernet when using a tiny
|
240 |
200 byte TX TCP FIFO. Note that performance can be improved significantly
|
241 |
by increasing the FIFO size and performance will drop significantly if the
|
242 |
round trip TCP acknowledgement time is increased (ex: testing over the
|
243 |
Internet instead of Ethernet).
|
244 |
5. Using the TCPPerformanceTest.c module, the stack can transmit around
|
245 |
69KBytes/second (558Kbits/second) of TCP application data on the
|
246 |
PIC24HJ256GP610 with external ENC28J60 @ 40 MIPS, compiled using
|
247 |
C30 3.00 with debug optimization settings, over Ethernet when using a tiny
|
248 |
200 byte TX TCP FIFO. Note that performance can be improved significantly
|
249 |
by increasing the FIFO size and performance will drop significantly if the
|
250 |
round trip TCP acknowledgement time is increased (ex: testing over the
|
251 |
Internet instead of Ethernet).
|
252 |
6. Using the TCPPerformanceTest.c module, the stack can transmit around
|
253 |
178KBytes/second (1.42Mbits/second) of TCP application data on the
|
254 |
PIC24HJ256GP610 with external ENC28J60 @ 40 MIPS, compiled using
|
255 |
C30 3.00 with debug optimization settings, over Ethernet when using a larger
|
256 |
2000 byte TX TCP FIFO. Note that performance will drop significantly if the
|
257 |
round trip TCP acknowledgement time is increased (ex: testing over the
|
258 |
Internet instead of Ethernet).
|
259 |
|
260 |
|
261 |
********
|
262 |
v4.00RC 28 December 2006
|
263 |
********
|
264 |
IMPORTANT NOTE: If an external serial EEPROM memory is used to store AppConfig,
|
265 |
it's contents will be invalidated the first time you run this
|
266 |
version, restoring the AppConfig defaults. The AppConfig
|
267 |
structure has been optimized.
|
268 |
IMPORTANT NOTE2: If an external serial EEPROM memory for MPFS, you will need to
|
269 |
recreate the MPFS image and program your EEPROM. A 32 bit
|
270 |
addressing format is now used.
|
271 |
|
272 |
|
273 |
Changes:
|
274 |
1. Added Simple Mail Transfer Protocol (SMTP) client module and updated
|
275 |
MainDemo.c to exercise the Email transmission functionality when a user
|
276 |
pushes BUTTON0.
|
277 |
2. Added beta Telnet server module. See Known Problems section.
|
278 |
3. Completely revamped the TCP module. A real transmit FIFO and receive FIFO
|
279 |
are allocated for each TCP socket now. This greatly enhances RFC compliance,
|
280 |
communications robustness, and makes application development easier. New
|
281 |
APIs were added for putting and getting arrays and strings (including ROM
|
282 |
variants). Several TCP related bugs are now fixed as a result. Please
|
283 |
report any bugs found in the new implementation.
|
284 |
4. Added TCPPutArray() API.
|
285 |
5. Added TCPPutROMArray() API.
|
286 |
6. Added TCPPutString() API.
|
287 |
7. Added TCPPutROMString() API.
|
288 |
8. Added TCPGetArray() API.
|
289 |
9. Changed TCPIsPutReady() API. Instead of returning a BOOL, it now returns a
|
290 |
WORD. The WORD is a count of the number of bytes that TCPPut(),
|
291 |
TCPPutArray(), etc. can immediately place in the output buffer. MAKE SURE
|
292 |
THAT YOUR CODE DOES NOT COMPARE THE RETURN RESULT OF TCPIsPutReady()
|
293 |
DIRECTLY TO TRUE. For example, "if(TCPIsPutReady(MySocket) == TRUE){...}"
|
294 |
must be converted over to: "if(TCPIsPutReady(MySocket)){...}".
|
295 |
10.Changed TCPIsGetReady() API. Instead of returning a BOOL, it now returns a
|
296 |
WORD. The WORD is a count of the number of bytes that TCPGet() or
|
297 |
TCPGetArray() can immediately obtain. MAKE SURE THAT YOUR CODE DOES NOT
|
298 |
COMPARE THE RETURN RESULT OF TCPIsGetReady() DIRECTLY TO TRUE. For example,
|
299 |
"if(TCPIsGetReady(MySocket) == TRUE){...}" must be converted over to:
|
300 |
"if(TCPIsGetReady(MySocket)){...}".
|
301 |
11.Changed TCPDiscard() return type from BOOL to void.
|
302 |
12.Removed TCP_NO_WAIT_FOR_ACK option. It was defaulted to disabled in the
|
303 |
last two releases of the stack and is not needed with the new TCP module.
|
304 |
13.Updated DNS module to include two new required APIs: DNSBeginUsage() and
|
305 |
DNSEndUsage(). These functions control a one bit ownership semaphore to
|
306 |
allow multiple applications to use the DNS module in series. If invoked
|
307 |
correctly, this will prevent unintended bugs resulting from two applications
|
308 |
trying to use the DNS module at the same time. Old applications, such as
|
309 |
those based around the GenericTCPClient.c example must be updated to use
|
310 |
these functions.
|
311 |
14.Started using a new project structure and folders. You must use MPLAB 7.41
|
312 |
or higher (stack is tested on MPLAB 7.50) to use the default
|
313 |
workspaces/projects, which include files using relative paths. This should
|
314 |
improve compatibility with some future code libraries released by Microchip.
|
315 |
StackTsk.h was broken into TCPIPConfig.h, HardwareProfile.h, and StackTsk.h.
|
316 |
TCPIPConfig.h now includes all stack configuration options and
|
317 |
HardwareProfile.h contains all hardware options. No macros need be globally
|
318 |
defined in MPLAB project now. TCPIP.h is the only header applications must
|
319 |
include now, for any/all modules used.
|
320 |
15.Combined ARP.c/ARP.h and ARPTsk.c/ARPTsk.h into a single file pair:
|
321 |
ARP.c/ARP.h. Applications built using a prior stack revision must remove
|
322 |
all instances including "ARPTsk.h" and replace it with "ARP.h" instead. The
|
323 |
ARP module is now simpler, more linear (easier to read), and being in one
|
324 |
source file, allows the C compiler to optimize better.
|
325 |
16.Added PIC18F67J60_TEST_BOARD hardware profile to HardwareProfiles.h. This
|
326 |
hardware profile is designed for 05-60091 (Rev 1), a development board that
|
327 |
is not in production at this time.
|
328 |
17.Added DSPICDEMNET1 and DSPICDEMNET2 hardware profiles to HardwareProfiles.h
|
329 |
for eventual support of the Microchip dsPICDEM.net 1 and dsPICDEM.net 2
|
330 |
demo boards. These two boards use the RTL8019AS Ethernet controller and a
|
331 |
24LC515 EEPROM. These changes are currently incomplete and these profiles
|
332 |
cannot be used.
|
333 |
18.Began rewriting I2CEEPROM.c to support 16 bit CPUs, including the
|
334 |
dsPIC30F6014 used on the dsPICDEM.net 1 and 2 demo boards. Note that work
|
335 |
here is incomplete and cannot be used as a result -- see Known Problems
|
336 |
section.
|
337 |
19.Partially updated RTL8019AS.c to support 16 bit CPUs, including the
|
338 |
dsPIC30F6014 used on the dsPICDEM.net 1 and 2 demo board. Note that work
|
339 |
here is incomplete and cannot be used as a result -- see Known Problems
|
340 |
section.
|
341 |
20.Updated SNMP.c to use new typedefs in GenericTypedefs.h. Also SNMP was
|
342 |
tested in this version. SNMP.mib was updated some to better reflect current
|
343 |
hardware.
|
344 |
21.Added AN870 SNMP callbacks to MainDemo.c (a feature that was missing in
|
345 |
3.xx releases). This code will get compiled when STACK_USE_SNMP_SERVER is
|
346 |
defined in TCPIPConfig.h.
|
347 |
22.Removed all instances of MPFS_USE_PGRM for storing in internal FLASH program
|
348 |
memory. Storage in internal program memory is now the default. Define
|
349 |
MPFS_USE_EEPROM to override the default and store MPFS in an external EEPROM
|
350 |
memory.
|
351 |
23.Decreased program memory needed for Announce.c module by about 180 bytes.
|
352 |
Multiple inline calls to UDPPut() were removed.
|
353 |
24.UDP checksum checking logic has been improved. The UDP layer now avoids
|
354 |
writing the pseudo header checksum in the RX buffer.
|
355 |
25.Swapped endianess of the returned checksum from CalcIPBufferChecksum().
|
356 |
Rewrote CalcIPBufferChecksum() in Helpers.c. This improves consistency.
|
357 |
26.Improved swapl() in Helpers.c.
|
358 |
27.Improved USART baud rate (SPBRG) calculation for PIC18s. Rounding is now
|
359 |
done to chose the most optimal value and the code will automatically select
|
360 |
high baud rate mode (BRGH=1) if possible. Additional improvements can be
|
361 |
made if using a newer PIC18 with the 16 bit baud rate generator.
|
362 |
28.Added GenericTCPServer.c example file to complement GenericTCPClient.c. The
|
363 |
server is enabled by defining STACK_USE_GENERIC_TCP_SERVER_EXAMPLE in
|
364 |
TCPIPConfig.h.
|
365 |
29.Renamed STACK_USE_GENERIC_TCP_EXAMPLE definition to
|
366 |
STACK_USE_GENERIC_TCP_CLIENT_EXAMPLE for consistency with new server
|
367 |
example.
|
368 |
30.Defaulted MPFS.exe to generate binary MPFS images using 32 bit addressing.
|
369 |
MPFS.h has been modified to also default to use 32 bit addressing of
|
370 |
external EEPROM images. You must rebuild any old MPFS images and reprogram
|
371 |
them if upgrading from a previous TCP/IP stack revision, which defaulted to
|
372 |
use 16 bit addressing.
|
373 |
31.Updated MPFS.exe to #include "TCPIP.h" instead of "..\Headers\Compiler.h" in
|
374 |
C files generated by the utility.
|
375 |
32.Added MPFSv2.exe PC utility for generating large MPFS images in program
|
376 |
memory (ASM30 code) for C30 users. Previously, the C30 compiler placed a
|
377 |
limit of less than 32KB of total MPFS size due to the PSV window size
|
378 |
limitation on PIC24/dsPIC devices. To get around the limitation, use the
|
379 |
new MPFSv2.exe utility to generate an .s file which can be included in your
|
380 |
project instead of the .c file generated by the traditional MPFS.exe utility.
|
381 |
|
382 |
Fixes:
|
383 |
1. Fixed a bug in ARPProcess() which would incorrectly send an ARP response to
|
384 |
an incorrect MAC & IP address if a TX buffer wasn't immediately available.
|
385 |
2. Fixed a TCP bug where TCPIsGetReady() would return TRUE even if no data was
|
386 |
left in the recieved packet. Previously you had to call TCPGet() one last
|
387 |
time and have it fail before TCPIsGetReady() would return FALSE.
|
388 |
3. Modified TCP state machine. Established connections will no longer
|
389 |
automatically close if left idle for approximately 45 seconds. Note that
|
390 |
your application needs to ensure that no sockets unintentionally get lost
|
391 |
(For example: a server socket that received data only is established and the
|
392 |
cable breaks while connected. In this case, the socket would never be
|
393 |
detected as being disconnected since the server never attempts to transmit
|
394 |
anything).
|
395 |
4. Stopped overclocking dsPIC33 and PIC24H devices. Previously PLLFBD was
|
396 |
incorrectly set to 39 instead of 38 to yield a resulting Fosc of 84MHz
|
397 |
(42MIPS) instead of 80MHz (40MIPS) with the default Explorer 16 development
|
398 |
board. Thanks go to Matt Watkins on the Microchip Ethernet Forum for
|
399 |
pointing this error out.
|
400 |
5. Corrected a bug in IP.c where IPHeaderLen would not be properly initialized
|
401 |
if a NON_MCHP_MAC was used (ex: RTL8019AS) and IPSetRxBuffer() was called.
|
402 |
This bug did not affect ENC28J60 or PIC18F97J60 family support. Thanks go
|
403 |
to Darren Rook for identifying this issue.
|
404 |
6. Updated checksum checking code in ENC28J60.c for latest silicon DMA checksum
|
405 |
errata.
|
406 |
7. Declared TickCount in Tick.c/Tick.h as volatile and implemented an interrupt
|
407 |
safe reading procedure in TickGet(). Since this multibyte variable is
|
408 |
modified in the ISR and read in the mainline code, these changes are needed
|
409 |
to prevent rare inconsistency bugs.
|
410 |
8. Fixed Announce.c so the unicast remoteNode of the requesting packet would be
|
411 |
used rather than the remoteNode of the last received packet, which may not
|
412 |
be correct when transmitting. Thanks go to Brett Caulton for identifying
|
413 |
this issue.
|
414 |
9. Fixed a DHCP bug which would cause DHCP renewals to continually occur after
|
415 |
only 60 seconds once the original lease expired. Thanks go to Brett Caulton
|
416 |
for identifying this issue and fix.
|
417 |
10.Fixed a potential TCP socket leak in the FTP module. Previously
|
418 |
FTPDataSocket would not be reliably initialized nor closed if the connection
|
419 |
was killed forcefully (user killed application, cable disconnected while
|
420 |
transferring, etc.).
|
421 |
|
422 |
Known Problems:
|
423 |
1. RTL8019AS MAC layer driver has not been updated for new TCP module. Users
|
424 |
requiring RTL8019AS support should continue to use stack version 3.75.
|
425 |
2. I2CEEPROM.c has not been tested or completed. Continue to use I2CEEPROM.c
|
426 |
from stack version 3.75 if this file is needed.
|
427 |
3. Telnet server module is still in development. No user authentication
|
428 |
features are currently implemented. Some telnet clients may render the
|
429 |
telnet server output incorrectly (in the wrong locations or wrong colors).
|
430 |
Testing has only been done with the Microsoft Windows telnet.exe utility
|
431 |
that comes Windows XP.
|
432 |
4. DHCP will continually send out DHCP Request packets when the lease expires and the
|
433 |
original DHCP server that gave the lease is offline. The board will continue to
|
434 |
use the expired IP address until the DHCP server comes back online, at which point
|
435 |
the lease will be renewed or a new discovery will occur. A new discovery should
|
436 |
occur after timing out, instead. It is believed that this problem has always
|
437 |
existed in previous stack revisions.
|
438 |
5. DHCP will continually send out DHCP Request packets when the lease expires and the
|
439 |
original DHCP server that gave the lease does not include Option 54, the Server
|
440 |
Identifier. A new discovery should occur after timing out. It is believed that
|
441 |
this problem has always existed in previous stack revisions.
|
442 |
6. TFTPc module has not been tested with this version.
|
443 |
7. Serial numbers >32K will be displayed on the serial port as a negative value when
|
444 |
C18 is used and the board is placed in configuration mode (RB0 button is depressed
|
445 |
on power up).
|
446 |
|
447 |
|
448 |
|
449 |
********
|
450 |
v3.75 14 August 2006
|
451 |
********
|
452 |
Changes:
|
453 |
1. Added beta DNS client module (DNS.c). DHCP was also updated to obtain a DNS
|
454 |
server address. Added AppConfig.PrimaryDNSServer IP address. Added STACK_USE_DNS
|
455 |
configuration macro. To use the DNS client, call DNSResolve() with the server name,
|
456 |
ex: DNSResolve("www.microchip.com"), and then periodically call DNSIsResolved()
|
457 |
until it returns TRUE, ex: DNSIsResolved(&IPAddressDestination). Only one DNS
|
458 |
resolution can be in progress at a time. Because the DNS client is a beta module,
|
459 |
the API or code may change before being finalized. No formal DNS API documentation
|
460 |
is available yet.
|
461 |
2. Added beta NetBIOS Name Service responder module (NBNS.c). Added
|
462 |
AppConfig.NetBIOSName string. Added STACK_USE_NBNS configuration macro. Added
|
463 |
MY_DEFAULT_HOST_NAME macro in StackTsk.h. Now, whenever a NetBIOS broadcast
|
464 |
attempting to resolve AppConfig.NetBIOSName arrives, a response will be made.
|
465 |
This form of name resolution only works on a single subnet. Off the subnet,
|
466 |
manual registration in a DNS server or other means will be needed to allow the
|
467 |
local Host Name to be recognized and translated to an IP address. The default
|
468 |
NetBIOS name for the board is "MCHPBOARD". To test the NetBIOS Name Service
|
469 |
module, try entering http://MCHPBOARD/ into your web browser instead of the board's
|
470 |
IP address.
|
471 |
3. Added beta HTTP client module (GenericTCPClient.c). This module demonstrates how
|
472 |
to make a TCP client application. To test this module, uncomment the
|
473 |
STACK_USE_GENERIC_TCP_EXAMPLE macro in StackTsk.h, recompile, and then press the
|
474 |
BUTTON1 button while the stack is running. RemoteURL[] should be downloaded from
|
475 |
ServerName[] and written to the UART. For the default values of ServerName[] and
|
476 |
RemoteURL[], the HTML search page for "Microchip" will be fetched from
|
477 |
"www.google.com" and written to the serial port. No formal documentation is
|
478 |
available for this example yet.
|
479 |
4. Added Embedded Ethernet Device Discoverer PC project to aid in embedded product
|
480 |
discovery when connected to a network and demonstrate how to write PC applications
|
481 |
which can communicate with embedded devices. The source code for this device is
|
482 |
included. It can be built using the Microsoft Visual C# 2005 Express Edition
|
483 |
compiler. At the time of stack release, this 3rd party PC development tool can be
|
484 |
downloaded at no cost from http://msdn.microsoft.com/vstudio/express/. If using
|
485 |
only the Microchip Device Discoverer executable file without the Visual C# compiler,
|
486 |
the .NET Framework 2.0 must be installed on the local PC. The application setup
|
487 |
utility should allow dynamic downloading of this component if the target machine
|
488 |
does not already have it installed.
|
489 |
5. Updated Announce.c to listen and respond to discovery requests sent to UDP port
|
490 |
30303 starting with the character 'D'. To test this functionality, use the
|
491 |
Embedded Ethernet Device Discoverer on a PC connected to the same subnet.
|
492 |
6. Updated UART configuration menu to accommodate the new beta module configuration
|
493 |
options (DNS server address, device host name).
|
494 |
7. Increased MPFS reserve block to 64 bytes from 32. Also, because the APP_CONFIG
|
495 |
structure was updated, all current MPFS images and data stored in deployed EEPROMs
|
496 |
needs to be updated.
|
497 |
8. Added a means to erase (invalidate) the onboard EEPROM using the BUTTON0 momentary
|
498 |
switch (right-most switch on demo boards with multiple switches). To erase the
|
499 |
EEPROM, hold down BUTTON0, RESET the board (press and release MCLR switch), and
|
500 |
then continue to hold down BUTTON0 for an additional 4 seconds. If you press MCLR
|
501 |
again, the EEPROM contents will now be invalid. If you press '0' on the UART, the
|
502 |
same configuration that was read prior to invalidating the contents will be
|
503 |
written back into the EEPROM. Invalidating the EEPROM allows the MY_DEFAULT_*
|
504 |
constants to get loaded into a previously programmed EEPROM chip. Because of
|
505 |
change #7, this procedure should be done for all currently programmed EEPROMs to
|
506 |
prevent anomalous values from being read.
|
507 |
9. remoteNode in StackTsk.c was changed from private to global scope. Now external
|
508 |
modules can reference the address of the last received packet. Announce.c uses
|
509 |
this to send a unicast response to a broadcast discovery request.
|
510 |
10.All stack modules that can be disabled (DHCP.c, FTP.c, etc) now will no longer
|
511 |
emit a compiler error if you have it in the project without defining the
|
512 |
appropriate macro (STACK_USE_DHCP, STACK_USE_FTP, etc). It will simply generate
|
513 |
no machine code when compiled and the stack will not use that module. Make sure
|
514 |
the proper macro is defined for each module that you wish to use.
|
515 |
11.Added SetRXHashTableEntry() to ENC28J60.c. This function can be used to set the
|
516 |
appropriate bit in the Hash Table registers to join a particular multicast group.
|
517 |
12.Added Realtek RTL8019AS Ethernet controller support to the stack. MAC.c was
|
518 |
renamed to RTL8019AS.c. This Ethernet controller is not recommended for new
|
519 |
designs. RTL8019AS support was reintroduced to provide ongoing assistance to
|
520 |
former Application designs implementing this chip. For new applications, use the
|
521 |
Microchip ENC28J60 or PIC18F97J60 family of microcontrollers.
|
522 |
13.Added I2C EEPROM support for MPFS storage. In older 2.xx stack revisions, I2C
|
523 |
EEPROM was supported by the XEEPROM.c file. This file has been renamed to
|
524 |
I2CEEPROM.c. It is mutually exclusive with SPIEEPROM.c, and only one may be
|
525 |
included in the project at a time.
|
526 |
14.Added new hardware definitions to Compiler.h. Pin mappings for the PICDEMNET and
|
527 |
PIC18F97J60_TEST_BOARD boards have been added. FS_USB was also defined; however,
|
528 |
it is untested and not recommended. See Compiler.h. The PIC18F97J60_TEST_BOARD is
|
529 |
a non-production board that some Early Adopters of the PIC18F97J60 family parts
|
530 |
have.
|
531 |
15.Changed type definitions for BYTE_VAL, WORD_VAL, DWORD_VAL, and moved the generic
|
532 |
typedefs to GenericTypeDefs.h from StackTsk.h. This should improve compatibility
|
533 |
with some future code libraries released by Microchip.
|
534 |
16.LCDBlocking.c module was modified to support 4-bit interfaces to LCD modules. The
|
535 |
PICDEM.net board has the module wired using a 4-bit bus.
|
536 |
|
537 |
|
538 |
Fixes:
|
539 |
1. Fixed a serious MAC TXBuffer leak in TCP.c. Previously TCP.c would allocate a
|
540 |
buffer for each socket in use, but under heavy traffic conditions (ex: user holds
|
541 |
down F5 on web browser), the buffer handle might have been discarded before
|
542 |
releasing the buffer. As a result all TCP connections would have lost the ability
|
543 |
to send any application data after the TXBuffer pool ran out.
|
544 |
2. In the TCP_SYN_SENT TCP state, ACKs may only be received (as opposed to SYN+ACK
|
545 |
packets) if the remote node thinks the connection is already open. A RST is now
|
546 |
sent in response to an unexpected ACK, which may improve reconnection time when
|
547 |
this (rare) condition occurs.
|
548 |
3. A bug was present in the UDP module where remote MAC addresses would be cached for
|
549 |
each socket, even when UDPInit() or UDPClose() was called, or the microcontroller
|
550 |
was reset. As a result, responses to incoming packets could have been sent to the
|
551 |
wrong MAC address. UDP Sockets are now properly initialized/closed.
|
552 |
4. Fixed a potential timing bug in LCDBlocking.c. For lower values of CLOCK_FREQ,
|
553 |
insufficient delay time was given to the LCD module, potentially causing improper
|
554 |
operation.
|
555 |
5. Changed PIC24F to default to the XT oscillator fuse rather than HS. The
|
556 |
PIC24FJ128GA010 data sheet, rev. C reports that 8MHz should be used with XT mode,
|
557 |
not HS mode like prior data sheets.
|
558 |
6. Added a couple of wait states to the Realtek RTL8019AS MAC layer module for
|
559 |
NICPut() and NICGet(). Previously, the PICmicro could not operate above
|
560 |
approximately 25MHz without losing communication with the RTL8019AS chip.
|
561 |
7. Updated PC based MPFS utility. When generating C files to be added to your MPLAB
|
562 |
project, the include path to "Compiler.h" is now "..\Include\Compiler.h". The
|
563 |
output file, ex: "MPFSImg.c" should be placed in the "Source" subfolder before
|
564 |
compiling. For example, if you are in the main stack folder with the MPLAB
|
565 |
projects, type: "mpfs /c WebPages Source\MPFSImg.c"
|
566 |
8. IP Gleaning will now get properly disabled when, through the RS232 configuration
|
567 |
application, DHCP and IP Gleaning are disabled. The stack will still respond to
|
568 |
ping requests which have the wrong destination IP address, but a correct MAC
|
569 |
address. However, the stack will continue to keep its statically defined IP
|
570 |
address when DHCP/IP Gleaning are disabled and the ping arrives.
|
571 |
9. SPIEEPROM.c now saves and reconfigures the EEPROM_SPICON1 register (SSPCON1) before
|
572 |
reading or writing to the SPI. After the read/write, it restores the saved state.
|
573 |
This allows the SPI bus to operate at different speeds, depending on what
|
574 |
peripheral is being accessed if other devices share the bus and can support
|
575 |
different speeds. In particular, this fixes the SPI @ 10.4MHz problem on the
|
576 |
PICDEM.net 2 board when using the ENC28J60.
|
577 |
|
578 |
|
579 |
Known Problems:
|
580 |
1. DHCP will continually send out DHCP Request packets when the lease expires and the
|
581 |
original DHCP server that gave the lease is offline. The board will continue to
|
582 |
use the expired IP address until the DHCP server comes back online, at which point
|
583 |
the lease will be renewed or a new discovery will occur. A new discovery should
|
584 |
occur after timing out, instead. It is believed that this problem has always
|
585 |
existed in previous stack revisions.
|
586 |
2. DHCP will continually send out DHCP Request packets when the lease expires and the
|
587 |
original DHCP server that gave the lease does not include Option 54, the Server
|
588 |
Identifier. A new discovery should occur after timing out. It is believed that
|
589 |
this problem has always existed in previous stack revisions.
|
590 |
3. When an MPFS .c image file is added to a C30 project, a linking error reporting
|
591 |
insufficient contiguous .const memory may occur when too much data is in the MPFS
|
592 |
image (PSV window size limitation). Using the PSV window, 1 out of every 3 program
|
593 |
memory bytes is wasted.
|
594 |
4. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested
|
595 |
and possibly do not work.
|
596 |
5. SNMP, TFTPc modules have not been tested with this version.
|
597 |
6. Serial numbers >32K will be displayed on the serial port as a negative value when
|
598 |
C18 is used and the board is placed in configuration mode (RB0 button is depressed
|
599 |
on power up).
|
600 |
7. The C30 linker may misplace the __CONFIG2 section or disallow usage of MPFS images
|
601 |
that are too big (add too much to the .const code section). The consequences of
|
602 |
this are that the first configuration word at 0x157FC may not get set through code
|
603 |
(must use the Configuration Bits dialog instead), and/or the project will not
|
604 |
compile. This problem has been observed with C30 ver. 2.02 on the PIC24FJ128GA010
|
605 |
product. To work around this problem, the p24FJ128GA010.gld linker script has
|
606 |
been modified. Specifically, line 68 has been commented out, which causes the
|
607 |
linker to place all .text sections after placing all absolute sections. SSR 25966
|
608 |
in the C30 2.02 release notes may be related.
|
609 |
8. It is observed with the Realtek RTL8019AS Ethernet controller and the demo AJAX
|
610 |
web page which self refreshes rapidly, that occasional HTTP GET requests sent by
|
611 |
the computer do not get received by the HTTP server. This is believed to be a
|
612 |
RTL8019AS MAC layer bug. The TCP protocol handles the packet loss, but
|
613 |
application performance suffers while waiting for the TCP retransmission. This
|
614 |
problem is not observed with ENC28J60.c or ETH97J60.c MAC layers.
|
615 |
9. The HI-TECH compiler version 9.50PL1 crashes when compiling LCDBlocking.c with 4
|
616 |
bit mode (PICDEMNET) and using a warning level of -3 or higher. To work around
|
617 |
the problem, the HI TECH projects were set to use warning level -4.
|
618 |
|
619 |
|
620 |
Guiding Notes:
|
621 |
1. To use the stack on a classic PICDEM.net demo board with the Realtek Ethernet
|
622 |
controller, a PIC18F452 processor, and Microchip C18:
|
623 |
-Use the C18EEPROM MPLAB project
|
624 |
-Change the processor in the MPLAB IDE
|
625 |
-Change linker script to "18f452i.lkr" in the MPLAB project. Use the one provided
|
626 |
in the Linker subfolder, it has been modified to make more RAM available.
|
627 |
-Update the hardware definitions macro. Click on Project -> Build Options... ->
|
628 |
Project -> MPLAB C18 -> Add PICDEMNET, remove HPC_EXPLORER)
|
629 |
-Remove ENC28J60.c from the project
|
630 |
-Remove SPIEEPROM.c from the project
|
631 |
-Add RTL8019AS.c to the project
|
632 |
-Add I2CEEPROM.c to the project
|
633 |
-Enable all compiler optimizations (Project -> Build Options... -> Project -> MPLAB
|
634 |
C18 -> Categories Optimization -> Enable all)
|
635 |
|
636 |
|
637 |
|
638 |
********
|
639 |
v3.60 12 July 2006
|
640 |
********
|
641 |
General Information:
|
642 |
This stack version is being publicly released, so the following changes are with
|
643 |
respect to the prior public stack release (v3.02). Interim stack changes for version
|
644 |
3.16 and 3.50 are documented below for those using non-public releases, but can be
|
645 |
ignored by most people.
|
646 |
|
647 |
|
648 |
Troubleshooting notes:
|
649 |
1. If you have an Ethernet PICtail revision 2.1 and are having reliability issues when
|
650 |
viewing the fast-refresh demo web page, you may need to install resistors in series
|
651 |
with the ENC28J60 SI, nCS, and SCK pins. The recommended value is 100 to 200 ohms.
|
652 |
This will reduce signal undershoot caused by long traces (parasitic inductance),
|
653 |
which can violate the absolute maximum electrical specs and cause SPI data
|
654 |
corruption. The HPC Explorer Rev 5 has fairly long traces to the PICtail connector.
|
655 |
2. Enabling C30 2.02 compiler optimizations on the dsPIC33FJ256GP710, PIC24HJ256GP610
|
656 |
ES chips may produce unreliable code.
|
657 |
3. When changing a C30 project to a PIC24H or dsPIC33F processor on the Explorer 16
|
658 |
demo board, the JTAG configuration fuse should be disabled to free the I/O pins
|
659 |
associated with it. JTAG is enabled by default.
|
660 |
4. This stack release was tested using MPLAB 7.40, C18 version 3.03, C30 version 2.02,
|
661 |
and HI TECH PICC18 version 9.50PL1.
|
662 |
5. When using the Ethernet PICtail board and HPC Explorer demo boards, make sure to
|
663 |
plug the power into the Ethernet PICtail and not the HPC Explorer. The HPC
|
664 |
Explorer's power regulator cannot provide enough current.
|
665 |
|
666 |
|
667 |
Changes:
|
668 |
1. Source files have been split into separate directories. To compile old
|
669 |
applications with this new stack, application source files may need to be updated
|
670 |
to include the proper path to the stack header files.
|
671 |
2. New MPLAB projects have been created:
|
672 |
-C18EEPROM: Equivalent to the previously named "mpnicee" project. Designed for
|
673 |
PIC18's using the C18 compiler. Web page content, board's IP address,
|
674 |
MAC address, DHCP enabled state, etc. is stored in an external SPI
|
675 |
EEPROM (25LC256 on demo boards). FTP Server demo is included.
|
676 |
-C30EEPROM: New supporting PIC24 and dsPIC controllers using the C30 compiler.
|
677 |
Similar to C18EEPROM.
|
678 |
-C18ProgramMem: Equivalent to the previously named "mpnicpg" project. Web page
|
679 |
content stored in internal FLASH program memory. Board's IP
|
680 |
address, MAC address, DHCP enabled state, etc. is stored only in
|
681 |
RAM and defaults are loaded from MY_DEFAULT_* constants in
|
682 |
StackTsk.h. FTP Server demo is not included. Web pages cannot be
|
683 |
updated remotely.
|
684 |
-C30ProgramMem: New supporting PIC24 and dsPIC controllers using the C30 compiler.
|
685 |
Similar to C18ProgramMem.
|
686 |
-HTC18EEPROM: Equivalent to the previously named "htnicee" project. Designed for
|
687 |
PIC18's using the HI TECH PICC18 compiler. Similar to C18EEPROM.
|
688 |
-HTC18ProgramMem: Equivalent to the previously named "htnicpg" project. Designed
|
689 |
for PIC18's using the HI TECH PICC18 compiler. Similar to
|
690 |
C18ProgramMem.
|
691 |
3. Created hardware definitions (pins, interrupt flags, special registers, etc) in
|
692 |
Compiler.h for easy changing of hardware. Four demo board combinations are
|
693 |
supported out-of-box now:
|
694 |
-EXPLORER_16: Explorer 16 motherboard + Ethernet PICtail Plus daughter card.
|
695 |
Tested with dsPIC33FJ256GP710, PIC24HJ256GP610, and
|
696 |
PIC24F128GA010 ES PIMs.
|
697 |
-HPC_EXPLORER: PICDEM HPC Explorer motherboard + Ethernet PICtail daughter
|
698 |
card. Tested with PIC18F8722 onboard and PIC18F87J10 PIM.
|
699 |
-DSPICDEM11: dsPICDEM 1.1 motherboard + Ethernet PICtail daughter card
|
700 |
(manually air wired). See Compiler.h for proper pins to air wire.
|
701 |
Tested with dsPIC30F6014A PIM.
|
702 |
-PICDEMNET2: PICDEM.net 2 motherboard (PIC18F97J60)
|
703 |
Change boards by changing the defined macro (Project -> Build Options... ->
|
704 |
Project -> MPLAB Cxx -> Add macro). When moving to custom hardware, add an
|
705 |
appropriate profile to Compiler.h. YOUR_BOARD is present as a placeholder.
|
706 |
4. Added Ethernet PICtail Plus schematic (reference ENC28J60 daughter card design for
|
707 |
Explorer 16 demo board). These boards have a Microchip part number of AC164123.
|
708 |
5. Latest ENC28J60 rev. B5 errata workarounds added. The code checks the EREVID
|
709 |
register and implements the appropriate workarounds as needed for the silicon
|
710 |
revision, so rev. B1, B4, and B5 are all supported in this stack release.
|
711 |
6. Significantly revised demonstration web page content in WebPages folder to use
|
712 |
AJAX technology. Using asynchronous JavaScript code executing in the web browser,
|
713 |
the status sections of the page are updated rapidly from the web server without
|
714 |
doing a full page refresh. As a result, a virtually real time update of the
|
715 |
potentiometer and button values can be displayed. Due to the constant use of new
|
716 |
TCP sockets, multiple simultaneous users are not recommended. See the Index.cgi
|
717 |
file for a simple static method of retrieving dynamic variables from the HTTP
|
718 |
server.
|
719 |
7. Changed IP Gleaning procedure. Now, if DHCP is enabled, the DHCP module will
|
720 |
continue to look for a new IP address/renew existing IP address if the IP address
|
721 |
is configured using IP Gleaning. Previously, the DHCP module would be disabled
|
722 |
once a successful ICMP packet was received and used to configure the IP address.
|
723 |
8. MAX_RETRY_COUNTS is 3 (previously it was 3, but an interim release changed it to 5).
|
724 |
9. Updated TCP state machine. It now includes the TCP_FIN_WAIT_2 state. Some other
|
725 |
changes were made to handle errors more robustly.
|
726 |
10.AN0String and AN1String now return all characters excluding the null terminator
|
727 |
when the HTTP server calls HTTPGetVar (except when the string is 0 length).
|
728 |
Previously, the null terminator was returned as well.
|
729 |
11.Dynamic pages (ie: .cgi files) are now served with an expired HTTP header to
|
730 |
prevent browser caching and allow more dynamic content to be displayed.
|
731 |
12.Support for the HI TECH PICC18 compiler has changed. Special Function Register
|
732 |
bits and other definitions have changed substantially from the previous HI TECH
|
733 |
PICC18 projects in TCP/IP stack version 3.02 and earlier. The C18/C30 SFR and
|
734 |
SFRbits naming conventions are now used and special remapping macros in Compiler.h
|
735 |
are used to maintain a consistent syntax. The HI TECH PICC18 projects were tested
|
736 |
with compiler version 9.50PL1 on the HPC Explorer board (PIC18F8722).
|
737 |
13.FTP client hash printing has been added to the FTP server. Now, whenever a chunk
|
738 |
of data is successfully uploaded to the device, a '#' character will appear on the
|
739 |
FTP client screen. The numbers of bytes each '#' represents is variable.
|
740 |
14.To improve maintainability, built in support for the "Compatible" A/D converter
|
741 |
present on older PIC18 parts (ex: PIC18F452) has been removed.
|
742 |
15.Removed old LCD code originally provided for the PICDEM.net demo board.
|
743 |
16.Added LCDBlocking.c and LCDBlocking.h, which implement simple routines for writing
|
744 |
to the LCD module on the Explorer 16 and PICDEM.net 2 development boards. The LCD
|
745 |
on the dsPICDEM 1.1 board is not supported. The stack version and IP address are
|
746 |
shown on the LCD on power up.
|
747 |
17.UART functions in MainDemo.c were replaced with C18 and C30 peripheral library
|
748 |
functions. However, because the UART peripheral libraries are not being updated
|
749 |
for newer silicon devices, the code was copied into UART.c and is compiled with
|
750 |
the stack.
|
751 |
18.Multiple TX buffer support has been implemented. Most stack layers have been
|
752 |
touched. ENC28J60.c has the most extensive changes. Each socket may use only one
|
753 |
TX buffer.
|
754 |
19.Implemented TCP retransmission support regardless of if TCP_NO_WAIT_FOR_ACK is
|
755 |
defined or not.
|
756 |
20.TCP_NO_WAIT_FOR_ACK in StackTsk.h has been undefined by default. This should
|
757 |
increase default TCP connection robustness. Packets sent from the stack to the
|
758 |
remote node will now be detected and retransmitted if lost or corrupted.
|
759 |
21.All TCP packets are now retransmitted immediately after being initially transmitted
|
760 |
when TCP_NO_WAIT_FOR_ACK is undefined. This improves throughput greatly when
|
761 |
communicating with systems which wait a long time before transmitting ACKs. TCP/IP
|
762 |
stacks, such as that used by Microsoft Windows, implement the TCP Delayed
|
763 |
Acknowledgement algorithm, which is why this retransmission is necessary for high
|
764 |
performance. The double transmission feature can be disabled in the Microchip
|
765 |
TCP/IP stack by defining "DEBUG" either in the TCP.c file or the project compiler
|
766 |
macros section. Using DEBUG mode can be useful when trying to look for errors
|
767 |
using Ethreal [ http://www.ethereal/ ].
|
768 |
22.Lowered TCP_START_TIMEOUT_VAL from 60 seconds to 3 seconds. 60 seconds is an
|
769 |
unreasonably long timeout for modern day network speeds.
|
770 |
23.Native support for the SLIP module has been dropped.
|
771 |
|
772 |
|
773 |
|
774 |
Fixes:
|
775 |
1. A new IP address obtained via IP Gleaning will now update the LCD (if present),
|
776 |
invoke the Announce module (for MCHPDetect.exe), and output the new address out
|
777 |
the RS232 port.
|
778 |
2. DHCP client will now correctly use the first DHCP offer received when connected
|
779 |
to a network running multiple DHCP servers. Previously, the board would get no
|
780 |
IP address when attached to a network with multiple DHCP servers (unless the DHCP
|
781 |
request was transmitted before a second DHCP offer was received -- a relatively
|
782 |
rare event). Additionally, DHCPLeaseTime does not get reset to 60 seconds or
|
783 |
the value stored in the last DHCP packet received prior to receiving the ACK.
|
784 |
3. UDPProces() will now correctly process received UDP packets that have a 0x0000
|
785 |
checksum field. The UDP protocol specifies that 0x0000 means the checksum is
|
786 |
disabled. Packets with a 0x0000 checksum were previously thrown away unless the
|
787 |
calculated checksum also happened to be 0x0000.
|
788 |
4. The TCPIsPutReady() function will now honor the remote node's TCP window size. In
|
789 |
other words, if the remote application pauses or cannot handle the incoming data
|
790 |
rate, the TCP flow control feature will correctly function. Previously, if the
|
791 |
remote node ran out of incoming buffer memory, the TCP layer would still allow
|
792 |
more data to be transmitted. This would result in the loss or corruption of
|
793 |
application data, with a potentially broken connection. The change requires 2 more
|
794 |
bytes of RAM per TCP socket (TCB array).
|
795 |
|
796 |
|
797 |
Known Problems:
|
798 |
1. On PICDEM.net 2 board ENC28J60 and 25LC256 EEPROM share the same SPI1 module. At
|
799 |
3.3V, the 25LC256 is only rated to 5MHz SPI clock, but the code is setting it to
|
800 |
10.4MHz because the MACInit() function reconfigures the same SPI1 module.
|
801 |
2. DHCP will continually send out DHCP Request packets when the lease expires and the
|
802 |
original DHCP server that gave the lease is offline. The board will continue to
|
803 |
use the expired IP address until the DHCP server comes back online, at which point
|
804 |
the lease will be renewed or a new discovery will occur. A new discovery should
|
805 |
occur after timing out, instead. It is believe that this problem has always
|
806 |
existed in previous stack revisions.
|
807 |
3. DHCP will continually send out DHCP Request packets when the lease expires and the
|
808 |
original DHCP server that gave the lease does not include Option 54, the Server
|
809 |
Identifier. A new discovery should occur after timing out. It is believe that
|
810 |
this problem has always existed in previous stack revisions.
|
811 |
4. The MPFS utility has not been updated. When creating a .c image file, the include
|
812 |
path for the Compiler.h file will be incorrect and need to be manually updated to
|
813 |
"..\Include\Compiler.h".
|
814 |
5. When an MPFS .c image file is added to a C30 project, a linking error reporting
|
815 |
insufficient contiguous .const memory may occur when too much data is in the MPFS
|
816 |
image (PSV window size limitation). Using the PSV window, 1 out of every 3 program
|
817 |
memory bytes is wasted.
|
818 |
6. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested
|
819 |
and possibly do not work.
|
820 |
7. SNMP, TFTPc modules have not been tested with this version.
|
821 |
8. Serial numbers >32K will be displayed on the serial port as a negative value when
|
822 |
C18 is used and the board is placed in configuration mode (RB0 button is depressed
|
823 |
on power up).
|
824 |
9. IP Gleaning may not get disabled when, through the RS232 configuration application,
|
825 |
DHCP and IP Gleaning are disabled.
|
826 |
10.The C30 linker may misplace the __CONFIG2 section or disallow usage of MPFS images
|
827 |
that are too big (add too much to the .const code section). The consequences of
|
828 |
this are that the first configuration word at 0x157FC may not get set through code
|
829 |
(must use the Configuration Bits dialog instead), and/or the project will not
|
830 |
compile. This problem has been observed with C30 ver. 2.02 on the PIC24FJ128GA010
|
831 |
product. To work around this problem, the p24FJ128GA010.gld linker script has
|
832 |
been modified. Specifically, line 68 has been commented out, which causes the
|
833 |
linker to place all .text sections after placing all absolute sections. SSR 25966
|
834 |
in the C30 2.02 release notes may be related.
|
835 |
|
836 |
|
837 |
Guiding Notes:
|
838 |
1. To change processors using a C18* project:
|
839 |
-Change the processor in the MPLAB IDE
|
840 |
-Change linker script (ex: 18f87j10i.lkr) in the MPLAB project. Use *i.lkr
|
841 |
if the ICD2 is going to be used to debug with.
|
842 |
-Update the hardware definitions in Compiler.h or change your demo board
|
843 |
selection macro. (Project -> Build Options... -> Project -> MPLAB Cxx ->
|
844 |
PICDEMNET2, etc)
|
845 |
2. To change processors using a HTC18* project:
|
846 |
-Change the processor in the MPLAB IDE
|
847 |
-Update the hardware definitions in Compiler.h or change your demo board
|
848 |
selection macro. (Project -> Build Options... -> Project -> MPLAB Cxx ->
|
849 |
PICDEMNET2, etc)
|
850 |
3. To change processors using a C30* project:
|
851 |
-Change the processor in the MPLAB IDE
|
852 |
-Change linker script (ex: p33FJ256GP710.gld) in the MPLAB project.
|
853 |
-Update the hardware definitions in Compiler.h or change your demo board
|
854 |
selection macro. (Project -> Build Options... -> Project -> MPLAB Cxx ->
|
855 |
DSPICDEM11, etc)
|
856 |
-Disable JTAG configuration fuse, if enabled
|
857 |
4. When using the PICDEM.net 2 board, to write code targeting the PIC18F97J60 family
|
858 |
Ethernet module:
|
859 |
-Remove ENC28J60.c from the project
|
860 |
-Add ETH97J60.c to the project
|
861 |
-Plug the Ethernet cable into the left-most RJ45 jack (next to LCD)
|
862 |
5. When using the PICDEM.net 2 board, to write code targeting the ENC28J60 Ethernet
|
863 |
device:
|
864 |
-Make sure ENC28J60.c is in the project
|
865 |
-Make sure that ETH97J60.c is not in the project
|
866 |
-Plug the Ethernet cable into the right-most RJ45 jack (next to board edge)
|
867 |
6. When using the PICDEM.net 2 board, to write code targeting an Ethernet PICtail
|
868 |
module (ENC28J60):
|
869 |
-Make sure ENC28J60.c is in the project
|
870 |
-Make sure that ETH97J60.c is not in the project
|
871 |
-Make sure that the Ethernet PICtail J9 jumper is in the 2-3 position (default).
|
872 |
-Properly update the hardware profile in Compiler.h. ENC_CS_TRIS and ENC_CS_IO
|
873 |
need to be changed from D3 to B3.
|
874 |
-Plug the Ethernet cable into the PICtail
|
875 |
-Plug power into the PICDEM.net 2 board
|
876 |
7. When using the Explorer 16 and Ethernet PICtail Plus demo boards, make sure to mate
|
877 |
the PICtail to the motherboard using the topmost socket position, leaving the cable
|
878 |
hanging over prototyping area. If SPI2 is desired, the PICtail should have the
|
879 |
same orientation but be installed in the middle slot. Using SPI2, the hardware
|
880 |
profile will need to be updated in Compiler.h.
|
881 |
|
882 |
|
883 |
|
884 |
********
|
885 |
v3.50 13 April 2006
|
886 |
********
|
887 |
Changes:
|
888 |
1. Improved dsPIC33F and PIC24H support. UART functions are included now instead of
|
889 |
precompiled object files for the PIC24F. The 12-bit A/D converter is now shown in
|
890 |
use on the demo web content. When changing a C30 project to a PIC24H or dsPIC33F
|
891 |
processor on the Explorer 16 demo board, the JTAG configuration fuse should be
|
892 |
disabled to free the I/O pins associated with it. JTAG is enabled by default.
|
893 |
2. Added LCDBlocking.c and LCDBlocking.h, which implement simple routines for writing
|
894 |
to the LCD module on the Explorer 16 development board. The stack version and IP
|
895 |
address are shown on the LCD on power up.
|
896 |
3. Added "C18ProgramMem" and "C30ProgramMem" MPLAB projects for MPFS storage (web page
|
897 |
content) on on-chip program memory. These projects are equivalent to the previously
|
898 |
named "mpnicpg" project in prior stack releases.
|
899 |
4. Multiple TX buffer support has been implemented. Most stack layers have been
|
900 |
touched. ENC28J60.c has the most extensive changes. Each socket may use only one
|
901 |
TX buffer.
|
902 |
5. Implemented TCP retransmission support when TCP_NO_WAIT_FOR_ACK is undefined.
|
903 |
6. TCP_NO_WAIT_FOR_ACK in StackTsk.h has been undefined by default. This should
|
904 |
increase default TCP connection robustness.
|
905 |
7. All TCP packets are now retransmitted immediately after being initially transmitted
|
906 |
when TCP_NO_WAIT_FOR_ACK is undefined. This improves throughput greatly when
|
907 |
communicating with systems which wait a long time before transmitting ACKs.
|
908 |
8. Lowered TCP_START_TIMEOUT_VAL from 60 seconds to 3 seconds.
|
909 |
9. Increased MAX_RETRY_COUNTS from 3 to 5 times.
|
910 |
10. The example HTTP server now returns a content expiration date which has already
|
911 |
past. This prevents web browser caching and allows more dynamic content to be
|
912 |
displayed.
|
913 |
11. Added WebPages_JScript folder, with new web pages that support dynamic page updates
|
914 |
without a full page reload. A tiny page of dynamic variables is returned by the
|
915 |
web server and Javascript executing on the target web browser changes DOM elements
|
916 |
as needed. Button S5 (RA7) on the Explorer 16 demo board and S1 (RB0) on the HPC
|
917 |
Explorer demo board changes the page color scheme. The rapid dynamic updates do
|
918 |
not work on some web browsers (Internet Explorer works, Firefox does not).
|
919 |
|
920 |
|
921 |
Known Problems:
|
922 |
1. MPFS utility has not been updated. When creating a .c image file, the include path
|
923 |
for the compiler.h file will be incorrect and need to be manually updated.
|
924 |
2. When an MPFS .c image file is added to a C30 project, a linking error reporting
|
925 |
insufficient contiguous .const memory may occur (PSV window size limitation).
|
926 |
3. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and
|
927 |
possibly do not work.
|
928 |
4. SNMP, TFTPc, SLIP modules have not been tested with this version.
|
929 |
5. Serial numbers >32K will be displayed on the serial port as a negative value when
|
930 |
C18 is used and the board is placed in configuration mode (RB0 button is depressed
|
931 |
on power up).
|
932 |
6. IP Gleaning may not get disabled when, through the RS232 configuration application,
|
933 |
DHCP and IP Gleaning are disabled.
|
934 |
7. The IP address being outputted out the RS232 port and through the Announce module
|
935 |
does not happen when the IP address is configured using IP Gleaning.
|
936 |
8. On the PIC24F with C30 compiler optimizations enabled (such as Option 3, maximum
|
937 |
speed), the project may not work. The PIC24F headers that come with C30 ver. 2.01
|
938 |
declare several SFRs without using the volatile keyword.
|
939 |
9. dsPIC30 support is incomplete. Currently PIC18, PIC24F, PIC24H, and dsPIC33F
|
940 |
processors are supported.
|
941 |
|
942 |
|
943 |
|
944 |
********
|
945 |
v3.16.00: 06 March 2006
|
946 |
********
|
947 |
Changes:
|
948 |
1. Added unified support for both the Microchip C18 and C30 compilers. The intention
|
949 |
is to allow one code base to be compiled for any PIC18, PIC24F/H, dsPIC30, or
|
950 |
dsPIC33 product (with adequate memory). See the "Tested Using" section for what is
|
951 |
known to work.
|
952 |
2. To improve maintainability, support for the HI-TECH PICC18 compiler has been
|
953 |
dropped.
|
954 |
3. New project workspaces have been created, "C30EEPROM.mcw" and "C18EEPROM.mcw".
|
955 |
C18EEPROM.mcw is equivalent to the previously named "mpnicee.mcw." C30EEPROM is
|
956 |
intended to be used for PIC24 and dsPIC 16-bit controllers.
|
957 |
4. Source files have been split into separate directories.
|
958 |
5. Latest ENC28J60 rev. B5 errata workarounds added. The code checks the EREVID
|
959 |
register and implements the appropriate workarounds as needed for the silicon
|
960 |
revision, so rev. B1, B4, and B5 are all supported in this stack release.
|
961 |
6. Removed old LCD code originally provided for the PICDEM.net demo board.
|
962 |
7. To improve maintainability, built in support for the "Compatable" A/D converter
|
963 |
present on older PIC18 parts (ex: PIC18F452) has been removed.
|
964 |
8. UART functions in MainDemo.c were replaced with C18 and C30 peripheral library
|
965 |
functions.
|
966 |
|
967 |
Tested Using:
|
968 |
1. Software:
|
969 |
-MPLAB version 7.31.01
|
970 |
-C18 version 3.02
|
971 |
-C30 version 2.01
|
972 |
2. Hardware:
|
973 |
-PICDEM HPC Explorer rev. 4 (PIC18F8722) + Ethernet PICtail Daughter Board (ENC28J60
|
974 |
B1)
|
975 |
-Explorer 16 rev. 4 (PIC24FJ128GA010 ES and dsPIC33FJ256GP710 ES) + Ethernet PICtail+
|
976 |
Daughter card (ENC28J60 B1).
|
977 |
3. Notes:
|
978 |
-MPLAB 7.31.01 is a development build. The publicly available version 7.31
|
979 |
should work fine, with the exception of being unable to program dsPIC33 and PIC24H
|
980 |
parts with the ICD 2.
|
981 |
-No dsPIC30 or PIC24H parts have been tested yet.
|
982 |
|
983 |
Known Problems:
|
984 |
1. MPFS utility has not been updated. When creating a .c image file, the include path
|
985 |
for the compiler.h file will be incorrect and need to be manually updated.
|
986 |
2. When an MPFS .c image file is added to a C30 project, a linking error reporting
|
987 |
insufficient contiguous .const memory may occur.
|
988 |
3. On the PIC24FJ128GA010, it is observed that some inbound packets are lost from time
|
989 |
to time with no anticipated reason.
|
990 |
4. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and
|
991 |
possibly do not work.
|
992 |
5. SNMP, TFTPc, SLIP modules have not been tested with this version.
|
993 |
6. Serial numbers >32K will be displayed on the serial port as a negative value when
|
994 |
C18 is used and the board is placed in configuration mode (RB0 button is depressed
|
995 |
on power up).
|
996 |
7. IP Gleaning may not get disabled when, through the RS232 configuration application,
|
997 |
DHCP and IP Gleaning are disabled.
|
998 |
8. The IP address being outputted out the RS232 port and through the Announce module
|
999 |
does not happen when the IP address is configured using IP Gleaning.
|
1000 |
9. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c.
|
1001 |
Stack behavior when TCP_NO_WAIT_FOR_ACK is undefined may be unexpected.
|
1002 |
|
1003 |
|
1004 |
|
1005 |
********
|
1006 |
v3.02.00: 20 Feb 2006
|
1007 |
********
|
1008 |
Fixes:
|
1009 |
1. Changed TXSTART in ENC28J60.c to stop wasting a byte.
|
1010 |
2. Changed RXSTOP in ENC28J60.c to always be an odd value to properly implement an
|
1011 |
ENC28J60 silicon errata workaround.
|
1012 |
3. Changed initialization of ERXRDPT in MACInit() to agree with the current errata.
|
1013 |
|
1014 |
Changes:
|
1015 |
1. Licence agreement
|
1016 |
2. Schematics and other board files to the Ethernet PICtail Daughter Board have been
|
1017 |
updated to revision 5. Of significant note, the nRESET pin has been freed and
|
1018 |
200 ohm resistors were added to the ENC28J60 SI, nCS, and SCK pins. The added
|
1019 |
resistors reduce undershoot caused by stray trace inductance and strong host output
|
1020 |
drivers.
|
1021 |
|
1022 |
Known Problems:
|
1023 |
1. Testing on the PICDEM.net demo board with the Realtek RTL8019AS Ethernet controller
|
1024 |
has not been done. Moving to the HPC Explorer demo board has resulted in pinout
|
1025 |
and other hardware changes.
|
1026 |
2. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and
|
1027 |
possibly do not work.
|
1028 |
3. SNMP, TFTPc, LCD, SLIP modules have not been tested with this version.
|
1029 |
4. The stack may behave incorrectly if compiled using the Hitech compiler with a high
|
1030 |
optimizations setting.
|
1031 |
5. Serial numbers >32K will be displayed on the serial port as a negative value when
|
1032 |
C18 is used and the board is placed in configuration mode (RB0 button is depressed
|
1033 |
on power up).
|
1034 |
6. IP Gleaning may not get disabled when, through the RS232 configuration application,
|
1035 |
DHCP and IP Gleaning are disabled.
|
1036 |
7. The IP address being outputted out the RS232 port and through the Announce module
|
1037 |
does not happen when the IP address is configured using IP Gleaning.
|
1038 |
8. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c.
|
1039 |
Stack behavior when TCP_NO_WAIT_FOR_ACK is undefined may be unexpected.
|
1040 |
|
1041 |
|
1042 |
********
|
1043 |
v3.01.00: 18 Jan 2006
|
1044 |
********
|
1045 |
Fixes:
|
1046 |
1. Implemented latest ENC28J60 silicon errata workarounds.
|
1047 |
2. Fixed a bug in TCP.c and UDP.c which would incorrectly write the packet checksum
|
1048 |
into the RX buffer incorrectly when the checksum field was exactly spanning the RX
|
1049 |
wrapparound boundary in the ENC28J60. This problem would have caused packets to be
|
1050 |
discarded in rare circumstances
|
1051 |
|
1052 |
|
1053 |
Known Problems:
|
1054 |
1. Testing on the PICDEM.net demo board with the Realtek RTL8019AS Ethernet controller
|
1055 |
has not been done. Moving to the HPC Explorer demo board has resulted in pinout
|
1056 |
and other hardware changes.
|
1057 |
2. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and
|
1058 |
possibly do not work.
|
1059 |
3. SNMP, TFTPc, LCD, SLIP modules have not been tested with this version.
|
1060 |
4. The stack may behave incorrectly if compiled using the Hitech compiler with a high
|
1061 |
optimizations setting.
|
1062 |
5. Serial numbers >32K will be displayed on the serial port as a negative value when
|
1063 |
C18 is used and the board is placed in configuration mode (RB0 button is depressed
|
1064 |
on power up).
|
1065 |
6. IP Gleaning may not get disabled when, through the RS232 configuration application,
|
1066 |
DHCP and IP Gleaning are disabled.
|
1067 |
7. The IP address being outputted out the RS232 port and through the Announce module
|
1068 |
does not happen when the IP address is configured using IP Gleaning.
|
1069 |
8. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c.
|
1070 |
Stack behavior when TCP_NO_WAIT_FOR_ACK is defined may be unexpected.
|
1071 |
|
1072 |
|
1073 |
********
|
1074 |
v3.00.00: 16 Jan 2006
|
1075 |
********
|
1076 |
Changes:
|
1077 |
1. The stack now targets the PICDEM HPC Explorer demo board (PIC18F8722 MCU) with an
|
1078 |
attached Ethernet PICtail Daughter Board (with the Microchip ENC28J60 Ethernet
|
1079 |
controller).
|
1080 |
2. IP Gleaning is no longer enabled (STACK_USE_IP_GLEANING is not defined) by any of
|
1081 |
the default project files.
|
1082 |
3. The IP address, whenever it changes, is outputted out the RS232 serial port in
|
1083 |
human readable form. Any terminal program, such as HyperTerminal can be used to
|
1084 |
read it. This allows the IP address to be easily determined when DHCP is used.
|
1085 |
The serial port defaults to 19200 baud when CLOCK_FREQ in Compiler.h is properly
|
1086 |
defined.
|
1087 |
|
1088 |
|
1089 |
Additions:
|
1090 |
1. Microchip ENC28J60 Ethernet controller support. Support is included through the
|
1091 |
ENC28J60.c and ENC28J60.h files. Various other files were modified to take
|
1092 |
advantage of ENC28J60 specific features, like the hardware DMA/IP checksum engine.
|
1093 |
This new MAC driver incorporates several new functions which can be called from any
|
1094 |
layer above the MAC. The functions are:
|
1095 |
MACSetDuplex()
|
1096 |
MACPowerDown()
|
1097 |
MACPowerUp()
|
1098 |
MACSetPMFilter()
|
1099 |
MACDisablePMFilter()
|
1100 |
CalcIPBufferChecksum()
|
1101 |
MACCalcRxChecksum()
|
1102 |
MACCalcTxChecksum()
|
1103 |
MACCopyRxToTx()
|
1104 |
See the ENC28J60.c file comments for function descriptions. The ENC28J60.c file
|
1105 |
also incroporates TestMemory() which can do a power on self test of various hardware
|
1106 |
functions. TestMemory() is included and used when MAC_POWER_ON_TEST is defined in
|
1107 |
StackTsk.h. It is undefined by default. Defining it will require some program
|
1108 |
memory.
|
1109 |
2. Announce module. Announce.c and announce.h have been added. When included in the
|
1110 |
project, STACK_USE_ANNOUNCE must be defined. This module will broadcast a UDP
|
1111 |
message to port 30303 containing the local MAC address whenever the local IP
|
1112 |
address changes. This addition is intended to facilitate device discovery on DHCP
|
1113 |
enabled networks and eliminate the need for an RS232 connection if board
|
1114 |
reconfiguration is not needed. To retrieve the UDP message on your computer, use
|
1115 |
the new MCHPDetect.exe program included in the \MCHPDetect subfolder.
|
1116 |
3. The spieeprom.c file was added to support SPI EEPROM chips for MPFS storage.
|
1117 |
ENC28J60.c and spieeprom.c may both be included and they will share the same SPI
|
1118 |
module.
|
1119 |
|
1120 |
|
1121 |
Improvements:
|
1122 |
1. Renamed files/edited files so that the HI-TECH compiler won't raise messages stating
|
1123 |
that include files were spelled wrong.
|
1124 |
2. Moved MAX_ICMP_DATA_LEN from StackTsk.c to ICMP.h file for easier maintenance.
|
1125 |
3. Corrected STACK_USE_SIIP typo in dhcp.c file - Thanks to Gisle J.B.
|
1126 |
4. Implemented UDP checksum logic in UDPProcess() in UDP.c file.
|
1127 |
5. Renamed CalcTCPChecksum() in tcp.c file to CalcIPBufferChecksum().
|
1128 |
6. Moved CalcIPBufferChecksum() to helpers.c to reuse it for UDP checksum calculation.
|
1129 |
7. Modified UDPProcess() in UDP.c and TCPProcess() in TCP.c to include localIP as third
|
1130 |
new parameter. This makes pseudo header checksum calculation correct in both
|
1131 |
functions. StackTsk.h, UDP.h and TCP.h files were also modified to reflect these
|
1132 |
changes.
|
1133 |
8. Modified TCP.C file to include compile-time check of STACK_USE_TCP define. If it is
|
1134 |
not defined, an error will be displayed.
|
1135 |
9. Removed an unnecessary call to MACDiscardRx() when an IP packet is received but
|
1136 |
fails version, options length, or header checksum tests.
|
1137 |
10. Changed LCD code to be compile time removable by undefining USE_LCD.
|
1138 |
|
1139 |
|
1140 |
Fixes:
|
1141 |
1. IPHeaderLen in IP.c is initialized properly now when IPGetHeader() is called.
|
1142 |
2. Under some circumstances, HandleTCPSeg() would acknowlege, but throw valid received
|
1143 |
TCP packets away, resulting in loss of application data. An invalid comparison in
|
1144 |
HandleTCPSeg() has been fixed to prevent this situation from occuring.
|
1145 |
*** Thanks go to Richard Shelquist for identifying this problem.
|
1146 |
3. Fixed StackTsk.c file so that if a static IP address is used and the LINK is
|
1147 |
removed, the node IP address is not cleared.
|
1148 |
4. Invalid ICMP echo replies are no longer generated for echo requests with a data
|
1149 |
length of 33 (one more than the configured maximum).
|
1150 |
5. Changed MAX_OPTIONS_LEN from 20 to 40. The maximum IP options length is now in
|
1151 |
agreement with the IP RFC.
|
1152 |
6. Changed IPSetRxBuffer() from a macro to a function. The function takes into
|
1153 |
account any options which may be present in the header of received IP packets.
|
1154 |
Previously, possible options were not taken into account when calculating the
|
1155 |
offset.
|
1156 |
|
1157 |
|
1158 |
Known Problems:
|
1159 |
1. Testing on the PICDEM.net demo board with the Realtek RTL8019AS Ethernet controller
|
1160 |
has not been done. Moving to the HPC Explorer demo board has resulted in pinout
|
1161 |
and other hardware changes.
|
1162 |
2. Sometimes when the FTP sever is used, an attempt to put a file is unsuccessful.
|
1163 |
The problem may be caused when an HTTP request to GET a file is made at the wrong
|
1164 |
time.
|
1165 |
3. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and
|
1166 |
possibly do not work.
|
1167 |
4. SNMP, TFTPc, LCD, SLIP modules have not been tested with this version.
|
1168 |
5. The stack may behave incorrectly if compiled using the Hitech compiler with a high
|
1169 |
optimizations setting.
|
1170 |
6. Serial numbers >32K will be displayed on the serial port as a negative value when
|
1171 |
C18 is used and the board is placed in configuration mode (RB0 button is depressed
|
1172 |
on power up).
|
1173 |
7. IP Gleaning may not get disabled when, through the RS232 configuration application,
|
1174 |
DHCP and IP Gleaning are disabled.
|
1175 |
8. The IP address being outputted out the RS232 port and through the Announce module
|
1176 |
does not happen when the IP address is configured using IP Gleaning.
|
1177 |
9. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c.
|
1178 |
Stack behavior when TCP_NO_WAIT_FOR_ACK is defined may be unexpected.
|
1179 |
|
1180 |
|
1181 |
|
1182 |
********
|
1183 |
v2.20.04.01: 9/24/03
|
1184 |
********
|
1185 |
1. Recreated MPLAB projects to avoid problems when source is not at \MCHPStack location.
|
1186 |
|
1187 |
|
1188 |
********
|
1189 |
v2.20.04: 9/5/03
|
1190 |
********
|
1191 |
Fixes:
|
1192 |
1. Modified DHCPReset() in DHCP.c to not reset DHCP state machine if it was previously
|
1193 |
disabled using DHCPDisable(). This would make sure that if DHCP module was enabled
|
1194 |
and application had run-time disabled DHCP and network cable is disconnected,
|
1195 |
stack will not clear its IP address.
|
1196 |
|
1197 |
2. Rebuilt mib2bib.exe file with static library options. This fixes problem where
|
1198 |
one tries to execute this exe, an error occurs about missing DLLs.
|
1199 |
|
1200 |
|
1201 |
********
|
1202 |
v2.20.03:
|
1203 |
********
|
1204 |
Improvements:
|
1205 |
1. When DHCP is enabled, LINK is monitored and IP address is reset on disconnect.
|
1206 |
New IP configuration is obtained on LINK reconnect. - For RealTek only.
|
1207 |
Modified DHCP.c to add DHCPReset()
|
1208 |
Modified MAC.c to add MACIsLinked()
|
1209 |
Modified StackTsk.h to add BYTE_VAL def.
|
1210 |
|
1211 |
Changes:
|
1212 |
1. Modified SMSC91c111.c to add empty MACIsLinked() - will be populated in next rev.
|
1213 |
|
1214 |
Bug Fixes:
|
1215 |
1. Corrected DHCP logic to accept first DHCP offer instead of second response.
|
1216 |
2. Corrected DHCP logic to check for chaddr in DHCP offer and accept one that
|
1217 |
matches with local MAC address. This will fix problem where if multiple
|
1218 |
nodes were on bus and all requested DHCP address, all would accept response
|
1219 |
from one server instead of verifying who was intended node.
|
1220 |
3. Fixed UDPClose() in UDP.c to use INVALID_UDP_PORT instead of INVALID_UDP_SOCKET
|
1221 |
because of which a closed socket would not be scanned correctly.
|
1222 |
4. Modified UDP.h to use long contsant designators for INVALID_UDP_OPRT
|
1223 |
to explicitly state that it is a long.
|
1224 |
|
1225 |
|
1226 |
|
1227 |
********
|
1228 |
v2.20.02:
|
1229 |
********
|
1230 |
Beta version containing TFTP client module.
|
1231 |
|
1232 |
Addition:
|
1233 |
1. TFTP Client module - See TFTPc.* and TFTPcDemo.c for more information.
|
1234 |
See MpTFTPcDemo and HtTFTPcDemo projects for build information.
|
1235 |
|
1236 |
Bug Fix:
|
1237 |
1. UDPIsGetReady() was modified to overcome compiler rule where only 8-bit value was
|
1238 |
used to evaluate non-zero condition.
|
1239 |
2. ARPResolve() in ARPTsk was fixed to clear Cache.IPAddr value.
|
1240 |
|
1241 |
********
|
1242 |
v2.20.01:
|
1243 |
********
|
1244 |
Bug fix:
|
1245 |
1. Fixed SMSC91C111.c where MACInit() would hand if ethernet link is not detected.
|
1246 |
|
1247 |
|
1248 |
********
|
1249 |
v2.20:
|
1250 |
********
|
1251 |
Bug Fixes:
|
1252 |
1. General - Removed most of harmless warnings.
|
1253 |
2. C18Cfg.asm - Fixed "include" instead of "define".
|
1254 |
3. DHCP.c - Increased DHCP_TIMEOUT_VAL to 2 seconds.
|
1255 |
Fixed problem where UDP active socket was not set before calling UDP
|
1256 |
functions
|
1257 |
in SM_DHCP_BROADCAST state.
|
1258 |
4. MAC.c - Fixed MACIsTxReady() where under heavy traffic it would always return
|
1259 |
FALSE.
|
1260 |
This fixes bug where all high level applications would stop
|
1261 |
transmitting.
|
1262 |
5. TCP.c - Enabled portion of code that performs timeout logic even if
|
1263 |
TCP_NO_WAIT_ACK
|
1264 |
is defined. This fixes bug where occasionally, tcp applications such as
|
1265 |
HTTP server would stop working after few hours.
|
1266 |
6. UDP.c - Fixed UDPGet() where it would return FALSE on last good byte.
|
1267 |
Fixed UDPProcess() where it was calculating incorrect length.
|
1268 |
|
1269 |
Added bFirstRead flag with UDP sockets similar to TCP sockets
|
1270 |
so that whenever first UDP byte is read, MAC read pointer will be
|
1271 |
reset to begining of correct packet.
|
1272 |
This change fixes problem where if one transmits a packet while
|
1273 |
UDP packet is pending in a socket, next get to pending UDP socket would
|
1274 |
return wrong data. (This is apparent only when there is heavy network
|
1275 |
traffic)
|
1276 |
|
1277 |
Known Issues:
|
1278 |
1. HiTech v8.20 PL4 with all optimization enabled may not work properly.
|
1279 |
2. C18 "Static" and "Auto" mode may not be used - there are too many local variables to
|
1280 |
fit
|
1281 |
in standard stack of 256 bytes. One may modify linker script file to avoid this
|
1282 |
limitation.
|
1283 |
|
1284 |
|
1285 |
|
1286 |
Improvements:
|
1287 |
1. Modified TICK def. in Tick.h to unsigned long to support 32-bit wide SNMP tick.
|
1288 |
2. Added SNMP Module (SNMP.c)
|
1289 |
3. Added Two new demo projects - DemoSNMPApp and HtDemoSNMPApp.
|
1290 |
4. Created MPLAB 6.X projects for different demo configurations.
|
1291 |
5. MAC.c - Added MACGetTxOffset().
|
1292 |
6. MPFS.c - Added MPFSSeek(), MPFSTell().
|
1293 |
7. MPFSImg.*- Rebuilt to reflect v2.20, footprint changes etc.
|
1294 |
8. StackTsk.h- Enhanced WORD_VAL, DWORD_VAL defs.
|
1295 |
Added STACK_USE_SNMP and related compile-time checks.
|
1296 |
9. UDP.h - Added UDPSetTx and UDPSetRx macros.
|
1297 |
Moved UDP_SOCKET_INFO structure to header file.
|
1298 |
10. WebSrvr.c- Modifed MCHPStack version message and added DATE info to BoardSetup
|
1299 |
menu.
|
1300 |
11. Added support for SMSC LAN91C111 10/100 Non-PCI ethernet controller
|
1301 |
Use "SMSC91C111.C" instead of MAC.c.
|
1302 |
"mpnicee_smsc" is a sample project that uses PIC18F8720 and SMSC NIC.
|
1303 |
"MasterDemo.c" is a main source file for above project that includes
|
1304 |
all modules - must use device with more than 32KB of memory.
|
1305 |
|
1306 |
|
1307 |
|
1308 |
|
1309 |
********
|
1310 |
v2.11:
|
1311 |
********
|
1312 |
Bug Fixes:
|
1313 |
1. Fixed dhcp.c to make it work with new C18 startup code.
|
1314 |
|
1315 |
Improvements:
|
1316 |
1. Modified websrvr.c DownloadMPFS() to make use of compiler allocated XMODEM data block
|
1317 |
rather than use fixed address block starting at 0x400.
|
1318 |
|
1319 |
|
1320 |
********
|
1321 |
v2.10: 7/9/02
|
1322 |
********
|
1323 |
Bug Fixes:
|
1324 |
1. Fixed HTTP Server bug where a form submission with empty parameter value would not
|
1325 |
parse correctly.
|
1326 |
|
1327 |
|
1328 |
|
1329 |
********
|
1330 |
v2.0: 5/22/02
|
1331 |
********
|
1332 |
|
1333 |
********
|
1334 |
New Modules:
|
1335 |
********
|
1336 |
1. Added UDP, DHCP, FTP and IP Gleaning
|
1337 |
2. Added PICDEM.net LCD support
|
1338 |
3. Added board setup through RS-232.
|
1339 |
|
1340 |
********
|
1341 |
Improvements:
|
1342 |
********
|
1343 |
1. Optimized serial EEPROM access routines in terms of speed and size
|
1344 |
(Replaced ee256.* files with eeprom*.h)
|
1345 |
2. Improved board setup through RS-232.
|
1346 |
|
1347 |
********
|
1348 |
Known Issues:
|
1349 |
********
|
1350 |
1. LCD may not display properly on MCLR only.
|
1351 |
Workaround: 1. Debug XLCDInit() routine in "xlcdlh"
|
1352 |
2. Always do POR reset.
|
1353 |
|
1354 |
2. SLIP connection is not very robust.
|
1355 |
Workaround: None at this time.
|
1356 |
|
1357 |
3. Hi-Tech Compiler:
|
1358 |
1. Aggressive optimization breaks the functionality.
|
1359 |
Workaround: Apply optimization listed in each source file comment
|
1360 |
header.
|
1361 |
2. In order to use V8.12, you will need to remove "FTP Server" from
|
1362 |
Ht*.pjt.
|
1363 |
You will also need to disable all optimizations.
|
1364 |
|
1365 |
4. C18 Compler: 1. Static model does not compile.
|
1366 |
Workaround: None at this time.
|
1367 |
2. Overlay model breaks the functionality.
|
1368 |
Workaround: None at this time.
|
1369 |
3. All modules does not fit in 32KB memory.
|
1370 |
Workaround: 1. None at this time.
|
1371 |
2. Sample project disables some modules.
|
1372 |
|
1373 |
|
1374 |
********
|
1375 |
New Files:
|
1376 |
********
|
1377 |
========================================================================================
|
1378 |
====================================
|
1379 |
File Purpose
|
1380 |
========================================================================================
|
1381 |
====================================
|
1382 |
1. delay.* Provides CLOCK_FREQ depenent delay routines.
|
1383 |
2. dhcp.* DHCP client support
|
1384 |
3. ftp.* FTP server
|
1385 |
4. udp.* UDP socket support
|
1386 |
5. xeeprom.* Improved ee256.* and renamed.
|
1387 |
6. xlcd.* External LCD support.
|
1388 |
7. version.log To track changes and history.
|
1389 |
|
1390 |
|
1391 |
********
|
1392 |
Changes:
|
1393 |
********
|
1394 |
========================================================================================
|
1395 |
====================================
|
1396 |
File Change
|
1397 |
To-do for v1.0 stack applications
|
1398 |
========================================================================================
|
1399 |
====================================
|
1400 |
1. arptsk.c 1. Fixed STACK_CLIENT_MODE compile errors.
|
1401 |
None
|
1402 |
2. Modifed ARPIsResolved() to support IP Gleaning
|
1403 |
None
|
1404 |
|
1405 |
2. c18cfg.asm 1. Added PIC18F452 configuration
|
1406 |
None
|
1407 |
2. Fixed "include" errors.
|
1408 |
None
|
1409 |
|
1410 |
3. compiler.h 1. Included "stdlib.h" in both C18 and Hi-Tech compilers.
|
1411 |
None
|
1412 |
2. Moved CLOCK_FREQ from "stacktsk.h" to this file.
|
1413 |
None
|
1414 |
3. Added PORTA defs.
|
1415 |
None
|
1416 |
|
1417 |
4. htnicee.pjt 1. Removed "ee256.c".
|
1418 |
None
|
1419 |
2. Added "udp.c", "dhcp.c", "ftp.c", "xlcd.c", "xeeprom.c" files
|
1420 |
Add these files if needed.
|
1421 |
|
1422 |
5. htnicpg.pjt None
|
1423 |
|
1424 |
6. htslee.pjt 1. Removed "ee256.c".
|
1425 |
None
|
1426 |
2. Added "ftp.c", "xlcd.c", "xeeprom.c" files
|
1427 |
None
|
1428 |
|
1429 |
7. http.c 1. Included compile-time verification that HTTP module is included.
|
1430 |
None
|
1431 |
2. Put HTTP message strings into one array "HTTPMessages".
|
1432 |
None
|
1433 |
3. Modified to return "Service Unavailable" message if MPFS is being
|
1434 |
None
|
1435 |
remotely programmed.
|
1436 |
4. Modified SendFile() to make use of sequential EEPROM read.
|
1437 |
None
|
1438 |
|
1439 |
8. ip.c 1. Added one more paramter to IPGetHeader() to support IP Gleaning
|
1440 |
Custom apps using IP needs to be
|
1441 |
|
1442 |
modified.
|
1443 |
|
1444 |
9. mac.c 1. Replaced fixed delay routines with CLOCK_FREQ dependent
|
1445 |
None
|
1446 |
routines
|
1447 |
|
1448 |
10. mpfs.c 1. Replaced ee256.h with xeeprom.h.
|
1449 |
None
|
1450 |
2. Added MPFSFormat(), MPFSPut() etc. routines
|
1451 |
None
|
1452 |
3. Added sequential read and page write operations
|
1453 |
Custom apps using MPFS directly
|
1454 |
|
1455 |
needs to be modified.
|
1456 |
4. Defined MPFS_WRITE_PAGE_SIZE for MPFSPut operations.
|
1457 |
Apps using different EEPROM page size
|
1458 |
|
1459 |
needs to be modified.
|
1460 |
|
1461 |
11. mpnicee.pjt 1. Removed "ee256.c"
|
1462 |
None
|
1463 |
2. Added "xcld.c", "xeeprom.c" files
|
1464 |
None
|
1465 |
|
1466 |
12. stacktsk.c 1. Replaced ee256.h with xeeprom.h
|
1467 |
None
|
1468 |
2. Added IP Gleaning and DHCP support.
|
1469 |
None
|
1470 |
|
1471 |
13. stacktsk.h 1. Moved CLOCK_FREQ to compiler.h
|
1472 |
None
|
1473 |
2. Added STACK_USE_DHCP, STACK_USE_FTP_SERVER etc. options
|
1474 |
None
|
1475 |
3. Added compile-time enable/disable of modules based on selection
|
1476 |
of higher level modules.
|
1477 |
None
|
1478 |
4. Modified MY_DEFAULT_MAC_BYTE? to use Microchip OUI id.
|
1479 |
None
|
1480 |
5. Added compiler-time check to confirm available TCP sockets
|
1481 |
None
|
1482 |
6. Added MSB and LSB macros.
|
1483 |
None
|
1484 |
7. Added SerialNumber etc. to AppConfig structure
|
1485 |
None
|
1486 |
8. Commented module selection defines: They are defined by cmopiler
|
1487 |
None
|
1488 |
command-line options.
|
1489 |
Real application should define them here in this file.
|
1490 |
|
1491 |
14. tcp.c 1. Moved TCP_STATE and TCP_INFO to .h file.
|
1492 |
None
|
1493 |
2. Fixed TCPIsConnected()
|
1494 |
None
|
1495 |
3. Fixed TCPDisconnect()
|
1496 |
None
|
1497 |
4. Modified TransmitTCP() to set receive window of one segment
|
1498 |
None
|
1499 |
5. Modified TransmitTCP() to use max segment size equal to
|
1500 |
predefined value.
|
1501 |
None
|
1502 |
6. Improved TCP State machine
|
1503 |
None
|
1504 |
|
1505 |
15. tick.c 1. Modified TICK type to 16-bit.
|
1506 |
None
|
1507 |
2. Made use of TICK_PRESCALE_VALUE
|
1508 |
None
|
1509 |
3. Added code to blink PICDEM.net "System LED"
|
1510 |
Remove if not required.
|
1511 |
|
1512 |
16. websrvr.c 1. Added LCD support
|
1513 |
N/A
|
1514 |
2. Made TickUpdate() on Timer0 interrupt
|
1515 |
N/A
|
1516 |
3. Added code to save/restore board configuration
|
1517 |
N/A
|
1518 |
4. Added board setup via RS-232.
|
1519 |
N/A
|
1520 |
5. Added call to FTP modules
|
1521 |
If needed, add this.
|