| Line No. | Rev | Author | Line |
|---|---|---|---|
| 1 | 32 | kaklik | ******** |
| 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 | v5.25 07 May 2010 |
||
| 11 | ******** |
||
| 12 | Changes: |
||
| 13 | 1. Added support for the Microchip MRF24WB0 802.11 WiFi controller (module |
||
| 14 | part number MRF24WB0MA). This product is intended as a backwards |
||
| 15 | compatible, drop in replacement to the ZG2100. The MRF24WB0MA should work |
||
| 16 | with previous TCP/IP Stack versions as if it were a ZG2100M, but when the |
||
| 17 | MRF24WB0MA is used with this (5.25) and future TCP/IP Stack versions, |
||
| 18 | feature improvements inside the MRF24WB0 allow the TCP/IP Stack code/RAM |
||
| 19 | size to be smaller and run faster. |
||
| 20 | 2. Dropped support for the ZeroG ZG2100 802.11 WiFi controller. Applications |
||
| 21 | that must stay with this device should continue to use TCP/IP Stack |
||
| 22 | version 5.20b or earlier. All new projects or preexisting projects |
||
| 23 | undergoing updates should be developed with the MRF24WB0 instead. Contact |
||
| 24 | Microchip if you have a ZeroG ZG2100 802.11 WiFi PICtail Plus daughter card |
||
| 25 | and are interested in the MRF24WB0MA 802.11 WiFi PICtail Plus daughter |
||
| 26 | card. |
||
| 27 | 3. The WiFi connection management state machines now run on the MRF24WB0 |
||
| 28 | instead of the PIC host, freeing up code and data space. Connection profiles |
||
| 29 | can be created and the connection algorithm fine-tuned by the PIC |
||
| 30 | application. In the WiFi demos see the WF_Connect function in MainDemo.c for |
||
| 31 | an example of how to configure and then establish a WiFi connection. The |
||
| 32 | programming model has changed to an API model which is documented in |
||
| 33 | 'TCPIP Stack Help.chm'. |
||
| 34 | 4. Changed "VERSION" macro definition in TCPIP.h to "TCPIP_STACK_VERSION". |
||
| 35 | "VERSION" is overly generic and will likely conflict with other identical |
||
| 36 | tokens one may use in their application code or source libraries. |
||
| 37 | 5. Added support for the PIC24FJ256GA110, PIC24FJ256GB110 and PIC24FJ256GB210 |
||
| 38 | PIMs for the Explorer 16. Note that when using the PIC24FJ256GA110 |
||
| 39 | general purpose PIM, the Ethernet PICtail Plus, Fast 100Mbps Ethernet |
||
| 40 | PICtail Plus, MRF24WB0MA Wi-Fi PICtail Plus, or other SPI PICtail daughter |
||
| 41 | board should be installed in the middle SPI2 slot of the Explorer 16, not |
||
| 42 | the ordinary topmost SPI1 slot used by other PIMs, including the |
||
| 43 | PIC24FJ256GB110 and PIC24FJ256GB210 ones. The software is set up to use |
||
| 44 | SPI2 for the PIC24FJ256GA110 PIM to avoid incompatibilities with silicon |
||
| 45 | revision A3, which does not allow the SCK1 pin to be configured as a PPS |
||
| 46 | output. |
||
| 47 | 6. Added support for the PIC24FJ256DA210 Development Board. |
||
| 48 | 7. Added TFTPUploadRAMFileToHost(), TFTPUploadFragmentedRAMFileToHost() and |
||
| 49 | TFTPGetUploadStatus() APIs to the TFTPc.c file. These APIs provide a very |
||
| 50 | simple means of uploading a whole file to a remote TFTP server without |
||
| 51 | requiring a great deal of application state machine logic. These APIs |
||
| 52 | require the DNS client module to be enabled (STACK_USE_DNS must be defined, |
||
| 53 | in addition to STACK_USE_TFTP_CLIENT). |
||
| 54 | 8. Added a dummy DNS Server module. This server always sends the local IP |
||
| 55 | address in response to all queries received. When using the PIC DHCP |
||
| 56 | server, its purpose is to allow a user to type anything into a web browser |
||
| 57 | (ex: http://asdf/) and still receive the web page provided by the PIC, much |
||
| 58 | as a hotel or airport WiFi router will serve to you before you've paid or |
||
| 59 | agreed to the network's terms of service. This DNS server module is |
||
| 60 | implemented in DNSs.c, requires one UDP socket, and is enabled via the |
||
| 61 | STACK_USE_DNS_SERVER option in TCPIPConfig.h. |
||
| 62 | 9. Changed SPIFlash.h file defaults to target an SST SPI Flash with 4096 byte |
||
| 63 | sectors instead of a Spansion Flash with 65536 byte sectors. These new |
||
| 64 | defaults are, among other reasons, in support of the PIC24FJ256DA210 |
||
| 65 | Development Board, which has an SST SST25VF016B on it. |
||
| 66 | 10. Made TCP Keep-Alive packets consistently get sent TCP_KEEP_ALIVE_TIMEOUT |
||
| 67 | (default 10 seconds) after the last socket TX or RX activity. In earlier |
||
| 68 | stack versions, if the local node transmitted some data and then let the |
||
| 69 | socket go idle, the first Keep-Alive packet sent would use the |
||
| 70 | TCP_START_TIMEOUT_VAL (default 1 second) timer value before getting sent. |
||
| 71 | While benign in terms of application behavior, these faster than normal |
||
| 72 | keep-alive transmissions were distracting when viewed in Wireshark or other |
||
| 73 | packet capture tools. |
||
| 74 | 11. Disabled STACK_USE_DYNAMICDNS_CLIENT option in TCPIPConfig.h by default for |
||
| 75 | the TCPIP Demo App and TCPIP ENCX24J600 Demo App projects. This option was |
||
| 76 | enabled by default in earlier stack releases. This was done to save code |
||
| 77 | size and allow out-of-box compilation on devices with 128KB of Flash when |
||
| 78 | not using compiler optimizations. The TCPIP PIC32 ETH Demo App project |
||
| 79 | continutes to have this option enabled by default. |
||
| 80 | 12. Added SNMP v2 TRAP PDU format. Macro SNMP_STACK_USE_V2_TRAP is used to |
||
| 81 | enable the SNMP v2 trap format. New API function SNMPV2TrapDemo() is |
||
| 82 | included to support more than one variable binding to the SNMPv2 TRAP. This |
||
| 83 | API can be used for a single SNMPv2 TRAP variable varbind and is part of |
||
| 84 | CustomSNMPApp.c. A multiple variable binding demo can be enabled |
||
| 85 | MainDemo.c. One should not enable both SNMPTrapDemo and SNMPV2TrapDemo |
||
| 86 | simultaneously. Global flag "gSetTrapSendFlag" is used to indicate the |
||
| 87 | start and end of SNMPv2 trap varbinds. If gSetTrapSendFlag is FALSE, then |
||
| 88 | very next variable varbind for the SNMPv2 TRAP, is the last or only one |
||
| 89 | variable varbind. If gSetTrapSendFlag is TRUE, then there is another |
||
| 90 | variable varbind available to be part of the SNMPv2 TRAP PDU. |
||
| 91 | 13. Added support for PIC32MX6XX/7XX external PHY's: SMSC 8700LAN and National |
||
| 92 | DP83640. |
||
| 93 | 14. Added schematics and BOM for the PIC32 Ethernet Starter Kit. |
||
| 94 | 15. Added the Google PowerMeter demo project. Consult the "Reference |
||
| 95 | Implementation for Google PowerMeter.chm" help file for more information. |
||
| 96 | 16. Modified the SSL and TCP modules to create the TCPStartSSLClientEx function. |
||
| 97 | This function will enable the SSL module to store supplementary data |
||
| 98 | (currently only SSL Certificate Public Keys) in a structure. |
||
| 99 | 17. Moved the HTTP_PORT, HTTPS_PORT, HTTP_MAX_DATA_LEN, and HTTP_MIN_CALLBACK_FREE |
||
| 100 | macros from HTTP2.c to TCPIPConfig.h. |
||
| 101 | |||
| 102 | |||
| 103 | Fixes: |
||
| 104 | 1. The SPIFlashEraseSector() function in the SPIFlash.c file incorrectly erased |
||
| 105 | the sector specified by the current write pointer (set by calling |
||
| 106 | SPIFlashBeginWrite()) instead of the specified dwAddr parameter address. |
||
| 107 | This error had no impact on any TCP/IP Stack code as these parameters always |
||
| 108 | matched. However, application code using the API would have been affected. |
||
| 109 | Thanks go to Marc Boon for reporting this issue on the Microchip Ethernet |
||
| 110 | forum. |
||
| 111 | 2. Fixed ENC424J600/624J600 driver for PSP modes 2, 4, 6, and 10. The PIC's |
||
| 112 | PMP PMMODE<9:8> bits were not set correctly. |
||
| 113 | 3. Removed from lingering references to TickGetDiff() in FTP.c, TFTPc.c and |
||
| 114 | UARTConfig.c. |
||
| 115 | 4. Fixed DNS client module from returning the DNS server IP address if the DNS |
||
| 116 | query failed due to a server error (i.e. DNS did respond, but did not |
||
| 117 | return any records, such as when attempting to resolve a name that isn't in |
||
| 118 | the DNS). DNSIsResolved() will now return 0.0.0.0 on any non-recoverable |
||
| 119 | DNS error or timeout. |
||
| 120 | 5. Fixed HTTP2 MPFS upload page being accessible from URLs that weren't an |
||
| 121 | exact match. For example, in 5.20 and earlier, accessing |
||
| 122 | http://mchpboard/mpfsuploadASDF would still have opened the mpfsupload page. |
||
| 123 | Thanks go to Andrea Rivolta on the Microchip Ethernet Forum for identifying |
||
| 124 | this error. |
||
| 125 | 6. Improved UDP TX checksum code for the special case when the computed |
||
| 126 | checksum was 0x0000. According to the UDP RFC, for this corner case, the |
||
| 127 | checksum should be converted to 0xFFFF before transmission to differentiate |
||
| 128 | from the checksum disabled case, improving error detection by a minuscule |
||
| 129 | amount. |
||
| 130 | 7. Fixed GetCLKOUT() function in ENCX24J600.c driver file. Previously, 0x00 |
||
| 131 | would always be returned, regardless of the value in the COCON bits of |
||
| 132 | ECON2. The function documentation for SetCLKOUT() and GetCLKOUT() was also |
||
| 133 | corrected (had obsolete information ported over from ENC28J60 driver file). |
||
| 134 | 8. Fixed DHCP client rebinding bug in which the DHCP client would request the |
||
| 135 | wrong IP address if an unrelated DHCP OFFER or ACK message were received |
||
| 136 | after we transmitted a DHCP REQUEST but before we received our DHCP ACK. |
||
| 137 | Under rare conditions, this would have resulted in the TCP/IP stack |
||
| 138 | reverting to the static or AutoIP assigned address for a few seconds |
||
| 139 | between DHCP lease renewals. |
||
| 140 | 9. Fixed TFTP Internet Bootloader bug in which uncommon .hex files containing |
||
| 141 | a certain data pattern could not be uploaded correctly to the PIC18F97J60 |
||
| 142 | family device. For these problem .hex files, a block of 32 program words |
||
| 143 | (64 bytes) would remain unprogrammed (left as 0xFFFF) due to a parsing error |
||
| 144 | in the bootloader's DecodeHex() function. The TFTP upload operation would |
||
| 145 | succeed without reporting a programming error. The problem can be detected |
||
| 146 | by using an ICD3 or similar ICSP programmer and reading the program Flash |
||
| 147 | out of a device that is programmed with the bootloader and application .hex |
||
| 148 | files. Compare the resulting memory dump to a device programmed only with |
||
| 149 | the application .hex file. If you have devices deployed in the field with |
||
| 150 | the previous bootloader and happen to generate a problem application .hex |
||
| 151 | file, you can potentially work around the bootloader bug by opening the |
||
| 152 | application .hex file with Notepad and appending dummy address records to |
||
| 153 | the beginning to move the data around in the file. For example, at the very |
||
| 154 | top of the .hex file, add lines containing ":020000040000FA" until the |
||
| 155 | bootload process works correctly. You may alternatively try adding spaces |
||
| 156 | at the end of any line, although this may make the .hex file incompatible |
||
| 157 | with some programming utilities. Thanks go to Jonathan Seidmann for |
||
| 158 | identifying and reporting this bug. |
||
| 159 | 10. Fixed SNMPv2 TRAP format issue where SNMP browser was displaying all the |
||
| 160 | SNMPv2 traps as SNMP version 1. SNMP v2 TRAP pdu format is rectified. |
||
| 161 | Macro SNMP_STACK_USE_V2_TRAP is used to form and send a SNMPv2 TRAP PDU. |
||
| 162 | SNMPTrapDemo API is used for both SNMPv1 and SNMPv2 single variable |
||
| 163 | varbind trap. |
||
| 164 | 11. Fixed an HTTP2.c server module initialization bug when using the |
||
| 165 | PIC32MX7XX/6XX series internal Ethernet module. During initialization the |
||
| 166 | HTTPLoadConn() function would overwrite over 100 bytes of PIC RAM past the |
||
| 167 | end of the reserved memory allocated for the HTTP2 module. This problem |
||
| 168 | would manifest itself by locking up the TCPIP PIC32 ETH Demo App-C32 demo |
||
| 169 | shortly after power up if you compiled TCP/IP Stack version 5.20 with the |
||
| 170 | MPLAB C Compiler for PIC32 MCUs (C32) version 1.11. |
||
| 171 | 12. Fixed SSL client from incorrectly parsing for the server's public key in |
||
| 172 | rare cases where the RSA Public Key Algorithm identifier was received, but |
||
| 173 | the key hadn't been received by TCP yet. Thanks go to Kevin Maimdnet for |
||
| 174 | identifing this error in SSL.c and reporting it via |
||
| 175 | http://support.microchip.com/. |
||
| 176 | 13. Fixed Tick.c TickGet(), TickGetDiv256() and TickGetDiv64K() APIs sometimes |
||
| 177 | returning the wrong value on PIC32 platforms. On the PIC32MX3XX/4XX family |
||
| 178 | devices a wrong return result would sometimes occur if using -O3 compiler |
||
| 179 | optimizations (maximum speed) with the Microchip MPLAB C Compiler for PIC32 |
||
| 180 | MCUs (C32). On the PIC32MX5XX/6XX/7XX family devices, such as the |
||
| 181 | PIC32MX795F512L device used on the PIC32 Ethernet Starter Kit, wrong values |
||
| 182 | could be returned, regardless of the compiler optimization level. |
||
| 183 | |||
| 184 | |||
| 185 | Known Problems: |
||
| 186 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 187 | result, it will likely not display correctly or work at all with some Telnet |
||
| 188 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 189 | is provided with Microsoft Windows. |
||
| 190 | 2. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 191 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 192 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 193 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 194 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 195 | boards to reenable it's DHCP server. |
||
| 196 | 3. HI-TECH PICC-18 compilers are not supported in this release. The supplied |
||
| 197 | HI-TECH PICC-18 MPLAB projects usually will not compile and/or link. |
||
| 198 | 4. LCDBlocking.c timing for the LCD_E_IO enable signal is too fast to meet |
||
| 199 | published data sheet limits for various LCD controllers when compiling for |
||
| 200 | a PIC32 running at > 43MHz. Despite this potential timing violation, the |
||
| 201 | LCD does normally work correctly on the precompiled PIC32 demos for the |
||
| 202 | Explorer 16 at 80MHz. |
||
| 203 | |||
| 204 | |||
| 205 | |||
| 206 | ******** |
||
| 207 | v5.20 18 November 2009 |
||
| 208 | ******** |
||
| 209 | Changes: |
||
| 210 | 1. Added PIC32MX7XX/6XX Family integrated Ethernet controller support. The |
||
| 211 | "TCPIP PIC32 ETH Demo App" folder was added to compile for the PIC32 |
||
| 212 | Ethernet Starter Kit. Ethernet driver files "ETHPIC32ExtPhy.c" and |
||
| 213 | "ETHPIC32IntMac.c" were added, in addition to the "ETHPIC32ExtPhyDP83848.c" |
||
| 214 | file, which is a specific driver file for the National DP83848 10/100 PHY. |
||
| 215 | 2. Added RFC 3927 Auto IP module. This module will automatically assign a |
||
| 216 | local IP address to the node in the 169.254.xxx.xxx private address range |
||
| 217 | (subnet mask 255.255.0.0) if a DHCP server is not present on the network or |
||
| 218 | the DHCP client is disable. The exact IP address chosen will be |
||
| 219 | pseudo-random, but as required by the protocol, it will perform gratuatous |
||
| 220 | ARPs to avoid clobbering anyone else's IP address. Also, unless there is an |
||
| 221 | address collision with a preexisting node on the network, the IP address |
||
| 222 | generated by the Auto IP module will not change between power cycle events |
||
| 223 | (random number generator is seeded by local MAC address). To enable this |
||
| 224 | module, STACK_USE_AUTO_IP must be defined in TCPIPConfig.h. When compiled |
||
| 225 | in, the module defaults to enabled, but will automatically yield to the |
||
| 226 | DHCP client module, which has higher priority. |
||
| 227 | 3. Added "TCPIP MDD Demo App" beta application projects. Projects in this |
||
| 228 | folder store the HTTP2 web pages in external FAT16/FAT32 formatted SD card |
||
| 229 | or USB Mass Storage media instead of an MPFS2 formatted EEPROM or SPI Flash. |
||
| 230 | For more information on these projects, see the "Running the TCPIP MDD Demo |
||
| 231 | App (Beta Release).pdf" file in the Microchip\Help folder. |
||
| 232 | 4. Expanded XEEReadArray() API's third length parameter from a BYTE to a WORD. |
||
| 233 | 5. Converted all variable declarations and type casts of TICK data type to |
||
| 234 | DWORD. The TICK typedef is now deprecated and will be removed in a future |
||
| 235 | stack release. This data type conflicts with the TICK structure used in |
||
| 236 | certain other Microchip software libraries. |
||
| 237 | 6. Added TCP_WINDOW_UPDATE_TIMEOUT_VAL option to the TCP.c file (default |
||
| 238 | 200ms). This timeout controls the time after calling TCPGet() or |
||
| 239 | TCPGetArray() before the stack will transmit a RX window update to the |
||
| 240 | remote node. Historically, the TCP_AUTO_TRANSMIT_TIMEOUT_VAL value was |
||
| 241 | used for this purpose (default 40ms). This change decreases the net window |
||
| 242 | update transmission overhead. If this adversely affects your application |
||
| 243 | RX performance (unlikely, but possible for certain communications patterns), |
||
| 244 | set TCP_WINDOW_UPDATE_TIMEOUT_VAL equal to or shorter than |
||
| 245 | TCP_AUTO_TRANSMIT_TIMEOUT_VAL to get the same or better behavior relative |
||
| 246 | to previous stack versions. |
||
| 247 | 7. Split TCP_MAX_SEG_SIZE configuration constant in TCP.c into separate |
||
| 248 | TCP_MAX_SEG_SIZE_TX and TCP_MAX_SEG_SIZE_RX configuration constants. |
||
| 249 | Previously, TCP_MAX_SEG_SIZE was used to limit both the maximum size of |
||
| 250 | transmit and receive packets. In cases where large TX FIFOs are allocated, |
||
| 251 | and the remote node advirtises a large Maximum Segment Size TCP option, this |
||
| 252 | change improves TCP transmit performance by roughly 10%. |
||
| 253 | 8. Renamed "Internet Radio App", "Internet Bootloader App" and "WiFi Iperf |
||
| 254 | App" folders to "TCPIP Internet Radio App", "TCPIP Internet Bootloader App" |
||
| 255 | and "TCPIP WiFi Iperf App" respectively. These new names ensure consistent |
||
| 256 | folder placement when viewing the Microchip Solutions folder with other |
||
| 257 | Microchip Application Libraries installed. |
||
| 258 | |||
| 259 | Fixes: |
||
| 260 | 1. Fixed SSL functionality (ex: HTTPS server) from failing when using the |
||
| 261 | ENC424J600 and ENC624J600 Ethernet controllers. In stack versions 5.00 and |
||
| 262 | 5.10, the BFSReg() and BFCReg() functions were being incorrectly used to set |
||
| 263 | and clear CRYPTEN (EIR<15>). ENC424J600/624J600 silicon errata #6 on |
||
| 264 | production silicon revision A2 prevents BFSReg() and BFCReg() from being |
||
| 265 | able to modify CRYPTEN. This resulted in the SSL RSA encrypt/decrypt |
||
| 266 | operations from ever finishing. The ENC424J600/624J600 errata #6 workaround |
||
| 267 | is now implemented in the ToggleCRYPTEN() function in ENCX24J600.c. |
||
| 268 | 2. Fixed an RSA padding error in the ENCX24J600.c's version of RSASetData() and |
||
| 269 | RSASetE() functions. This fixes the Bad Record MAC problem when using SSL |
||
| 270 | client APIs with the ENC424J600 and ENC624J600, as mentioned in the 5.10 |
||
| 271 | stack release notes' Known Problems section. Although unknown at the time |
||
| 272 | of release this problem also occurred in stack version 5.00. |
||
| 273 | 3. Fixed DNS client from mishandling DNS responses that did not use name |
||
| 274 | compression. Thanks go to Will Stone on the Microchip Ethernet forum for |
||
| 275 | identifying this bug. |
||
| 276 | 4. Fixed an ExtractURLFields() API bug which would incorrectly parse the URLs |
||
| 277 | containing other URLs. Ex: |
||
| 278 | "http://www.google.com/search?q=http://www.microchip.com/" |
||
| 279 | 5. Fixed TickGet(), TickGetDiv256(), and TickGetDiv64K() APIs from potentially |
||
| 280 | returning an incorrect time value (0x10000 ticks less than it should have) |
||
| 281 | on rare occasions when using a PIC32 and with compiler optimizations turned |
||
| 282 | on. The Tick.c module was also revised so that the IEC0 register does not |
||
| 283 | get written to via a load-modify-store operation on PIC32s so that it is |
||
| 284 | now possible for other application ISR functions to write to IEC0 without |
||
| 285 | risking state corruption. |
||
| 286 | 6. Fixed PIC32 Starter Kit Debugger losing access to the PIC32 target when the |
||
| 287 | project was run. JTAG was being disabled at run time, but the PIC32 |
||
| 288 | Starter Kit Debugger requires JTAG to communicate with the debug |
||
| 289 | executive. JTAG is now conditionally disabled on PIC32s when the |
||
| 290 | __MPLAB_DEBUGGER_PIC32MXSK macro is undefined. |
||
| 291 | 7. Fixed a Berkeley sockets API bug in which calling closesocket() on a |
||
| 292 | SOCK_STREAM type socket (TCP) did not actually close the socket if the |
||
| 293 | remote node did not first send a FIN to the local node. This would leak a |
||
| 294 | TCP socket each time the affected API calling sequence occurred and result |
||
| 295 | in no FIN getting transmitted to the remote node. |
||
| 296 | 8. Fixed an HTTP2 filename parsing bug that would occur when a web browser |
||
| 297 | submitted a request for a file with hex encoded characters in it. For |
||
| 298 | example, with stack version 5.10 and Firefox 3.5.3, typing |
||
| 299 | "http://mchpboard/%70rotect" into the URL field would have resulted in an |
||
| 300 | HTTP 404 not found error when "http://mchpboard/protect/index.htm" should |
||
| 301 | have been returned instead. Thanks go to Steve Tuttle for reporting this |
||
| 302 | issue and suggesting a solution. |
||
| 303 | 9. Fixed a Berkeley sockets API bug in which calling recvfrom() on a datagram |
||
| 304 | type socket (UDP) would return an incorrect remote IP address and port |
||
| 305 | number when the from pointer was non-NULL. |
||
| 306 | 10. Fixed HTTP2 server bug in which the HTTPReadPostName() function was failing |
||
| 307 | to convert the field name from URL encoding to plain-text. If the browser |
||
| 308 | posted, for example, a field named "Stock Remaining", it would have been |
||
| 309 | incorrectly returned from HTTPReadPostName() as "Stock+Remaining". |
||
| 310 | 11. In Stack 5.10, any new values you saved into AppConfig via the Network |
||
| 311 | Configuration demo web page would have been mishandled for WiFi projects. |
||
| 312 | HTTPPostConfig() in CustomHTTPApp.c of the TCPIP WiFi Demo App and TCPIP |
||
| 313 | Iperf Demo App projects were corrected so that they now write a magic 0x61 |
||
| 314 | marker into EEPROM/SPI Flash address 0x0000 to inidicate that the AppConfig |
||
| 315 | structure is valid in EEPROM/SPI Flash. This prevents the InitAppConfig() |
||
| 316 | function in MainDemo.c from restoring the default settings when changing |
||
| 317 | the values through the Network Configuration page. |
||
| 318 | 12. For WiFi projects, a Gratuitous ARP Work-around was implemented to work |
||
| 319 | around cases where access points send broadcast messages at data rates that |
||
| 320 | the ZG2100 cannot listen to. The define USE_GRATUITOUS_ARP (in |
||
| 321 | TCPIPConfig.h) turns this feature on or off. |
||
| 322 | |||
| 323 | Known Problems: |
||
| 324 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 325 | result, it will likely not display correctly or work at all with some Telnet |
||
| 326 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 327 | is provided with Microsoft Windows. |
||
| 328 | 2. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 329 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 330 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 331 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 332 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 333 | boards to reenable it's DHCP server. |
||
| 334 | 3. HI-TECH PICC-18 compilers are not supported in this release. The supplied |
||
| 335 | HI-TECH PICC-18 MPLAB projects usually will not compile and/or link. |
||
| 336 | 4. ENC624J600 PSP modes 2, 4, 6, and 10 do not work at this time. Some |
||
| 337 | Parallel Bit Bang modes may not work either. Some minor firmware changes |
||
| 338 | are needed. |
||
| 339 | 5. TCPIP ENCX24J600 Demo App-C18.mcp project does not compile by default using |
||
| 340 | MPLAB C Compiler for PIC18 MCUs (C18) version 3.34. There is not quite |
||
| 341 | enough program memory available on the PIC18F97J60 for the large number of |
||
| 342 | selected stack features to allow linking. To get this project to compile, |
||
| 343 | turn on compiler optimizations or disable one of the modules in |
||
| 344 | TCPIPConfig.h (ex: comment out STACK_USE_DYNAMICDNS_CLIENT). |
||
| 345 | |||
| 346 | |||
| 347 | |||
| 348 | |||
| 349 | ******** |
||
| 350 | v5.10 29 July 2009 |
||
| 351 | ******** |
||
| 352 | Changes: |
||
| 353 | 1. Added SSL capability to the Telnet server. If STACK_USE_SSL_SERVER is |
||
| 354 | defined, the Telnet server will now listen on port 992 for SSL secured |
||
| 355 | connections. If you do not have a telnets client, you can use an SSL proxy, |
||
| 356 | such as stunnel (http://www.stunnel.org/) to add SSL/TLS support to any |
||
| 357 | telnet client. |
||
| 358 | 2. Moved a number of string pointer tables in the HTTP.c, HTTP2.c, FTP.c, and |
||
| 359 | DynDNS.c files to allocate in ROM instead of RAM. This reduces around 120 |
||
| 360 | bytes of RAM usage in the HTTP2 server when compiled for the PIC18 or |
||
| 361 | PIC24/dsPIC platforms. The gains are even greater on PIC32 platforms. |
||
| 362 | 3. Added redefinition of SPIRAM*(), SPIFlash*(), and XEEPROM*() functions so |
||
| 363 | that when compiled and used without proper HardwareProfile.h definitions, |
||
| 364 | a more descript linker error will be generated instead of a mysterious |
||
| 365 | symbol not found error. |
||
| 366 | 4. Added several new APIs: |
||
| 367 | - ExtractURLFields() in Helpers.c. This function provides an easy |
||
| 368 | means of parsing an URL string and extracting the protocol, hostname, |
||
| 369 | port, file path, etc. Currently, this function is commented out to save |
||
| 370 | code space as no stack modules require it. However, it should work |
||
| 371 | correctly if you simply uncomment it (remove the #if 0...#endif around |
||
| 372 | it). |
||
| 373 | - strnchr() in Helpers.c. Finds the first occurrence of a character within |
||
| 374 | a string but limited to a maximum length before giving up. |
||
| 375 | - TCPPeek() and TCPPeekArray() in TCP.c. Reads from a TCP socket's RX |
||
| 376 | FIFO buffer without removing the data from the stream. |
||
| 377 | - TCPClose() in TCP.c. Disconnects a socket from the remote node (if |
||
| 378 | connected) and closes the socket handle, including for server type |
||
| 379 | sockets. This function is identical to the TCPDisconnect() API except |
||
| 380 | for the handling of server sockets. TCPDisconnect() returns server |
||
| 381 | sockets to the listning state and maintains the socket handle. TCPClose() |
||
| 382 | closes the socket and frees all associated resources, invalidating the |
||
| 383 | socket handle. |
||
| 384 | 5. Updated the DHCP client module: |
||
| 385 | - Modified so that it wouldn't attempt to transmit DHCP Discover packets |
||
| 386 | when the MAC layer reports no link (MACIsLinked() == FALSE). This avoids |
||
| 387 | main() while(1) loop performance degredation when you unplug the Ethernet |
||
| 388 | cable or lose association to your access point. |
||
| 389 | - Added capability of performing DHCP discovers and requests without |
||
| 390 | setting the BOOTP broadcast flag. Now, the DHCP client module will start |
||
| 391 | up and attempt to obtain an IP address with the broadcast flag set, but |
||
| 392 | if it fails the next DHCP retry will attempt to obtain the IP address |
||
| 393 | with the broadcast flag cleared. The flag will toggle back and fourth |
||
| 394 | between unicast mode and broadcast mode if no DHCP server responds. This |
||
| 395 | feature improves compatibility with certain DHCP servers and WiFi access |
||
| 396 | points. |
||
| 397 | - Added several new APIs including DHCPInit(), DHCPIsEnabled(), |
||
| 398 | DHCPStateChanged(), DHCPIsBound(), and DHCPIsServerDetected(). |
||
| 399 | - Removed the DHCPFlags DHCP_CLIENT_FLAGS global variable. Use the above |
||
| 400 | named APIs now to get equivalent functionality. |
||
| 401 | - Removed the DHCPBindCount global variable. To detect if the DHCP state |
||
| 402 | has changed, poll the new DHCPStateChanged() function. |
||
| 403 | - Removed the DHCPReset() API. To perform this operation, now call the |
||
| 404 | DHCPInit() API. Use 0x00 for the vInterface parameter. |
||
| 405 | 6. Removed deprecated TickGetDiff() macro. To get a tick difference, just |
||
| 406 | subtract the two values in-line. This macro was removed because it promoted |
||
| 407 | confusing code. Ex: a-b is different from b-a. However, it was not |
||
| 408 | contextually obvious which of the two was returned when TickGetDiff(a, b) |
||
| 409 | was called. |
||
| 410 | 7. Added PIC32MX460F512L USB and dsPIC33FJ256GP710 PIM support to the Explorer |
||
| 411 | 16 hardware profile for the TCPIP WiFi Demo App and WiFi IPerf App projects. |
||
| 412 | 8. Added all files needed for SSL (assuming the crypto libraries are present) |
||
| 413 | to the TCPIP WiFi Demo App-C30 and TCPIP WiFi Demo App-C32 projects. |
||
| 414 | 9. Converted TCPIP Demo App, TCPIP WebVend App, Internet Radio App, and |
||
| 415 | Internet Bootloader App MPLAB Build Directory Policy to compile in the |
||
| 416 | project folder instead of the source folder. This reduces the depedancies |
||
| 417 | on the MPLAB project include path and allows new projects to be created by |
||
| 418 | copying one of the pre-existing folders (ex: copy "TCPIP Demo App" to |
||
| 419 | "My App") without having problems including the wrong HardwareProfile.h and |
||
| 420 | TCPIPConfig.h files. |
||
| 421 | 10. Changed EEPROM/SPI Flash AppConfig record valid flag from 0x60 to 0x61 in |
||
| 422 | the TCPIP WiFi Demo App and WiFi Iperf App projects. This will force the |
||
| 423 | various EEPROM settings to get erased when switching between Ethernet and |
||
| 424 | WiFi projects. This is done since the AppConfig structure changes when |
||
| 425 | using WiFi (SSID string is added). |
||
| 426 | 11. The Wifi Iperf App and TCPIP WiFi Demo App projects have been optimized for |
||
| 427 | better performance. |
||
| 428 | |||
| 429 | |||
| 430 | Fixes: |
||
| 431 | 1. Fixed a TCPDisconnect() API bug in which the last few bytes of data (up to |
||
| 432 | the TCP socket's TX FIFO size less 532 bytes) was not transmitted and no |
||
| 433 | FIN was sent out if the TX FIFO was full of data when TCPDisconnect() |
||
| 434 | was called. This problem could have only occurred for TCP sockets with a |
||
| 435 | large TX FIFO (>=532 bytes). This problem could have been observed in |
||
| 436 | stack version 5.00's "TCPIP Demo App-C32 EXPLORER_16 32MX360F512L ENC624J600 |
||
| 437 | PSP 9.hex" precompiled application, among others, if you connected to the |
||
| 438 | TCPPerformanceTest.c module and then attempted to simultaneously access the |
||
| 439 | web server. The web server was returning data very slowly and failing to |
||
| 440 | send the last parts of each file requested by the browser. |
||
| 441 | 2. Eliminted a potential buffer overflow vulnerability from the |
||
| 442 | HTTPHeaderParseContentLength() function in HTTP2.c. If an oversized or |
||
| 443 | malformed Content-Length header is sent from the web client, the function |
||
| 444 | will now gracefully fail by returning an HTTP 400 Bad Request error page. |
||
| 445 | Thanks go to Mark Philipp for identifying this error and suggesting a |
||
| 446 | solution. |
||
| 447 | 3. Fixed a TCPOpen() problem in which the stack would continuously flood the |
||
| 448 | network with nearly back-to-back ARP query packets if a client socket was |
||
| 449 | created that specified a non-reachable remote IP address (ex: local gateway |
||
| 450 | was offline, or for destinations on the same subnet, the actual remote node |
||
| 451 | was offline). This problem would occur only after a few minutes (<10) had |
||
| 452 | passed since the PIC was last reset. Thanks go to Sergey of DPS TELECOM for |
||
| 453 | reporting this problem. |
||
| 454 | 4. Fixed linking problem with BigInt_helpers.S (PIC24/dsPIC only) when |
||
| 455 | targeting a PIC with more than 8KB of RAM. The interface registers (_iA, |
||
| 456 | _xA, _iB, _xB, _iR, and _wC) are now forced into near RAM. |
||
| 457 | 5. Cleaned up some uninitialized variable warnings in SNMP.c. |
||
| 458 | 6. Fixed a sequence variable traversal bug in SNMP.c. |
||
| 459 | 7. Cleaned up a large number of unsigned integer to signed integer comparison |
||
| 460 | warnings produced by the MPLAB C Compiler for PIC18 MCUs (C18) version |
||
| 461 | 3.32. With earlier versions of this compiler, these warnings would only be |
||
| 462 | generated as messages, so they did not get displayed by default. |
||
| 463 | 8. Some ENCX24J600 parallel bit bang modes work now. PSP Mode 5 indirect has |
||
| 464 | been tested. |
||
| 465 | 9. SSL client and server capabilities now work when using the ZeroG ZG2100M |
||
| 466 | WiFi interface. In the 5.00 stack release, attempting to enable the |
||
| 467 | STACK_USE_SSL_CLIENT or STACK_USE_SSL_SERVER TCPIPConfig.h options with |
||
| 468 | this network controller would have resulted in an error trap. If an LCD |
||
| 469 | was present, the LCD would display encRdPtrRAWId = encWrPtrRAWId when the |
||
| 470 | error occurred. |
||
| 471 | 10. The WiFi Iperf App demo locked up when an invalid command was entered at |
||
| 472 | the serial port console. This is now fixed. |
||
| 473 | 11. The WiFi Iperf App demo locked up when running with a PIC32 if iwconfig was |
||
| 474 | typed at the serial port console. This is now fixed. |
||
| 475 | 12. The Wifi Iperf App demo, when running on the PIC24 and PIC32, and compiled |
||
| 476 | with the Os option (min code size optimization), did not work. This is |
||
| 477 | now fixed. |
||
| 478 | 13. Change a lot of BerkeleyAPI.c internals. This may fix a number of BSD |
||
| 479 | API problems. |
||
| 480 | 14. Fix a problem with SNMP variables being inaccessible with certain unique |
||
| 481 | PEN numbers. |
||
| 482 | |||
| 483 | |||
| 484 | Known Problems: |
||
| 485 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 486 | result, it will likely not display correctly or work at all with some Telnet |
||
| 487 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 488 | is provided with Microsoft Windows. |
||
| 489 | 2. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 490 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 491 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 492 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 493 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 494 | boards to reenable it's DHCP server. |
||
| 495 | 3. HI-TECH PICC-18 compilers are not supported in this release. The supplied |
||
| 496 | HI-TECH PICC-18 MPLAB projects usually will not compile and/or link. |
||
| 497 | 4. ENC624J600 PSP modes 2, 4, 6, and 10 do not work at this time. Some |
||
| 498 | Parallel Bit Bang modes may not work either. Some minor firmware changes |
||
| 499 | are needed. |
||
| 500 | 5. SSL client code doesn't work with ENC424J600/624J600 devices. The remote |
||
| 501 | server terminates the connection reporting a bad record MAC (Message |
||
| 502 | Authentication Code). The SSL client does work with other controllers. |
||
| 503 | |||
| 504 | |||
| 505 | |||
| 506 | ******** |
||
| 507 | v5.00 27 April 2009 |
||
| 508 | ******** |
||
| 509 | Changes: |
||
| 510 | 1. Added ZeroG ZG2100 802.11 WiFi controller support. The new TCPIP WiFi Demo |
||
| 511 | App and WiFi Iperf App projects have been added, which default to using this |
||
| 512 | controller. |
||
| 513 | 2. Added Microchip ENC424J600/624J600 10/100 Ethernet controller support. |
||
| 514 | Support for this controller is provided by the new ENCX24J600.c/.h files |
||
| 515 | which perform the same role as the ENC28J60.c/.h or ETH97J60.c/.h files. |
||
| 516 | Precompiled .hex files for the ENC624J600 controller require the use of the |
||
| 517 | new Fast 100Mbps Ethernet PICtail Plus daughter card (AC164132). This |
||
| 518 | product is not available at the time of the 5.00 TCP/IP stack release. |
||
| 519 | However, it is anticipated to be available for purchase on |
||
| 520 | www.microchipdirect.com in CQ3 2009. |
||
| 521 | 3. Significantly updated the Internet Radio App project. Previously, radio |
||
| 522 | stations were hard coded into program memory at compile time. Now, a |
||
| 523 | dynamic Shoutcast directory client has been implemented which allows |
||
| 524 | retrieval of radio stations at run time, offering endless stations you can |
||
| 525 | tune into. The web pages for the radio have also been updated to allow |
||
| 526 | control and status reporting of the board from a web browser. |
||
| 527 | 4. Update SNMP Server (Agent) module to support SNMPv2C. The default Demo App |
||
| 528 | web pages now include an SNMP reconfiguration capability to set the read |
||
| 529 | and write community strings. |
||
| 530 | 5. Added ICMPSendPingToHost() and ICMPSendPingToHostROM() APIs to ICMP (ping) |
||
| 531 | client module. These two APIs are available only when STACK_USE_ICMP_CLIENT |
||
| 532 | and STACK_USE_DNS is defined in TCPIPConfig.h. These functions allow |
||
| 533 | pinging of DNS hostnames directly without the need for the application to |
||
| 534 | convert the hostname to an IP address first by manually calling the DNS |
||
| 535 | client APIs. With this addition, the PingDemo.c file was updated to ping |
||
| 536 | the hostname "ww1.microchip.com" instead of a static IP address. Previously, |
||
| 537 | the PingDemo would stop working a couple of months after the stack was |
||
| 538 | released, due to the IP address of the www.microchip.com server dynamically |
||
| 539 | changing. If the DNS module is not enabled, the ping demo will instead ping |
||
| 540 | the local gateway IP address instead of ww1.microchip.com. |
||
| 541 | 6. Updated TCPPerformanceTest.c code. The previous version would generate |
||
| 542 | incorrect speed calculations at high data rates (ex: >1Mbyte/sec). |
||
| 543 | 7. Added multiple connection support to Telnet server example module. To |
||
| 544 | allow multiple connections, define MAX_SIMULTANEOUS_CONNECTIONS in Telnet.c |
||
| 545 | greater than 1 and create an equal number of TCP_PURPOSE_TELNET type TCP |
||
| 546 | sockets in the TCPSocketInitializer[] definition in TCPIPConfig.h. |
||
| 547 | 8. Added more randomness to the local port selection when opening a client-mode |
||
| 548 | TCP socket. This reduces the risk of reusing a previously used port number |
||
| 549 | if the user power cycles the device. |
||
| 550 | 9. Updated XEE* SPI EEPROM API functions. Writes are no longer required to |
||
| 551 | start on an EEPROM page boundary, and writes can now be arbitrarily long |
||
| 552 | without having to call XEEEndWrite() at each page boundary. Additionally, |
||
| 553 | the XEEWriteArray() API has been added, which performs a similar operation |
||
| 554 | to the SPIFlashWriteArray() API (but with no special erase cases to worry |
||
| 555 | about). |
||
| 556 | 10. Decoupled AppConfig storage in external SPI EEPROM or SPI Flash option from |
||
| 557 | MPFS_USE_EEPROM and MPFS_USE_SPI_FLASH options. MainDemo.c will now save |
||
| 558 | the AppConfig structure in external non-volatile memory, even if MPFS is |
||
| 559 | unused (no HTTP or SNMP server modules enabled) or MPFS is using internal |
||
| 560 | Flash program memory to store web pages/bib information. This change also |
||
| 561 | allows the XEE*() and SPIFlash*() non-volatile read/write functions to be |
||
| 562 | available at all times (even if MPFS is unused), as long as the appropriate |
||
| 563 | hardware pinout definitions are present in HardwareProfile.h. SPI Flash and |
||
| 564 | SPI EEPROM are no longer mutually exclusive with each other. However, if |
||
| 565 | both are enabled simultaneously, AppConfig will be stored in the EEPROM, not |
||
| 566 | the SPI Flash. |
||
| 567 | 11. Added required SSL files to TCPIP Demo App MPLAB projects. SSL capabilities |
||
| 568 | can now be turned on directly via the STACK_USE_SSL_SERVER and |
||
| 569 | STACK_USE_SSL_CLIENT options in TCPIPConfig.h for these projects, assuming |
||
| 570 | appropriate crypto libraries are installed (SW300052 available from |
||
| 571 | https://www.microchipdirect.com/). With this change, the historical "SSL |
||
| 572 | Demo App" folder has been removed. |
||
| 573 | 13. Updated HardwareProfile.h files. This includes the addition of PIC18 |
||
| 574 | Explorer board support, removal of the PICDEM Z profile, changes to the |
||
| 575 | HI-TECH PICC-18 profiles for newer compilers, among other changes. |
||
| 576 | 14. Added a TCP and UDP performance test measurements table to TCPIP Stack |
||
| 577 | Help (TCPIP Stack Help.chm). Access this from the "Microchip TCP/IP Stack" |
||
| 578 | book, "Stack Performance" page. |
||
| 579 | 15. Updated MPFSlib project (Microchip.MPFS.dll file) so that C18 and C32 output |
||
| 580 | from the MPFS2.exe utility is now identical for MPFS2 images. The generated |
||
| 581 | .c file is now compatible with both C18 and C32 compilers simultaneously. |
||
| 582 | Previously, the images generated for C18 would compile successfully for C32 |
||
| 583 | projects, but would potentially operate incorrectly when compiler |
||
| 584 | optimizations were turned on. Images generated for C32 would compile |
||
| 585 | successfully and work on C18 projects, but the C18 compiler would take a very |
||
| 586 | long time to process the file each time you rebuilt your MPLAB project. Now, |
||
| 587 | the image generated for C18 matches the image generated for C32 and it will |
||
| 588 | compile fast and work correctly on both platforms, even with compiler |
||
| 589 | optimizations turned on. |
||
| 590 | 16. Added schematics and BOMs for the Ethernet PICtail, Ethernet PICtail Plus, |
||
| 591 | Fast 100Mbps Ethernet PICtail Plus, Internet Radio, PICDEM.net 2, and ZeroG |
||
| 592 | ZG2100M PICtail development boards to the "Microchip\TCPIP Stack\Demo Board |
||
| 593 | Files" folder. |
||
| 594 | |||
| 595 | |||
| 596 | Fixes: |
||
| 597 | 1. Fixed a denial of service vulnerability in the NBNSGetName() function of the |
||
| 598 | NBNS.c file. Previously, if a deliberately malformed packet was received, |
||
| 599 | the PIC RAM could have become corrupted. Thanks go to David Talmage for |
||
| 600 | finding this vulnerability. |
||
| 601 | 2. Fixed Timer1 interrupt flag clearing code on PIC32 products. Previously, |
||
| 602 | the Tick.c module was clearing the interrupt flag in an unsafe manner which |
||
| 603 | could have corrupted other interrupt flags in the IFS0 register. Thanks go |
||
| 604 | to Leon van Snippenberg working on the AVIX-RT RTOS for pointing this error |
||
| 605 | out on the Microchip forums. |
||
| 606 | 3. Fixed SNMP up-time variable. Previously the CustomSNMPApp.c module would |
||
| 607 | respond with the number of Tick API ticks that elapsed, not the number of |
||
| 608 | 10ms time slices that elapsed. The SNMP standard uses 10ms as its time base. |
||
| 609 | 4. Fixed BigInt_helper.asm's _masBI() and _masBIROM() functions when the Br |
||
| 610 | parameter's length modulo 4 was equal to 1 or 2. This bug previously caused |
||
| 611 | the BigIntMod() function to sometimes go into an endless calculation loop on |
||
| 612 | PIC18 products when using the SSL libraries and certain combinations of |
||
| 613 | modulus data and length were used. Thanks go to Vasil Stoianov on the |
||
| 614 | Microchip Ethernet forum for running into this defect and reporting it. |
||
| 615 | 5. Fixed SSLSessionNew() so that it wouldn't "lose" SSL sessions after waiting a |
||
| 616 | few hours. This would previously make it impossible to make new SSL |
||
| 617 | connections after a while, but then after a few more hours, the sessions |
||
| 618 | would become free again. Thanks go to Jim Stephens for identifying this |
||
| 619 | issue and finding the solution. |
||
| 620 | 6. Fixed an SSL 2.0 antique client hello record length calculation bug occurring |
||
| 621 | when a received record was > 255 bytes. |
||
| 622 | 7. Added retransmission capability to SendNotification() function in |
||
| 623 | CustomSNMPApp.c. Previously, if an SNMP trap were sent, but the initial ARP |
||
| 624 | query or response was lost on the network, the SendNotification() code would |
||
| 625 | have deadlocked, and suppressed all future transmission of SNMP traps. |
||
| 626 | 8. Fixed DNS client timeout if the DNS server is unable to be ARPed. |
||
| 627 | Previously, the DNS client would retry ARPing the DNS server indefinitely if |
||
| 628 | it was offline. Now, the DNS client will correctly abort if too many |
||
| 629 | attempts to ARP the DNS server fail. Thanks go to Phil "andersop" on the |
||
| 630 | Microchip Ethernet forum for identifying this error. |
||
| 631 | 9. Suppressed transmission of a TCP RST packet to an unknown IP or MAC address |
||
| 632 | if the TCPDisconnect() function was called on a client mode socket that was |
||
| 633 | not finished with ARP or DNS resolution yet. Thanks go to Phil "andersop" on |
||
| 634 | the Microchip Ethernet forum for pointing this behavior out. |
||
| 635 | 10. Fixed TCP socket from disconnecting if the remote receive window was zero and |
||
| 636 | TCPFlush() was still called. Thanks go to Bob Topper for identifying this |
||
| 637 | issue and suggesting a solution. |
||
| 638 | 11. Fixed Tick.c module returning incorrect values when TickGet() or other API |
||
| 639 | was used with compiler optimizations turned on. Wrong values were observed |
||
| 640 | when using MPLAB C Compiler for PIC24 MCUs and dsPIC DSCs version 3.12. |
||
| 641 | 12. Fixed a number of SPI communications problems that could occur when compiler |
||
| 642 | optimizations were turned on. The ENC28J60 was observed to not work |
||
| 643 | correctly on the dsPIC33FJ256GP710 processor when compiled with MPLAB C |
||
| 644 | Compiler for PIC24 MCUs and dsPIC DSCs version 3.12. |
||
| 645 | 13. Fixed possible MPFS2 error when using an ASM30 .s image where MPFS_Start |
||
| 646 | would be read using the wrong PSVPAG setting. You must rebuild your MPFS2 |
||
| 647 | image file (ex: MPFSImg2.s) with this stack version's MPFS2.exe utility to |
||
| 648 | get this correction applied. |
||
| 649 | |||
| 650 | |||
| 651 | Known Problems: |
||
| 652 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 653 | result, it will likely not display correctly or work at all with some Telnet |
||
| 654 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 655 | is provided with Microsoft Windows. |
||
| 656 | 2. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 657 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 658 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 659 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 660 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 661 | boards to reenable it's DHCP server. |
||
| 662 | 3. HI-TECH PICC-18 compilers are not supported in this release. The supplied |
||
| 663 | HI-TECH PICC-18 MPLAB projects usually will not compile and/or link. |
||
| 664 | 4. ENC624J600 PSP modes 2, 4, 6, and 10 do not work at this time. Parallel Bit |
||
| 665 | Bang mode does not work either. Some minor firmware changes are needed. |
||
| 666 | |||
| 667 | |||
| 668 | |||
| 669 | ******** |
||
| 670 | v4.55 10 November 2008 |
||
| 671 | ******** |
||
| 672 | SSL Note: |
||
| 673 | RSA.c and ARCFOUR.c have not changed between the 4.50 and 4.55 releases. |
||
| 674 | Although the precompiled SSL Demo App .hex files will differ, you can |
||
| 675 | continue to use the previous TCP/IP Stack v4.50 Encryption Add-on with this |
||
| 676 | 4.55 stack version. |
||
| 677 | |||
| 678 | Changes: |
||
| 679 | 1. Added DNS client support for a secondary DNS server address. Previously, the |
||
| 680 | AppConfig.SecondaryDNSServer setting was unused. Now, the DNS client module |
||
| 681 | will automatically swap the AppConfig.PrimaryDNSServer and |
||
| 682 | AppConfig.SecondaryDNSServer values after any DNS query timeout (or ARP |
||
| 683 | timeout for the DNS server) and attempt the query with the alternative |
||
| 684 | server. If AppConfig.SecondaryDNSServer is disabled by setting it to the IP |
||
| 685 | address 0.0.0.0, the DNS client will only use the AppConfig.PrimaryDNSServer |
||
| 686 | value and never swap the values. With this change, the DHCP client was also |
||
| 687 | updated. If the DHCP server does not specify a secondary DNS server, then |
||
| 688 | the DHCP client will now set the AppConfig.SecondaryDNSServer value to |
||
| 689 | 0.0.0.0. Previously, it would change the AppConfig.SecondaryDNSServer |
||
| 690 | setting only if the remote DHCP server offered a secondary DNS server. |
||
| 691 | |||
| 692 | |||
| 693 | Fixes: |
||
| 694 | 1. Updated Internet Bootloader App project to correctly detect if the |
||
| 695 | configuration bits are being changed or not. Previously, the bootloader |
||
| 696 | always thought the configuration bits were being changed and thus had to |
||
| 697 | always erase the last Flash page (largest memory address) twice for each |
||
| 698 | firmware update. This did not cause any functional problems or |
||
| 699 | specification violations, but it would decrease the effective Flash |
||
| 700 | endurance of the last page. |
||
| 701 | 2. Fixed a TCP socket memory corruption bug that would occur if |
||
| 702 | TCPGetRemoteInfo() API was called twice with different socket handles |
||
| 703 | without an intermediate call to any other TCP API that takes a |
||
| 704 | TCP_SOCKET input. Thanks go to Bob Topper for identifying this problem and |
||
| 705 | suggesting a solution. |
||
| 706 | 3. Fixed the UDPIsGetReady() function so that it returns the number of bytes |
||
| 707 | remaining in the packet based on the current read location. This is the |
||
| 708 | same behavior as stack versions 4.18 and earlier. In stack versions 4.50 |
||
| 709 | and 4.51, the UDPIsGetReady() function would always return the total number |
||
| 710 | of bytes in the current packet, regardless of how many bytes the read |
||
| 711 | pointer had been advanced through the UDPGet() and UDPGetArray() functions. |
||
| 712 | Thanks go to Bob Topper for identifying this problem and suggesting a |
||
| 713 | solution. |
||
| 714 | 4. Fixed demo admin web page in TCPIP Demo App project so that the last byte of |
||
| 715 | the MAC address can be changed, independent of the format it was entered by |
||
| 716 | the user. |
||
| 717 | 5. Fixed a buffer overflow bug that would occur when using the SSL server during |
||
| 718 | hashing of the server certificate for the initial handshake. This error |
||
| 719 | previously caused several bytes of random variables elsewhere in the project |
||
| 720 | to get overwritten for each SSL connection. |
||
| 721 | 6. BSD sockets API was updated to fix some issues. |
||
| 722 | 7. LCDBlocking.c was updated to relax start up timing. This timing fix is |
||
| 723 | specifically needed to support Explorer 16 boards with a Truly TSB1G7000 |
||
| 724 | display (Novatek NT7603H controller). |
||
| 725 | 8. Removed four uses of Arial Black font in MPFS2.exe utility. On some rare PC |
||
| 726 | configurations, the use of this font caused the executable to not run. |
||
| 727 | |||
| 728 | |||
| 729 | Known Problems: |
||
| 730 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 731 | result, it will likely not display correctly or work at all with some Telnet |
||
| 732 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 733 | is provided with Microsoft Windows. |
||
| 734 | 2. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 735 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 736 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 737 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 738 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 739 | boards to reenable it's DHCP server. |
||
| 740 | 3. HI-TECH PICC-18 projects may not compile when targeting the external |
||
| 741 | ENC28J60 chip on the PICDEM.net 2 development board (instead of the |
||
| 742 | internal Ethernet controller). This problem only applies when a |
||
| 743 | PIC18F97J60 family part is the target. I.e. it compiles correctly for the |
||
| 744 | HPC_EXPLORER + Ethernet PICtail. |
||
| 745 | 4. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a |
||
| 746 | functional problem, just a compile-time configuration test. Ensure that you don't |
||
| 747 | over allocate TCP_ETH_RAM_SIZE or MAX_HTTP_CONNECTIONS. |
||
| 748 | 5. HI-TECH PICC-18 STD 9.51PL1 cannot compile DynDNS.c. It raises an |
||
| 749 | "inconsistent type" error while trying to perform a ROM pointer to integer |
||
| 750 | cast. The older 9.50PL3 compiler release is required to compile this file. |
||
| 751 | 6. HI-TECH PICC-18 STD 9.50PL3 does not initialize several static variables |
||
| 752 | correctly on reset. This behavior breaks many stack modules in the |
||
| 753 | TCPIP Demo App and TCPIP WebVend App projects. Additionally, string |
||
| 754 | printing functions do not work correctly, so the supplied |
||
| 755 | "TCPIP Demo App-HITECHPICC18 PICDEMNET2 18F97J60.hex" and "TCPIP WebVend |
||
| 756 | App-HITECHPICC18 PICDEMNET2 18F97J60.hex" files may not correctly print the |
||
| 757 | board's DHCP assigned IP address on the board's LCD (if present) and UART. To |
||
| 758 | avoid these severe problems, use the Microchip MPLAB C Compiler for PIC18 MCUs. |
||
| 759 | A free student edition can be downloaded from http://www.microchip.com/c18. |
||
| 760 | |||
| 761 | |||
| 762 | |||
| 763 | ******** |
||
| 764 | v4.51 24 July 2008 |
||
| 765 | ******** |
||
| 766 | IMPORTANT NOTE: You must use MPLAB 8.10 or higher to successfully open the |
||
| 767 | MPLAB projects. |
||
| 768 | |||
| 769 | SSL Note: |
||
| 770 | RSA.c and ARCFOUR.c have not changed between the 4.50 and 4.51 releases. |
||
| 771 | Although the precompiled SSL Demo App .hex files will differ, you can |
||
| 772 | continue to use the previous TCP/IP Stack v4.50 Encryption Add-on with this |
||
| 773 | 4.51 stack version. |
||
| 774 | |||
| 775 | Changes: |
||
| 776 | None. This release includes bug fixes only. It is very important that |
||
| 777 | applications using the ENC28J60 get fix item 7, below. |
||
| 778 | |||
| 779 | |||
| 780 | Fixes: |
||
| 781 | 1. TCPOpen() was previously failing if you used it to start a connection with a |
||
| 782 | remote hostname, but the DNS module failed to resolve the remote address on |
||
| 783 | the first try. This, for example, would occur if you powered up your board |
||
| 784 | and tried to connect to a remote server before the Ethernet cable was |
||
| 785 | attached. Once the Ethernet cable was attached, the socket would attempt to |
||
| 786 | resolve and connect to a garbage address. The Internet Radio application |
||
| 787 | would sometimes not begin playing the default station upon power up because |
||
| 788 | of this problem. |
||
| 789 | 2. Set SEQ.ACK = 0 for outbound TCP SYN packets. This fixes a connection |
||
| 790 | compatibility problem with certain paranoid TCP/IP stacks that would validate |
||
| 791 | this field even though the ACK flag was clear. This problem would previously |
||
| 792 | cause the Microchip TCP/IP stack to be unable to connect client-mode TCP |
||
| 793 | sockets to certain rare servers/services. Thanks go to Jean LE TUTOUR for |
||
| 794 | finding one of these problem servers. |
||
| 795 | 3. MPFSOpen() and MPFSOpenROM() for MPFS2 could leak a file handle if a name |
||
| 796 | hash matched but no complete file name did. This has been corrected to |
||
| 797 | prevent potential DOS attacks on the HTTP2 web server. Thanks to David Tan |
||
| 798 | on the Microchip Ethernet formus for identifying this issue. |
||
| 799 | 4. Fixed a bug in MPFS2.1 that caused compile errors when MPFS Classic images |
||
| 800 | were generated for ASM30 containing files whose length was either zero or |
||
| 801 | a multiple of 12. |
||
| 802 | 5. Fixed an issue in HTTPPostConfig() that caused it to ignore the flag that |
||
| 803 | was set when invalid IP address input was detected. This issue only affects |
||
| 804 | the example configuration page and only exists in v4.50 (prior versions |
||
| 805 | functioned correctly). Also corrected an issue where user input could |
||
| 806 | potentially overflow into part of the shadow AppConfig in the same function. |
||
| 807 | Thanks to prinz3nroll3 on the Microchip Ethernet forums for identifying |
||
| 808 | both of these issues. |
||
| 809 | 6. Implemented Explorer 16 development board 5V LCD errata workaround to |
||
| 810 | LCDBlocking.c. This corrects the A/D converter from returning erratic |
||
| 811 | readings on certain Explorer 16 boards. LCD I/O pins are now continuously |
||
| 812 | driven by the microcontroller instead of going high impedance when idle. |
||
| 813 | 7. Fixed a critical ENC28J60 revision B7 errata workaround problem in the |
||
| 814 | ENC28J60.c, MACFlush() function. Previously, the code was checking for an |
||
| 815 | EREVID register value of 0x07 for silicon revision B7. This was incorrect. |
||
| 816 | Silicon revision B7 actually has an EREVID value of 0x06. Note that this |
||
| 817 | problem was caused by an incorrect EREVID value published in DS80349A, the B7 |
||
| 818 | silicon errata documentation. Make sure to use DS80349B or later. |
||
| 819 | |||
| 820 | |||
| 821 | Known Problems: |
||
| 822 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 823 | result, it will likely not display correctly or work at all with some Telnet |
||
| 824 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 825 | is provided with Microsoft Windows. |
||
| 826 | 2. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 827 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 828 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 829 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 830 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 831 | boards to reenable it's DHCP server. |
||
| 832 | 3. HI-TECH PICC-18 projects may not compile when targeting the external |
||
| 833 | ENC28J60 chip on the PICDEM.net 2 development board (instead of the |
||
| 834 | internal Ethernet controller). This problem only applies when a |
||
| 835 | PIC18F97J60 family part is the target. I.e. it compiles correctly for the |
||
| 836 | HPC_EXPLORER + Ethernet PICtail. |
||
| 837 | 4. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a |
||
| 838 | functional problem, just a compile-time configuration test. Ensure that you don't |
||
| 839 | over allocate TCP_ETH_RAM_SIZE or MAX_HTTP_CONNECTIONS. |
||
| 840 | 5. HI-TECH PICC-18 STD 9.51PL1 cannot compile DynDNS.c. It raises an |
||
| 841 | "inconsistent type" error while trying to perform a ROM pointer to integer |
||
| 842 | cast. The older 9.50PL3 compiler release is required to compile this file. |
||
| 843 | 6. HI-TECH PICC-18 STD 9.50PL3 does not initialize several static variables |
||
| 844 | correctly on reset. This behavior breaks many stack modules in the |
||
| 845 | TCPIP Demo App and TCPIP WebVend App projects. Additionally, string |
||
| 846 | printing functions do not work correctly, so the supplied |
||
| 847 | "TCPIP Demo App-HITECHPICC18 PICDEMNET2 18F97J60.hex" and "TCPIP WebVend |
||
| 848 | App-HITECHPICC18 PICDEMNET2 18F97J60.hex" files may not correctly print the |
||
| 849 | board's DHCP assigned IP address on the board's LCD (if present) and UART. To |
||
| 850 | avoid these severe problems, use the Microchip MPLAB C Compiler for PIC18 MCUs. |
||
| 851 | A free student edition can be downloaded from http://www.microchip.com/c18. |
||
| 852 | |||
| 853 | |||
| 854 | |||
| 855 | ******** |
||
| 856 | v4.50 02 June 2008 |
||
| 857 | ******** |
||
| 858 | IMPORTANT NOTE: You must use MPLAB 8.10 or higher to successfully open the |
||
| 859 | MPLAB projects. Also, ensure that the latest C compiler is used. This |
||
| 860 | release was tested against MPLAB C Compiler for PIC18 MCUs version 3.20, |
||
| 861 | MPLAB C Compiler for PIC24 MCUs and dsPIC DSCs version 3.10, MPLAB C |
||
| 862 | Compiler for PIC32 MCUs version 1.01, and HI-TECH PICC-18 version |
||
| 863 | 9.50PL3 (STD). Earlier compilers may not be able to compile this TCP/IP |
||
| 864 | stack release. |
||
| 865 | |||
| 866 | |||
| 867 | Changes: |
||
| 868 | 1. Added SSL 3.0 client capabilities, including SMTP over SSL. The SSL |
||
| 869 | modules supports up to 1024-bit RSA handshakes and 128-bit ARCFOUR |
||
| 870 | bulk encryption. This can be demonstrated using the SMTP client. SSL |
||
| 871 | server support is functional, but a key generation utility is not yet |
||
| 872 | provided and support over HTTPS is not yet reliable with all browsers. |
||
| 873 | IMPORTANT: Encryption software is covered by US Export Control law, so |
||
| 874 | it is not directly downloadable from the Microchip website. To use the |
||
| 875 | encryption modules, you must order SW300052 from microchipDIRECT |
||
| 876 | [ https://www.microchipdirect.com/ ] and install the required libraries. |
||
| 877 | 2. Added Berkeley Sockets Distribution (BSD) API translation layer. You can |
||
| 878 | now call the well know Berkeley APIs instead of or in addition to the |
||
| 879 | Microchip specific APIs. To use this new functionality, define |
||
| 880 | STACK_USE_BERKELEY_API and configure BSD_SOCKET_COUNT in TCPIPConfig.h. |
||
| 881 | Three new source code demos are provided to demonstrate this API: |
||
| 882 | BerkeleyTCPClientDemo.c, BerkeleyTCPServerDemo.c, and |
||
| 883 | BerkeleyUDPClientDemo.c. The TCP client demo is identical to the |
||
| 884 | GenericTCPClient.c demo, but implemented using Berkeley Sockets. The UDP |
||
| 885 | client demo is similarly identical to the SNTP.c client. The TCP server |
||
| 886 | demo listens on TCP port 9764 and will echo any traffic received back to the |
||
| 887 | sender. It allows up to 3 simultaneous connections when there are an |
||
| 888 | adequate number of sockets defined in the TCPSocketInitializer[] array in |
||
| 889 | TCPIPConfig.h. |
||
| 890 | 3. Added support for Dynamic DNS services. See the Dynamic DNS Client module in |
||
| 891 | the TCP/IP Stack Help for details. Presently, dyndns.org, dyndns.com, |
||
| 892 | no-ip.com, and dns-o-matic.com are supported. |
||
| 893 | 4. Added the Microchip TCP/IP Configuration Wizard to the Utilities folder, |
||
| 894 | facilitating easier configuration of the TCP/IP Stack through a |
||
| 895 | graphical application. |
||
| 896 | 5. Restructured TCPIPConfig.h to remove rule-enforcement logic, placing the |
||
| 897 | removed sections in TCPIP.h. Many other project structure changes were also |
||
| 898 | made to clean up the general distribution appearance. |
||
| 899 | 6. Increased DHCP Server default lease duration to 60 seconds instead of 15 |
||
| 900 | seconds. Some computers were losing their IP lease before performing a renew |
||
| 901 | operation with only a 15 second lease. |
||
| 902 | 7. Removed CLOCK_FREQ, INSTR_FREQ, and PERIPHERAL_FREQ macro definitions. |
||
| 903 | GetSystemClock(), GetInstructionClock(), and GetPeripheralClock() now return |
||
| 904 | these respective values. This change was made for compatibility with other |
||
| 905 | Microchip software libraries. |
||
| 906 | 8. Added TCP Fast Retransmission capability. Whenever three duplicate ACK |
||
| 907 | packets arrive, the stack will now immediately perform a retransmit |
||
| 908 | operation. This greatly improves recovery latency whenever the network |
||
| 909 | loses a packet for applications that stream TX data using TCP. |
||
| 910 | 9. Improved TCP Keep Alive mechanism to automatically close TCP sockets which |
||
| 911 | do not receive any keep-alive responses for TCP_MAX_UNACKED_KEEP_ALIVES |
||
| 912 | (default 6) times. This means that, by default, any connection that |
||
| 913 | catastrophically breaks without notifying us (ex: user unplugs cable, |
||
| 914 | Internet connection goes down, etc.) will time out and automatically close |
||
| 915 | after 60 seconds (TCP_MAX_UNACKED_KEEP_ALIVES * TCP_KEEP_ALIVE_TIMEOUT). |
||
| 916 | Server oriented sockets will return to the listening state. Client oriented |
||
| 917 | sockets will close, but the TCP_SOCKET handle will continue to remain valid |
||
| 918 | until the application calls TCPDisconnect(). Applications can check if the |
||
| 919 | socket became disconnected and reset by calling TCPWasReset() or |
||
| 920 | TCPIsConnected(). Note that this keep alive implementation will only close |
||
| 921 | sockets that are broken (remote node is not responding to TCP requests). It |
||
| 922 | will not close or otherwise interfere with idle connections in which the |
||
| 923 | application is not transmitting or receiving data and wishes to keep the |
||
| 924 | connection open. |
||
| 925 | 10.Added a TCP RX SYN queue of depth TCP_SYN_QUEUE_MAX_ENTRIES (default 3). |
||
| 926 | This queue automatically saves incoming SYN packets destined for a local |
||
| 927 | server port which is already connected to a different client. When the |
||
| 928 | client disconnects, the SYN data is pulled out of the queue and the socket |
||
| 929 | immediately attempts to connect to the next client. This improves connect |
||
| 930 | time performance since the remote client no longer has to retransmit the |
||
| 931 | SYN request if it was unserviceable the first time around. This is most |
||
| 932 | apparent with the HTTP/HTTP2 servers which previously performed poorly |
||
| 933 | with certain modern web browsers which attempt to open many simultaneous |
||
| 934 | connections to the web server, such as Mozilla Firefox 3 beta 5 and Apple |
||
| 935 | Safari 3.1. Entries in the queue automatically time out after |
||
| 936 | TCP_SYN_QUEUE_TIMEOUT (default 3 seconds) so as to prevent the queue from |
||
| 937 | filling up permanently if several connection requests arrive for a service |
||
| 938 | that is in use and will not be available for an extended period. |
||
| 939 | 11.Modified the structure of the MPFS2 FAT (now known as MPFS2.1) to include |
||
| 940 | name hashes first. This speeds up opening files by 25%, and makes opening |
||
| 941 | index files nearly instant. |
||
| 942 | 12.Updated the MPFS2 Utility. MPFS2.1 now supports the new FAT structure and |
||
| 943 | provides a cleaner interface. It also writes images to disk as they are |
||
| 944 | created, which eliminates the IndexOutOfBounds exceptions some users had |
||
| 945 | reported. Finally, uploads are now truly multi-threaded. |
||
| 946 | 13.Source code to the MPFS2.exe PC utility is now released. Find it in the |
||
| 947 | Microchip Solutions\Microchip\TCPIP Stack\Utilities\Source\MPFS21 folder. This |
||
| 948 | project is designed to compile with Microsoft Visual C# 2008 Express Edition. |
||
| 949 | 14.Added support for SST25VFxxxB serial flash parts in 2, 4, 8, 16, and 32Mbit |
||
| 950 | densities. These parts can be used to replace EEPROMs for storing MPFS |
||
| 951 | images (both versions) and custom data. |
||
| 952 | 15.Added HTTPReadPostName, HTTPReadPostValue, and HTTPReadPostPair functions to |
||
| 953 | facilitate easier processing of data arriving via POST. |
||
| 954 | 16.Split HTTPAuthenticate API into separate functions: HTTPNeedsAuth and |
||
| 955 | HTTPCheckAuth. This function was already split internally, and didn't |
||
| 956 | make sense as a single API. |
||
| 957 | 17.Updated DHCP client to close its UDP socket when idle (bound state) to save |
||
| 958 | a small amount of resources. |
||
| 959 | 18.Removed LED_IO macro from all hardware profiles because it is not suitable |
||
| 960 | for use on certain hardware platforms that have non-contiguous LEDs or |
||
| 961 | reversed bit ordering. Use the new LED_GET() and LED_PUT(val) macros to read |
||
| 962 | and write to all of the LEDs at once. |
||
| 963 | 19.Added Ethernet Hash Table Calculator.exe to the Utilities folder and start menu. |
||
| 964 | This tool will calculate the correct bit that you must set in the EHT0-EHT7 |
||
| 965 | registers on the ENC28J60 and PIC18F97J60 family devices for using the Hash |
||
| 966 | Table RX filter. This is useful only for fixed MAC addresses known at design |
||
| 967 | time. For addresses that are known at run time, use the SetRXHashTableEntry() |
||
| 968 | function in the ENC28J60.c or ETH97J60.c files to set the correct EHT0-EHT7 bit. |
||
| 969 | |||
| 970 | |||
| 971 | Fixes: |
||
| 972 | 1. Fixed a buffer overflow data corruption issue in the FTP module that arises |
||
| 973 | when too many parameters were passed on the command line. |
||
| 974 | 2. Moved TCPWasReset checking in HTTP2 to execute for every socket on every |
||
| 975 | loop. Previously, it would only execute when a socket reconnected, which |
||
| 976 | caused the RX buffer to not resize until after data was received. Some |
||
| 977 | platforms (notably FF2 on Ubuntu) would stall if the initial advertised RX |
||
| 978 | window was too small, and this change corrects that issue. |
||
| 979 | 3. Updated SendSystemReset() and MACInit() initialization routine in ENC28J60.c. |
||
| 980 | Previously, if the ENC28J60 was placed into sleep mode by calling |
||
| 981 | MACPowerDown(), the SendSystemReset() command would not work anymore. This |
||
| 982 | would leave the ENC28J60 in power down if the host PIC was ever reset. |
||
| 983 | SendSystemReset() should work for all conditions with this update. |
||
| 984 | Thanks go to Rob Haverkort on the Microchip Ethernet forum for identifying |
||
| 985 | this problem. |
||
| 986 | 4. Fixed an alignment bug in HTTP2 that caused redirects to fail when the MPFS2 |
||
| 987 | image was stored in Flash program memory. Thanks to Todd Boaz on the |
||
| 988 | Microchip Ethernet forum for identifying this bug, and Chen Qu for posting |
||
| 989 | a solution. |
||
| 990 | 5. Fixed SNTP client from losing accuracy if you called SNTPGetUTCSeconds() |
||
| 991 | 10s of thousands of times since the last server synchronization. Thanks go to |
||
| 992 | "pic123" on the Microchip Ethernet forum for noticing this error. |
||
| 993 | 6. Fixed a TickGet*() API problem where the returned tick value could be off by 64K |
||
| 994 | ticks occasionally on PIC24, dsPIC30/33, and PIC32 processors. This bug was |
||
| 995 | previously fixed in stack versions 4.13 and 4.16, but it was unintentionally |
||
| 996 | recreated in 4.18 due to PIC32 changes. |
||
| 997 | 7. Fixed UART2TCPBridge module from failing to connect to a remote server when |
||
| 998 | USE_REMOTE_TCP_SERVER was defined. |
||
| 999 | 8. Fixed an issue that prevented SNMP SETs on 16 and 32 bit parts when using |
||
| 1000 | MPFS2. Thanks go to Milena K on the Microchip Ethernet forum for identifying |
||
| 1001 | this problem. |
||
| 1002 | 9. Fixed a rare buffer corruption issue that could occur with UDP if TCP was also |
||
| 1003 | enabled. |
||
| 1004 | 10.Fixed a Tick rollover error in HTTP2. Thanks go to Paul Bixel on the Microchip |
||
| 1005 | Ethernet forum for identifying this problem. |
||
| 1006 | 11.Fixed an MPFS2 bug in which an excessive value to MPFS_SEEK_REWIND may have |
||
| 1007 | failed to return an error. Thanks go to Paul Bixel on the Microchip Ethernet |
||
| 1008 | forum for identifying this problem as well. |
||
| 1009 | 12.SMTP Client now sends EHLO when using authentication. Previously, the HELO |
||
| 1010 | command was used, even with authentication enabled. Using HELO with |
||
| 1011 | authentication creates incompatibilities with certain SMTP servers. |
||
| 1012 | 13.Improved Internet Bootloader robustness by retransmitting ACKs in response to |
||
| 1013 | data retransmissions by the remote sending node. Previously, if an ACK packet |
||
| 1014 | was lost before reaching the sending node, the TFTP upload would fail and need |
||
| 1015 | to be restarted. Thanks go to "coolvibe" Dave Collier on the Microchip Ethernet |
||
| 1016 | forum for identifying this behavior. |
||
| 1017 | 14.Fixed TFTP Internet Bootloader from not being accessible from Linux TFTP clients |
||
| 1018 | which were setting the IP header "Don't Fragment" flag bit. |
||
| 1019 | 15.Changed TCP so that unsent data that is automatically flushed by the |
||
| 1020 | TCP_AUTO_TRANSMIT_TIMEOUT_VAL timer includes the PSH flag. This improves GUI |
||
| 1021 | responsiveness for certain applications which rely on this automatic flush |
||
| 1022 | feature, such as the UART2TCPBridge module. |
||
| 1023 | 16.Fixed TCP socket loss issue which could occur if the TCP TX FIFO size was |
||
| 1024 | greater than 536 bytes (TCP_MAX_SEG_SIZE). Before the fix, the socket |
||
| 1025 | would have gotten tied up indefinitely performing retransmissions every 1.0 |
||
| 1026 | seconds without detecting that the remote node was disconnected. |
||
| 1027 | 17.Fixed TCP socket hang issue that would occur if the PIC sent out a FIN and the |
||
| 1028 | remote node never responded with a corresponding FIN. The socket would have |
||
| 1029 | gotten stuck indefinitely in the TCP_FIN_WAIT_2 state. Thanks go to Mr. Kyle |
||
| 1030 | Strickland with AW North Carolina for identifying this bug. |
||
| 1031 | 18.Fixed UDPSetRxBuffer() function from not working if it was called before having |
||
| 1032 | called UDPGet() or UDPGetArray() at least once. |
||
| 1033 | 19.Fixed an offset error of +2 milliseconds being returned from |
||
| 1034 | TickConvertToMilliseconds(). Thanks go to Andrés ("saturn") on the Microchip |
||
| 1035 | Ethernet forum for finding this error. Note that due to integer truncation |
||
| 1036 | during division, this function can be off by 0.2% or so, depending on the value |
||
| 1037 | returned by GetPeripheralClock(). |
||
| 1038 | 20.Updated DelayMs() macro for MPLAB C Compiler for PIC18s to work correctly |
||
| 1039 | when a large parameter was given. You should now be able to delay between |
||
| 1040 | |||
| 1041 | with an unexpectedly short delay. |
||
| 1042 | |||
| 1043 | |||
| 1044 | Known Problems: |
||
| 1045 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 1046 | result, it will likely not display correctly or work at all with some Telnet |
||
| 1047 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 1048 | is provided with Microsoft Windows. |
||
| 1049 | 2. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 1050 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 1051 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 1052 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 1053 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 1054 | boards to reenable it's DHCP server. |
||
| 1055 | 3. HI-TECH PICC-18 projects may not compile when targeting the external |
||
| 1056 | ENC28J60 chip on the PICDEM.net 2 development board (instead of the |
||
| 1057 | internal Ethernet controller). This problem only applies when a |
||
| 1058 | PIC18F97J60 family part is the target. I.e. it compiles correctly for the |
||
| 1059 | HPC_EXPLORER + Ethernet PICtail. |
||
| 1060 | 4. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a |
||
| 1061 | functional problem, just a compile-time configuration test. Ensure that you don't |
||
| 1062 | over allocate TCP_ETH_RAM_SIZE or MAX_HTTP_CONNECTIONS. |
||
| 1063 | 5. HI-TECH PICC-18 STD 9.51PL1 cannot compile DynDNS.c. It raises an |
||
| 1064 | "inconsistent type" error while trying to perform a ROM pointer to integer |
||
| 1065 | cast. The older 9.50PL3 compiler release is required to compile this file. |
||
| 1066 | 6. HI-TECH PICC-18 STD 9.50PL3 does not initialize several static variables |
||
| 1067 | correctly on reset. This behavior breaks many stack modules in the |
||
| 1068 | TCPIP Demo App and TCPIP WebVend App projects. Additionally, string |
||
| 1069 | printing functions do not work correctly, so the supplied |
||
| 1070 | "TCPIP Demo App-HITECHPICC18 PICDEMNET2 18F97J60.hex" and "TCPIP WebVend |
||
| 1071 | App-HITECHPICC18 PICDEMNET2 18F97J60.hex" files may not correctly print the |
||
| 1072 | board's DHCP assigned IP address on the board's LCD (if present) and UART. To |
||
| 1073 | avoid these severe problems, use the Microchip MPLAB C Compiler for PIC18 MCUs. |
||
| 1074 | A free student edition can be downloaded from http://www.microchip.com/c18. |
||
| 1075 | |||
| 1076 | |||
| 1077 | |||
| 1078 | ******** |
||
| 1079 | v4.18 28 November 2007 |
||
| 1080 | ******** |
||
| 1081 | Changes: |
||
| 1082 | 1. Added C32 and PIC32MX support. Some things were cleaned up in the process. |
||
| 1083 | 2. Removed linker scripts from C30 MPLAB projects. MPLAB IDE 8.00 |
||
| 1084 | can automatically select the correct linker script for 16-bit and 32-bit |
||
| 1085 | products. |
||
| 1086 | 3. Updated TCPPerformanceTest.c module. Now it automatically calculates the TX |
||
| 1087 | throughput and displays it for you. Also, there is now an RX throughput |
||
| 1088 | testing mode, which listens on a separate TCP socket (port 9763) when a TCP |
||
| 1089 | socket of type TCP_PURPOSE_TCP_PERFORMANCE_RX is allocated in TCPIPConfig.h. |
||
| 1090 | The RX socket is by default not enabled to save memory, so you must create a |
||
| 1091 | TCP_PURPOSE_TCP_PERFORMANCE_RX socket in TCPIPConfig.h and ensure that enough |
||
| 1092 | memory is allocated to accommodate it to test the RX performance test. When |
||
| 1093 | connected to port 9763, send a large amount of data and the PIC |
||
| 1094 | microcontroller will send back a count of how many bytes were received per |
||
| 1095 | second. |
||
| 1096 | 4. UDPPerformanceTest.c module now transmits 1024 packets on start up and then |
||
| 1097 | stops to prevent continually broadcast flooding your network. To transmit |
||
| 1098 | more packets after 1024 is reached, hold down BUTTON3 (left-most button on |
||
| 1099 | most boards). |
||
| 1100 | 5. Significantly improved the speed of the MD5 and SHA-1 functions. Gains for |
||
| 1101 | the 8-bit compilers were 50-75%, while 16-bit parts saw more modest |
||
| 1102 | improvements (~10%). |
||
| 1103 | 6. Reimplemented TCP_CLOSE_WAIT TCP state ("CLOSE WAIT" in RFC793). Now, TCP |
||
| 1104 | sockets that receive a FIN from the remote node will hold off transmitting |
||
| 1105 | a FIN back to the remote node until the TCP_CLOSE_WAIT_TIMEOUT (defined at |
||
| 1106 | the top of TCP.c) elapses or immediately when the application calls the |
||
| 1107 | TCPDisconnect() function. This makes it possible for the application to |
||
| 1108 | transmit a response back to the remote node before the socket becomes closed |
||
| 1109 | on our end. Similarly, it simplifies application usage of the last RX bytes |
||
| 1110 | received as these bytes are now assured to still be in the RX FIFO for at |
||
| 1111 | least TCP_CLOSE_WAIT_TIMEOUT seconds. TCP_CLOSE_WAIT_TIMEOUT defaults to |
||
| 1112 | 200ms in this stack version. |
||
| 1113 | 7. Pushed the SNTP requery on failure timeout up some. It was ~14 seconds and |
||
| 1114 | is now ~20 seconds. |
||
| 1115 | 8. Added TFTPOpenROMFile() API to complement TFTPOpenFile() when using PIC18 |
||
| 1116 | products. |
||
| 1117 | 9. Added a fourth parameter to newAJAXCommand() in mchp.js, allowing data to be |
||
| 1118 | POSTed along with the AJAX request. |
||
| 1119 | 10.Deprecated the TCP Loopback functions, which includes TCPOpenLoopback, |
||
| 1120 | TCPCloseLoopback, TCPIsLoopback, TCPInject, and TCPSteal. These functions |
||
| 1121 | were added in 4.10 for future SSL support, but have since become |
||
| 1122 | unnecessary. They are of limited usefulness, and so are being removed to save |
||
| 1123 | code space. The functions are still available in this version, but will |
||
| 1124 | be removed in the next release. |
||
| 1125 | 11.Added SMTPClient.ServerPort field to the SMTP API. This allows the remote |
||
| 1126 | server port number to be specified dynamically at run time instead of being |
||
| 1127 | hard coded to the SMTP_PORT value defined at the top of SMTP.c. SMTP_PORT is |
||
| 1128 | now only a default. |
||
| 1129 | 12.Added web interface to the SMTP module in the TCPIP Demo App applications. |
||
| 1130 | You can now configure the SMTP module and send emails directly from within |
||
| 1131 | your web browser. The HTTPPostEmail() function in CustomHTTPApp.c also |
||
| 1132 | demonstrates how to send MIME encoded attachments in emails. The default demo |
||
| 1133 | will send button states, LED states, and the current potentiometer reading as |
||
| 1134 | a CSV file attached to the email. |
||
| 1135 | 13.Changed SMTPDemo() in MainDemo.c to trigger on BUTTON2 and BUTTON3 |
||
| 1136 | simultaneously held down instead of BUTTON0 only. |
||
| 1137 | |||
| 1138 | Fixes: |
||
| 1139 | 1. Fixed an ENC28J60.c MACGetArray() bug which would overwrite one byte of memory |
||
| 1140 | at address 0xFFFFFFFF if you provided NULL for the destination address pointer. |
||
| 1141 | 2. Fixed an MPFS2.c MPFSGet() bug which would overwrite memory address 0x00000000 |
||
| 1142 | if a NULL pointer was provided as the destination. |
||
| 1143 | 3. Fixed a bug in the HTTP2 server accessing incorrect sockets if an inadequate |
||
| 1144 | number of sockets were available on POR. |
||
| 1145 | 4. Fixed Internet Bootloader project from failing with a timeout if an ARP packet |
||
| 1146 | arrived during the Erase/Write operation. |
||
| 1147 | 5. Fixed DHCP client RFC non-compliance where it would send the ciaddr field in |
||
| 1148 | the initial SELECTING state. Also, in the RENEWING state, the Requested IP |
||
| 1149 | Address option was being sent, which is illegal. These changes may fix |
||
| 1150 | compatibility problems with certain DHCP servers. |
||
| 1151 | 6. Fixed TFTP Client's TFTPCloseFile() function from sending data using a wrong |
||
| 1152 | UDP socket if StackTsk() was called after TFTPIsFileOpened() was last called. |
||
| 1153 | 7. Added two zero bytes to the ICMP echo request payload to improve compatibility |
||
| 1154 | with some buggy NAT routers. |
||
| 1155 | |||
| 1156 | Known Problems: |
||
| 1157 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 1158 | result, it will likely not display correctly or work at all with some Telnet |
||
| 1159 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 1160 | is provided with Microsoft Windows. |
||
| 1161 | 2. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 1162 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 1163 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 1164 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 1165 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 1166 | boards to reenable it's DHCP server. |
||
| 1167 | 3. HI-TECH PICC-18 projects may not compile when targeting the external |
||
| 1168 | ENC28J60 chip on the PICDEM.net 2 development board (instead of the |
||
| 1169 | internal Ethernet controller). This problem only applies when a |
||
| 1170 | PIC18F97J60 family part is the target. I.e. it compiles correctly for the |
||
| 1171 | HPC_EXPLORER + Ethernet PICtail. |
||
| 1172 | 4. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a |
||
| 1173 | functional problem, just a compile-time configuration test. Ensure that you don't |
||
| 1174 | over allocate TCP_ETH_RAM_SIZE or MAX_HTTP_CONNECTIONS. |
||
| 1175 | |||
| 1176 | |||
| 1177 | |||
| 1178 | ******** |
||
| 1179 | v4.16 06 November 2007 |
||
| 1180 | ******** |
||
| 1181 | Changes: |
||
| 1182 | 1. Added Internet Radio application. This is a TCP client application which |
||
| 1183 | downloads streaming MP3 audio from a Shoutcast server and then plays it back to |
||
| 1184 | stereo earphones via a VLSI VS1011 audio decoder. |
||
| 1185 | 2. Added SPIRAM.c module. This module is intended for interfacing to an AMI |
||
| 1186 | Semiconductor N256S0830HDA SPI RAM chip. The TCP module can now interface |
||
| 1187 | directly to this SPIRAM module to store TCP socket FIFO buffers and other TCB |
||
| 1188 | data in the external RAM. |
||
| 1189 | 3. Added TCP_OPTIMIZE_FOR_SIZE compile time configuration macro to TCP.c file. When |
||
| 1190 | optimizing for small code size, the TCP module ROM footprint shrinks up to 6KB, |
||
| 1191 | but performance may slow down on some processors (namely PIC18s, where the |
||
| 1192 | penalty is approximately 15%). |
||
| 1193 | 4. Added USE_EEPROM_25LC1024 compile time configuration macro to TCPIPConfig.h. |
||
| 1194 | Enable this definition if you are storing your MPFS[2] on a 1Mbit 25LC1024 or |
||
| 1195 | similar EEPROM device that uses 24-bit addressing and a 256 byte write page size. |
||
| 1196 | 5. Changed LCDBlocking.c module initialization code. It should now be possible to |
||
| 1197 | use 4-bit mode on certain "unusual" LCD controllers, like the Samsung S6A0032. |
||
| 1198 | Most PICDEM.net 2 and Explorer 16 boards use an LCD with this controller. |
||
| 1199 | 6. SNTP client now attempts to requery the SNTP server about every 14 seconds if the |
||
| 1200 | last query attempt fails. This allows the internal time value to become valid |
||
| 1201 | quickly should the board be powered up before an Ethernet cable is attached or if |
||
| 1202 | the DHCP client doesn't obtain an IP address quickly enough. Previously, it would |
||
| 1203 | take up to 10 minutes after plugging the Ethernet cable in to get a correct time |
||
| 1204 | value from the SNTP server. |
||
| 1205 | 7. Added UDP_USE_TX_CHECKSUM compile time configuration macro to TCPIPConfig.h. |
||
| 1206 | When enabled, all UDP packets will have a correct UDP checksum computed and |
||
| 1207 | inserted into the UDP header of outbound packets. If you do not define this |
||
| 1208 | macro, the UDP checksum will be disabled (left as 0x0000), which is how previous |
||
| 1209 | stack versions operated. Note that enabling checksum generation cuts your |
||
| 1210 | maximum UDP TX throughput by nearly half due to the required computations. |
||
| 1211 | 8. Substantially changed TCP socket RX and TX FIFO allocation. Now, sockets can be |
||
| 1212 | stored either in Ethernet RAM, PIC RAM, or external (SPI) RAM. Previously, |
||
| 1213 | sockets could only be allocated in Ethernet RAM, which was not scalable. |
||
| 1214 | 9. Added TCPOpen() API function. This replaces TCPListen() and TCPConnect(). |
||
| 1215 | TCPOpen() supports a large number of options that will make the creation of |
||
| 1216 | client mode sockets much easier. You can specify the remote node as a hostname |
||
| 1217 | that needs DNS and ARP resolution, an IP address that only needs ARP resolution, |
||
| 1218 | or legacy NODE_INFO pointer for direct compatibility with the previous |
||
| 1219 | TCPListen() and TCPConnect() APIs. TCPOpen() also supports a socket type |
||
| 1220 | parameter which will allow you to use the new TCP socket RAM allocation system. |
||
| 1221 | 10.Added TCP Keep Alive mechanism defined by RFC 1122 section 4.2.3.6 to the TCP |
||
| 1222 | module. This helps automatically detect lost connections. If the remote node |
||
| 1223 | sends back an RST, this immediately closes the lost connection on our end. |
||
| 1224 | Currently, no action is taken if the keep alive gets no response. Note that this |
||
| 1225 | feature deviates from the standard by defaulting to only 10 seconds instead of |
||
| 1226 | over 2 hours. Also deviating from the standard, this feature is enabled by |
||
| 1227 | default. To disable it, undefine TCP_KEEP_ALIVE_TIMEOUT at the top of TCP.c. |
||
| 1228 | 11.Moved TCPPerformanceTest.c module from default port 12345 to 9762. |
||
| 1229 | 12.Moved UDPPerformanceTest.c module from default port 12345 to 9, the "discard" |
||
| 1230 | protocol port. |
||
| 1231 | |||
| 1232 | Fixes: |
||
| 1233 | 1. The DHCP client now specifically requests the previous IP address when a DHCP |
||
| 1234 | renewal occurs. |
||
| 1235 | 2. The SNTP client now correctly maintains time when repetitively calling |
||
| 1236 | SNTPGetUTCSeconds() between an NTP requery event. Thanks go to Rob Haverkort on |
||
| 1237 | the Microchip Ethernet forum for noticing the time value incrementing far faster |
||
| 1238 | than it should have. |
||
| 1239 | 3. TCP module will not transmit a bunch of unnecessary duplicate ACK packets when |
||
| 1240 | data is ready to be transmitted but the remote RX window is zero. This previously |
||
| 1241 | didn't cause anything to break, but would waste CPU time and bandwidth sometimes. |
||
| 1242 | 4. TCP sockets will no longer automatically close if the remote RX window stays zero |
||
| 1243 | for several seconds. |
||
| 1244 | 5. Fixed TFTP Internet Bootloader project from corrupting the configuration fuses. |
||
| 1245 | Previously, this would result in the Watchdog timer being enabled and causing an |
||
| 1246 | unintentional reboot every few minutes with the demo TCP/IP stack. |
||
| 1247 | |||
| 1248 | Known Problems: |
||
| 1249 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 1250 | result, it will likely not display correctly or work at all with some Telnet |
||
| 1251 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 1252 | is provided with Microsoft Windows. |
||
| 1253 | 2. TFTPc module has not been tested with this version. |
||
| 1254 | 3. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 1255 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 1256 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 1257 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 1258 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 1259 | boards to reenable it's DHCP server. |
||
| 1260 | 4. HI-TECH PICC-18 projects may not compile when targeting the external |
||
| 1261 | ENC28J60 chip on the PICDEM.net 2 development board (instead of the |
||
| 1262 | internal Ethernet controller). This problem only applies when a |
||
| 1263 | PIC18F97J60 family part is the target. I.e. it compiles correctly for the |
||
| 1264 | HPC_EXPLORER + Ethernet PICtail. |
||
| 1265 | 5. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a |
||
| 1266 | functional problem, just a compile-time configuration test. Ensure that you don't |
||
| 1267 | over allocate MAX_TCP_SOCKETS, TCP_TX_FIFO_SIZE, TCP_RX_FIFO_SIZE, or |
||
| 1268 | MAX_HTTP_CONNECTIONS. |
||
| 1269 | |||
| 1270 | |||
| 1271 | |||
| 1272 | ******** |
||
| 1273 | v4.13 02 October 2007 |
||
| 1274 | ******** |
||
| 1275 | Changes: |
||
| 1276 | 1. Added command line support to the MPFS2.exe tool. You can now generate MPFS |
||
| 1277 | output files using batch scripts or other console applications. |
||
| 1278 | 2. Added dynamic variable parameter capabilities to the MPFS2 utility. To use, add |
||
| 1279 | the parameters you wish to pass to the end of the dynamic variable. All |
||
| 1280 | parameters are passed as WORD values. (ex: ~myArray(2,5)~ ) |
||
| 1281 | 3. Added TCPWasReset() API to allow the application layer to be notified if an |
||
| 1282 | underlying socket reset has occurred (ex: remote node disconnects, cable is |
||
| 1283 | disconnected and times out, user calls TCPDisconnect(), etc.). The reset state is |
||
| 1284 | latching, which allows the application layer to detect if a remote node disconnects |
||
| 1285 | and a new connection occurs on the same socket before the application can detect |
||
| 1286 | the original disconnection through the TCPIsConnected() API. |
||
| 1287 | 4. Added a counter to the UDPPerformanceTest module and made it supress transmission |
||
| 1288 | if an Ethernet link is not present. |
||
| 1289 | 5. Added TCPIP WebVend App example application to the main stack distribution. This |
||
| 1290 | corresponds to three new Microchip Webinars being published on the HTTP2 server |
||
| 1291 | usage topic. |
||
| 1292 | |||
| 1293 | Fixes: |
||
| 1294 | 1. Fixed MPFS2.exe PC utility from crashing if you attempt to generate an MPFS |
||
| 1295 | classic .bin/.c/.s output file. |
||
| 1296 | 2. Fixed RCONbits definition for HPC_EXPLORER hardware profile when using the HI TECH |
||
| 1297 | PICC-18 compiler. |
||
| 1298 | 3. Fixed a MPFSGetFilename() bug when using C30 and MPFS2 images stored in program |
||
| 1299 | memory. Thanks to Billy Walton on the Microchip Ethernet forum for identifying |
||
| 1300 | this issue. |
||
| 1301 | 4. Fixed a TCP RX FIFO corruption problem which would occur if the remote node sent |
||
| 1302 | more data than could fit in our RX FIFO in a single packet. The GeneticTCPClient.c |
||
| 1303 | module was subject to experiencing this problem when connected to www.google.com's |
||
| 1304 | servers. |
||
| 1305 | 5. Fixed a DHCP client UDP socket leak if you called DHCPDisable() after the DHCP |
||
| 1306 | client had already obtained a UDP socket. Thanks go to Matthew Kendall on the |
||
| 1307 | Microchip Ethernet forum for identifying this problem. |
||
| 1308 | 6. Fixed a SNMP Server module bug testing a string length (with respect to |
||
| 1309 | SNMP_COMMUNITY_MAX_LEN) being off by one, resulting in possible memory corruption. |
||
| 1310 | Thanks go to Matthew Kendall on the Microchip Ethernet forum for identifying this |
||
| 1311 | problem. |
||
| 1312 | 7. Cleaned up some C30 compiler warnings related to macro definitions with inadequate |
||
| 1313 | parenthesis in them. |
||
| 1314 | 8. Fixed HTTP2 module sometimes returning a 501 error instead of a correct web page |
||
| 1315 | when being bombarded with new connection requests. |
||
| 1316 | 9. Fixed a TickGet*() API problem where the returned tick value could be off by 64K |
||
| 1317 | ticks occasionally on PIC24 and dsPIC processors. |
||
| 1318 | 10.Fixed SMTP client module failing to send email when attempting to send an email |
||
| 1319 | with a `CC' or `BCC' field that was in ROM while the `To' field was in RAM or visa |
||
| 1320 | versa. |
||
| 1321 | 11.Fixed TCP module sending an incorrect sequence number in RST packets sent when in |
||
| 1322 | the TCP_SYN_SENT state and an invalid segment arrives. In prior stack versions, |
||
| 1323 | some TCP client applications might take a very long time to recover in the event |
||
| 1324 | of a power failure, reset, and subsequent reconnect to a remote server that still |
||
| 1325 | thinks the old connection is still active. With this fix, reconnections should be |
||
| 1326 | possible almost immediately after a power failure because the correct RST packet |
||
| 1327 | will cause the old connection to get closed right away. |
||
| 1328 | 12.Fixed a TCP socket leak problem that would occur over if the local PIC called |
||
| 1329 | TCPDisconnect() and the remote node didn't send us a correct FIN response. |
||
| 1330 | Sockets could previously get lost in the TCP_FIN_WAIT_2 state and wouldn't |
||
| 1331 | recover unless the application called TCPDisconnect() a second time with the same |
||
| 1332 | socket handle. |
||
| 1333 | |||
| 1334 | Known Problems: |
||
| 1335 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 1336 | result, it will likely not display correctly or work at all with some Telnet |
||
| 1337 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 1338 | is provided with Microsoft Windows. |
||
| 1339 | 2. TFTPc module has not been tested with this version. |
||
| 1340 | 3. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 1341 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 1342 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 1343 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 1344 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 1345 | boards to reenable it's DHCP server. |
||
| 1346 | 4. HI-TECH PICC-18 projects may not compile when targeting the external |
||
| 1347 | ENC28J60 chip on the PICDEM.net 2 development board (instead of the |
||
| 1348 | internal Ethernet controller). This problem only applies when a |
||
| 1349 | PIC18F97J60 family part is the target. I.e. it compiles correctly for the |
||
| 1350 | HPC_EXPLORER + Ethernet PICtail. |
||
| 1351 | 5. HI-TECH PICC-18 projects will not correctly set the processor configuration fuses |
||
| 1352 | through code using the __CONFIG() macro. Ensure that the configuration fuses are |
||
| 1353 | manually set correctly via the MPLAB IDE Configuration Bits dialog. This problem |
||
| 1354 | has been observed with compiler version 9.50PL3. |
||
| 1355 | 6. MAC.h RXSIZE precompiler test for proper range doesn't work. This is not a |
||
| 1356 | functional problem, just a compile-time configuration test. Ensure that you don't |
||
| 1357 | over allocate MAX_TCP_SOCKETS, TCP_TX_FIFO_SIZE, TCP_RX_FIFO_SIZE, or |
||
| 1358 | MAX_HTTP_CONNECTIONS. |
||
| 1359 | 7. GenericTCPClient example of downloading a web page from www.google.com is extremely |
||
| 1360 | slow. The default TCP socket has too little RX space to accept a full packet sent |
||
| 1361 | from Google's servers, so the remote server must retransmit a lot of data, slowing |
||
| 1362 | the transfer down a lot. Making TCP_RX_FIFO_SIZE 536 bytes or bigger and |
||
| 1363 | correspondingly shrinking MAX_TCP_SOCKETS will correct this problem. |
||
| 1364 | |||
| 1365 | |||
| 1366 | |||
| 1367 | ******** |
||
| 1368 | v4.11 27 August 2007 |
||
| 1369 | ******** |
||
| 1370 | IMPORTANT NOTE: You must use MPLAB 7.62 or higher to successfully open the |
||
| 1371 | MPLAB projects. |
||
| 1372 | |||
| 1373 | Changes: |
||
| 1374 | 1. Added a Microchip TCP/IP Stack Users' Guide to document the stack |
||
| 1375 | features/modules/and APIs and address the stale AN833 documentation. Note that this |
||
| 1376 | is a work in progress. Many modules have yet to be documented in the Users' Guide. |
||
| 1377 | 2. Added HTTP2 module. This HTTP module includes a whole new API and supreme new |
||
| 1378 | features, such as POST support, cookies support, browser authentication support, and |
||
| 1379 | more. |
||
| 1380 | 3. Added MPFS2 module. This module is required for the new HTTP2 module and performs |
||
| 1381 | better while having fewer limitations. Long filenames and folders are now |
||
| 1382 | supported. |
||
| 1383 | 4. Added a new GUI based MPFS2.exe PC utility. The older MPFSv2.exe GUI application |
||
| 1384 | and MPFS.exe command line tool has been retired. The new utility has advanced |
||
| 1385 | features, such as MPFS2 file format support, GZIP compress, etc. |
||
| 1386 | 5. Added a TFTP bootloader. This is a stand alone project and currently only supports |
||
| 1387 | the PIC18F97J60 family of PIC processors with internal Ethernet. |
||
| 1388 | 6. Added UART2TCPBridge.c file and STACK_USE_UART2TCP_BRIDGE option to TCPIPConfig.h. |
||
| 1389 | This new module acts as a TCP and UART bridge, with a high priority UART interrupt |
||
| 1390 | and dedicated UART TX and RX FIFOs for minimum UART latency and maximum performance. |
||
| 1391 | By default, the bridge acts as a TCP server and listens on port 9761. The UART baud |
||
| 1392 | rate defaults to 19200. The bridge can be reconfigured to act as a TCP client. |
||
| 1393 | 7. Added Simple Network Time Protocol (SNTP) client. This module automatically |
||
| 1394 | obtains the current time (date) from the Internet. Enable this module by defining |
||
| 1395 | STACK_USE_SNTP_CLIENT in TCPIPConfig.h. Obtain the current time (in seconds since |
||
| 1396 | 00:00:00 1970) by calling the SNTPGetUTCSeconds() API. |
||
| 1397 | 8. Added support functions Base64Encode() and Base64Decode() in Helpers.c. Base 64 is |
||
| 1398 | required for the new HTTP2 module, but of general use to many applications. |
||
| 1399 | 9. Added SMTP Authentication support to the SMTP Client. To use this, set the |
||
| 1400 | SMTPClient.Username and SMTPClient.Password string pointers to a non-NULL value |
||
| 1401 | before calling SMTPSendMail(). Applications implementing email transmission |
||
| 1402 | capabilities should expose these options to the end-user for configuration. To use |
||
| 1403 | SMTP servers that do not support the AUTH LOGIN authentication command, simply |
||
| 1404 | leave the SMTPClient.Username and SMTPClient.Password pointers as their default |
||
| 1405 | NULL value. |
||
| 1406 | 10.Converted DHCPDisable() from a macro to a real function and added the complementary |
||
| 1407 | DHCPEnable() function. These two functions can be used at run time to dynamically |
||
| 1408 | switch between using a static IP address and configuration and DHCP assigned IP |
||
| 1409 | address and configuration. |
||
| 1410 | 11.Updated StringToIPAddress() to work more robustly, including the ability to decode |
||
| 1411 | host name strings and determine if they contain a valid IP address or not. Also, |
||
| 1412 | the complementary ROMStringToIPAddress() function was added. |
||
| 1413 | 12.Updated the DNS module. Now, if you give it an IP address string to resolve, it |
||
| 1414 | will convert the string to an IP address and immediately return without querying |
||
| 1415 | the DNS. |
||
| 1416 | 13.Shrunk the advertised TCP Maximum Segment Size from 576 bytes to 528 bytes. This |
||
| 1417 | might improve compatibility if your TCP data has to propagate over nodes with small |
||
| 1418 | MTUs and you have a correspondingly large TCP RX FIFO defined. |
||
| 1419 | 14.Performed some maintenance on the FTP.c file. No significant functionality has |
||
| 1420 | been changed, but some potential problems were corrected. |
||
| 1421 | 15.Altered Tick.c file and API. Now, the Tick module can operate maximum precision, |
||
| 1422 | returning the value of the actual Timer as it is counting, without disturbing the |
||
| 1423 | timer count by writing to it or disabling it. Three new APIs were added, |
||
| 1424 | TickGetDiv256(), TickGetDiv64K(), and TickConvertToMilliseconds(). Internally the |
||
| 1425 | tick counter is now 48-bits wide and as accurate as your Timer clock source, |
||
| 1426 | allowing you to use it as a Real Time Clock. |
||
| 1427 | 16.Added PIC24FJ64GA004_PIM hardware profile. This hardware profile is intended for |
||
| 1428 | use with the PIC24FJ64GA004 PIM on the Explorer 16 development board. In this mode, |
||
| 1429 | BUTTON2 and BUTTON3 and several of the LEDs do not work correctly due to lack of |
||
| 1430 | I/O pins on this device. Also, you cannot have the POT and TEMP jumpers on the PIM |
||
| 1431 | bridged because these signals are multiplexed with the SDO1/SDI1 pins needed for |
||
| 1432 | the Ethernet PICtail Plus. |
||
| 1433 | 17.Removed most ROM APIs when using a 16-bit compiler (C30). PIC24s and dsPICs usually |
||
| 1434 | don't need separate ROM functions since the Program Space Visibility feature maps |
||
| 1435 | ROM into RAM space. All ROM APIs are still supported, but they are now macros to |
||
| 1436 | base RAM APIs. This change saves a couple of kilobytes of code space on PIC24 and |
||
| 1437 | dsPICs. |
||
| 1438 | 18.Improved MyTCB structure caching. This should reduce TCP packet processing |
||
| 1439 | overhead with the ENC28J60 where TCBs are stored in the Ethernet RAM. |
||
| 1440 | 19.MAX_RETRY_COUNTS TCP configuration option has been renamed to TCP_MAX_RETRIES. |
||
| 1441 | 20.FTP server is no longer enabled by default. HTTP2 now supports POST, so you can |
||
| 1442 | upload new webpages through the /mpfsupload page now. FTP required two precious TCP |
||
| 1443 | sockets. |
||
| 1444 | 21.Began adding hooks for an SSL/TLS transport for secure HTTPS and other future stack |
||
| 1445 | modules. Note that these cryptographic modules are not available at this time. |
||
| 1446 | Configuration options such as MAX_SSL_CONNECTIONS do nothing and should not be |
||
| 1447 | modified. |
||
| 1448 | 22.Username has changed for all of the modules. Now all modules have a default |
||
| 1449 | username of "admin" and password of "microchip". Previously, the FTP and Telnet |
||
| 1450 | modules used "ftp" and "telnet" respectively for the usernames. |
||
| 1451 | |||
| 1452 | Fixes: |
||
| 1453 | 1. Fixed a SendFile() bug in HTTP.c where parsing dynamic cgi files could send garbage |
||
| 1454 | back to the web browser sometimes. Thanks go to Matt Watkins on the Microchip |
||
| 1455 | Ethernet forum for identifying this issue. |
||
| 1456 | 2. Fixed an off by one error in the calculation of RESERVED_TCP_MEMORY. Previously, |
||
| 1457 | the last TCP socket's RX FIFO would incorrectly overlap with the Ethernet RX buffer, |
||
| 1458 | causing incoming packets to occasionally be corrupted or the incoming data on the |
||
| 1459 | last socket to get corrupted. |
||
| 1460 | 3. Fixed the QWORD_VAL's dword struct element types. dword.LD and dword.HD were |
||
| 1461 | incorrectly defined as WORDs instead of DWORDs. Thanks go to Iñaki Esparza on the |
||
| 1462 | Microchip Ethernet forum for identifying this issue. |
||
| 1463 | 4. Fixed the incorrect processing of received IP fragments with a non-zero offset. |
||
| 1464 | This stack does not support IP packet reconstruction due to the limited amount of |
||
| 1465 | available RAM. Thanks go to Iñaki Esparza on the Microchip Ethernet forum for |
||
| 1466 | noticing this behavior. |
||
| 1467 | 5. Board now only responds to ping requests to our IP address, the directed subnet |
||
| 1468 | broadcast address, or the broadcast address of 255.255.255.255. Previously, it |
||
| 1469 | would respond to any ping request to any IP address, assuming the MAC address was |
||
| 1470 | correct. |
||
| 1471 | 6. Fixed a memory corruption/UDP packet loss problem when handling incoming UDP |
||
| 1472 | packets. Previously, StackTask() would incorrectly continue processing more |
||
| 1473 | packets if it came upon a UDP packet. Thanks go to Iñaki Esparza on the Microchip |
||
| 1474 | Ethernet forum for identifying this issue. |
||
| 1475 | 7. Fixed the SMTPClient.ROMPointers.Server flag having an inverted meaning. |
||
| 1476 | Previously, the SMTP client module would treat the SMTPClient.Server pointer as a |
||
| 1477 | ROM pointer if this bit was cleared. In most cases, this would cause the SMTP |
||
| 1478 | client to return an error code of 0x8000 when the SMTPClient.SMTPServer address |
||
| 1479 | pointer was set. |
||
| 1480 | 8. Fixed the DHCP Server module from incorrectly parsing received packets which had a |
||
| 1481 | DHCP_PARAM_REQUEST_IP_ADDRESS option followed by more options. Previously due to |
||
| 1482 | the length miscalculation, the parser would enter a random state, depending on the |
||
| 1483 | packet's contents. Thanks go to Iñaki Esparza on the Microchip Ethernet forum for |
||
| 1484 | identifying this issue. |
||
| 1485 | 9. Fixed potential incorrect results when UDPIsGetReady() was called and a previous |
||
| 1486 | application did not call UDPDiscard() on an RX packet. Now, StackTsk() calls |
||
| 1487 | UDPDiscard() as appropriate to let it know when it's old RX data is being thrown |
||
| 1488 | away. This fixes a potential bug in the DHCP Server module and makes the UDP API |
||
| 1489 | more robust. Thanks go to Iñaki Esparza on the Microchip Ethernet forum for |
||
| 1490 | identifying the potential DHCP server issue. |
||
| 1491 | 10.Fixed a potential ARP bug where the Gateway's MAC address would be returned for an |
||
| 1492 | IP address on the local subnet. This unusual case would occur when two application |
||
| 1493 | tasks were using the ARP module at the same time and the second application was |
||
| 1494 | trying to resolve an IP address off of our subnet. Thanks go to Iñaki Esparza on |
||
| 1495 | the Microchip Ethernet forum for pointing this issue out. |
||
| 1496 | 11.Fixed an PIC18F97J60 family MAC layer bug where MACGetArray() might not correctly |
||
| 1497 | increment the Ethernet read pointer if a NULL pointer was given for the |
||
| 1498 | destination. The C compiler might have optimized the function so that it would |
||
| 1499 | increment the read pointer one less than it was supposed to. |
||
| 1500 | 12.The TCP module now acknowledges TCP Keep-Alive packets which will help prevent |
||
| 1501 | connection loss if the remote node fills up our RX FIFO and then our window-update |
||
| 1502 | packet gets lost on the network/Internet. In stack version 4.02, a zero-window |
||
| 1503 | probe would have been required to restore the communications. |
||
| 1504 | 13.Fixed a TCP RX FIFO corruption issue that would occur in (uncommon) circumstances |
||
| 1505 | when too many out-of-order segments arrived such that a second "hole" would have |
||
| 1506 | been required to accommodate the data. Thanks go to Iñaki Esparza and his eagle |
||
| 1507 | eyes on the Microchip Ethernet forum for finding this corner case bug. |
||
| 1508 | 14.Inline assembly in the ETH97J60.c file has been modified to accommodate the C18 |
||
| 1509 | Extended mode and C18 Auto default storage class. Previously, the Ethernet module |
||
| 1510 | would transmit garbage packets when using the C18 parameter stack. |
||
| 1511 | 15.Fixed potential buffer overflow in NBNS.c's NBNSGetName() function where an |
||
| 1512 | unexpected string length retrieved from the packet could cause random memory |
||
| 1513 | corruption. |
||
| 1514 | 16.Fixed some potential PIC18F97J60 family Ethernet module transmit lockup conditions |
||
| 1515 | that occur on some networks. Previously blocking while() loops would wait |
||
| 1516 | indefinitely for the ECON1<TXRTS> bit to become clear by hardware, which the |
||
| 1517 | hardware might never have done. |
||
| 1518 | 17.In MainDemo.c, a call to DelayMs() was being made using a value of 100ms. This was |
||
| 1519 | too long for the underlying Delay1KTCYx() C18 function and would result in a |
||
| 1520 | shorter than expected delay when compiled with C18. This has been fixed with a |
||
| 1521 | loop. Thanks go to Andy123 on the Microchip Ethernet forum for pointing this |
||
| 1522 | problem out. |
||
| 1523 | 18.Fixed a potential C18 memory overlaying problem in the TickUpdate() function. |
||
| 1524 | Previously, the local variable used in this function might have been overlayed on |
||
| 1525 | other memory, resulting in random memory corruption as the ISR occurred. |
||
| 1526 | 19.The demo AJAX web pages in the TCPIP Demo App\WebPages folder now correctly display |
||
| 1527 | and self-refresh in Firefox 2. Previously, it would work in Firefox 1.5 and |
||
| 1528 | Microsoft Internet Explorer, but not Firefox 2. Thanks go to "gohsthb" on the |
||
| 1529 | Microchip Ethernet forum for identifying this correction. |
||
| 1530 | 20.Rewrote the GenericTCPServer.c example to not use an application RAM FIFO for |
||
| 1531 | buffering. Since the TCP module implements its own FIFOing, the application has |
||
| 1532 | limited need for its own FIFO too. This fixes a previous bug where the |
||
| 1533 | GenericTCPServer was not checking the number of incoming bytes with the remaining |
||
| 1534 | size available of the App FIFO. This would have previously resulted in a buffer |
||
| 1535 | overflow, corrupting the RX data if too much arrived all at once. |
||
| 1536 | 21.Fixed a potential MPFS classic inline ASM30 assembly code problem where web pages |
||
| 1537 | stored in internal Flash and C30 with optimizations enabled could result in data |
||
| 1538 | corruption. |
||
| 1539 | 22.Fixed a UDPPut() tracking problem that would result in extra bytes being appended |
||
| 1540 | to the end of a packet if the UDPSetTxBuffer() function was used. This previously |
||
| 1541 | caused the SNMP module to send some junk data at the end of its packets. |
||
| 1542 | 23.Fixed a potential TCP problem where transmitted FIN packets might not get |
||
| 1543 | retransmitted properly if the remote node never acknowledged the data that was |
||
| 1544 | transmitted just before the FIN was sent. |
||
| 1545 | 24.Fixed a NetBIOS Name Service bug where the response packet would sometimes get sent |
||
| 1546 | to an incorrect address. It now consistently responds to the unicast MAC/IP |
||
| 1547 | address of the NBNS query packet. |
||
| 1548 | 25.Added padding to all transmitted DHCP messages to make the minimum UDP payload at |
||
| 1549 | least 300 bytes. This fixes compatibility with some older BOOTP relay devices |
||
| 1550 | which discard smaller packets. Thanks go to Dave Collier on the Microchip Ethernet |
||
| 1551 | forum for pointing this problem out. |
||
| 1552 | 26.Substantially shrunk the number of retransmission attempts made in the |
||
| 1553 | TCP_SYN_RECEIVED state. This improves recovery time when attacked by a SYN flood |
||
| 1554 | Denial of Service event. The recovery time is now 7 seconds (3 total packets) |
||
| 1555 | instead of 31 seconds (6 total packets) |
||
| 1556 | 27.Fixed the possibility of the NetBIOS Name Service module giving out the board's |
||
| 1557 | static IP address before a DHCP lease could be obtained. NBNS requests are now |
||
| 1558 | only serviced when originating from nodes on the same subnet. |
||
| 1559 | 28.Fixed storage of MPFS classic in internal program memory when using the HI-TECH |
||
| 1560 | PICC-18 compiler. |
||
| 1561 | 29.Substantially revised TCP.c, fixing many TCP bugs and possibly adding new ones. |
||
| 1562 | Thanks go to Michael Rubinstein for finding several of these TCP problems. |
||
| 1563 | 30.The DNS client module will now time out and return failure if the DNS server cannot |
||
| 1564 | be ARPed or does not respond to the DNS query. Each timeout is set to 1 second and |
||
| 1565 | 3 total ARP and 3 total DNS query attempts are possible. Previously, it would |
||
| 1566 | retry indefinitely, causing the calling application to deadlock. |
||
| 1567 | |||
| 1568 | Known Problems: |
||
| 1569 | 1. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 1570 | result, it will likely not display correctly or work at all with some Telnet |
||
| 1571 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 1572 | is provided with Microsoft Windows. |
||
| 1573 | 2. TFTPc module has not been tested with this version. |
||
| 1574 | 3. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 1575 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 1576 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 1577 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 1578 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 1579 | boards to reenable it's DHCP server. |
||
| 1580 | 4. HI-TECH PICC-18 projects may not compile when targeting the external |
||
| 1581 | ENC28J60 chip on the PICDEM.net 2 development board (instead of the |
||
| 1582 | internal Ethernet controller). This problem only applies when a |
||
| 1583 | PIC18F97J60 family part is the target. I.e. it compiles correctly for the |
||
| 1584 | HPC_EXPLORER + Ethernet PICtail. |
||
| 1585 | 5. HI-TECH PICC-18 projects will not correctly set the processor configuration fuses |
||
| 1586 | through code using the __CONFIG() macro. Ensure that the configuration fuses are |
||
| 1587 | manually set correctly via the MPLAB IDE Configuration Bits dialog. This problem |
||
| 1588 | has been observed with compiler version 9.50PL3. |
||
| 1589 | |||
| 1590 | |||
| 1591 | Testing and Performance Notes: |
||
| 1592 | 1. Make sure to use MPLAB IDE 7.62 or higher with this version. Versions below 7.61 |
||
| 1593 | will not work. Version 7.62 has cool new features like C auto-word complete and |
||
| 1594 | function parameter tooltips that can be enabled (disabled by default). |
||
| 1595 | 2. Testing was done using MPLAB C18 version 3.12, MPLAB C30 version 3.01, and HI-TECH |
||
| 1596 | PICC-18 version 9.50PL3. Make sure to upgrade your tools to at least these |
||
| 1597 | versions. |
||
| 1598 | |||
| 1599 | |||
| 1600 | ******** |
||
| 1601 | v4.02 10 April 2007 |
||
| 1602 | ******** |
||
| 1603 | IMPORTANT NOTE: You must use MPLAB 7.41 or higher to successfully open the |
||
| 1604 | MPLAB projects. |
||
| 1605 | IMPORTANT NOTE2:If an external serial EEPROM memory is used to store AppConfig, |
||
| 1606 | it's contents will be invalidated the first time you run this |
||
| 1607 | version, restoring the AppConfig defaults. The AppConfig |
||
| 1608 | structure has been optimized. |
||
| 1609 | IMPORTANT NOTE3:If an external serial EEPROM memory for MPFS, you will need to |
||
| 1610 | recreate the MPFS image and program your EEPROM. A 32 bit |
||
| 1611 | addressing format is now used. |
||
| 1612 | |||
| 1613 | Changes: |
||
| 1614 | 1. Implemented TCP RX packet order correction logic. The stack can now accept |
||
| 1615 | TCP frames that arrive out-of-order without requiring the remote node to go |
||
| 1616 | through a retransmit cycle. This dramatically improves RX performance when |
||
| 1617 | communicating over the Internet. |
||
| 1618 | 2. UDPOpen() now can handle a NULL pointer for remoteNode. In this case, the |
||
| 1619 | broadcast IP/MAC addresses will be used for the remoteNode (destination |
||
| 1620 | address of outbound packets). |
||
| 1621 | 3. Recreated MPLAB projects for the HI-TECH PICC-18 compiler. These were |
||
| 1622 | temporarily absent from 4.00RC. This project works with the PIC18F97J60 |
||
| 1623 | with internal Ethernet module, assuming the correct compiler version is |
||
| 1624 | present. |
||
| 1625 | 4. Moved all the headers around. Most of them are in |
||
| 1626 | "Microchip Solutions\Microchip\Include\TCPIP Stack" now. This change was |
||
| 1627 | made to again be more compatible with other (future) Microchip software |
||
| 1628 | libraries. |
||
| 1629 | 5. New UDPPut() behavior. Now, if space in the Ethernet TX buffer runs out, |
||
| 1630 | the packet will not automatically be transmitted. You must call UDPFlush() |
||
| 1631 | to cause the packet to be transmitted. |
||
| 1632 | 6. Added UDPGetArray(), UDPPutArray(), UDPPutROMArray(), UDPPutString() and |
||
| 1633 | UDPPutROMString() user API functions. These functions perform substantially |
||
| 1634 | better than calling UDPPut() successively and allow greater application |
||
| 1635 | programming flexibility. |
||
| 1636 | 7. Changed TCPPutString() and TCPPutROMString() APIs to now return an updated |
||
| 1637 | string pointer instead of a count of bytes successfully placed in the TX |
||
| 1638 | buffer. |
||
| 1639 | 8. Added UDPPerformanceTest.c. By default this module causes UDP packets |
||
| 1640 | containing 1024 bytes of application data to be broadcasted on UDP port |
||
| 1641 | 12345. Use a packet sniffer, such as Wireshark (http://www.wireshark.com/) |
||
| 1642 | to capture and derive stack overhead/UDP TX performance characteristics with |
||
| 1643 | this module. Note that this test uses the UDPPutROMArray() function. |
||
| 1644 | Applications which use successive calls to UDPPut() will be slower. To |
||
| 1645 | enable this module, #define STACK_USE_UDP_PERFORMANCE_TEST in TCPIPConfig.h. |
||
| 1646 | 9. Added TCPPerformanceTest.c. By default this module listens on TCP port |
||
| 1647 | 12345. When a remote client connects, this server module will being |
||
| 1648 | transmitting the maximum possible amount of application data that it can, |
||
| 1649 | given your TCP TX FIFO size. Use a packet sniffer, such as Wireshark |
||
| 1650 | (http://www.wireshark.com/) to capture and derive stack overhead/TCP TX |
||
| 1651 | performance characteristics with this module. Any TCP client can be used, |
||
| 1652 | including readily available utilities such as the telnet.exe utility |
||
| 1653 | available on Microsoft Windows XP. To use it to connect to the test module, |
||
| 1654 | run: "telnet.exe xxx.xxx.xxx.xxx 12345" where xxx.xxx.xxx.xxx is the board's |
||
| 1655 | IP address. Note that this test uses the TCPPutROMArray() function. |
||
| 1656 | Applications which use successive calls to TCPPut() will be slower. To |
||
| 1657 | enable this module, #define STACK_USE_TCP_PERFORMANCE_TEST in TCPIPConfig.h. |
||
| 1658 | 10.Added Reboot.c module. By default, this module listens on UDP port 30304. |
||
| 1659 | If the application byte 0x00 arrives on this port, the PIC will reset. This |
||
| 1660 | is primarily useful for remote Bootloader entry. |
||
| 1661 | #define STACK_USE_REBOOT_SERVER in TCPIPConfig.h to enable this module. |
||
| 1662 | Note that since no encrypted challenge/response algorithm is currently |
||
| 1663 | implemented, this module is a Denial of Service vulnerability, so it should |
||
| 1664 | not be enabled unless there is a specific need for it. |
||
| 1665 | 11.Made the TickUpdate() ISR routine execute in the low priority ISR instead of |
||
| 1666 | the default high priority ISR. The Microchip TCP/IP stack does not need any |
||
| 1667 | interrupts except this low priority timer. |
||
| 1668 | 12.Renamed STACK_USE_DHCP macro to STACK_USE_DHCP_CLIENT |
||
| 1669 | 13.Added STACK_USE_MPFS macro. |
||
| 1670 | 14.Changed UDPIsPutReady() to return a WORD instead of a BOOL. The WORD is the |
||
| 1671 | number of bytes that can be put into the buffer. |
||
| 1672 | 15.Changed MACGetArray() to accept a NULL pointer. If NULL, the retrieved data |
||
| 1673 | will simply be discarded. This also changes the behavior of UDPGetArray() |
||
| 1674 | and TCPGetArray() to match, throwing bytes away if a NULL pointer is given. |
||
| 1675 | 16.Added a very simple DHCP Server module. This module has limitations and is |
||
| 1676 | useful for a single client only. Its purpose is to allow you to directly |
||
| 1677 | connect the board to a standard PC through a crossover cable (no other |
||
| 1678 | network nodes attached). The server is coded to automatically disable |
||
| 1679 | itself if the DHCP client is also enabled and another DHCP server is |
||
| 1680 | detected on the network. This allows both the DHCP server and DHCP client |
||
| 1681 | to coexist without any manual reconfiguration. |
||
| 1682 | 17.Added DNSResolveROM() function for resolving host names that are stored in |
||
| 1683 | program memory, ex: literal strings. |
||
| 1684 | 18.Added a TCP automatic transmit/window update timer. It defaults to |
||
| 1685 | TCP_AUTO_TRANSMIT_TIMEOUT_VAL (40ms) after the first get or put operation |
||
| 1686 | following the last automatic transmit/window update. This timer enhances |
||
| 1687 | performance, especially when streaming data over the Internet where round |
||
| 1688 | trip times can be several tens to low hundreds of milliseconds. This also |
||
| 1689 | improves application coding flexibility as TCPFlush() need not be called |
||
| 1690 | anymore. |
||
| 1691 | 19.Added TCP delayed ACKnowledgement timer. This conserves bandwidth by |
||
| 1692 | transmitting fewer ACKs and prevents inadvertently influencing remote slow |
||
| 1693 | start/collision avoidance and fast retransmit algorithms. |
||
| 1694 | 20.Completely rewrote ICMP (ping) server module. It is now much smaller (ROM |
||
| 1695 | and RAM), faster, and can handle packets of 576 bytes or larger, if no IP |
||
| 1696 | fragmentation occurs. |
||
| 1697 | 21.Rewrote StackTsk() stack manager. It is much simpler now. |
||
| 1698 | 22.Added TCPFind(), TCPFindArray(), and TCPFindROMArray() user API functions. |
||
| 1699 | These functions peek inside a given TCP socket's RX FIFO (without removing |
||
| 1700 | anything) and looks for a particular byte or array of bytes. This should |
||
| 1701 | greatly simplify the creation of application code whenever variable length |
||
| 1702 | fields are used (ex: text strings terminated by \r\n). It supports case |
||
| 1703 | insensitive text searching or binary searching, as well as an offset to |
||
| 1704 | start searching at. |
||
| 1705 | 23.Added TCPGetRxFIFOFree() user API. It returns the number of bytes of free |
||
| 1706 | space in the TCP's RX FIFO. |
||
| 1707 | 24.Changed default TICK resolution to 1ms (from 10ms) and improved accuracy. |
||
| 1708 | 25.Added outbound ping capabilities (i.e. board can now ping another board or a |
||
| 1709 | PC). To enable these features, define STACK_USE_ICMP_CLIENT. This will |
||
| 1710 | enable several new APIs, including ICMPBeginUsage(), ICMPSendPing(), |
||
| 1711 | ICMPGetReply(), and ICMPEndUsage(). The functions should be called in this |
||
| 1712 | order. See the PingDemo() function in MainDemo.c for an example of how to |
||
| 1713 | use them. By default, pushing BUTTON3 (left-most one) will cause a ping to |
||
| 1714 | be sent to 4.78.194.159 (ww1.microchip.com). The response time will be |
||
| 1715 | displayed on the LCD (assuming your development board has an LCD). |
||
| 1716 | 26.Cleaned up C30 3.00 signed/unsigned warnings. |
||
| 1717 | 27.Removed PIC18F97J60_TEST_BOARD hardware profile support. This stack no |
||
| 1718 | longer supports it due to the old beta silicon (with errata) mounted on |
||
| 1719 | these boards. |
||
| 1720 | 28.Added support for ROM pointers for all of the SMTP strings (To, From, CC, |
||
| 1721 | Subject, etc.). If you use a ROM string, you must also set the |
||
| 1722 | corresponding SMTPClient.ROMPointers.xxx bit to let the SMTP module know |
||
| 1723 | which type of pointer was provided. See the SMTPDemo() code in MainDemo.c |
||
| 1724 | for and example calling sequence using both ROM and RAM strings for the |
||
| 1725 | various fields. |
||
| 1726 | |||
| 1727 | Fixes: |
||
| 1728 | 1. Fixed a critical TCP buffer corruption issue where the start of a TCB header |
||
| 1729 | overlapped with the last byte of the RX FIFO from the previous socket. This |
||
| 1730 | bug affected version 4.00RC only. |
||
| 1731 | 2. ETH97J60.c, TCPIP.h, and TCPIP Stack Version.txt were correctly readded to |
||
| 1732 | the TCPIP Demo App-C18 project using relative paths instead of absolute |
||
| 1733 | paths. |
||
| 1734 | 3. UDPOpen() now dynamically assigns a local port number if you call it and |
||
| 1735 | give it a 0x0000 port number. This should fix some UDP applications from |
||
| 1736 | not working (ex: DNS Client module) with some computers/routers/networks |
||
| 1737 | which throw away traffic originating from the invalid port 0x0000 value. |
||
| 1738 | 4. Fixed a ENC28J60 bank selection error that would occur if an application |
||
| 1739 | called GetCLKOUT() in ENC28J60. By default, this function is not called. |
||
| 1740 | 5. UnencodeURL() function in Helpers.c is now tested and working. |
||
| 1741 | 6. Fixed a TCP Window Update problem when TCPGetArray() was used. Before the |
||
| 1742 | problem was fixed, performance could have been terrible on reception. |
||
| 1743 | 7. Fixed a unintended TCP connection close if the socket was idle for about a |
||
| 1744 | minute. Now, TCP sockets will remain open indefinitely if there is no |
||
| 1745 | traffic going on. |
||
| 1746 | 8. Serial numbers >32K are now displayed correctly on the serial port as a |
||
| 1747 | positive value when C18 is used and the board is placed in configuration |
||
| 1748 | mode (BUTTON0 is depressed on power up). |
||
| 1749 | 9. HI-TECH PICC-18 compiler would previously incorrectly initialize the |
||
| 1750 | AppConfig structure. |
||
| 1751 | 10.Previously a processor reset was possible when accessing items in the |
||
| 1752 | AppConfig strucutre on 16 bit MCUs (PIC24, dsPIC) due to unaligned word |
||
| 1753 | accesses. This was fixed by reordering the Flags byte in the APP_CONFIG |
||
| 1754 | structure. |
||
| 1755 | 11.Rewrote DHCP client state machine, fixing the previously known problem |
||
| 1756 | where it would not perform a new discovery if it was trying to renew a lease |
||
| 1757 | with an offline DHCP server. |
||
| 1758 | 12.Fixed a critical deadlock problem in the ETH97J60.c MAC layer driver for |
||
| 1759 | the PIC18F97J60 family Ethernet controller. Previously, it was possible |
||
| 1760 | (although rare) that the DMAST or TXRTS bits would get stuck set if too |
||
| 1761 | much Ethernet traffic was received within a short interval. Previously, the |
||
| 1762 | MACFlush() function was unnecessarily setting TXRST, which it should not do |
||
| 1763 | while the Ethernet interface or DMA is being used. |
||
| 1764 | 13.Fixed an HTTP server state machine problem where a new connection occurring |
||
| 1765 | too soon on a previously used socket could cause the HTTP server to no |
||
| 1766 | longer respond. |
||
| 1767 | 14.Fixed a potential memory corruption error in the HTTPGetVar() callback |
||
| 1768 | which would exceed the bounds of the VarString array when returning the |
||
| 1769 | VAR_STACK_DATE variable. |
||
| 1770 | 15.Fixed a TCP transmission sequence tracking problem whenever data is |
||
| 1771 | retransmitted and new unflushed data is also in the TX FIFO. Thanks go to |
||
| 1772 | Matt Watkins on the Microchip Ethernet forum for identifying this issue. |
||
| 1773 | |||
| 1774 | Known Problems: |
||
| 1775 | 1. RTL8019AS MAC layer driver has not been updated for new TCP module. Users |
||
| 1776 | requiring RTL8019AS support should continue to use stack version 3.75. |
||
| 1777 | 2. I2CEEPROM.c has not been tested or completed. Continue to use I2CEEPROM.c |
||
| 1778 | from stack version 3.75 if this file is needed. |
||
| 1779 | 3. Telnet server module does not implement a lot of Telnet functions. As a |
||
| 1780 | result, it will likely not display correctly or work at all with some Telnet |
||
| 1781 | clients. The server was tested with the Microsoft telnet.exe utility which |
||
| 1782 | is provided with Microsoft Windows. |
||
| 1783 | 4. TFTPc module has not been tested with this version. |
||
| 1784 | 5. The default demo web pages which use AJAX do not automatically refresh |
||
| 1785 | themselves when viewed in Firefox 2.0.0.1. Earlier Firefox versions |
||
| 1786 | (1.5ish) probably work without any problem. |
||
| 1787 | 6. Files may be inaccessible in your MPFS if compiled with C18 for internal |
||
| 1788 | flash program memory and your total MPFS content is large (around 64KB or |
||
| 1789 | larger). The code attempts to access the ROM memory using a near rom |
||
| 1790 | pointer when a far rom pointer is needed. |
||
| 1791 | 7. If using MPLAB 7.52 all .s files that are compiled with C30 will not have |
||
| 1792 | the corresponding object file get stored in the correct directory. As a |
||
| 1793 | result, if you are compiling with C30 and with MPFS_USE_EEPROM not defined |
||
| 1794 | (i.e. storing web pages in internal program memory), the project won't link |
||
| 1795 | (throws a undefined reference to `MPFS_Start'). As a workaround, remove the |
||
| 1796 | Intermediates Directory in the MPLAB project. Alternatively upgrade MPLAB |
||
| 1797 | to a newer version. MPLAB IDE 7.60+ may have this fixed. |
||
| 1798 | 8. If the DHCP client and DHCP server are used at the same time and you connect |
||
| 1799 | two similar boards to each other (ex: two PICDEM.net 2 boards connected via |
||
| 1800 | a crossover cable), a race condition can occur where both nodes will disable |
||
| 1801 | their DHCP server and neither board will get a successful DHCP lease. If |
||
| 1802 | this unlikely scenario occurs, as a work around, simply reset one of the |
||
| 1803 | boards to renable it's DHCP server. |
||
| 1804 | 9. HI-TECH PICC-18 projects may not compile when MPFS_USE_EEPROM is not |
||
| 1805 | defined and you are trying to store web page data in internal |
||
| 1806 | FLASH program memory. |
||
| 1807 | 10.HI-TECH PICC-18 projects may not compile when targeting the external |
||
| 1808 | ENC28J60 chip on the PICDEM.net 2 development board (instead of the |
||
| 1809 | internal Ethernet controller). This problem only applies when a |
||
| 1810 | PIC18F97J60 family part is the target. I.e. it compiles correctly for the |
||
| 1811 | HPC_EXPLORER + Ethernet PICtail. |
||
| 1812 | |||
| 1813 | Testing and Performance Notes: |
||
| 1814 | 1. This stack version was compiled and tested with the following tool versions: |
||
| 1815 | -MPLAB IDE 7.52 |
||
| 1816 | -Microchip C30 version 3.00 |
||
| 1817 | -Microchip C18 version 3.10 |
||
| 1818 | -HI-TECH PICC-18 version 9.50PL3 |
||
| 1819 | 2. Using the UDPPerformanceTest.c module, the stack can transmit around |
||
| 1820 | 220KBytes/second (1.75Mbits/second) of UDP application data on the |
||
| 1821 | PIC18F97J60 with internal Ethernet @ 41.66667MHz core clock, compiled using |
||
| 1822 | C18 3.10 with debug optimization settings. |
||
| 1823 | 3. Using the UDPPerformanceTest.c module, the stack can transmit around |
||
| 1824 | 392KBytes/second (3.14Mbits/second) of UDP application data on the |
||
| 1825 | PIC24HJ256GP610 with external ENC28J60 @ 40 MIPS, compiled using |
||
| 1826 | C30 3.00 with debug optimization settings. |
||
| 1827 | 4. Using the TCPPerformanceTest.c module, the stack can transmit around |
||
| 1828 | 58KBytes/second (464Kbits/second) of TCP application data on the |
||
| 1829 | PIC18F97J60 with internal Ethernet @ 41.66667MHz core clock, compiled using |
||
| 1830 | C18 3.10 with debug optimization settings, over Ethernet when using a tiny |
||
| 1831 | 200 byte TX TCP FIFO. Note that performance can be improved significantly |
||
| 1832 | by increasing the FIFO size and performance will drop significantly if the |
||
| 1833 | round trip TCP acknowledgement time is increased (ex: testing over the |
||
| 1834 | Internet instead of Ethernet). |
||
| 1835 | 5. Using the TCPPerformanceTest.c module, the stack can transmit around |
||
| 1836 | 69KBytes/second (558Kbits/second) of TCP application data on the |
||
| 1837 | PIC24HJ256GP610 with external ENC28J60 @ 40 MIPS, compiled using |
||
| 1838 | C30 3.00 with debug optimization settings, over Ethernet when using a tiny |
||
| 1839 | 200 byte TX TCP FIFO. Note that performance can be improved significantly |
||
| 1840 | by increasing the FIFO size and performance will drop significantly if the |
||
| 1841 | round trip TCP acknowledgement time is increased (ex: testing over the |
||
| 1842 | Internet instead of Ethernet). |
||
| 1843 | 6. Using the TCPPerformanceTest.c module, the stack can transmit around |
||
| 1844 | 178KBytes/second (1.42Mbits/second) of TCP application data on the |
||
| 1845 | PIC24HJ256GP610 with external ENC28J60 @ 40 MIPS, compiled using |
||
| 1846 | C30 3.00 with debug optimization settings, over Ethernet when using a larger |
||
| 1847 | 2000 byte TX TCP FIFO. Note that performance will drop significantly if the |
||
| 1848 | round trip TCP acknowledgement time is increased (ex: testing over the |
||
| 1849 | Internet instead of Ethernet). |
||
| 1850 | |||
| 1851 | |||
| 1852 | ******** |
||
| 1853 | v4.00RC 28 December 2006 |
||
| 1854 | ******** |
||
| 1855 | IMPORTANT NOTE: If an external serial EEPROM memory is used to store AppConfig, |
||
| 1856 | it's contents will be invalidated the first time you run this |
||
| 1857 | version, restoring the AppConfig defaults. The AppConfig |
||
| 1858 | structure has been optimized. |
||
| 1859 | IMPORTANT NOTE2: If an external serial EEPROM memory for MPFS, you will need to |
||
| 1860 | recreate the MPFS image and program your EEPROM. A 32 bit |
||
| 1861 | addressing format is now used. |
||
| 1862 | |||
| 1863 | |||
| 1864 | Changes: |
||
| 1865 | 1. Added Simple Mail Transfer Protocol (SMTP) client module and updated |
||
| 1866 | MainDemo.c to exercise the Email transmission functionality when a user |
||
| 1867 | pushes BUTTON0. |
||
| 1868 | 2. Added beta Telnet server module. See Known Problems section. |
||
| 1869 | 3. Completely revamped the TCP module. A real transmit FIFO and receive FIFO |
||
| 1870 | are allocated for each TCP socket now. This greatly enhances RFC compliance, |
||
| 1871 | communications robustness, and makes application development easier. New |
||
| 1872 | APIs were added for putting and getting arrays and strings (including ROM |
||
| 1873 | variants). Several TCP related bugs are now fixed as a result. Please |
||
| 1874 | report any bugs found in the new implementation. |
||
| 1875 | 4. Added TCPPutArray() API. |
||
| 1876 | 5. Added TCPPutROMArray() API. |
||
| 1877 | 6. Added TCPPutString() API. |
||
| 1878 | 7. Added TCPPutROMString() API. |
||
| 1879 | 8. Added TCPGetArray() API. |
||
| 1880 | 9. Changed TCPIsPutReady() API. Instead of returning a BOOL, it now returns a |
||
| 1881 | WORD. The WORD is a count of the number of bytes that TCPPut(), |
||
| 1882 | TCPPutArray(), etc. can immediately place in the output buffer. MAKE SURE |
||
| 1883 | THAT YOUR CODE DOES NOT COMPARE THE RETURN RESULT OF TCPIsPutReady() |
||
| 1884 | DIRECTLY TO TRUE. For example, "if(TCPIsPutReady(MySocket) == TRUE){...}" |
||
| 1885 | must be converted over to: "if(TCPIsPutReady(MySocket)){...}". |
||
| 1886 | 10.Changed TCPIsGetReady() API. Instead of returning a BOOL, it now returns a |
||
| 1887 | WORD. The WORD is a count of the number of bytes that TCPGet() or |
||
| 1888 | TCPGetArray() can immediately obtain. MAKE SURE THAT YOUR CODE DOES NOT |
||
| 1889 | COMPARE THE RETURN RESULT OF TCPIsGetReady() DIRECTLY TO TRUE. For example, |
||
| 1890 | "if(TCPIsGetReady(MySocket) == TRUE){...}" must be converted over to: |
||
| 1891 | "if(TCPIsGetReady(MySocket)){...}". |
||
| 1892 | 11.Changed TCPDiscard() return type from BOOL to void. |
||
| 1893 | 12.Removed TCP_NO_WAIT_FOR_ACK option. It was defaulted to disabled in the |
||
| 1894 | last two releases of the stack and is not needed with the new TCP module. |
||
| 1895 | 13.Updated DNS module to include two new required APIs: DNSBeginUsage() and |
||
| 1896 | DNSEndUsage(). These functions control a one bit ownership semaphore to |
||
| 1897 | allow multiple applications to use the DNS module in series. If invoked |
||
| 1898 | correctly, this will prevent unintended bugs resulting from two applications |
||
| 1899 | trying to use the DNS module at the same time. Old applications, such as |
||
| 1900 | those based around the GenericTCPClient.c example must be updated to use |
||
| 1901 | these functions. |
||
| 1902 | 14.Started using a new project structure and folders. You must use MPLAB 7.41 |
||
| 1903 | or higher (stack is tested on MPLAB 7.50) to use the default |
||
| 1904 | workspaces/projects, which include files using relative paths. This should |
||
| 1905 | improve compatibility with some future code libraries released by Microchip. |
||
| 1906 | StackTsk.h was broken into TCPIPConfig.h, HardwareProfile.h, and StackTsk.h. |
||
| 1907 | TCPIPConfig.h now includes all stack configuration options and |
||
| 1908 | HardwareProfile.h contains all hardware options. No macros need be globally |
||
| 1909 | defined in MPLAB project now. TCPIP.h is the only header applications must |
||
| 1910 | include now, for any/all modules used. |
||
| 1911 | 15.Combined ARP.c/ARP.h and ARPTsk.c/ARPTsk.h into a single file pair: |
||
| 1912 | ARP.c/ARP.h. Applications built using a prior stack revision must remove |
||
| 1913 | all instances including "ARPTsk.h" and replace it with "ARP.h" instead. The |
||
| 1914 | ARP module is now simpler, more linear (easier to read), and being in one |
||
| 1915 | source file, allows the C compiler to optimize better. |
||
| 1916 | 16.Added PIC18F67J60_TEST_BOARD hardware profile to HardwareProfiles.h. This |
||
| 1917 | hardware profile is designed for 05-60091 (Rev 1), a development board that |
||
| 1918 | is not in production at this time. |
||
| 1919 | 17.Added DSPICDEMNET1 and DSPICDEMNET2 hardware profiles to HardwareProfiles.h |
||
| 1920 | for eventual support of the Microchip dsPICDEM.net 1 and dsPICDEM.net 2 |
||
| 1921 | demo boards. These two boards use the RTL8019AS Ethernet controller and a |
||
| 1922 | 24LC515 EEPROM. These changes are currently incomplete and these profiles |
||
| 1923 | cannot be used. |
||
| 1924 | 18.Began rewriting I2CEEPROM.c to support 16 bit CPUs, including the |
||
| 1925 | dsPIC30F6014 used on the dsPICDEM.net 1 and 2 demo boards. Note that work |
||
| 1926 | here is incomplete and cannot be used as a result -- see Known Problems |
||
| 1927 | section. |
||
| 1928 | 19.Partially updated RTL8019AS.c to support 16 bit CPUs, including the |
||
| 1929 | dsPIC30F6014 used on the dsPICDEM.net 1 and 2 demo board. Note that work |
||
| 1930 | here is incomplete and cannot be used as a result -- see Known Problems |
||
| 1931 | section. |
||
| 1932 | 20.Updated SNMP.c to use new typedefs in GenericTypedefs.h. Also SNMP was |
||
| 1933 | tested in this version. SNMP.mib was updated some to better reflect current |
||
| 1934 | hardware. |
||
| 1935 | 21.Added AN870 SNMP callbacks to MainDemo.c (a feature that was missing in |
||
| 1936 | 3.xx releases). This code will get compiled when STACK_USE_SNMP_SERVER is |
||
| 1937 | defined in TCPIPConfig.h. |
||
| 1938 | 22.Removed all instances of MPFS_USE_PGRM for storing in internal FLASH program |
||
| 1939 | memory. Storage in internal program memory is now the default. Define |
||
| 1940 | MPFS_USE_EEPROM to override the default and store MPFS in an external EEPROM |
||
| 1941 | memory. |
||
| 1942 | 23.Decreased program memory needed for Announce.c module by about 180 bytes. |
||
| 1943 | Multiple inline calls to UDPPut() were removed. |
||
| 1944 | 24.UDP checksum checking logic has been improved. The UDP layer now avoids |
||
| 1945 | writing the pseudo header checksum in the RX buffer. |
||
| 1946 | 25.Swapped endianess of the returned checksum from CalcIPBufferChecksum(). |
||
| 1947 | Rewrote CalcIPBufferChecksum() in Helpers.c. This improves consistency. |
||
| 1948 | 26.Improved swapl() in Helpers.c. |
||
| 1949 | 27.Improved USART baud rate (SPBRG) calculation for PIC18s. Rounding is now |
||
| 1950 | done to chose the most optimal value and the code will automatically select |
||
| 1951 | high baud rate mode (BRGH=1) if possible. Additional improvements can be |
||
| 1952 | made if using a newer PIC18 with the 16 bit baud rate generator. |
||
| 1953 | 28.Added GenericTCPServer.c example file to complement GenericTCPClient.c. The |
||
| 1954 | server is enabled by defining STACK_USE_GENERIC_TCP_SERVER_EXAMPLE in |
||
| 1955 | TCPIPConfig.h. |
||
| 1956 | 29.Renamed STACK_USE_GENERIC_TCP_EXAMPLE definition to |
||
| 1957 | STACK_USE_GENERIC_TCP_CLIENT_EXAMPLE for consistency with new server |
||
| 1958 | example. |
||
| 1959 | 30.Defaulted MPFS.exe to generate binary MPFS images using 32 bit addressing. |
||
| 1960 | MPFS.h has been modified to also default to use 32 bit addressing of |
||
| 1961 | external EEPROM images. You must rebuild any old MPFS images and reprogram |
||
| 1962 | them if upgrading from a previous TCP/IP stack revision, which defaulted to |
||
| 1963 | use 16 bit addressing. |
||
| 1964 | 31.Updated MPFS.exe to #include "TCPIP.h" instead of "..\Headers\Compiler.h" in |
||
| 1965 | C files generated by the utility. |
||
| 1966 | 32.Added MPFSv2.exe PC utility for generating large MPFS images in program |
||
| 1967 | memory (ASM30 code) for C30 users. Previously, the C30 compiler placed a |
||
| 1968 | limit of less than 32KB of total MPFS size due to the PSV window size |
||
| 1969 | limitation on PIC24/dsPIC devices. To get around the limitation, use the |
||
| 1970 | new MPFSv2.exe utility to generate an .s file which can be included in your |
||
| 1971 | project instead of the .c file generated by the traditional MPFS.exe utility. |
||
| 1972 | |||
| 1973 | Fixes: |
||
| 1974 | 1. Fixed a bug in ARPProcess() which would incorrectly send an ARP response to |
||
| 1975 | an incorrect MAC & IP address if a TX buffer wasn't immediately available. |
||
| 1976 | 2. Fixed a TCP bug where TCPIsGetReady() would return TRUE even if no data was |
||
| 1977 | left in the recieved packet. Previously you had to call TCPGet() one last |
||
| 1978 | time and have it fail before TCPIsGetReady() would return FALSE. |
||
| 1979 | 3. Modified TCP state machine. Established connections will no longer |
||
| 1980 | automatically close if left idle for approximately 45 seconds. Note that |
||
| 1981 | your application needs to ensure that no sockets unintentionally get lost |
||
| 1982 | (For example: a server socket that received data only is established and the |
||
| 1983 | cable breaks while connected. In this case, the socket would never be |
||
| 1984 | detected as being disconnected since the server never attempts to transmit |
||
| 1985 | anything). |
||
| 1986 | 4. Stopped overclocking dsPIC33 and PIC24H devices. Previously PLLFBD was |
||
| 1987 | incorrectly set to 39 instead of 38 to yield a resulting Fosc of 84MHz |
||
| 1988 | (42MIPS) instead of 80MHz (40MIPS) with the default Explorer 16 development |
||
| 1989 | board. Thanks go to Matt Watkins on the Microchip Ethernet Forum for |
||
| 1990 | pointing this error out. |
||
| 1991 | 5. Corrected a bug in IP.c where IPHeaderLen would not be properly initialized |
||
| 1992 | if a NON_MCHP_MAC was used (ex: RTL8019AS) and IPSetRxBuffer() was called. |
||
| 1993 | This bug did not affect ENC28J60 or PIC18F97J60 family support. Thanks go |
||
| 1994 | to Darren Rook for identifying this issue. |
||
| 1995 | 6. Updated checksum checking code in ENC28J60.c for latest silicon DMA checksum |
||
| 1996 | errata. |
||
| 1997 | 7. Declared TickCount in Tick.c/Tick.h as volatile and implemented an interrupt |
||
| 1998 | safe reading procedure in TickGet(). Since this multibyte variable is |
||
| 1999 | modified in the ISR and read in the mainline code, these changes are needed |
||
| 2000 | to prevent rare inconsistency bugs. |
||
| 2001 | 8. Fixed Announce.c so the unicast remoteNode of the requesting packet would be |
||
| 2002 | used rather than the remoteNode of the last received packet, which may not |
||
| 2003 | be correct when transmitting. Thanks go to Brett Caulton for identifying |
||
| 2004 | this issue. |
||
| 2005 | 9. Fixed a DHCP bug which would cause DHCP renewals to continually occur after |
||
| 2006 | only 60 seconds once the original lease expired. Thanks go to Brett Caulton |
||
| 2007 | for identifying this issue and fix. |
||
| 2008 | 10.Fixed a potential TCP socket leak in the FTP module. Previously |
||
| 2009 | FTPDataSocket would not be reliably initialized nor closed if the connection |
||
| 2010 | was killed forcefully (user killed application, cable disconnected while |
||
| 2011 | transferring, etc.). |
||
| 2012 | |||
| 2013 | Known Problems: |
||
| 2014 | 1. RTL8019AS MAC layer driver has not been updated for new TCP module. Users |
||
| 2015 | requiring RTL8019AS support should continue to use stack version 3.75. |
||
| 2016 | 2. I2CEEPROM.c has not been tested or completed. Continue to use I2CEEPROM.c |
||
| 2017 | from stack version 3.75 if this file is needed. |
||
| 2018 | 3. Telnet server module is still in development. No user authentication |
||
| 2019 | features are currently implemented. Some telnet clients may render the |
||
| 2020 | telnet server output incorrectly (in the wrong locations or wrong colors). |
||
| 2021 | Testing has only been done with the Microsoft Windows telnet.exe utility |
||
| 2022 | that comes Windows XP. |
||
| 2023 | 4. DHCP will continually send out DHCP Request packets when the lease expires and the |
||
| 2024 | original DHCP server that gave the lease is offline. The board will continue to |
||
| 2025 | use the expired IP address until the DHCP server comes back online, at which point |
||
| 2026 | the lease will be renewed or a new discovery will occur. A new discovery should |
||
| 2027 | occur after timing out, instead. It is believed that this problem has always |
||
| 2028 | existed in previous stack revisions. |
||
| 2029 | 5. DHCP will continually send out DHCP Request packets when the lease expires and the |
||
| 2030 | original DHCP server that gave the lease does not include Option 54, the Server |
||
| 2031 | Identifier. A new discovery should occur after timing out. It is believed that |
||
| 2032 | this problem has always existed in previous stack revisions. |
||
| 2033 | 6. TFTPc module has not been tested with this version. |
||
| 2034 | 7. Serial numbers >32K will be displayed on the serial port as a negative value when |
||
| 2035 | C18 is used and the board is placed in configuration mode (RB0 button is depressed |
||
| 2036 | on power up). |
||
| 2037 | |||
| 2038 | |||
| 2039 | |||
| 2040 | ******** |
||
| 2041 | v3.75 14 August 2006 |
||
| 2042 | ******** |
||
| 2043 | Changes: |
||
| 2044 | 1. Added beta DNS client module (DNS.c). DHCP was also updated to obtain a DNS |
||
| 2045 | server address. Added AppConfig.PrimaryDNSServer IP address. Added STACK_USE_DNS |
||
| 2046 | configuration macro. To use the DNS client, call DNSResolve() with the server name, |
||
| 2047 | ex: DNSResolve("www.microchip.com"), and then periodically call DNSIsResolved() |
||
| 2048 | until it returns TRUE, ex: DNSIsResolved(&IPAddressDestination). Only one DNS |
||
| 2049 | resolution can be in progress at a time. Because the DNS client is a beta module, |
||
| 2050 | the API or code may change before being finalized. No formal DNS API documentation |
||
| 2051 | is available yet. |
||
| 2052 | 2. Added beta NetBIOS Name Service responder module (NBNS.c). Added |
||
| 2053 | AppConfig.NetBIOSName string. Added STACK_USE_NBNS configuration macro. Added |
||
| 2054 | MY_DEFAULT_HOST_NAME macro in StackTsk.h. Now, whenever a NetBIOS broadcast |
||
| 2055 | attempting to resolve AppConfig.NetBIOSName arrives, a response will be made. |
||
| 2056 | This form of name resolution only works on a single subnet. Off the subnet, |
||
| 2057 | manual registration in a DNS server or other means will be needed to allow the |
||
| 2058 | local Host Name to be recognized and translated to an IP address. The default |
||
| 2059 | NetBIOS name for the board is "MCHPBOARD". To test the NetBIOS Name Service |
||
| 2060 | module, try entering http://MCHPBOARD/ into your web browser instead of the board's |
||
| 2061 | IP address. |
||
| 2062 | 3. Added beta HTTP client module (GenericTCPClient.c). This module demonstrates how |
||
| 2063 | to make a TCP client application. To test this module, uncomment the |
||
| 2064 | STACK_USE_GENERIC_TCP_EXAMPLE macro in StackTsk.h, recompile, and then press the |
||
| 2065 | BUTTON1 button while the stack is running. RemoteURL[] should be downloaded from |
||
| 2066 | ServerName[] and written to the UART. For the default values of ServerName[] and |
||
| 2067 | RemoteURL[], the HTML search page for "Microchip" will be fetched from |
||
| 2068 | "www.google.com" and written to the serial port. No formal documentation is |
||
| 2069 | available for this example yet. |
||
| 2070 | 4. Added Embedded Ethernet Device Discoverer PC project to aid in embedded product |
||
| 2071 | discovery when connected to a network and demonstrate how to write PC applications |
||
| 2072 | which can communicate with embedded devices. The source code for this device is |
||
| 2073 | included. It can be built using the Microsoft Visual C# 2005 Express Edition |
||
| 2074 | compiler. At the time of stack release, this 3rd party PC development tool can be |
||
| 2075 | downloaded at no cost from http://msdn.microsoft.com/vstudio/express/. If using |
||
| 2076 | only the Microchip Device Discoverer executable file without the Visual C# compiler, |
||
| 2077 | the .NET Framework 2.0 must be installed on the local PC. The application setup |
||
| 2078 | utility should allow dynamic downloading of this component if the target machine |
||
| 2079 | does not already have it installed. |
||
| 2080 | 5. Updated Announce.c to listen and respond to discovery requests sent to UDP port |
||
| 2081 | 30303 starting with the character 'D'. To test this functionality, use the |
||
| 2082 | Embedded Ethernet Device Discoverer on a PC connected to the same subnet. |
||
| 2083 | 6. Updated UART configuration menu to accommodate the new beta module configuration |
||
| 2084 | options (DNS server address, device host name). |
||
| 2085 | 7. Increased MPFS reserve block to 64 bytes from 32. Also, because the APP_CONFIG |
||
| 2086 | structure was updated, all current MPFS images and data stored in deployed EEPROMs |
||
| 2087 | needs to be updated. |
||
| 2088 | 8. Added a means to erase (invalidate) the onboard EEPROM using the BUTTON0 momentary |
||
| 2089 | switch (right-most switch on demo boards with multiple switches). To erase the |
||
| 2090 | EEPROM, hold down BUTTON0, RESET the board (press and release MCLR switch), and |
||
| 2091 | then continue to hold down BUTTON0 for an additional 4 seconds. If you press MCLR |
||
| 2092 | again, the EEPROM contents will now be invalid. If you press '0' on the UART, the |
||
| 2093 | same configuration that was read prior to invalidating the contents will be |
||
| 2094 | written back into the EEPROM. Invalidating the EEPROM allows the MY_DEFAULT_* |
||
| 2095 | constants to get loaded into a previously programmed EEPROM chip. Because of |
||
| 2096 | change #7, this procedure should be done for all currently programmed EEPROMs to |
||
| 2097 | prevent anomalous values from being read. |
||
| 2098 | 9. remoteNode in StackTsk.c was changed from private to global scope. Now external |
||
| 2099 | modules can reference the address of the last received packet. Announce.c uses |
||
| 2100 | this to send a unicast response to a broadcast discovery request. |
||
| 2101 | 10.All stack modules that can be disabled (DHCP.c, FTP.c, etc) now will no longer |
||
| 2102 | emit a compiler error if you have it in the project without defining the |
||
| 2103 | appropriate macro (STACK_USE_DHCP, STACK_USE_FTP, etc). It will simply generate |
||
| 2104 | no machine code when compiled and the stack will not use that module. Make sure |
||
| 2105 | the proper macro is defined for each module that you wish to use. |
||
| 2106 | 11.Added SetRXHashTableEntry() to ENC28J60.c. This function can be used to set the |
||
| 2107 | appropriate bit in the Hash Table registers to join a particular multicast group. |
||
| 2108 | 12.Added Realtek RTL8019AS Ethernet controller support to the stack. MAC.c was |
||
| 2109 | renamed to RTL8019AS.c. This Ethernet controller is not recommended for new |
||
| 2110 | designs. RTL8019AS support was reintroduced to provide ongoing assistance to |
||
| 2111 | former Application designs implementing this chip. For new applications, use the |
||
| 2112 | Microchip ENC28J60 or PIC18F97J60 family of microcontrollers. |
||
| 2113 | 13.Added I2C EEPROM support for MPFS storage. In older 2.xx stack revisions, I2C |
||
| 2114 | EEPROM was supported by the XEEPROM.c file. This file has been renamed to |
||
| 2115 | I2CEEPROM.c. It is mutually exclusive with SPIEEPROM.c, and only one may be |
||
| 2116 | included in the project at a time. |
||
| 2117 | 14.Added new hardware definitions to Compiler.h. Pin mappings for the PICDEMNET and |
||
| 2118 | PIC18F97J60_TEST_BOARD boards have been added. FS_USB was also defined; however, |
||
| 2119 | it is untested and not recommended. See Compiler.h. The PIC18F97J60_TEST_BOARD is |
||
| 2120 | a non-production board that some Early Adopters of the PIC18F97J60 family parts |
||
| 2121 | have. |
||
| 2122 | 15.Changed type definitions for BYTE_VAL, WORD_VAL, DWORD_VAL, and moved the generic |
||
| 2123 | typedefs to GenericTypeDefs.h from StackTsk.h. This should improve compatibility |
||
| 2124 | with some future code libraries released by Microchip. |
||
| 2125 | 16.LCDBlocking.c module was modified to support 4-bit interfaces to LCD modules. The |
||
| 2126 | PICDEM.net board has the module wired using a 4-bit bus. |
||
| 2127 | |||
| 2128 | |||
| 2129 | Fixes: |
||
| 2130 | 1. Fixed a serious MAC TXBuffer leak in TCP.c. Previously TCP.c would allocate a |
||
| 2131 | buffer for each socket in use, but under heavy traffic conditions (ex: user holds |
||
| 2132 | down F5 on web browser), the buffer handle might have been discarded before |
||
| 2133 | releasing the buffer. As a result all TCP connections would have lost the ability |
||
| 2134 | to send any application data after the TXBuffer pool ran out. |
||
| 2135 | 2. In the TCP_SYN_SENT TCP state, ACKs may only be received (as opposed to SYN+ACK |
||
| 2136 | packets) if the remote node thinks the connection is already open. A RST is now |
||
| 2137 | sent in response to an unexpected ACK, which may improve reconnection time when |
||
| 2138 | this (rare) condition occurs. |
||
| 2139 | 3. A bug was present in the UDP module where remote MAC addresses would be cached for |
||
| 2140 | each socket, even when UDPInit() or UDPClose() was called, or the microcontroller |
||
| 2141 | was reset. As a result, responses to incoming packets could have been sent to the |
||
| 2142 | wrong MAC address. UDP Sockets are now properly initialized/closed. |
||
| 2143 | 4. Fixed a potential timing bug in LCDBlocking.c. For lower values of CLOCK_FREQ, |
||
| 2144 | insufficient delay time was given to the LCD module, potentially causing improper |
||
| 2145 | operation. |
||
| 2146 | 5. Changed PIC24F to default to the XT oscillator fuse rather than HS. The |
||
| 2147 | PIC24FJ128GA010 data sheet, rev. C reports that 8MHz should be used with XT mode, |
||
| 2148 | not HS mode like prior data sheets. |
||
| 2149 | 6. Added a couple of wait states to the Realtek RTL8019AS MAC layer module for |
||
| 2150 | NICPut() and NICGet(). Previously, the PICmicro could not operate above |
||
| 2151 | approximately 25MHz without losing communication with the RTL8019AS chip. |
||
| 2152 | 7. Updated PC based MPFS utility. When generating C files to be added to your MPLAB |
||
| 2153 | project, the include path to "Compiler.h" is now "..\Include\Compiler.h". The |
||
| 2154 | output file, ex: "MPFSImg.c" should be placed in the "Source" subfolder before |
||
| 2155 | compiling. For example, if you are in the main stack folder with the MPLAB |
||
| 2156 | projects, type: "mpfs /c WebPages Source\MPFSImg.c" |
||
| 2157 | 8. IP Gleaning will now get properly disabled when, through the RS232 configuration |
||
| 2158 | application, DHCP and IP Gleaning are disabled. The stack will still respond to |
||
| 2159 | ping requests which have the wrong destination IP address, but a correct MAC |
||
| 2160 | address. However, the stack will continue to keep its statically defined IP |
||
| 2161 | address when DHCP/IP Gleaning are disabled and the ping arrives. |
||
| 2162 | 9. SPIEEPROM.c now saves and reconfigures the EEPROM_SPICON1 register (SSPCON1) before |
||
| 2163 | reading or writing to the SPI. After the read/write, it restores the saved state. |
||
| 2164 | This allows the SPI bus to operate at different speeds, depending on what |
||
| 2165 | peripheral is being accessed if other devices share the bus and can support |
||
| 2166 | different speeds. In particular, this fixes the SPI @ 10.4MHz problem on the |
||
| 2167 | PICDEM.net 2 board when using the ENC28J60. |
||
| 2168 | |||
| 2169 | |||
| 2170 | Known Problems: |
||
| 2171 | 1. DHCP will continually send out DHCP Request packets when the lease expires and the |
||
| 2172 | original DHCP server that gave the lease is offline. The board will continue to |
||
| 2173 | use the expired IP address until the DHCP server comes back online, at which point |
||
| 2174 | the lease will be renewed or a new discovery will occur. A new discovery should |
||
| 2175 | occur after timing out, instead. It is believed that this problem has always |
||
| 2176 | existed in previous stack revisions. |
||
| 2177 | 2. DHCP will continually send out DHCP Request packets when the lease expires and the |
||
| 2178 | original DHCP server that gave the lease does not include Option 54, the Server |
||
| 2179 | Identifier. A new discovery should occur after timing out. It is believed that |
||
| 2180 | this problem has always existed in previous stack revisions. |
||
| 2181 | 3. When an MPFS .c image file is added to a C30 project, a linking error reporting |
||
| 2182 | insufficient contiguous .const memory may occur when too much data is in the MPFS |
||
| 2183 | image (PSV window size limitation). Using the PSV window, 1 out of every 3 program |
||
| 2184 | memory bytes is wasted. |
||
| 2185 | 4. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested |
||
| 2186 | and possibly do not work. |
||
| 2187 | 5. SNMP, TFTPc modules have not been tested with this version. |
||
| 2188 | 6. Serial numbers >32K will be displayed on the serial port as a negative value when |
||
| 2189 | C18 is used and the board is placed in configuration mode (RB0 button is depressed |
||
| 2190 | on power up). |
||
| 2191 | 7. The C30 linker may misplace the __CONFIG2 section or disallow usage of MPFS images |
||
| 2192 | that are too big (add too much to the .const code section). The consequences of |
||
| 2193 | this are that the first configuration word at 0x157FC may not get set through code |
||
| 2194 | (must use the Configuration Bits dialog instead), and/or the project will not |
||
| 2195 | compile. This problem has been observed with C30 ver. 2.02 on the PIC24FJ128GA010 |
||
| 2196 | product. To work around this problem, the p24FJ128GA010.gld linker script has |
||
| 2197 | been modified. Specifically, line 68 has been commented out, which causes the |
||
| 2198 | linker to place all .text sections after placing all absolute sections. SSR 25966 |
||
| 2199 | in the C30 2.02 release notes may be related. |
||
| 2200 | 8. It is observed with the Realtek RTL8019AS Ethernet controller and the demo AJAX |
||
| 2201 | web page which self refreshes rapidly, that occasional HTTP GET requests sent by |
||
| 2202 | the computer do not get received by the HTTP server. This is believed to be a |
||
| 2203 | RTL8019AS MAC layer bug. The TCP protocol handles the packet loss, but |
||
| 2204 | application performance suffers while waiting for the TCP retransmission. This |
||
| 2205 | problem is not observed with ENC28J60.c or ETH97J60.c MAC layers. |
||
| 2206 | 9. The HI-TECH compiler version 9.50PL1 crashes when compiling LCDBlocking.c with 4 |
||
| 2207 | bit mode (PICDEMNET) and using a warning level of -3 or higher. To work around |
||
| 2208 | the problem, the HI TECH projects were set to use warning level -4. |
||
| 2209 | |||
| 2210 | |||
| 2211 | Guiding Notes: |
||
| 2212 | 1. To use the stack on a classic PICDEM.net demo board with the Realtek Ethernet |
||
| 2213 | controller, a PIC18F452 processor, and Microchip C18: |
||
| 2214 | -Use the C18EEPROM MPLAB project |
||
| 2215 | -Change the processor in the MPLAB IDE |
||
| 2216 | -Change linker script to "18f452i.lkr" in the MPLAB project. Use the one provided |
||
| 2217 | in the Linker subfolder, it has been modified to make more RAM available. |
||
| 2218 | -Update the hardware definitions macro. Click on Project -> Build Options... -> |
||
| 2219 | Project -> MPLAB C18 -> Add PICDEMNET, remove HPC_EXPLORER) |
||
| 2220 | -Remove ENC28J60.c from the project |
||
| 2221 | -Remove SPIEEPROM.c from the project |
||
| 2222 | -Add RTL8019AS.c to the project |
||
| 2223 | -Add I2CEEPROM.c to the project |
||
| 2224 | -Enable all compiler optimizations (Project -> Build Options... -> Project -> MPLAB |
||
| 2225 | C18 -> Categories Optimization -> Enable all) |
||
| 2226 | |||
| 2227 | |||
| 2228 | |||
| 2229 | ******** |
||
| 2230 | v3.60 12 July 2006 |
||
| 2231 | ******** |
||
| 2232 | General Information: |
||
| 2233 | This stack version is being publicly released, so the following changes are with |
||
| 2234 | respect to the prior public stack release (v3.02). Interim stack changes for version |
||
| 2235 | 3.16 and 3.50 are documented below for those using non-public releases, but can be |
||
| 2236 | ignored by most people. |
||
| 2237 | |||
| 2238 | |||
| 2239 | Troubleshooting notes: |
||
| 2240 | 1. If you have an Ethernet PICtail revision 2.1 and are having reliability issues when |
||
| 2241 | viewing the fast-refresh demo web page, you may need to install resistors in series |
||
| 2242 | with the ENC28J60 SI, nCS, and SCK pins. The recommended value is 100 to 200 ohms. |
||
| 2243 | This will reduce signal undershoot caused by long traces (parasitic inductance), |
||
| 2244 | which can violate the absolute maximum electrical specs and cause SPI data |
||
| 2245 | corruption. The HPC Explorer Rev 5 has fairly long traces to the PICtail connector. |
||
| 2246 | 2. Enabling C30 2.02 compiler optimizations on the dsPIC33FJ256GP710, PIC24HJ256GP610 |
||
| 2247 | ES chips may produce unreliable code. |
||
| 2248 | 3. When changing a C30 project to a PIC24H or dsPIC33F processor on the Explorer 16 |
||
| 2249 | demo board, the JTAG configuration fuse should be disabled to free the I/O pins |
||
| 2250 | associated with it. JTAG is enabled by default. |
||
| 2251 | 4. This stack release was tested using MPLAB 7.40, C18 version 3.03, C30 version 2.02, |
||
| 2252 | and HI TECH PICC18 version 9.50PL1. |
||
| 2253 | 5. When using the Ethernet PICtail board and HPC Explorer demo boards, make sure to |
||
| 2254 | plug the power into the Ethernet PICtail and not the HPC Explorer. The HPC |
||
| 2255 | Explorer's power regulator cannot provide enough current. |
||
| 2256 | |||
| 2257 | |||
| 2258 | Changes: |
||
| 2259 | 1. Source files have been split into separate directories. To compile old |
||
| 2260 | applications with this new stack, application source files may need to be updated |
||
| 2261 | to include the proper path to the stack header files. |
||
| 2262 | 2. New MPLAB projects have been created: |
||
| 2263 | -C18EEPROM: Equivalent to the previously named "mpnicee" project. Designed for |
||
| 2264 | PIC18's using the C18 compiler. Web page content, board's IP address, |
||
| 2265 | MAC address, DHCP enabled state, etc. is stored in an external SPI |
||
| 2266 | EEPROM (25LC256 on demo boards). FTP Server demo is included. |
||
| 2267 | -C30EEPROM: New supporting PIC24 and dsPIC controllers using the C30 compiler. |
||
| 2268 | Similar to C18EEPROM. |
||
| 2269 | -C18ProgramMem: Equivalent to the previously named "mpnicpg" project. Web page |
||
| 2270 | content stored in internal FLASH program memory. Board's IP |
||
| 2271 | address, MAC address, DHCP enabled state, etc. is stored only in |
||
| 2272 | RAM and defaults are loaded from MY_DEFAULT_* constants in |
||
| 2273 | StackTsk.h. FTP Server demo is not included. Web pages cannot be |
||
| 2274 | updated remotely. |
||
| 2275 | -C30ProgramMem: New supporting PIC24 and dsPIC controllers using the C30 compiler. |
||
| 2276 | Similar to C18ProgramMem. |
||
| 2277 | -HTC18EEPROM: Equivalent to the previously named "htnicee" project. Designed for |
||
| 2278 | PIC18's using the HI TECH PICC18 compiler. Similar to C18EEPROM. |
||
| 2279 | -HTC18ProgramMem: Equivalent to the previously named "htnicpg" project. Designed |
||
| 2280 | for PIC18's using the HI TECH PICC18 compiler. Similar to |
||
| 2281 | C18ProgramMem. |
||
| 2282 | 3. Created hardware definitions (pins, interrupt flags, special registers, etc) in |
||
| 2283 | Compiler.h for easy changing of hardware. Four demo board combinations are |
||
| 2284 | supported out-of-box now: |
||
| 2285 | -EXPLORER_16: Explorer 16 motherboard + Ethernet PICtail Plus daughter card. |
||
| 2286 | Tested with dsPIC33FJ256GP710, PIC24HJ256GP610, and |
||
| 2287 | PIC24F128GA010 ES PIMs. |
||
| 2288 | -HPC_EXPLORER: PICDEM HPC Explorer motherboard + Ethernet PICtail daughter |
||
| 2289 | card. Tested with PIC18F8722 onboard and PIC18F87J10 PIM. |
||
| 2290 | -DSPICDEM11: dsPICDEM 1.1 motherboard + Ethernet PICtail daughter card |
||
| 2291 | (manually air wired). See Compiler.h for proper pins to air wire. |
||
| 2292 | Tested with dsPIC30F6014A PIM. |
||
| 2293 | -PICDEMNET2: PICDEM.net 2 motherboard (PIC18F97J60) |
||
| 2294 | Change boards by changing the defined macro (Project -> Build Options... -> |
||
| 2295 | Project -> MPLAB Cxx -> Add macro). When moving to custom hardware, add an |
||
| 2296 | appropriate profile to Compiler.h. YOUR_BOARD is present as a placeholder. |
||
| 2297 | 4. Added Ethernet PICtail Plus schematic (reference ENC28J60 daughter card design for |
||
| 2298 | Explorer 16 demo board). These boards have a Microchip part number of AC164123. |
||
| 2299 | 5. Latest ENC28J60 rev. B5 errata workarounds added. The code checks the EREVID |
||
| 2300 | register and implements the appropriate workarounds as needed for the silicon |
||
| 2301 | revision, so rev. B1, B4, and B5 are all supported in this stack release. |
||
| 2302 | 6. Significantly revised demonstration web page content in WebPages folder to use |
||
| 2303 | AJAX technology. Using asynchronous JavaScript code executing in the web browser, |
||
| 2304 | the status sections of the page are updated rapidly from the web server without |
||
| 2305 | doing a full page refresh. As a result, a virtually real time update of the |
||
| 2306 | potentiometer and button values can be displayed. Due to the constant use of new |
||
| 2307 | TCP sockets, multiple simultaneous users are not recommended. See the Index.cgi |
||
| 2308 | file for a simple static method of retrieving dynamic variables from the HTTP |
||
| 2309 | server. |
||
| 2310 | 7. Changed IP Gleaning procedure. Now, if DHCP is enabled, the DHCP module will |
||
| 2311 | continue to look for a new IP address/renew existing IP address if the IP address |
||
| 2312 | is configured using IP Gleaning. Previously, the DHCP module would be disabled |
||
| 2313 | once a successful ICMP packet was received and used to configure the IP address. |
||
| 2314 | 8. MAX_RETRY_COUNTS is 3 (previously it was 3, but an interim release changed it to 5). |
||
| 2315 | 9. Updated TCP state machine. It now includes the TCP_FIN_WAIT_2 state. Some other |
||
| 2316 | changes were made to handle errors more robustly. |
||
| 2317 | 10.AN0String and AN1String now return all characters excluding the null terminator |
||
| 2318 | when the HTTP server calls HTTPGetVar (except when the string is 0 length). |
||
| 2319 | Previously, the null terminator was returned as well. |
||
| 2320 | 11.Dynamic pages (ie: .cgi files) are now served with an expired HTTP header to |
||
| 2321 | prevent browser caching and allow more dynamic content to be displayed. |
||
| 2322 | 12.Support for the HI TECH PICC18 compiler has changed. Special Function Register |
||
| 2323 | bits and other definitions have changed substantially from the previous HI TECH |
||
| 2324 | PICC18 projects in TCP/IP stack version 3.02 and earlier. The C18/C30 SFR and |
||
| 2325 | SFRbits naming conventions are now used and special remapping macros in Compiler.h |
||
| 2326 | are used to maintain a consistent syntax. The HI TECH PICC18 projects were tested |
||
| 2327 | with compiler version 9.50PL1 on the HPC Explorer board (PIC18F8722). |
||
| 2328 | 13.FTP client hash printing has been added to the FTP server. Now, whenever a chunk |
||
| 2329 | of data is successfully uploaded to the device, a '#' character will appear on the |
||
| 2330 | FTP client screen. The numbers of bytes each '#' represents is variable. |
||
| 2331 | 14.To improve maintainability, built in support for the "Compatible" A/D converter |
||
| 2332 | present on older PIC18 parts (ex: PIC18F452) has been removed. |
||
| 2333 | 15.Removed old LCD code originally provided for the PICDEM.net demo board. |
||
| 2334 | 16.Added LCDBlocking.c and LCDBlocking.h, which implement simple routines for writing |
||
| 2335 | to the LCD module on the Explorer 16 and PICDEM.net 2 development boards. The LCD |
||
| 2336 | on the dsPICDEM 1.1 board is not supported. The stack version and IP address are |
||
| 2337 | shown on the LCD on power up. |
||
| 2338 | 17.UART functions in MainDemo.c were replaced with C18 and C30 peripheral library |
||
| 2339 | functions. However, because the UART peripheral libraries are not being updated |
||
| 2340 | for newer silicon devices, the code was copied into UART.c and is compiled with |
||
| 2341 | the stack. |
||
| 2342 | 18.Multiple TX buffer support has been implemented. Most stack layers have been |
||
| 2343 | touched. ENC28J60.c has the most extensive changes. Each socket may use only one |
||
| 2344 | TX buffer. |
||
| 2345 | 19.Implemented TCP retransmission support regardless of if TCP_NO_WAIT_FOR_ACK is |
||
| 2346 | defined or not. |
||
| 2347 | 20.TCP_NO_WAIT_FOR_ACK in StackTsk.h has been undefined by default. This should |
||
| 2348 | increase default TCP connection robustness. Packets sent from the stack to the |
||
| 2349 | remote node will now be detected and retransmitted if lost or corrupted. |
||
| 2350 | 21.All TCP packets are now retransmitted immediately after being initially transmitted |
||
| 2351 | when TCP_NO_WAIT_FOR_ACK is undefined. This improves throughput greatly when |
||
| 2352 | communicating with systems which wait a long time before transmitting ACKs. TCP/IP |
||
| 2353 | stacks, such as that used by Microsoft Windows, implement the TCP Delayed |
||
| 2354 | Acknowledgement algorithm, which is why this retransmission is necessary for high |
||
| 2355 | performance. The double transmission feature can be disabled in the Microchip |
||
| 2356 | TCP/IP stack by defining "DEBUG" either in the TCP.c file or the project compiler |
||
| 2357 | macros section. Using DEBUG mode can be useful when trying to look for errors |
||
| 2358 | using Ethreal [ http://www.ethereal/ ]. |
||
| 2359 | 22.Lowered TCP_START_TIMEOUT_VAL from 60 seconds to 3 seconds. 60 seconds is an |
||
| 2360 | unreasonably long timeout for modern day network speeds. |
||
| 2361 | 23.Native support for the SLIP module has been dropped. |
||
| 2362 | |||
| 2363 | |||
| 2364 | |||
| 2365 | Fixes: |
||
| 2366 | 1. A new IP address obtained via IP Gleaning will now update the LCD (if present), |
||
| 2367 | invoke the Announce module (for MCHPDetect.exe), and output the new address out |
||
| 2368 | the RS232 port. |
||
| 2369 | 2. DHCP client will now correctly use the first DHCP offer received when connected |
||
| 2370 | to a network running multiple DHCP servers. Previously, the board would get no |
||
| 2371 | IP address when attached to a network with multiple DHCP servers (unless the DHCP |
||
| 2372 | request was transmitted before a second DHCP offer was received -- a relatively |
||
| 2373 | rare event). Additionally, DHCPLeaseTime does not get reset to 60 seconds or |
||
| 2374 | the value stored in the last DHCP packet received prior to receiving the ACK. |
||
| 2375 | 3. UDPProces() will now correctly process received UDP packets that have a 0x0000 |
||
| 2376 | checksum field. The UDP protocol specifies that 0x0000 means the checksum is |
||
| 2377 | disabled. Packets with a 0x0000 checksum were previously thrown away unless the |
||
| 2378 | calculated checksum also happened to be 0x0000. |
||
| 2379 | 4. The TCPIsPutReady() function will now honor the remote node's TCP window size. In |
||
| 2380 | other words, if the remote application pauses or cannot handle the incoming data |
||
| 2381 | rate, the TCP flow control feature will correctly function. Previously, if the |
||
| 2382 | remote node ran out of incoming buffer memory, the TCP layer would still allow |
||
| 2383 | more data to be transmitted. This would result in the loss or corruption of |
||
| 2384 | application data, with a potentially broken connection. The change requires 2 more |
||
| 2385 | bytes of RAM per TCP socket (TCB array). |
||
| 2386 | |||
| 2387 | |||
| 2388 | Known Problems: |
||
| 2389 | 1. On PICDEM.net 2 board ENC28J60 and 25LC256 EEPROM share the same SPI1 module. At |
||
| 2390 | 3.3V, the 25LC256 is only rated to 5MHz SPI clock, but the code is setting it to |
||
| 2391 | 10.4MHz because the MACInit() function reconfigures the same SPI1 module. |
||
| 2392 | 2. DHCP will continually send out DHCP Request packets when the lease expires and the |
||
| 2393 | original DHCP server that gave the lease is offline. The board will continue to |
||
| 2394 | use the expired IP address until the DHCP server comes back online, at which point |
||
| 2395 | the lease will be renewed or a new discovery will occur. A new discovery should |
||
| 2396 | occur after timing out, instead. It is believe that this problem has always |
||
| 2397 | existed in previous stack revisions. |
||
| 2398 | 3. DHCP will continually send out DHCP Request packets when the lease expires and the |
||
| 2399 | original DHCP server that gave the lease does not include Option 54, the Server |
||
| 2400 | Identifier. A new discovery should occur after timing out. It is believe that |
||
| 2401 | this problem has always existed in previous stack revisions. |
||
| 2402 | 4. The MPFS utility has not been updated. When creating a .c image file, the include |
||
| 2403 | path for the Compiler.h file will be incorrect and need to be manually updated to |
||
| 2404 | "..\Include\Compiler.h". |
||
| 2405 | 5. When an MPFS .c image file is added to a C30 project, a linking error reporting |
||
| 2406 | insufficient contiguous .const memory may occur when too much data is in the MPFS |
||
| 2407 | image (PSV window size limitation). Using the PSV window, 1 out of every 3 program |
||
| 2408 | memory bytes is wasted. |
||
| 2409 | 6. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested |
||
| 2410 | and possibly do not work. |
||
| 2411 | 7. SNMP, TFTPc modules have not been tested with this version. |
||
| 2412 | 8. Serial numbers >32K will be displayed on the serial port as a negative value when |
||
| 2413 | C18 is used and the board is placed in configuration mode (RB0 button is depressed |
||
| 2414 | on power up). |
||
| 2415 | 9. IP Gleaning may not get disabled when, through the RS232 configuration application, |
||
| 2416 | DHCP and IP Gleaning are disabled. |
||
| 2417 | 10.The C30 linker may misplace the __CONFIG2 section or disallow usage of MPFS images |
||
| 2418 | that are too big (add too much to the .const code section). The consequences of |
||
| 2419 | this are that the first configuration word at 0x157FC may not get set through code |
||
| 2420 | (must use the Configuration Bits dialog instead), and/or the project will not |
||
| 2421 | compile. This problem has been observed with C30 ver. 2.02 on the PIC24FJ128GA010 |
||
| 2422 | product. To work around this problem, the p24FJ128GA010.gld linker script has |
||
| 2423 | been modified. Specifically, line 68 has been commented out, which causes the |
||
| 2424 | linker to place all .text sections after placing all absolute sections. SSR 25966 |
||
| 2425 | in the C30 2.02 release notes may be related. |
||
| 2426 | |||
| 2427 | |||
| 2428 | Guiding Notes: |
||
| 2429 | 1. To change processors using a C18* project: |
||
| 2430 | -Change the processor in the MPLAB IDE |
||
| 2431 | -Change linker script (ex: 18f87j10i.lkr) in the MPLAB project. Use *i.lkr |
||
| 2432 | if the ICD2 is going to be used to debug with. |
||
| 2433 | -Update the hardware definitions in Compiler.h or change your demo board |
||
| 2434 | selection macro. (Project -> Build Options... -> Project -> MPLAB Cxx -> |
||
| 2435 | PICDEMNET2, etc) |
||
| 2436 | 2. To change processors using a HTC18* project: |
||
| 2437 | -Change the processor in the MPLAB IDE |
||
| 2438 | -Update the hardware definitions in Compiler.h or change your demo board |
||
| 2439 | selection macro. (Project -> Build Options... -> Project -> MPLAB Cxx -> |
||
| 2440 | PICDEMNET2, etc) |
||
| 2441 | 3. To change processors using a C30* project: |
||
| 2442 | -Change the processor in the MPLAB IDE |
||
| 2443 | -Change linker script (ex: p33FJ256GP710.gld) in the MPLAB project. |
||
| 2444 | -Update the hardware definitions in Compiler.h or change your demo board |
||
| 2445 | selection macro. (Project -> Build Options... -> Project -> MPLAB Cxx -> |
||
| 2446 | DSPICDEM11, etc) |
||
| 2447 | -Disable JTAG configuration fuse, if enabled |
||
| 2448 | 4. When using the PICDEM.net 2 board, to write code targeting the PIC18F97J60 family |
||
| 2449 | Ethernet module: |
||
| 2450 | -Remove ENC28J60.c from the project |
||
| 2451 | -Add ETH97J60.c to the project |
||
| 2452 | -Plug the Ethernet cable into the left-most RJ45 jack (next to LCD) |
||
| 2453 | 5. When using the PICDEM.net 2 board, to write code targeting the ENC28J60 Ethernet |
||
| 2454 | device: |
||
| 2455 | -Make sure ENC28J60.c is in the project |
||
| 2456 | -Make sure that ETH97J60.c is not in the project |
||
| 2457 | -Plug the Ethernet cable into the right-most RJ45 jack (next to board edge) |
||
| 2458 | 6. When using the PICDEM.net 2 board, to write code targeting an Ethernet PICtail |
||
| 2459 | module (ENC28J60): |
||
| 2460 | -Make sure ENC28J60.c is in the project |
||
| 2461 | -Make sure that ETH97J60.c is not in the project |
||
| 2462 | -Make sure that the Ethernet PICtail J9 jumper is in the 2-3 position (default). |
||
| 2463 | -Properly update the hardware profile in Compiler.h. ENC_CS_TRIS and ENC_CS_IO |
||
| 2464 | need to be changed from D3 to B3. |
||
| 2465 | -Plug the Ethernet cable into the PICtail |
||
| 2466 | -Plug power into the PICDEM.net 2 board |
||
| 2467 | 7. When using the Explorer 16 and Ethernet PICtail Plus demo boards, make sure to mate |
||
| 2468 | the PICtail to the motherboard using the topmost socket position, leaving the cable |
||
| 2469 | hanging over prototyping area. If SPI2 is desired, the PICtail should have the |
||
| 2470 | same orientation but be installed in the middle slot. Using SPI2, the hardware |
||
| 2471 | profile will need to be updated in Compiler.h. |
||
| 2472 | |||
| 2473 | |||
| 2474 | |||
| 2475 | ******** |
||
| 2476 | v3.50 13 April 2006 |
||
| 2477 | ******** |
||
| 2478 | Changes: |
||
| 2479 | 1. Improved dsPIC33F and PIC24H support. UART functions are included now instead of |
||
| 2480 | precompiled object files for the PIC24F. The 12-bit A/D converter is now shown in |
||
| 2481 | use on the demo web content. When changing a C30 project to a PIC24H or dsPIC33F |
||
| 2482 | processor on the Explorer 16 demo board, the JTAG configuration fuse should be |
||
| 2483 | disabled to free the I/O pins associated with it. JTAG is enabled by default. |
||
| 2484 | 2. Added LCDBlocking.c and LCDBlocking.h, which implement simple routines for writing |
||
| 2485 | to the LCD module on the Explorer 16 development board. The stack version and IP |
||
| 2486 | address are shown on the LCD on power up. |
||
| 2487 | 3. Added "C18ProgramMem" and "C30ProgramMem" MPLAB projects for MPFS storage (web page |
||
| 2488 | content) on on-chip program memory. These projects are equivalent to the previously |
||
| 2489 | named "mpnicpg" project in prior stack releases. |
||
| 2490 | 4. Multiple TX buffer support has been implemented. Most stack layers have been |
||
| 2491 | touched. ENC28J60.c has the most extensive changes. Each socket may use only one |
||
| 2492 | TX buffer. |
||
| 2493 | 5. Implemented TCP retransmission support when TCP_NO_WAIT_FOR_ACK is undefined. |
||
| 2494 | 6. TCP_NO_WAIT_FOR_ACK in StackTsk.h has been undefined by default. This should |
||
| 2495 | increase default TCP connection robustness. |
||
| 2496 | 7. All TCP packets are now retransmitted immediately after being initially transmitted |
||
| 2497 | when TCP_NO_WAIT_FOR_ACK is undefined. This improves throughput greatly when |
||
| 2498 | communicating with systems which wait a long time before transmitting ACKs. |
||
| 2499 | 8. Lowered TCP_START_TIMEOUT_VAL from 60 seconds to 3 seconds. |
||
| 2500 | 9. Increased MAX_RETRY_COUNTS from 3 to 5 times. |
||
| 2501 | 10. The example HTTP server now returns a content expiration date which has already |
||
| 2502 | past. This prevents web browser caching and allows more dynamic content to be |
||
| 2503 | displayed. |
||
| 2504 | 11. Added WebPages_JScript folder, with new web pages that support dynamic page updates |
||
| 2505 | without a full page reload. A tiny page of dynamic variables is returned by the |
||
| 2506 | web server and Javascript executing on the target web browser changes DOM elements |
||
| 2507 | as needed. Button S5 (RA7) on the Explorer 16 demo board and S1 (RB0) on the HPC |
||
| 2508 | Explorer demo board changes the page color scheme. The rapid dynamic updates do |
||
| 2509 | not work on some web browsers (Internet Explorer works, Firefox does not). |
||
| 2510 | |||
| 2511 | |||
| 2512 | Known Problems: |
||
| 2513 | 1. MPFS utility has not been updated. When creating a .c image file, the include path |
||
| 2514 | for the compiler.h file will be incorrect and need to be manually updated. |
||
| 2515 | 2. When an MPFS .c image file is added to a C30 project, a linking error reporting |
||
| 2516 | insufficient contiguous .const memory may occur (PSV window size limitation). |
||
| 2517 | 3. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and |
||
| 2518 | possibly do not work. |
||
| 2519 | 4. SNMP, TFTPc, SLIP modules have not been tested with this version. |
||
| 2520 | 5. Serial numbers >32K will be displayed on the serial port as a negative value when |
||
| 2521 | C18 is used and the board is placed in configuration mode (RB0 button is depressed |
||
| 2522 | on power up). |
||
| 2523 | 6. IP Gleaning may not get disabled when, through the RS232 configuration application, |
||
| 2524 | DHCP and IP Gleaning are disabled. |
||
| 2525 | 7. The IP address being outputted out the RS232 port and through the Announce module |
||
| 2526 | does not happen when the IP address is configured using IP Gleaning. |
||
| 2527 | 8. On the PIC24F with C30 compiler optimizations enabled (such as Option 3, maximum |
||
| 2528 | speed), the project may not work. The PIC24F headers that come with C30 ver. 2.01 |
||
| 2529 | declare several SFRs without using the volatile keyword. |
||
| 2530 | 9. dsPIC30 support is incomplete. Currently PIC18, PIC24F, PIC24H, and dsPIC33F |
||
| 2531 | processors are supported. |
||
| 2532 | |||
| 2533 | |||
| 2534 | |||
| 2535 | ******** |
||
| 2536 | v3.16.00: 06 March 2006 |
||
| 2537 | ******** |
||
| 2538 | Changes: |
||
| 2539 | 1. Added unified support for both the Microchip C18 and C30 compilers. The intention |
||
| 2540 | is to allow one code base to be compiled for any PIC18, PIC24F/H, dsPIC30, or |
||
| 2541 | dsPIC33 product (with adequate memory). See the "Tested Using" section for what is |
||
| 2542 | known to work. |
||
| 2543 | 2. To improve maintainability, support for the HI-TECH PICC18 compiler has been |
||
| 2544 | dropped. |
||
| 2545 | 3. New project workspaces have been created, "C30EEPROM.mcw" and "C18EEPROM.mcw". |
||
| 2546 | C18EEPROM.mcw is equivalent to the previously named "mpnicee.mcw." C30EEPROM is |
||
| 2547 | intended to be used for PIC24 and dsPIC 16-bit controllers. |
||
| 2548 | 4. Source files have been split into separate directories. |
||
| 2549 | 5. Latest ENC28J60 rev. B5 errata workarounds added. The code checks the EREVID |
||
| 2550 | register and implements the appropriate workarounds as needed for the silicon |
||
| 2551 | revision, so rev. B1, B4, and B5 are all supported in this stack release. |
||
| 2552 | 6. Removed old LCD code originally provided for the PICDEM.net demo board. |
||
| 2553 | 7. To improve maintainability, built in support for the "Compatable" A/D converter |
||
| 2554 | present on older PIC18 parts (ex: PIC18F452) has been removed. |
||
| 2555 | 8. UART functions in MainDemo.c were replaced with C18 and C30 peripheral library |
||
| 2556 | functions. |
||
| 2557 | |||
| 2558 | Tested Using: |
||
| 2559 | 1. Software: |
||
| 2560 | -MPLAB version 7.31.01 |
||
| 2561 | -C18 version 3.02 |
||
| 2562 | -C30 version 2.01 |
||
| 2563 | 2. Hardware: |
||
| 2564 | -PICDEM HPC Explorer rev. 4 (PIC18F8722) + Ethernet PICtail Daughter Board (ENC28J60 |
||
| 2565 | B1) |
||
| 2566 | -Explorer 16 rev. 4 (PIC24FJ128GA010 ES and dsPIC33FJ256GP710 ES) + Ethernet PICtail+ |
||
| 2567 | Daughter card (ENC28J60 B1). |
||
| 2568 | 3. Notes: |
||
| 2569 | -MPLAB 7.31.01 is a development build. The publicly available version 7.31 |
||
| 2570 | should work fine, with the exception of being unable to program dsPIC33 and PIC24H |
||
| 2571 | parts with the ICD 2. |
||
| 2572 | -No dsPIC30 or PIC24H parts have been tested yet. |
||
| 2573 | |||
| 2574 | Known Problems: |
||
| 2575 | 1. MPFS utility has not been updated. When creating a .c image file, the include path |
||
| 2576 | for the compiler.h file will be incorrect and need to be manually updated. |
||
| 2577 | 2. When an MPFS .c image file is added to a C30 project, a linking error reporting |
||
| 2578 | insufficient contiguous .const memory may occur. |
||
| 2579 | 3. On the PIC24FJ128GA010, it is observed that some inbound packets are lost from time |
||
| 2580 | to time with no anticipated reason. |
||
| 2581 | 4. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and |
||
| 2582 | possibly do not work. |
||
| 2583 | 5. SNMP, TFTPc, SLIP modules have not been tested with this version. |
||
| 2584 | 6. Serial numbers >32K will be displayed on the serial port as a negative value when |
||
| 2585 | C18 is used and the board is placed in configuration mode (RB0 button is depressed |
||
| 2586 | on power up). |
||
| 2587 | 7. IP Gleaning may not get disabled when, through the RS232 configuration application, |
||
| 2588 | DHCP and IP Gleaning are disabled. |
||
| 2589 | 8. The IP address being outputted out the RS232 port and through the Announce module |
||
| 2590 | does not happen when the IP address is configured using IP Gleaning. |
||
| 2591 | 9. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c. |
||
| 2592 | Stack behavior when TCP_NO_WAIT_FOR_ACK is undefined may be unexpected. |
||
| 2593 | |||
| 2594 | |||
| 2595 | |||
| 2596 | ******** |
||
| 2597 | v3.02.00: 20 Feb 2006 |
||
| 2598 | ******** |
||
| 2599 | Fixes: |
||
| 2600 | 1. Changed TXSTART in ENC28J60.c to stop wasting a byte. |
||
| 2601 | 2. Changed RXSTOP in ENC28J60.c to always be an odd value to properly implement an |
||
| 2602 | ENC28J60 silicon errata workaround. |
||
| 2603 | 3. Changed initialization of ERXRDPT in MACInit() to agree with the current errata. |
||
| 2604 | |||
| 2605 | Changes: |
||
| 2606 | 1. Licence agreement |
||
| 2607 | 2. Schematics and other board files to the Ethernet PICtail Daughter Board have been |
||
| 2608 | updated to revision 5. Of significant note, the nRESET pin has been freed and |
||
| 2609 | 200 ohm resistors were added to the ENC28J60 SI, nCS, and SCK pins. The added |
||
| 2610 | resistors reduce undershoot caused by stray trace inductance and strong host output |
||
| 2611 | drivers. |
||
| 2612 | |||
| 2613 | Known Problems: |
||
| 2614 | 1. Testing on the PICDEM.net demo board with the Realtek RTL8019AS Ethernet controller |
||
| 2615 | has not been done. Moving to the HPC Explorer demo board has resulted in pinout |
||
| 2616 | and other hardware changes. |
||
| 2617 | 2. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and |
||
| 2618 | possibly do not work. |
||
| 2619 | 3. SNMP, TFTPc, LCD, SLIP modules have not been tested with this version. |
||
| 2620 | 4. The stack may behave incorrectly if compiled using the Hitech compiler with a high |
||
| 2621 | optimizations setting. |
||
| 2622 | 5. Serial numbers >32K will be displayed on the serial port as a negative value when |
||
| 2623 | C18 is used and the board is placed in configuration mode (RB0 button is depressed |
||
| 2624 | on power up). |
||
| 2625 | 6. IP Gleaning may not get disabled when, through the RS232 configuration application, |
||
| 2626 | DHCP and IP Gleaning are disabled. |
||
| 2627 | 7. The IP address being outputted out the RS232 port and through the Announce module |
||
| 2628 | does not happen when the IP address is configured using IP Gleaning. |
||
| 2629 | 8. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c. |
||
| 2630 | Stack behavior when TCP_NO_WAIT_FOR_ACK is undefined may be unexpected. |
||
| 2631 | |||
| 2632 | |||
| 2633 | ******** |
||
| 2634 | v3.01.00: 18 Jan 2006 |
||
| 2635 | ******** |
||
| 2636 | Fixes: |
||
| 2637 | 1. Implemented latest ENC28J60 silicon errata workarounds. |
||
| 2638 | 2. Fixed a bug in TCP.c and UDP.c which would incorrectly write the packet checksum |
||
| 2639 | into the RX buffer incorrectly when the checksum field was exactly spanning the RX |
||
| 2640 | wrapparound boundary in the ENC28J60. This problem would have caused packets to be |
||
| 2641 | discarded in rare circumstances |
||
| 2642 | |||
| 2643 | |||
| 2644 | Known Problems: |
||
| 2645 | 1. Testing on the PICDEM.net demo board with the Realtek RTL8019AS Ethernet controller |
||
| 2646 | has not been done. Moving to the HPC Explorer demo board has resulted in pinout |
||
| 2647 | and other hardware changes. |
||
| 2648 | 2. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and |
||
| 2649 | possibly do not work. |
||
| 2650 | 3. SNMP, TFTPc, LCD, SLIP modules have not been tested with this version. |
||
| 2651 | 4. The stack may behave incorrectly if compiled using the Hitech compiler with a high |
||
| 2652 | optimizations setting. |
||
| 2653 | 5. Serial numbers >32K will be displayed on the serial port as a negative value when |
||
| 2654 | C18 is used and the board is placed in configuration mode (RB0 button is depressed |
||
| 2655 | on power up). |
||
| 2656 | 6. IP Gleaning may not get disabled when, through the RS232 configuration application, |
||
| 2657 | DHCP and IP Gleaning are disabled. |
||
| 2658 | 7. The IP address being outputted out the RS232 port and through the Announce module |
||
| 2659 | does not happen when the IP address is configured using IP Gleaning. |
||
| 2660 | 8. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c. |
||
| 2661 | Stack behavior when TCP_NO_WAIT_FOR_ACK is defined may be unexpected. |
||
| 2662 | |||
| 2663 | |||
| 2664 | ******** |
||
| 2665 | v3.00.00: 16 Jan 2006 |
||
| 2666 | ******** |
||
| 2667 | Changes: |
||
| 2668 | 1. The stack now targets the PICDEM HPC Explorer demo board (PIC18F8722 MCU) with an |
||
| 2669 | attached Ethernet PICtail Daughter Board (with the Microchip ENC28J60 Ethernet |
||
| 2670 | controller). |
||
| 2671 | 2. IP Gleaning is no longer enabled (STACK_USE_IP_GLEANING is not defined) by any of |
||
| 2672 | the default project files. |
||
| 2673 | 3. The IP address, whenever it changes, is outputted out the RS232 serial port in |
||
| 2674 | human readable form. Any terminal program, such as HyperTerminal can be used to |
||
| 2675 | read it. This allows the IP address to be easily determined when DHCP is used. |
||
| 2676 | The serial port defaults to 19200 baud when CLOCK_FREQ in Compiler.h is properly |
||
| 2677 | defined. |
||
| 2678 | |||
| 2679 | |||
| 2680 | Additions: |
||
| 2681 | 1. Microchip ENC28J60 Ethernet controller support. Support is included through the |
||
| 2682 | ENC28J60.c and ENC28J60.h files. Various other files were modified to take |
||
| 2683 | advantage of ENC28J60 specific features, like the hardware DMA/IP checksum engine. |
||
| 2684 | This new MAC driver incorporates several new functions which can be called from any |
||
| 2685 | layer above the MAC. The functions are: |
||
| 2686 | MACSetDuplex() |
||
| 2687 | MACPowerDown() |
||
| 2688 | MACPowerUp() |
||
| 2689 | MACSetPMFilter() |
||
| 2690 | MACDisablePMFilter() |
||
| 2691 | CalcIPBufferChecksum() |
||
| 2692 | MACCalcRxChecksum() |
||
| 2693 | MACCalcTxChecksum() |
||
| 2694 | MACCopyRxToTx() |
||
| 2695 | See the ENC28J60.c file comments for function descriptions. The ENC28J60.c file |
||
| 2696 | also incroporates TestMemory() which can do a power on self test of various hardware |
||
| 2697 | functions. TestMemory() is included and used when MAC_POWER_ON_TEST is defined in |
||
| 2698 | StackTsk.h. It is undefined by default. Defining it will require some program |
||
| 2699 | memory. |
||
| 2700 | 2. Announce module. Announce.c and announce.h have been added. When included in the |
||
| 2701 | project, STACK_USE_ANNOUNCE must be defined. This module will broadcast a UDP |
||
| 2702 | message to port 30303 containing the local MAC address whenever the local IP |
||
| 2703 | address changes. This addition is intended to facilitate device discovery on DHCP |
||
| 2704 | enabled networks and eliminate the need for an RS232 connection if board |
||
| 2705 | reconfiguration is not needed. To retrieve the UDP message on your computer, use |
||
| 2706 | the new MCHPDetect.exe program included in the \MCHPDetect subfolder. |
||
| 2707 | 3. The spieeprom.c file was added to support SPI EEPROM chips for MPFS storage. |
||
| 2708 | ENC28J60.c and spieeprom.c may both be included and they will share the same SPI |
||
| 2709 | module. |
||
| 2710 | |||
| 2711 | |||
| 2712 | Improvements: |
||
| 2713 | 1. Renamed files/edited files so that the HI-TECH compiler won't raise messages stating |
||
| 2714 | that include files were spelled wrong. |
||
| 2715 | 2. Moved MAX_ICMP_DATA_LEN from StackTsk.c to ICMP.h file for easier maintenance. |
||
| 2716 | 3. Corrected STACK_USE_SIIP typo in dhcp.c file - Thanks to Gisle J.B. |
||
| 2717 | 4. Implemented UDP checksum logic in UDPProcess() in UDP.c file. |
||
| 2718 | 5. Renamed CalcTCPChecksum() in tcp.c file to CalcIPBufferChecksum(). |
||
| 2719 | 6. Moved CalcIPBufferChecksum() to helpers.c to reuse it for UDP checksum calculation. |
||
| 2720 | 7. Modified UDPProcess() in UDP.c and TCPProcess() in TCP.c to include localIP as third |
||
| 2721 | new parameter. This makes pseudo header checksum calculation correct in both |
||
| 2722 | functions. StackTsk.h, UDP.h and TCP.h files were also modified to reflect these |
||
| 2723 | changes. |
||
| 2724 | 8. Modified TCP.C file to include compile-time check of STACK_USE_TCP define. If it is |
||
| 2725 | not defined, an error will be displayed. |
||
| 2726 | 9. Removed an unnecessary call to MACDiscardRx() when an IP packet is received but |
||
| 2727 | fails version, options length, or header checksum tests. |
||
| 2728 | 10. Changed LCD code to be compile time removable by undefining USE_LCD. |
||
| 2729 | |||
| 2730 | |||
| 2731 | Fixes: |
||
| 2732 | 1. IPHeaderLen in IP.c is initialized properly now when IPGetHeader() is called. |
||
| 2733 | 2. Under some circumstances, HandleTCPSeg() would acknowlege, but throw valid received |
||
| 2734 | TCP packets away, resulting in loss of application data. An invalid comparison in |
||
| 2735 | HandleTCPSeg() has been fixed to prevent this situation from occuring. |
||
| 2736 | *** Thanks go to Richard Shelquist for identifying this problem. |
||
| 2737 | 3. Fixed StackTsk.c file so that if a static IP address is used and the LINK is |
||
| 2738 | removed, the node IP address is not cleared. |
||
| 2739 | 4. Invalid ICMP echo replies are no longer generated for echo requests with a data |
||
| 2740 | length of 33 (one more than the configured maximum). |
||
| 2741 | 5. Changed MAX_OPTIONS_LEN from 20 to 40. The maximum IP options length is now in |
||
| 2742 | agreement with the IP RFC. |
||
| 2743 | 6. Changed IPSetRxBuffer() from a macro to a function. The function takes into |
||
| 2744 | account any options which may be present in the header of received IP packets. |
||
| 2745 | Previously, possible options were not taken into account when calculating the |
||
| 2746 | offset. |
||
| 2747 | |||
| 2748 | |||
| 2749 | Known Problems: |
||
| 2750 | 1. Testing on the PICDEM.net demo board with the Realtek RTL8019AS Ethernet controller |
||
| 2751 | has not been done. Moving to the HPC Explorer demo board has resulted in pinout |
||
| 2752 | and other hardware changes. |
||
| 2753 | 2. Sometimes when the FTP sever is used, an attempt to put a file is unsuccessful. |
||
| 2754 | The problem may be caused when an HTTP request to GET a file is made at the wrong |
||
| 2755 | time. |
||
| 2756 | 3. MACSetPMFilter(), MACDisablePMFilter(), and MACCopyRxToTx() have not been tested and |
||
| 2757 | possibly do not work. |
||
| 2758 | 4. SNMP, TFTPc, LCD, SLIP modules have not been tested with this version. |
||
| 2759 | 5. The stack may behave incorrectly if compiled using the Hitech compiler with a high |
||
| 2760 | optimizations setting. |
||
| 2761 | 6. Serial numbers >32K will be displayed on the serial port as a negative value when |
||
| 2762 | C18 is used and the board is placed in configuration mode (RB0 button is depressed |
||
| 2763 | on power up). |
||
| 2764 | 7. IP Gleaning may not get disabled when, through the RS232 configuration application, |
||
| 2765 | DHCP and IP Gleaning are disabled. |
||
| 2766 | 8. The IP address being outputted out the RS232 port and through the Announce module |
||
| 2767 | does not happen when the IP address is configured using IP Gleaning. |
||
| 2768 | 9. Multiple TX buffer support is not fully inplemented in the MAC layer, ENC28J60.c. |
||
| 2769 | Stack behavior when TCP_NO_WAIT_FOR_ACK is defined may be unexpected. |
||
| 2770 | |||
| 2771 | |||
| 2772 | |||
| 2773 | ******** |
||
| 2774 | v2.20.04.01: 9/24/03 |
||
| 2775 | ******** |
||
| 2776 | 1. Recreated MPLAB projects to avoid problems when source is not at \MCHPStack location. |
||
| 2777 | |||
| 2778 | |||
| 2779 | ******** |
||
| 2780 | v2.20.04: 9/5/03 |
||
| 2781 | ******** |
||
| 2782 | Fixes: |
||
| 2783 | 1. Modified DHCPReset() in DHCP.c to not reset DHCP state machine if it was previously |
||
| 2784 | disabled using DHCPDisable(). This would make sure that if DHCP module was enabled |
||
| 2785 | and application had run-time disabled DHCP and network cable is disconnected, |
||
| 2786 | stack will not clear its IP address. |
||
| 2787 | |||
| 2788 | 2. Rebuilt mib2bib.exe file with static library options. This fixes problem where |
||
| 2789 | one tries to execute this exe, an error occurs about missing DLLs. |
||
| 2790 | |||
| 2791 | |||
| 2792 | ******** |
||
| 2793 | v2.20.03: |
||
| 2794 | ******** |
||
| 2795 | Improvements: |
||
| 2796 | 1. When DHCP is enabled, LINK is monitored and IP address is reset on disconnect. |
||
| 2797 | New IP configuration is obtained on LINK reconnect. - For RealTek only. |
||
| 2798 | Modified DHCP.c to add DHCPReset() |
||
| 2799 | Modified MAC.c to add MACIsLinked() |
||
| 2800 | Modified StackTsk.h to add BYTE_VAL def. |
||
| 2801 | |||
| 2802 | Changes: |
||
| 2803 | 1. Modified SMSC91c111.c to add empty MACIsLinked() - will be populated in next rev. |
||
| 2804 | |||
| 2805 | Bug Fixes: |
||
| 2806 | 1. Corrected DHCP logic to accept first DHCP offer instead of second response. |
||
| 2807 | 2. Corrected DHCP logic to check for chaddr in DHCP offer and accept one that |
||
| 2808 | matches with local MAC address. This will fix problem where if multiple |
||
| 2809 | nodes were on bus and all requested DHCP address, all would accept response |
||
| 2810 | from one server instead of verifying who was intended node. |
||
| 2811 | 3. Fixed UDPClose() in UDP.c to use INVALID_UDP_PORT instead of INVALID_UDP_SOCKET |
||
| 2812 | because of which a closed socket would not be scanned correctly. |
||
| 2813 | 4. Modified UDP.h to use long contsant designators for INVALID_UDP_OPRT |
||
| 2814 | to explicitly state that it is a long. |
||
| 2815 | |||
| 2816 | |||
| 2817 | |||
| 2818 | ******** |
||
| 2819 | v2.20.02: |
||
| 2820 | ******** |
||
| 2821 | Beta version containing TFTP client module. |
||
| 2822 | |||
| 2823 | Addition: |
||
| 2824 | 1. TFTP Client module - See TFTPc.* and TFTPcDemo.c for more information. |
||
| 2825 | See MpTFTPcDemo and HtTFTPcDemo projects for build information. |
||
| 2826 | |||
| 2827 | Bug Fix: |
||
| 2828 | 1. UDPIsGetReady() was modified to overcome compiler rule where only 8-bit value was |
||
| 2829 | used to evaluate non-zero condition. |
||
| 2830 | 2. ARPResolve() in ARPTsk was fixed to clear Cache.IPAddr value. |
||
| 2831 | |||
| 2832 | ******** |
||
| 2833 | v2.20.01: |
||
| 2834 | ******** |
||
| 2835 | Bug fix: |
||
| 2836 | 1. Fixed SMSC91C111.c where MACInit() would hand if ethernet link is not detected. |
||
| 2837 | |||
| 2838 | |||
| 2839 | ******** |
||
| 2840 | v2.20: |
||
| 2841 | ******** |
||
| 2842 | Bug Fixes: |
||
| 2843 | 1. General - Removed most of harmless warnings. |
||
| 2844 | 2. C18Cfg.asm - Fixed "include" instead of "define". |
||
| 2845 | 3. DHCP.c - Increased DHCP_TIMEOUT_VAL to 2 seconds. |
||
| 2846 | Fixed problem where UDP active socket was not set before calling UDP |
||
| 2847 | functions |
||
| 2848 | in SM_DHCP_BROADCAST state. |
||
| 2849 | 4. MAC.c - Fixed MACIsTxReady() where under heavy traffic it would always return |
||
| 2850 | FALSE. |
||
| 2851 | This fixes bug where all high level applications would stop |
||
| 2852 | transmitting. |
||
| 2853 | 5. TCP.c - Enabled portion of code that performs timeout logic even if |
||
| 2854 | TCP_NO_WAIT_ACK |
||
| 2855 | is defined. This fixes bug where occasionally, tcp applications such as |
||
| 2856 | HTTP server would stop working after few hours. |
||
| 2857 | 6. UDP.c - Fixed UDPGet() where it would return FALSE on last good byte. |
||
| 2858 | Fixed UDPProcess() where it was calculating incorrect length. |
||
| 2859 | |||
| 2860 | Added bFirstRead flag with UDP sockets similar to TCP sockets |
||
| 2861 | so that whenever first UDP byte is read, MAC read pointer will be |
||
| 2862 | reset to begining of correct packet. |
||
| 2863 | This change fixes problem where if one transmits a packet while |
||
| 2864 | UDP packet is pending in a socket, next get to pending UDP socket would |
||
| 2865 | return wrong data. (This is apparent only when there is heavy network |
||
| 2866 | traffic) |
||
| 2867 | |||
| 2868 | Known Issues: |
||
| 2869 | 1. HiTech v8.20 PL4 with all optimization enabled may not work properly. |
||
| 2870 | 2. C18 "Static" and "Auto" mode may not be used - there are too many local variables to |
||
| 2871 | fit |
||
| 2872 | in standard stack of 256 bytes. One may modify linker script file to avoid this |
||
| 2873 | limitation. |
||
| 2874 | |||
| 2875 | |||
| 2876 | |||
| 2877 | Improvements: |
||
| 2878 | 1. Modified TICK def. in Tick.h to unsigned long to support 32-bit wide SNMP tick. |
||
| 2879 | 2. Added SNMP Module (SNMP.c) |
||
| 2880 | 3. Added Two new demo projects - DemoSNMPApp and HtDemoSNMPApp. |
||
| 2881 | 4. Created MPLAB 6.X projects for different demo configurations. |
||
| 2882 | 5. MAC.c - Added MACGetTxOffset(). |
||
| 2883 | 6. MPFS.c - Added MPFSSeek(), MPFSTell(). |
||
| 2884 | 7. MPFSImg.*- Rebuilt to reflect v2.20, footprint changes etc. |
||
| 2885 | 8. StackTsk.h- Enhanced WORD_VAL, DWORD_VAL defs. |
||
| 2886 | Added STACK_USE_SNMP and related compile-time checks. |
||
| 2887 | 9. UDP.h - Added UDPSetTx and UDPSetRx macros. |
||
| 2888 | Moved UDP_SOCKET_INFO structure to header file. |
||
| 2889 | 10. WebSrvr.c- Modifed MCHPStack version message and added DATE info to BoardSetup |
||
| 2890 | menu. |
||
| 2891 | 11. Added support for SMSC LAN91C111 10/100 Non-PCI ethernet controller |
||
| 2892 | Use "SMSC91C111.C" instead of MAC.c. |
||
| 2893 | "mpnicee_smsc" is a sample project that uses PIC18F8720 and SMSC NIC. |
||
| 2894 | "MasterDemo.c" is a main source file for above project that includes |
||
| 2895 | all modules - must use device with more than 32KB of memory. |
||
| 2896 | |||
| 2897 | |||
| 2898 | |||
| 2899 | |||
| 2900 | ******** |
||
| 2901 | v2.11: |
||
| 2902 | ******** |
||
| 2903 | Bug Fixes: |
||
| 2904 | 1. Fixed dhcp.c to make it work with new C18 startup code. |
||
| 2905 | |||
| 2906 | Improvements: |
||
| 2907 | 1. Modified websrvr.c DownloadMPFS() to make use of compiler allocated XMODEM data block |
||
| 2908 | rather than use fixed address block starting at 0x400. |
||
| 2909 | |||
| 2910 | |||
| 2911 | ******** |
||
| 2912 | v2.10: 7/9/02 |
||
| 2913 | ******** |
||
| 2914 | Bug Fixes: |
||
| 2915 | 1. Fixed HTTP Server bug where a form submission with empty parameter value would not |
||
| 2916 | parse correctly. |
||
| 2917 | |||
| 2918 | |||
| 2919 | |||
| 2920 | ******** |
||
| 2921 | v2.0: 5/22/02 |
||
| 2922 | ******** |
||
| 2923 | |||
| 2924 | ******** |
||
| 2925 | New Modules: |
||
| 2926 | ******** |
||
| 2927 | 1. Added UDP, DHCP, FTP and IP Gleaning |
||
| 2928 | 2. Added PICDEM.net LCD support |
||
| 2929 | 3. Added board setup through RS-232. |
||
| 2930 | |||
| 2931 | ******** |
||
| 2932 | Improvements: |
||
| 2933 | ******** |
||
| 2934 | 1. Optimized serial EEPROM access routines in terms of speed and size |
||
| 2935 | (Replaced ee256.* files with eeprom*.h) |
||
| 2936 | 2. Improved board setup through RS-232. |
||
| 2937 | |||
| 2938 | ******** |
||
| 2939 | Known Issues: |
||
| 2940 | ******** |
||
| 2941 | 1. LCD may not display properly on MCLR only. |
||
| 2942 | Workaround: 1. Debug XLCDInit() routine in "xlcdlh" |
||
| 2943 | 2. Always do POR reset. |
||
| 2944 | |||
| 2945 | 2. SLIP connection is not very robust. |
||
| 2946 | Workaround: None at this time. |
||
| 2947 | |||
| 2948 | 3. Hi-Tech Compiler: |
||
| 2949 | 1. Aggressive optimization breaks the functionality. |
||
| 2950 | Workaround: Apply optimization listed in each source file comment |
||
| 2951 | header. |
||
| 2952 | 2. In order to use V8.12, you will need to remove "FTP Server" from |
||
| 2953 | Ht*.pjt. |
||
| 2954 | You will also need to disable all optimizations. |
||
| 2955 | |||
| 2956 | 4. C18 Compler: 1. Static model does not compile. |
||
| 2957 | Workaround: None at this time. |
||
| 2958 | 2. Overlay model breaks the functionality. |
||
| 2959 | Workaround: None at this time. |
||
| 2960 | 3. All modules does not fit in 32KB memory. |
||
| 2961 | Workaround: 1. None at this time. |
||
| 2962 | 2. Sample project disables some modules. |
||
| 2963 | |||
| 2964 | |||
| 2965 | ******** |
||
| 2966 | New Files: |
||
| 2967 | ******** |
||
| 2968 | ======================================================================================== |
||
| 2969 | ==================================== |
||
| 2970 | File Purpose |
||
| 2971 | ======================================================================================== |
||
| 2972 | ==================================== |
||
| 2973 | 1. delay.* Provides CLOCK_FREQ depenent delay routines. |
||
| 2974 | 2. dhcp.* DHCP client support |
||
| 2975 | 3. ftp.* FTP server |
||
| 2976 | 4. udp.* UDP socket support |
||
| 2977 | 5. xeeprom.* Improved ee256.* and renamed. |
||
| 2978 | 6. xlcd.* External LCD support. |
||
| 2979 | 7. version.log To track changes and history. |
||
| 2980 | |||
| 2981 | |||
| 2982 | ******** |
||
| 2983 | Changes: |
||
| 2984 | ******** |
||
| 2985 | ======================================================================================== |
||
| 2986 | ==================================== |
||
| 2987 | File Change |
||
| 2988 | To-do for v1.0 stack applications |
||
| 2989 | ======================================================================================== |
||
| 2990 | ==================================== |
||
| 2991 | 1. arptsk.c 1. Fixed STACK_CLIENT_MODE compile errors. |
||
| 2992 | None |
||
| 2993 | 2. Modifed ARPIsResolved() to support IP Gleaning |
||
| 2994 | None |
||
| 2995 | |||
| 2996 | 2. c18cfg.asm 1. Added PIC18F452 configuration |
||
| 2997 | None |
||
| 2998 | 2. Fixed "include" errors. |
||
| 2999 | None |
||
| 3000 | |||
| 3001 | 3. compiler.h 1. Included "stdlib.h" in both C18 and Hi-Tech compilers. |
||
| 3002 | None |
||
| 3003 | 2. Moved CLOCK_FREQ from "stacktsk.h" to this file. |
||
| 3004 | None |
||
| 3005 | 3. Added PORTA defs. |
||
| 3006 | None |
||
| 3007 | |||
| 3008 | 4. htnicee.pjt 1. Removed "ee256.c". |
||
| 3009 | None |
||
| 3010 | 2. Added "udp.c", "dhcp.c", "ftp.c", "xlcd.c", "xeeprom.c" files |
||
| 3011 | Add these files if needed. |
||
| 3012 | |||
| 3013 | 5. htnicpg.pjt None |
||
| 3014 | |||
| 3015 | 6. htslee.pjt 1. Removed "ee256.c". |
||
| 3016 | None |
||
| 3017 | 2. Added "ftp.c", "xlcd.c", "xeeprom.c" files |
||
| 3018 | None |
||
| 3019 | |||
| 3020 | 7. http.c 1. Included compile-time verification that HTTP module is included. |
||
| 3021 | None |
||
| 3022 | 2. Put HTTP message strings into one array "HTTPMessages". |
||
| 3023 | None |
||
| 3024 | 3. Modified to return "Service Unavailable" message if MPFS is being |
||
| 3025 | None |
||
| 3026 | remotely programmed. |
||
| 3027 | 4. Modified SendFile() to make use of sequential EEPROM read. |
||
| 3028 | None |
||
| 3029 | |||
| 3030 | 8. ip.c 1. Added one more paramter to IPGetHeader() to support IP Gleaning |
||
| 3031 | Custom apps using IP needs to be |
||
| 3032 | |||
| 3033 | modified. |
||
| 3034 | |||
| 3035 | 9. mac.c 1. Replaced fixed delay routines with CLOCK_FREQ dependent |
||
| 3036 | None |
||
| 3037 | routines |
||
| 3038 | |||
| 3039 | 10. mpfs.c 1. Replaced ee256.h with xeeprom.h. |
||
| 3040 | None |
||
| 3041 | 2. Added MPFSFormat(), MPFSPut() etc. routines |
||
| 3042 | None |
||
| 3043 | 3. Added sequential read and page write operations |
||
| 3044 | Custom apps using MPFS directly |
||
| 3045 | |||
| 3046 | needs to be modified. |
||
| 3047 | 4. Defined MPFS_WRITE_PAGE_SIZE for MPFSPut operations. |
||
| 3048 | Apps using different EEPROM page size |
||
| 3049 | |||
| 3050 | needs to be modified. |
||
| 3051 | |||
| 3052 | 11. mpnicee.pjt 1. Removed "ee256.c" |
||
| 3053 | None |
||
| 3054 | 2. Added "xcld.c", "xeeprom.c" files |
||
| 3055 | None |
||
| 3056 | |||
| 3057 | 12. stacktsk.c 1. Replaced ee256.h with xeeprom.h |
||
| 3058 | None |
||
| 3059 | 2. Added IP Gleaning and DHCP support. |
||
| 3060 | None |
||
| 3061 | |||
| 3062 | 13. stacktsk.h 1. Moved CLOCK_FREQ to compiler.h |
||
| 3063 | None |
||
| 3064 | 2. Added STACK_USE_DHCP, STACK_USE_FTP_SERVER etc. options |
||
| 3065 | None |
||
| 3066 | 3. Added compile-time enable/disable of modules based on selection |
||
| 3067 | of higher level modules. |
||
| 3068 | None |
||
| 3069 | 4. Modified MY_DEFAULT_MAC_BYTE? to use Microchip OUI id. |
||
| 3070 | None |
||
| 3071 | 5. Added compiler-time check to confirm available TCP sockets |
||
| 3072 | None |
||
| 3073 | 6. Added MSB and LSB macros. |
||
| 3074 | None |
||
| 3075 | 7. Added SerialNumber etc. to AppConfig structure |
||
| 3076 | None |
||
| 3077 | 8. Commented module selection defines: They are defined by cmopiler |
||
| 3078 | None |
||
| 3079 | command-line options. |
||
| 3080 | Real application should define them here in this file. |
||
| 3081 | |||
| 3082 | 14. tcp.c 1. Moved TCP_STATE and TCP_INFO to .h file. |
||
| 3083 | None |
||
| 3084 | 2. Fixed TCPIsConnected() |
||
| 3085 | None |
||
| 3086 | 3. Fixed TCPDisconnect() |
||
| 3087 | None |
||
| 3088 | 4. Modified TransmitTCP() to set receive window of one segment |
||
| 3089 | None |
||
| 3090 | 5. Modified TransmitTCP() to use max segment size equal to |
||
| 3091 | predefined value. |
||
| 3092 | None |
||
| 3093 | 6. Improved TCP State machine |
||
| 3094 | None |
||
| 3095 | |||
| 3096 | 15. tick.c 1. Modified TICK type to 16-bit. |
||
| 3097 | None |
||
| 3098 | 2. Made use of TICK_PRESCALE_VALUE |
||
| 3099 | None |
||
| 3100 | 3. Added code to blink PICDEM.net "System LED" |
||
| 3101 | Remove if not required. |
||
| 3102 | |||
| 3103 | 16. websrvr.c 1. Added LCD support |
||
| 3104 | N/A |
||
| 3105 | 2. Made TickUpdate() on Timer0 interrupt |
||
| 3106 | N/A |
||
| 3107 | 3. Added code to save/restore board configuration |
||
| 3108 | N/A |
||
| 3109 | 4. Added board setup via RS-232. |
||
| 3110 | N/A |
||
| 3111 | 5. Added call to FTP modules |
||
| 3112 | If needed, add this. |
Powered by WebSVN v2.8.3