Sadly, I was unable to complete as much of this project as I would have liked in the time alloted. However, as of this writing:
These components are complete:
These components are still in development:
These components have yet to be written:
The dataflash interface works well. After some initial programming, reads take about 20 cycles per byte, and writes take < 20 ms to complete. In addition, the dynamic allocation scheme for the dataflash was extremely helpful for exchanging packets between processes.
The RS232 is problematic, however. The software driven receiver runs at 300bps for maximum reliability, over 95% success rate per byte. Unfortunately, a packet of 1006 bytes, the maximum transfer unit for SLIP as defined in RFC1055, has a success rate of %ge; .951006 ~ 4 x 10-21%; virtually nil. A 20-byte packet (the size of an IP header without options or data), has a success rate of about 36%. This will make unreliable services, like UDP, well, unreliable.
Knowing what I now know, I would probably rewrite the RS232 interface so that it uses the dataflash to store incoming and outgoing data. This way, the Link layer (SLIP) would be able to call the physical layer both to receive and transmit data. This would prevent the serious scheduling issues that have plagued my project, and take a lot of pressure off the IP layer.
I also intend to finish what I do not complete by the end of the semester over the summer.