diff --git a/part11-breakout-smp/README.md b/part11-breakout-smp/README.md index 0eb8e7c..1a46bf7 100644 --- a/part11-breakout-smp/README.md +++ b/part11-breakout-smp/README.md @@ -32,4 +32,4 @@ Click on the picture below to watch a quick video of the game in action. PS: Sorry for the bad audio quality - the game itself sounds great in real life, I promise! -[Go to part12-wgt>](../part12-wgt) +[Go to part12-wgt >](../part12-wgt) diff --git a/part12-wgt/README.md b/part12-wgt/README.md index a6a38fa..42d5de7 100644 --- a/part12-wgt/README.md +++ b/part12-wgt/README.md @@ -51,4 +51,4 @@ _Do have a go at building some of the samples (hint: wgt20 and wgt60 are super f I'm going to move on from here now so we can continue to make progress on the OS itself. -[Go to part13-interrupts>](../part13-interrupts) +[Go to part13-interrupts >](../part13-interrupts) diff --git a/part13-interrupts/README.md b/part13-interrupts/README.md index 976a836..22dda22 100644 --- a/part13-interrupts/README.md +++ b/part13-interrupts/README.md @@ -150,3 +150,5 @@ Then we update the screen to show our progress! _And... hey presto! You're handling two system timer interrupts like a pro!_ ![Timers firing on all cylinders on the Raspberry Pi 4](images/13-interrupts-running.jpg) + +[Go to part14-spi-ethernet >](../part14-spi-ethernet) diff --git a/part14-spi-ethernet/README.md b/part14-spi-ethernet/README.md index 61e2870..9b5e5b8 100644 --- a/part14-spi-ethernet/README.md +++ b/part14-spi-ethernet/README.md @@ -192,6 +192,12 @@ if (ENC_RestoreTXBuffer(&handle, sizeof(ARP)) == 0) { } ``` -`ENC_RestoreTXBuffer()` simply prepares the transmit buffer and return 0 if successful. `ENC_WriteBuffer()` sends the packet to the ENC28J60 over the SPI. We then set the transmit buffer length in the driver flags and call `ENC_Transmit()` to tell the ENC to send the packet across the network. +`ENC_RestoreTXBuffer()` simply prepares the transmit buffer and returns 0 if successful. `ENC_WriteBuffer()` sends the packet to the ENC28J60 over the SPI. We then set the transmit buffer length in the driver flags and call `ENC_Transmit()` to tell the ENC to send the packet across the network. You'll see that the `arp_test()` function sends our first ARP this way. We tell it the IP of our router (192.168.0.1 in my case), but we don't know its MAC address - that's what we want to find out. Once the ARP is sent, `arp_test()` then waits for received Ethernet packets, checks whether they're for us and, if they come from the router's IP address (therefore likely to be the ARP response to our request), we print out the router's MAC address. + +This fulfils design requirement 3, and therefore we're done! + +_Imagine how happy I was when I finally saw my router's MAC address appear on-screen - a sign of life, and proof that my OS is networking!_ + +![ARP response](images/14-spi-ethernet-arp.jpg) diff --git a/part14-spi-ethernet/images/14-spi-ethernet-arp.jpg b/part14-spi-ethernet/images/14-spi-ethernet-arp.jpg new file mode 100644 index 0000000..69dbd1c Binary files /dev/null and b/part14-spi-ethernet/images/14-spi-ethernet-arp.jpg differ