<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Interfacing FRDM-KL25Z with Arduino Ethernet Shield R3 on Processor Expert, Part 2: Ping</title><link>https://community.element14.com/products/devtools/kinetiskl2freedomboard/w/documents/16852/interfacing-frdm-kl25z-with-arduino-ethernet-shield-r3-on-processor-expert-part-2-ping</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Interfacing FRDM-KL25Z with Arduino Ethernet Shield R3 on Processor Expert, Part 2: Ping</title><link>https://community.element14.com/products/devtools/kinetiskl2freedomboard/w/documents/16852/interfacing-frdm-kl25z-with-arduino-ethernet-shield-r3-on-processor-expert-part-2-ping</link><pubDate>Tue, 18 Mar 2014 13:27:40 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:649d9259-ecc5-4f35-914b-304257c6b0f5</guid><dc:creator>bheemarao</dc:creator><comments>https://community.element14.com/products/devtools/kinetiskl2freedomboard/w/documents/16852/interfacing-frdm-kl25z-with-arduino-ethernet-shield-r3-on-processor-expert-part-2-ping#comments</comments><description>Current Revision posted to Documents by bheemarao on 3/18/2014 1:27:40 PM&lt;br /&gt;
&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;&lt;span style="font-size:12pt;font-family:arial, helvetica, sans-serif;"&gt;&lt;span style="color:#ff6600;font-size:10pt;"&gt;&lt;em&gt;This tutorial was extracted from Erich Styger blog &lt;/em&gt;&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;a class="jive-link-external-small" href="http://mcuoneclipse.wordpress.com/" rel="nofollow ugc noopener" target="_blank"&gt;&lt;span style="color:#592d5f;"&gt;&lt;em&gt;http://mcuoneclipse.wordpress.com&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color:#ff6600;font-size:10pt;"&gt;&lt;em&gt; with his agreement.&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;In &lt;span style="color:#1982d1;font-style:inherit;font-family:inherit;font-weight:inherit;"&gt;&lt;a class="jive-link-external-small" href="/products/devtools/kinetiskl2freedomboard/w/documents/16851/interfacing-frdm-kl25z-with-arduino-ethernet-shield-r3-on-processor-expert-part-1-sd-card" target="_blank"&gt;Part 1&lt;/a&gt;&lt;/span&gt; of this series I have covered the SD card on the Arduino Ethernet shield. In Part 2 I’m hooking up the board to the network and will be able to &lt;span style="font-family:inherit;font-style:inherit;"&gt;&lt;strong&gt;ping&lt;/strong&gt;&lt;/span&gt; it.&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a href="http://mcuoneclipse.files.wordpress.com/2014/01/arduino-ethernet-shield-with-frdm-kl25z1.png" rel="nofollow ugc noopener" style="font-family:inherit;font-style:inherit;font-weight:inherit;color:#1982d1;" target="_blank"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img alt="Arduino Ethernet Shield with FRDM-KL25Z" class="jiveImage wp-image-10399 size-full" height="415" src="http://mcuoneclipse.files.wordpress.com/2014/01/arduino-ethernet-shield-with-frdm-kl25z1.png?w=584&amp;amp;h=415" style="border-color:#eeeeee;padding:6px;" width="584" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="wp-caption-text" style="margin:0;font-family:Georgia, serif;font-size:12px;font-style:inherit;font-weight:inherit;margin-bottom:0.6em;padding-top:10px;padding-bottom:5px;padding-left:40px;color:#666666;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Arduino Ethernet Shield with FRDM-KL25Z&lt;/p&gt;&lt;p style="margin:0;padding:0px;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;&amp;nbsp;&lt;/p&gt;&lt;h1 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;List of Tutorials&lt;/h1&gt;&lt;ol style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;margin-left:2.5em;list-style-position:initial;list-style-image:initial;color:#373737;"&gt;&lt;li&gt;&lt;span style="color:#1982d1;font-style:inherit;font-family:inherit;font-weight:inherit;"&gt;&lt;a class="jive-link-external-small" href="/products/devtools/kinetiskl2freedomboard/w/documents/16851/interfacing-frdm-kl25z-with-arduino-ethernet-shield-r3-on-processor-expert-part-1-sd-card" target="_blank"&gt;FRDM with Arduino Ethernet Shield R3, Part 1: SD Card&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color:#1982d1;font-style:inherit;font-family:inherit;font-weight:inherit;"&gt;&lt;a class="jive-link-external-small" href="#" target="_blank"&gt;FRDM with Arduino Ethernet Shield R3, Part 2: Ping&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="jive-link-external-small" href="/products/devtools/kinetiskl2freedomboard/w/documents/16853/interfacing-frdm-kl25z-with-arduino-ethernet-shield-r3-on-processor-expert-part-3-embedded-web-server" target="_blank"&gt;FRDM with Arduino Ethernet Shield R3, Part 3: Embedded Web Server&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h1 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Hardware&lt;/h1&gt;&lt;p style="margin:0;"&gt;&lt;span style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;The W5100 has a TCP/IP stack built into the hardware, which makes it easy to use with any small microcontroller, including the Freescale KL25Z on the &lt;span&gt;&lt;span class="e14-init-shown" id="addProduct-R1kfCsEZ-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=2191861&amp;amp;nsku=&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=2191861&amp;amp;nsku=&amp;amp;COM=noscript" target="_blank"&gt;FRDM-KL25Z&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-R1kfCsEZ-unlinked"&gt;FRDM-KL25Z&lt;/span&gt;&lt;/span&gt; board. The&lt;span&gt;&lt;span class="e14-init-shown" id="addProduct-zX7cTkFR-linked" style="white-space:nowrap;"&gt;&lt;a class="jive-link-product-addtolist" href="https://www.element14.com/community/view-product.jspa?fsku=2212783&amp;amp;nsku=&amp;amp;COM=noscript" target="_blank"&gt;&lt;span class="pf-widget-map pf-productlink-cart-icon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a class="jive-link-product pf-embedded-product-link" href="https://www.element14.com/community/view-product.jspa?fsku=2212783&amp;amp;nsku=&amp;amp;COM=noscript" target="_blank"&gt;Arduino Ethernet Shield R3&lt;/a&gt;&lt;/span&gt;&lt;span class="e14-init-hidden" id="addProduct-zX7cTkFR-unlinked"&gt;Arduino Ethernet Shield R3&lt;/span&gt;&lt;/span&gt; I’m using requires a hardware change to map the SPI signals to the Arduino header: See&lt;a class="jive-link-external-small" href="/products/devtools/kinetiskl2freedomboard/w/documents/16851/interfacing-frdm-kl25z-with-arduino-ethernet-shield-r3-on-processor-expert-part-1-sd-card" target="_blank"&gt; &lt;span style="color:#1982d1;font-style:inherit;font-family:inherit;font-weight:inherit;"&gt;Part 1&lt;/span&gt;&lt;/a&gt; of this series.&lt;/span&gt;&lt;/p&gt;&lt;h1 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;&lt;/h1&gt;&lt;h1 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;SPI Communication&lt;/h1&gt;&lt;p style="margin:0;"&gt;&lt;span style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;The W5100 uses the ‘Mode 0′ SPI protocol:&lt;/span&gt;&lt;/p&gt;&lt;ol style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;margin-left:2.5em;list-style-position:initial;list-style-image:initial;color:#373737;"&gt;&lt;li&gt;Clock Idle polarity low&lt;/li&gt;&lt;li&gt;Data shifted on rising edge&lt;/li&gt;&lt;/ol&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;After activivating the CS (Chip Select, LOW active) line, a command byte (0xF0 for write, 0x0F for read) is sent, followed by the address (16bit, most significant byte first), and then the data byte. Within a byte, the MSB (Most Significant Bit) is sent first.&lt;/p&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Write&lt;/h2&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;The screenshot below shows the write command 0xF0 which writes the value 0xC0 to address 0×0001:&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a href="http://mcuoneclipse.files.wordpress.com/2014/01/w5100-spi-write-byte.png" rel="nofollow ugc noopener" style="font-family:inherit;font-style:inherit;font-weight:inherit;color:#1982d1;" target="_blank"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img loading="lazy" alt="W5100 SPI Write Byte" class="wp-image-10392 jiveImage size-full" height="127" src="http://mcuoneclipse.files.wordpress.com/2014/01/w5100-spi-write-byte.png?w=584&amp;amp;h=127" style="border-color:#eeeeee;padding:6px;" width="584" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="wp-caption-text" style="margin:0;font-family:Georgia, serif;font-size:12px;font-style:inherit;font-weight:inherit;margin-bottom:0.6em;padding-top:10px;padding-bottom:5px;padding-left:40px;color:#666666;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; W5100 SPI Write Byte&lt;/p&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;So a transaction is always 32 bits: 1 command byte, 2 address bytes, one data byte. As you can see, the W5100 responds on the MISO line with increasing values to the write command.&lt;/p&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Read&lt;/h2&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;Reading from the device is very similar. For this the command 0x0F is used. Below is the read operation which reads back the value from address 0×0001:&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a href="http://mcuoneclipse.files.wordpress.com/2014/01/w5100-spi-read-byte.png" rel="nofollow ugc noopener" style="font-family:inherit;font-style:inherit;font-weight:inherit;color:#1982d1;" target="_blank"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img loading="lazy" alt="W5100 SPI Read Byte" class="jiveImage size-full wp-image-10393" height="111" src="http://mcuoneclipse.files.wordpress.com/2014/01/w5100-spi-read-byte.png?w=584&amp;amp;h=111" style="border-color:#eeeeee;padding:6px;" width="584" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="wp-caption-text" style="margin:0;font-family:Georgia, serif;font-size:12px;font-style:inherit;font-weight:inherit;margin-bottom:0.6em;padding-top:10px;padding-bottom:5px;padding-left:40px;color:#666666;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; W5100 SPI Read Byte&lt;/p&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Chip Select&lt;/h2&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;The chip select for the W5100 is low active, and to abstract from the hardware, I’m using defines:&lt;/p&gt;&lt;p style="margin:0;padding:0px;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;color:#373737;"&gt;&amp;nbsp;&lt;/p&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;1&lt;p style="margin:0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="cpp preprocessor"&gt; #define W5100_CS_ENABLE()&amp;nbsp;&amp;nbsp; ETH_CS_ClrVal()&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="cpp preprocessor"&gt; #define W5100_CS_DISABLE()&amp;nbsp; ETH_CS_SetVal()&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Semaphore&lt;/h2&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;As the SPI bus is shared between the SD card and W5100, I’m using a semaphore to grant mutual access to the bus:&lt;/p&gt;&lt;table border="0" cellpadding="0" cellspacing="0" height="387" style="width:685px;height:387px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;&lt;p style="margin:0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/p&gt;&lt;p style="margin:0;"&gt;2&lt;/p&gt;&lt;p style="margin:0;"&gt;3&lt;/p&gt;&lt;p style="margin:0;"&gt;4&lt;/p&gt;&lt;p style="margin:0;"&gt;5&lt;/p&gt;&lt;p style="margin:0;"&gt;6&lt;/p&gt;&lt;p style="margin:0;"&gt;7&lt;/p&gt;&lt;p style="margin:0;"&gt;8&lt;/p&gt;&lt;p style="margin:0;"&gt;9&lt;/p&gt;&lt;p style="margin:0;"&gt;10&lt;/p&gt;&lt;p style="margin:0;"&gt;11&lt;/p&gt;&lt;p style="margin:0;"&gt;12&lt;/p&gt;&lt;p style="margin:0;"&gt;13&lt;/p&gt;&lt;p style="margin:0;"&gt;14&lt;/p&gt;&lt;p style="margin:0;"&gt;15&lt;/p&gt;&lt;p style="margin:0;"&gt;16&lt;/p&gt;&lt;p style="margin:0;"&gt;17&lt;/p&gt;&lt;p style="margin:0;"&gt;18&lt;/p&gt;&lt;p style="margin:0;"&gt;19&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;&amp;nbsp; static&lt;/code&gt; &lt;code class="cpp plain"&gt;xSemaphoreHandle SPImutex = NULL; &lt;/code&gt;&lt;code class="cpp comments"&gt;/* Semaphore to protect SPI access */&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;&amp;nbsp; &lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;&amp;nbsp; void&lt;/code&gt; &lt;code class="cpp plain"&gt;W5100_RequestSPIBus(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;) {&lt;/code&gt;&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;)xSemaphoreTakeRecursive(SPImutex, portMAX_DELAY);&lt;/code&gt;&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="number7 alt2 index6 line" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt; &lt;code class="cpp plain"&gt;W5100_ReleaseSPIBus(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;) {&lt;/code&gt;&lt;/p&gt;&lt;p class="index7 number8 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;)xSemaphoreGiveRecursive(SPImutex);&lt;/code&gt;&lt;/p&gt;&lt;p class="number9 alt2 line index8" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 line index9 number10" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="alt2 index10 number11 line" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt; &lt;code class="cpp plain"&gt;W5100_GetBus(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;) {&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 number12 line index11" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_RequestSPIBus();&lt;/code&gt;&lt;/p&gt;&lt;p class="number13 alt2 line index12" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_CS_ENABLE();&lt;/code&gt;&lt;/p&gt;&lt;p class="index13 number14 alt1 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="index14 number15 alt2 line" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="number16 index15 alt1 line" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt; &lt;code class="cpp plain"&gt;W5100_ReleaseBus(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;) {&lt;/code&gt;&lt;/p&gt;&lt;p class="number17 index16 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_CS_DISABLE();&lt;/code&gt;&lt;/p&gt;&lt;p class="index17 alt1 line number18" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_ReleaseSPIBus();&lt;/code&gt;&lt;/p&gt;&lt;p class="alt2 index18 line number19" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="border:0px solid black;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;&lt;/h2&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;SPI Read and Write&lt;/h2&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;Using the Processor Expert SPI component, dealing with the SPI protocol gets really simple. I need to catch the hook for the finished SPI transaction and wait until the transaction is finished:&lt;/p&gt;&lt;div class="syntaxhighlighter cpp" style="font-family:inherit;font-style:inherit;font-weight:inherit;"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;1&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;2&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;3&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;4&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;5&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;6&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;7&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;8&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;9&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;10&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;11&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;12&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;13&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;14&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;15&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;16&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;17&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;18&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;19&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;20&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;21&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;22&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;23&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;24&lt;/div&gt;&lt;div class="number1 alt2 line index0"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 25&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;&amp;nbsp; static&lt;/code&gt; &lt;code class="keyword cpp bold"&gt;volatile&lt;/code&gt; &lt;code class="color1 cpp bold"&gt;bool&lt;/code&gt; &lt;code class="cpp plain"&gt;W5100_DataReceivedFlag = FALSE;&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;&amp;nbsp; void&lt;/code&gt; &lt;code class="cpp plain"&gt;W5100_OnBlockReceived(LDD_TUserData *UserDataPtr) {&lt;/code&gt;&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;)UserDataPtr;&lt;/code&gt;&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_DataReceivedFlag = TRUE;&lt;/code&gt;&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="number7 alt2 index6 line" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="index7 number8 alt1 line" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;static&lt;/code&gt; &lt;code class="keyword cpp bold"&gt;void&lt;/code&gt; &lt;code class="cpp plain"&gt;SPIWriteByte(unsigned &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;char&lt;/code&gt; &lt;code class="cpp plain"&gt;write) {&lt;/code&gt;&lt;/p&gt;&lt;p class="number9 alt2 line index8" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;unsigned &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;char&lt;/code&gt; &lt;code class="cpp plain"&gt;dummy;&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 line index9 number10" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="alt2 index10 number11 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_DataReceivedFlag = FALSE;&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 number12 line index11" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;)SM1_ReceiveBlock(SM1_DeviceData, &amp;amp;dummy, &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;sizeof&lt;/code&gt;&lt;code class="cpp plain"&gt;(dummy));&lt;/code&gt;&lt;/p&gt;&lt;p class="number13 alt2 line index12" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;)SM1_SendBlock(SM1_DeviceData, &amp;amp;write, &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;sizeof&lt;/code&gt;&lt;code class="cpp plain"&gt;(write));&lt;/code&gt;&lt;/p&gt;&lt;p class="index13 number14 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;while&lt;/code&gt;&lt;code class="cpp plain"&gt;(!W5100_DataReceivedFlag){}&lt;/code&gt;&lt;/p&gt;&lt;p class="index14 number15 alt2 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="number16 index15 alt1 line" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="number17 index16 alt2 line" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;static&lt;/code&gt; &lt;code class="cpp plain"&gt;uint8_t SPIReadByte(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;) {&lt;/code&gt;&lt;/p&gt;&lt;p class="index17 alt1 line number18" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;uint8_t val, write = 0xff; &lt;/code&gt;&lt;code class="cpp comments"&gt;/* dummy */&lt;/code&gt;&lt;/p&gt;&lt;p class="alt2 index18 line number19" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="number20 alt1 index19 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_DataReceivedFlag = FALSE;&lt;/code&gt;&lt;/p&gt;&lt;p class="alt2 index20 line number21" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;)SM1_ReceiveBlock(SM1_DeviceData, &amp;amp;val, 1);&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 index21 number22 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;(&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;)SM1_SendBlock(SM1_DeviceData, &amp;amp;write, 1);&lt;/code&gt;&lt;/p&gt;&lt;p class="alt2 number23 index22 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;while&lt;/code&gt;&lt;code class="cpp plain"&gt;(!W5100_DataReceivedFlag){}&lt;/code&gt;&lt;/p&gt;&lt;p class="number24 alt1 line index23" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;return&lt;/code&gt; &lt;code class="cpp plain"&gt;val;&lt;/code&gt;&lt;/p&gt;&lt;p class="index24 number25 alt2 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;blockquote class="jive-quote" style="font-family:Georgia, &amp;#39;Bitstream Charter&amp;#39;, serif;font-size:15px;font-style:italic;margin:0 3em;color:#373737;"&gt;&lt;p style="margin:0;font-family:inherit;font-style:inherit;font-weight:inherit;margin-bottom:1.625em;"&gt;&lt;a href="http://s0.wp.com/wp-includes/images/smilies/icon_exclaim.gif?m=1129645325g"&gt;&lt;img loading="lazy" alt=":!:" class="jiveImage wp-smiley" src="http://s0.wp.com/wp-includes/images/smilies/icon_exclaim.gif?m=1129645325g" style="border-style:none;" /&gt;&lt;/a&gt; This code polls for the DataReceivedFlag. To make the code more robust, a timeout should be used. I keep things simple here.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;&lt;/h2&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Read/Write Registers&lt;/h2&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;To read and write the W5100 registers, this can be done like this:&lt;/p&gt;&lt;p style="margin:0;padding:0px;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;color:#373737;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="syntaxhighlighter cpp" style="font-family:inherit;font-style:inherit;font-weight:inherit;"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;1&lt;p class="number2 alt1 index1 line" style="margin:0;"&gt;2&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;3&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;4&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;5&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;6&lt;/p&gt;&lt;p class="number7 alt2 index6 line" style="margin:0;"&gt;7&lt;/p&gt;&lt;p class="index7 number8 alt1 line" style="margin:0;"&gt;8&lt;/p&gt;&lt;p class="number9 alt2 line index8" style="margin:0;"&gt;9&lt;/p&gt;&lt;p class="alt1 line index9 number10" style="margin:0;"&gt;10&lt;/p&gt;&lt;p class="alt2 index10 number11 line" style="margin:0;"&gt;11&lt;/p&gt;&lt;p class="alt1 number12 line index11" style="margin:0;"&gt;12&lt;/p&gt;&lt;p class="number13 alt2 line index12" style="margin:0;"&gt;13&lt;/p&gt;&lt;p class="index13 number14 alt1 line" style="margin:0;"&gt;14&lt;/p&gt;&lt;p class="index14 number15 alt2 line" style="margin:0;"&gt;15&lt;/p&gt;&lt;p class="number16 index15 alt1 line" style="margin:0;"&gt;16&lt;/p&gt;&lt;p class="number17 index16 alt2 line" style="margin:0;"&gt;17&lt;/p&gt;&lt;p class="index17 alt1 line number18" style="margin:0;"&gt;18&lt;/p&gt;&lt;p class="alt2 index18 line number19" style="margin:0;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;&amp;nbsp; uint8_t W5100_MemWriteByte(uint16_t addr, uint8_t val) {&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_GetBus();&lt;/code&gt;&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;SPIWriteByte(W5100_CMD_WRITE);&lt;/code&gt;&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;SPIWriteByte(addr&amp;gt;&amp;gt;8); &lt;/code&gt;&lt;code class="cpp comments"&gt;/* high address */&lt;/code&gt;&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;SPIWriteByte(addr&amp;amp;0xff); &lt;/code&gt;&lt;code class="cpp comments"&gt;/* low address */&lt;/code&gt;&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;SPIWriteByte(val); &lt;/code&gt;&lt;code class="cpp comments"&gt;/* data */&lt;/code&gt;&lt;/p&gt;&lt;p class="number7 alt2 index6 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_ReleaseBus();&lt;/code&gt;&lt;/p&gt;&lt;p class="index7 number8 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;return&lt;/code&gt; &lt;code class="cpp plain"&gt;ERR_OK;&lt;/code&gt;&lt;/p&gt;&lt;p class="number9 alt2 line index8" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 line index9 number10" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="alt2 index10 number11 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;uint8_t W5100_MemReadByte(uint16_t addr, uint8_t *val) {&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 number12 line index11" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_GetBus();&lt;/code&gt;&lt;/p&gt;&lt;p class="number13 alt2 line index12" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;SPIWriteByte(W5100_CMD_READ);&lt;/code&gt;&lt;/p&gt;&lt;p class="index13 number14 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;SPIWriteByte(addr&amp;gt;&amp;gt;8); &lt;/code&gt;&lt;code class="cpp comments"&gt;/* high address */&lt;/code&gt;&lt;/p&gt;&lt;p class="index14 number15 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;SPIWriteByte(addr&amp;amp;0xff); &lt;/code&gt;&lt;code class="cpp comments"&gt;/* low address */&lt;/code&gt;&lt;/p&gt;&lt;p class="number16 index15 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;*val = SPIReadByte(); &lt;/code&gt;&lt;code class="cpp comments"&gt;/* data */&lt;/code&gt;&lt;/p&gt;&lt;p class="number17 index16 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_ReleaseBus();&lt;/code&gt;&lt;/p&gt;&lt;p class="index17 alt1 line number18" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;return&lt;/code&gt; &lt;code class="cpp plain"&gt;ERR_OK;&lt;/code&gt;&lt;/p&gt;&lt;p class="alt2 index18 line number19" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Read/Write Multiple Bytes&lt;/h2&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;To read or write more than one byte, the single byte read/write routines are used:&lt;/p&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;1&lt;p class="number2 alt1 index1 line" style="margin:0;"&gt;2&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;3&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;4&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;5&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;6&lt;/p&gt;&lt;p class="number7 alt2 index6 line" style="margin:0;"&gt;7&lt;/p&gt;&lt;p class="index7 number8 alt1 line" style="margin:0;"&gt;8&lt;/p&gt;&lt;p class="number9 alt2 line index8" style="margin:0;"&gt;9&lt;/p&gt;&lt;p class="alt1 line index9 number10" style="margin:0;"&gt;10&lt;/p&gt;&lt;p class="alt2 index10 number11 line" style="margin:0;"&gt;11&lt;/p&gt;&lt;p class="alt1 number12 line index11" style="margin:0;"&gt;12&lt;/p&gt;&lt;p class="number13 alt2 line index12" style="margin:0;"&gt;13&lt;/p&gt;&lt;p class="index13 number14 alt1 line" style="margin:0;"&gt;14&lt;/p&gt;&lt;p class="index14 number15 alt2 line" style="margin:0;"&gt;15&lt;/p&gt;&lt;p class="number16 index15 alt1 line" style="margin:0;"&gt;16&lt;/p&gt;&lt;p class="number17 index16 alt2 line" style="margin:0;"&gt;17&lt;/p&gt;&lt;p class="index17 alt1 line number18" style="margin:0;"&gt;18&lt;/p&gt;&lt;p class="alt2 index18 line number19" style="margin:0;"&gt;&amp;nbsp;&amp;nbsp; 19&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;&amp;nbsp; uint8_t W5100_MemReadBlock(uint16_t addr, &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt; &lt;code class="cpp plain"&gt;*data, &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;size_t&lt;/code&gt; &lt;code class="cpp plain"&gt;dataSize) {&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;while&lt;/code&gt;&lt;code class="cpp plain"&gt;(dataSize&amp;gt;0) {&lt;/code&gt;&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;if&lt;/code&gt; &lt;code class="cpp plain"&gt;(W5100_MemReadByte(addr, (uint8_t*)data)!=ERR_OK) {&lt;/code&gt;&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;return&lt;/code&gt; &lt;code class="cpp plain"&gt;ERR_FAILED;&lt;/code&gt;&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;data++; addr++; dataSize--;&lt;/code&gt;&lt;/p&gt;&lt;p class="number7 alt2 index6 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="index7 number8 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;return&lt;/code&gt; &lt;code class="cpp plain"&gt;ERR_OK;&lt;/code&gt;&lt;/p&gt;&lt;p class="number9 alt2 line index8" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 line index9 number10" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="alt2 index10 number11 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;uint8_t W5100_MemWriteBlock(uint16_t addr, &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt; &lt;code class="cpp plain"&gt;*data, &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;size_t&lt;/code&gt; &lt;code class="cpp plain"&gt;dataSize) {&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 number12 line index11" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;while&lt;/code&gt;&lt;code class="cpp plain"&gt;(dataSize&amp;gt;0) {&lt;/code&gt;&lt;/p&gt;&lt;p class="number13 alt2 line index12" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;if&lt;/code&gt; &lt;code class="cpp plain"&gt;(W5100_MemWriteByte(addr, *((uint8_t*)data))!=ERR_OK) {&lt;/code&gt;&lt;/p&gt;&lt;p class="index13 number14 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;return&lt;/code&gt; &lt;code class="cpp plain"&gt;ERR_FAILED;&lt;/code&gt;&lt;/p&gt;&lt;p class="index14 number15 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="number16 index15 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;data++; addr++; dataSize--;&lt;/code&gt;&lt;/p&gt;&lt;p class="number17 index16 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="index17 alt1 line number18" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;return&lt;/code&gt; &lt;code class="cpp plain"&gt;ERR_OK;&lt;/code&gt;&lt;/p&gt;&lt;p class="alt2 index18 line number19" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;padding:0px;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;An example to read/write multiple bytes is for the network configuration:&lt;/p&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;1 &lt;p class="number2 alt1 index1 line" style="margin:0;"&gt;2&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;3&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;4&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;5&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;6&lt;/p&gt;&lt;p class="number7 alt2 index6 line" style="margin:0;"&gt;7&lt;/p&gt;&lt;p class="index7 number8 alt1 line" style="margin:0;"&gt;8&lt;/p&gt;&lt;p class="number9 alt2 line index8" style="margin:0;"&gt;9&lt;/p&gt;&lt;p class="alt1 line index9 number10" style="margin:0;"&gt;10&lt;/p&gt;&lt;p class="alt2 index10 number11 line" style="margin:0;"&gt;11&lt;/p&gt;&lt;p class="alt1 number12 line index11" style="margin:0;"&gt;12&lt;/p&gt;&lt;p class="number13 alt2 line index12" style="margin:0;"&gt;13&lt;/p&gt;&lt;p class="index13 number14 alt1 line" style="margin:0;"&gt;&amp;nbsp;&amp;nbsp; 14&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;typedef&lt;/code&gt; &lt;code class="keyword cpp bold"&gt;struct&lt;/code&gt; &lt;code class="cpp plain"&gt;w5100_config {&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;uint8_t gateway[4]; &lt;/code&gt;&lt;code class="cpp comments"&gt;/* gateway address, e.g. 192.168.0.1 */&lt;/code&gt;&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;uint8_t netmask[4]; &lt;/code&gt;&lt;code class="cpp comments"&gt;/* network mask, e.g. 255.255.255.0 */&lt;/code&gt;&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;uint8_t hwaddr[6]; &lt;/code&gt;&lt;code class="cpp comments"&gt;/* hardware MAC address, e.g. 90:a2:da:0D:42:dd */&lt;/code&gt;&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;uint8_t ipaddr[4]; &lt;/code&gt;&lt;code class="cpp comments"&gt;/* own IP address, e.g. 192.168.0.90 */&lt;/code&gt;&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;} w5100_config_t;&lt;/code&gt;&lt;/p&gt;&lt;p class="number7 alt2 index6 line" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="index7 number8 alt1 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;uint8_t W5100_WriteConfig(w5100_config_t *config) {&lt;/code&gt;&lt;/p&gt;&lt;p class="number9 alt2 line index8" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;return&lt;/code&gt; &lt;code class="cpp plain"&gt;W5100_MemWriteBlock(W5100_GAR0, (&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;*)config, &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;sizeof&lt;/code&gt;&lt;code class="cpp plain"&gt;(w5100_config_t));&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 line index9 number10" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="alt2 index10 number11 line" style="margin:0;padding:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p class="alt1 number12 line index11" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;uint8_t W5100_ReadConfig(w5100_config_t *config) {&lt;/code&gt;&lt;/p&gt;&lt;p class="number13 alt2 line index12" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;return&lt;/code&gt; &lt;code class="cpp plain"&gt;W5100_MemReadBlock(W5100_GAR0, (&lt;/code&gt;&lt;code class="keyword cpp bold"&gt;void&lt;/code&gt;&lt;code class="cpp plain"&gt;*)config, &lt;/code&gt;&lt;code class="keyword cpp bold"&gt;sizeof&lt;/code&gt;&lt;code class="cpp plain"&gt;(w5100_config_t));&lt;/code&gt;&lt;/p&gt;&lt;p class="index13 number14 alt1 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;I will cover this more later.&lt;/p&gt;&lt;h1 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Application Initialization&lt;/h1&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;With this, we are ready to configure the W5100.&lt;/p&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Mode Register&lt;/h2&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;The W5100 has the MR (Mode Register) register with the following bits:&lt;/p&gt;&lt;div class="syntaxhighlighter cpp" style="font-family:inherit;font-style:inherit;font-weight:inherit;"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;1 &lt;p style="margin:0;"&gt;2 &lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;3&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;4&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;5&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;&amp;nbsp;&amp;nbsp; 6&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="cpp preprocessor"&gt;&amp;nbsp; #define W5100_MR&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00 /* MR (Mode Register */&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="cpp preprocessor"&gt;&amp;nbsp; #define W5100_MR_BIT_IND&amp;nbsp;&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;0) /* indirect bus interface mode */&lt;/code&gt;&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;&lt;code class="cpp preprocessor"&gt;#define W5100_MR_BIT_AI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;1) /* address auto-increment in indirect bus interface, 1 to enable */&lt;/code&gt;&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;&lt;code class="cpp preprocessor"&gt;#define W5100_MR_BIT_PPPoE&amp;nbsp; (1&amp;lt;&amp;lt;3) /* PPPoE mode, 1 to enable */&lt;/code&gt;&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&lt;code class="cpp preprocessor"&gt;#define W5100_MR_BIT_PB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;4) /* ping block bit, 1 to block pings */&lt;/code&gt;&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;&lt;code class="cpp preprocessor"&gt;#define W5100_MR_BIT_RST&amp;nbsp;&amp;nbsp;&amp;nbsp; (1&amp;lt;&amp;lt;7) /* reset bit, 1 to reset internal registers */&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;Of interest is the &lt;span style="font-family:inherit;font-style:inherit;"&gt;&lt;strong&gt;RST&lt;/strong&gt;&lt;/span&gt; (Reset) bit. Setting it to one will reset the device:&lt;/p&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;1 &lt;p class="number2 alt1 index1 line" style="margin:0;"&gt;2&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;3&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;4&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&amp;nbsp;&amp;nbsp; 5&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;&amp;nbsp; CLS1_SendStr((unsigned &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;char&lt;/code&gt;&lt;code class="cpp plain"&gt;*)&lt;/code&gt;&lt;code class="string cpp"&gt;&amp;quot;Reset W5100.\r\n&amp;quot;&lt;/code&gt;&lt;code class="cpp plain"&gt;, CLS1_GetStdio()-&amp;gt;stdOut);&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="cpp comments"&gt;&amp;nbsp; /* reset device */&lt;/code&gt;&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;if&lt;/code&gt; &lt;code class="cpp plain"&gt;(W5100_MemWriteByte(W5100_MR, W5100_MR_BIT_RST)!=ERR_OK) {&lt;/code&gt;&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;CLS1_SendStr((unsigned &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;char&lt;/code&gt;&lt;code class="cpp plain"&gt;*)&lt;/code&gt;&lt;code class="string cpp"&gt;&amp;quot;Failed to reset device!\r\n&amp;quot;&lt;/code&gt;&lt;code class="cpp plain"&gt;, CLS1_GetStdio()-&amp;gt;stdErr);&lt;/code&gt;&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Network Address&lt;/h2&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;Next, I need to configure the network address information. For this I need to configure the gateway, the network mask, IP address and the MAC (Hardware Address). The MAC address I can find on the sticker of my Ethernet Shield:&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a href="http://mcuoneclipse.files.wordpress.com/2014/01/ethernet-shield-mac-address.png" rel="nofollow ugc noopener" style="font-family:inherit;font-style:inherit;font-weight:inherit;color:#1982d1;" target="_blank"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img loading="lazy" alt="Ethernet Shield MAC Address" class="jiveImage wp-image-10398" height="379" src="http://mcuoneclipse.files.wordpress.com/2014/01/ethernet-shield-mac-address.png?w=334&amp;amp;h=379" style="border-color:#eeeeee;padding:6px;" width="334" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="wp-caption-text" style="margin:0;font-family:Georgia, serif;font-size:12px;font-style:inherit;font-weight:inherit;margin-bottom:0.6em;padding-top:10px;padding-bottom:5px;padding-left:40px;color:#666666;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ethernet Shield MAC Address&lt;/p&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;With this, I set up my network configuration like this:&lt;/p&gt;&lt;div class="syntaxhighlighter cpp" style="font-family:inherit;font-style:inherit;font-weight:inherit;"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;1&lt;p class="number2 alt1 index1 line" style="margin:0;"&gt;2&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;3&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;4&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;5&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;&amp;nbsp;&amp;nbsp; 6&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;&amp;nbsp; static&lt;/code&gt; &lt;code class="keyword cpp bold"&gt;const&lt;/code&gt; &lt;code class="cpp plain"&gt;w5100_config_t W5100_config = {&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;{192, 168, 1, 1}, &lt;/code&gt;&lt;code class="cpp comments"&gt;/* gateway */&lt;/code&gt;&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;{255, 255, 255, 0}, &lt;/code&gt;&lt;code class="cpp comments"&gt;/* netmask */&lt;/code&gt;&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;{0x90, 0xa2, 0xda,0x0D, 0x42, 0xdd}, &lt;/code&gt;&lt;code class="cpp comments"&gt;/* hw/mac address */&lt;/code&gt;&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;{192, 168, 0, 80} &lt;/code&gt;&lt;code class="cpp comments"&gt;/* ip address */&lt;/code&gt;&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;};&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;And configure it:&lt;/p&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;1&lt;p class="number2 alt1 index1 line" style="margin:0;"&gt;2&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;3&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;4&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&amp;nbsp;&amp;nbsp; 5&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;&amp;nbsp; CLS1_SendStr((unsigned &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;char&lt;/code&gt;&lt;code class="cpp plain"&gt;*)&lt;/code&gt;&lt;code class="string cpp"&gt;&amp;quot;Configure network.\r\n&amp;quot;&lt;/code&gt;&lt;code class="cpp plain"&gt;, CLS1_GetStdio()-&amp;gt;stdOut);&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="cpp comments"&gt;&amp;nbsp; /* configure network: IP address, gateway, netmask, MAC */&lt;/code&gt;&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;if&lt;/code&gt; &lt;code class="cpp plain"&gt;(W5100_WriteConfig((w5100_config_t*)&amp;amp;W5100_config)!=ERR_OK) {&lt;/code&gt;&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;CLS1_SendStr((unsigned &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;char&lt;/code&gt;&lt;code class="cpp plain"&gt;*)&lt;/code&gt;&lt;code class="string cpp"&gt;&amp;quot;Failed to set Net Configuration!\r\n&amp;quot;&lt;/code&gt;&lt;code class="cpp plain"&gt;, CLS1_GetStdio()-&amp;gt;stdErr);&lt;/code&gt;&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;RX/TX Memory Buffer&lt;/h2&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;The W5100 can deal with up to 4 network sockets, with a total of 2×8 KByte for RX (&lt;span style="font-family:inherit;font-style:inherit;"&gt;&lt;strong&gt;RMSR&lt;/strong&gt;&lt;/span&gt; register) and TX (&lt;span style="font-family:inherit;font-style:inherit;"&gt;&lt;strong&gt;TMSR&lt;/strong&gt;&lt;/span&gt; register) buffers. Default is to use 2 KByte for each socket:&lt;/p&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter" style="border:0px solid black;"&gt;&lt;div class="number1 alt2 line index0"&gt;1 &lt;p class="number2 alt1 index1 line" style="margin:0;"&gt;2&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;3&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;4&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;5&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;6&lt;/p&gt;&lt;p class="number7 alt2 index6 line" style="margin:0;"&gt;7&lt;/p&gt;&lt;p class="index7 number8 alt1 line" style="margin:0;"&gt;8&lt;/p&gt;&lt;p class="number9 alt2 line index8" style="margin:0;"&gt;9&lt;/p&gt;&lt;p class="alt1 line index9 number10" style="margin:0;"&gt;10&lt;/p&gt;&lt;p class="alt2 index10 number11 line" style="margin:0;"&gt;11&lt;/p&gt;&lt;p class="alt1 number12 line index11" style="margin:0;"&gt;12&lt;/p&gt;&lt;p class="number13 alt2 line index12" style="margin:0;"&gt;13&lt;/p&gt;&lt;p class="index13 number14 alt1 line" style="margin:0;"&gt;14&lt;/p&gt;&lt;p class="index14 number15 alt2 line" style="margin:0;"&gt;15&lt;/p&gt;&lt;p class="number16 index15 alt1 line" style="margin:0;"&gt;16&lt;/p&gt;&lt;p class="number17 index16 alt2 line" style="margin:0;"&gt;17&lt;/p&gt;&lt;p class="index17 alt1 line number18" style="margin:0;"&gt;18&lt;/p&gt;&lt;p class="alt2 index18 line number19" style="margin:0;"&gt;19&lt;/p&gt;&lt;p class="number20 alt1 index19 line" style="margin:0;"&gt;&amp;nbsp;&amp;nbsp; 20&lt;/p&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code" style="border:0px solid black;"&gt;&lt;p class="container" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;&amp;nbsp; CLS1_SendStr((unsigned &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;char&lt;/code&gt;&lt;code class="cpp plain"&gt;*)&lt;/code&gt;&lt;code class="string cpp"&gt;&amp;quot;Configure RX/TX memory.\r\n&amp;quot;&lt;/code&gt;&lt;code class="cpp plain"&gt;, CLS1_GetStdio()-&amp;gt;stdOut);&lt;/code&gt;&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;code class="cpp comments"&gt;&amp;nbsp; /* we have 8 KByte we can use for the RX and TX sockets: */&lt;/code&gt;&lt;/p&gt;&lt;p class="number3 index2 alt2 line" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;if&lt;/code&gt; &lt;code class="cpp plain"&gt;(W5100_MemWriteByte(W5100_RMSR,&lt;/code&gt;&lt;/p&gt;&lt;p class="index3 number4 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_xMSR_SOCKET_1_MEM_SIZE_2KB&lt;/code&gt;&lt;/p&gt;&lt;p class="index4 alt2 number5 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;|W5100_xMSR_SOCKET_2_MEM_SIZE_2KB&lt;/code&gt;&lt;/p&gt;&lt;p class="index5 alt1 line number6" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;|W5100_xMSR_SOCKET_3_MEM_SIZE_2KB&lt;/code&gt;&lt;/p&gt;&lt;p class="number7 alt2 index6 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;|W5100_xMSR_SOCKET_4_MEM_SIZE_2KB&lt;/code&gt;&lt;/p&gt;&lt;p class="index7 number8 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;)!=ERR_OK)&lt;/code&gt;&lt;/p&gt;&lt;p class="number9 alt2 line index8" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;{&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 line index9 number10" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;CLS1_SendStr((unsigned &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;char&lt;/code&gt;&lt;code class="cpp plain"&gt;*)&lt;/code&gt;&lt;code class="string cpp"&gt;&amp;quot;Failed to set RX socket memory size!\r\n&amp;quot;&lt;/code&gt;&lt;code class="cpp plain"&gt;, CLS1_GetStdio()-&amp;gt;stdErr);&lt;/code&gt;&lt;/p&gt;&lt;p class="alt2 index10 number11 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;p class="alt1 number12 line index11" style="margin:0;"&gt;&lt;code class="keyword cpp bold"&gt;if&lt;/code&gt; &lt;code class="cpp plain"&gt;(W5100_MemWriteByte(W5100_TMSR,&lt;/code&gt;&lt;/p&gt;&lt;p class="number13 alt2 line index12" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;W5100_xMSR_SOCKET_1_MEM_SIZE_2KB&lt;/code&gt;&lt;/p&gt;&lt;p class="index13 number14 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;|W5100_xMSR_SOCKET_2_MEM_SIZE_2KB&lt;/code&gt;&lt;/p&gt;&lt;p class="index14 number15 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;|W5100_xMSR_SOCKET_3_MEM_SIZE_2KB&lt;/code&gt;&lt;/p&gt;&lt;p class="number16 index15 alt1 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;|W5100_xMSR_SOCKET_4_MEM_SIZE_2KB&lt;/code&gt;&lt;/p&gt;&lt;p class="number17 index16 alt2 line" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;)!=ERR_OK)&lt;/code&gt;&lt;/p&gt;&lt;p class="index17 alt1 line number18" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;{&lt;/code&gt;&lt;/p&gt;&lt;p class="alt2 index18 line number19" style="margin:0;"&gt;&lt;code class="spaces cpp"&gt;&amp;nbsp; &lt;/code&gt;&lt;code class="cpp plain"&gt;CLS1_SendStr((unsigned &lt;/code&gt;&lt;code class="color1 cpp bold"&gt;char&lt;/code&gt;&lt;code class="cpp plain"&gt;*)&lt;/code&gt;&lt;code class="string cpp"&gt;&amp;quot;Failed to set TX socket memory size!\r\n&amp;quot;&lt;/code&gt;&lt;code class="cpp plain"&gt;, CLS1_GetStdio()-&amp;gt;stdErr);&lt;/code&gt;&lt;/p&gt;&lt;p class="number20 alt1 index19 line" style="margin:0;"&gt;&lt;code class="cpp plain"&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;blockquote class="jive-quote" style="font-family:Georgia, &amp;#39;Bitstream Charter&amp;#39;, serif;font-size:15px;font-style:italic;margin:0 3em;color:#373737;"&gt;&lt;p style="margin:0;font-family:inherit;font-style:inherit;font-weight:inherit;margin-bottom:1.625em;"&gt;&lt;a href="http://s0.wp.com/wp-includes/images/smilies/icon_idea.gif?m=1129645325g"&gt;&lt;img loading="lazy" alt=":idea:" class="jiveImage wp-smiley" src="http://s0.wp.com/wp-includes/images/smilies/icon_idea.gif?m=1129645325g" style="border-style:none;" /&gt;&lt;/a&gt; There are other things to configure like number of retry, but I keep them on the default values for now.&lt;/p&gt;&lt;/blockquote&gt;&lt;h1 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Status Output&lt;/h1&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;I have added a command line shell interface to the W5100 driver, so I can inspect my network configuration:&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a href="http://mcuoneclipse.files.wordpress.com/2014/01/status-network-configuration.png" rel="nofollow ugc noopener" style="font-family:inherit;font-style:inherit;font-weight:inherit;color:#1982d1;" target="_blank"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img loading="lazy" alt="Status Network Configuration" class="jiveImage size-full wp-image-10397" src="http://mcuoneclipse.files.wordpress.com/2014/01/status-network-configuration.png?w=584" style="border-color:#eeeeee;padding:6px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="wp-caption-text" style="margin:0;font-family:Georgia, serif;font-size:12px;font-style:inherit;font-weight:inherit;margin-bottom:0.6em;padding-top:10px;padding-bottom:5px;padding-left:40px;color:#666666;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Status Network Configuration&lt;/p&gt;&lt;h1 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Ping&lt;/h1&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;Finally, time to see if the W5100 responds on ping commands. For this I ‘ping’ the IP address I have assigned:&lt;/p&gt;&lt;p style="margin:0;"&gt;&lt;a href="http://mcuoneclipse.files.wordpress.com/2014/01/ping-my-board.png" rel="nofollow ugc noopener" style="font-family:inherit;font-style:inherit;font-weight:inherit;color:#1982d1;" target="_blank"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img loading="lazy" alt="Ping my Board" class="jiveImage wp-image-10396 size-full" height="201" src="http://mcuoneclipse.files.wordpress.com/2014/01/ping-my-board.png?w=584&amp;amp;h=201" style="border-color:#eeeeee;padding:6px;" width="584" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="wp-caption-text" style="margin:0;font-family:Georgia, serif;font-size:12px;font-style:inherit;font-weight:inherit;margin-bottom:0.6em;padding-top:10px;padding-bottom:5px;padding-left:40px;color:#666666;text-align:justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ping my Board&lt;/p&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;Congratulations!&lt;/p&gt;&lt;blockquote class="jive-quote" style="font-family:Georgia, &amp;#39;Bitstream Charter&amp;#39;, serif;font-size:15px;font-style:italic;margin:0 3em;color:#373737;"&gt;&lt;p style="margin:0;font-family:inherit;font-style:inherit;font-weight:inherit;margin-bottom:1.625em;"&gt;&lt;a href="http://s0.wp.com/wp-includes/images/smilies/icon_idea.gif?m=1129645325g"&gt;&lt;img loading="lazy" alt=":idea:" class="jiveImage wp-smiley" src="http://s0.wp.com/wp-includes/images/smilies/icon_idea.gif?m=1129645325g" style="border-style:none;" /&gt;&lt;/a&gt; If pinging does not work: check the network address and network setup. If the W5100_MR_BIT_PB bit is set in the W5100_MR register, then the W5100 does *not* respond to pings!&lt;/p&gt;&lt;/blockquote&gt;&lt;h1 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;&lt;/h1&gt;&lt;h1 style="font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:0.8125em;color:#000000;"&gt;Summary&lt;/h1&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;I have now the FRDM-KL25Z hooked up to the network with the Arduino Ethernet shield. It does not much for now, it only responds to pings, but this is a good starter &lt;span&gt;&lt;a href="https://community.element14.com/resized-image/__size/16x16/__key/communityserver-wikis-components-files/00-00-00-01-49/3404.contentimage_5F00_1.png"&gt;&lt;img loading="lazy" alt="image" src="https://community-storage.element14.com/communityserver-components-secureimagefileviewer/communityserver/wikis/components/files/00/00/00/01/49/3404.contentimage_1.png-16x16.png?sv=2016-05-31&amp;amp;sr=b&amp;amp;sig=RfQRo8cDRe5PyIdPiUp1ZXkXyImQrAQejdRm26R6STc%3D&amp;amp;se=2026-08-24T23%3A59%3A59Z&amp;amp;sp=r&amp;amp;_=zGEM7pHL10Vt71gae75OdA==" style="max-height: 16px;max-width: 16px;" /&gt;&lt;/a&gt;&lt;/span&gt;. The software project is available on &lt;a class="jive-link-external-small" href="https://github.com/ErichStyger/mcuoneclipse/tree/master/Examples/FRDM-KL25Z/FRDM-KL25Z_Eth" rel="nofollow ugc noopener" style="font-family:inherit;font-style:inherit;font-weight:inherit;color:#1982d1;" target="_blank"&gt;GitHub&lt;/a&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#1982d1;font-style:inherit;font-family:inherit;margin-top:0.4em;font-weight:inherit;"&gt;&lt;a href="https://github.com/ErichStyger/mcuoneclipse/tree/master/Examples/FRDM-KL25Z/FRDM-KL25Z_Eth" rel="nofollow ugc noopener" target="_blank"&gt;&lt;img loading="lazy" alt="github" class="wp-image-10448 jiveImage alignnone size-full" src="http://mcuoneclipse.files.wordpress.com/2014/01/github.png?w=584" style="border-color:#dddddd;margin-top:0.4em;padding:6px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote class="jive-quote" style="font-family:Georgia, &amp;#39;Bitstream Charter&amp;#39;, serif;font-size:15px;font-style:italic;margin:0 3em;color:#373737;"&gt;&lt;p style="margin:0;font-family:inherit;font-style:inherit;font-weight:inherit;margin-bottom:1.625em;"&gt;&lt;a href="http://s0.wp.com/wp-includes/images/smilies/icon_idea.gif?m=1129645325g"&gt;&lt;img loading="lazy" alt=":idea:" class="jiveImage wp-smiley" src="http://s0.wp.com/wp-includes/images/smilies/icon_idea.gif?m=1129645325g" style="border-style:none;" /&gt;&lt;/a&gt; I recommend to have a look this very good &lt;a class="jive-link-external-small" href="http://www.ermicro.com/blog/?p=1773" rel="nofollow ugc noopener" style="font-family:inherit;font-style:inherit;font-weight:inherit;color:#1982d1;" target="_blank"&gt;blog post by rwb&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="margin:0;font-family:&amp;#39;Helvetica Neue&amp;#39;, Helvetica, Arial, sans-serif;font-size:15px;margin-bottom:1.625em;color:#373737;"&gt;Happy Pinging&lt;span&gt;&lt;a href="https://community.element14.com/resized-image/__size/16x16/__key/communityserver-wikis-components-files/00-00-00-01-49/3404.contentimage_5F00_1.png"&gt;&lt;img loading="lazy" alt="image" src="https://community-storage.element14.com/communityserver-components-secureimagefileviewer/communityserver/wikis/components/files/00/00/00/01/49/3404.contentimage_1.png-16x16.png?sv=2016-05-31&amp;amp;sr=b&amp;amp;sig=RfQRo8cDRe5PyIdPiUp1ZXkXyImQrAQejdRm26R6STc%3D&amp;amp;se=2026-08-24T23%3A59%3A59Z&amp;amp;sp=r&amp;amp;_=zGEM7pHL10Vt71gae75OdA==" style="max-height: 16px;max-width: 16px;" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item></channel></rss>