From 907068000bf3f622d8bc8f6f58068ee6fdab89a5 Mon Sep 17 00:00:00 2001 From: isometimes Date: Mon, 8 Nov 2021 15:44:59 +0000 Subject: [PATCH] Added first draft of a part15-tcpip write-up --- part15-tcpip/README.md | 63 +++++++++++++++++++++++ part15-tcpip/images/15-tcpip-pinging.jpg | Bin 0 -> 50969 bytes part15-tcpip/tcpip/ip_arp_udp_tcp.c | 5 +- part15-tcpip/tcpip/ip_arp_udp_tcp.h | 1 - part15-tcpip/tcpip/net.h | 1 + 5 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 part15-tcpip/README.md create mode 100755 part15-tcpip/images/15-tcpip-pinging.jpg diff --git a/part15-tcpip/README.md b/part15-tcpip/README.md new file mode 100644 index 0000000..5407b09 --- /dev/null +++ b/part15-tcpip/README.md @@ -0,0 +1,63 @@ +Writing a "bare metal" operating system for Raspberry Pi 4 (Part 15) +==================================================================== + +Adding a TCP/IP stack +--------------------- +Having achieved "proof of life" from our Ethernet module in _part14-spi-ethernet_, you're doubtless wondering how to go from there to serving web pages, posting tweets on Twitter or perhaps even just simply responding to a ping! + +This is where you'll need a fully-fledged TCP/IP stack that goes way beyond handcrafted ARPs, implementing many more protocols to achieve efficient bi-directional communication. + +In this part we make use of some code from Guido Socher of [tuxgraphics.org](http://tuxgraphics.org/), designed to be a lightweight TCP/IP stack for embedded devices. I chose this because it was super simple to get working (or "port"), but you might want to look at [LwIP](https://en.wikipedia.org/wiki/LwIP) if you need something more advanced. + +The code +-------- +Most of the new code is in the _tcpip/_ subdirectory. I actually came across it in [this Github repository](https://github.com/ussserrr/maglev-ti-rtos) and, again, made only a very few cosmetic changes (`diff` is your friend!). + +It did require me to expose the `strlen()` function we implemented in _lib/fb.c_, so that's added to _include/fb.h_. Similarly, we expose the `memcpy()` function we implemented in _kernel/kernel.c_, so that's added to _kernel/kernel.h_. + +I also needed a single function that tells the ENC to send a packet. Nothing new here, just different packaging: + +```c +void enc28j60PacketSend(unsigned short buflen, void *buffer) { + if (ENC_RestoreTXBuffer(&handle, buflen) == 0) { + ENC_WriteBuffer((unsigned char *) buffer, buflen); + handle.transmitLength = buflen; + ENC_Transmit(&handle); + } +} +``` + +This was also added to _kernel/kernel.h_. Finally, _kernel/kernel.c_ now calls a function called `net_test()` instead of our original `arp_test()`. + +The changes to _arp.c_ +---------------------- +We initialise the network card in exactly the same way but, when we're done, we call this function in Guido's code: + +```c +init_udp_or_www_server(myMAC, deviceIP); +``` + +This tells the TCP/IP library who we are, so we're all on the same page! + +Finally, and aside from a little cleanup, the major change is the new `net_test()` function: + +```c +void net_test(void) +{ + while (1) { + while (!ENC_GetReceivedFrame(&handle)); + + uint16_t len = handle.RxFrameInfos.length; + uint8_t *buffer = (uint8_t *)handle.RxFrameInfos.buffer; + packetloop_arp_icmp_tcp(buffer, len); + } +} +``` + +This is an infinite loop which waits for an incoming packet and then simply passes it to Guido's `packetloop_arp_icmp_tcp()` function. This function implements some useful things, like responding to pings. I modified the routine to print a message to the screen when it sends a "pong" (look from line 1381), so we can see when it's in action! + +_Imagine my excitement when I built, ran and could ping my RPi4 at 192.168.0.66 and get a response to both my laptop and my iPhone!_ + +I recommend reading [this page](http://tuxgraphics.org/electronics/200905/embedded-tcp-ip-stack.shtml) to give you some ideas about what else you might achieve with Guido's library... + +![Pinging from my iPhone](images/15-tcpip-pinging.jpg) diff --git a/part15-tcpip/images/15-tcpip-pinging.jpg b/part15-tcpip/images/15-tcpip-pinging.jpg new file mode 100755 index 0000000000000000000000000000000000000000..a7cb280fce10ca6af98b500af476fce0a5f4a56c GIT binary patch literal 50969 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 c$v