diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html
index 63e59af745915ea9a9f5b779e2a5eb99a9bb48c2..b44b4a43bc3e320d5311a94c6b05395ad822aaab 100644
--- a/Documentation/NuttX.html
+++ b/Documentation/NuttX.html
@@ -897,8 +897,9 @@
         Two configurations have been verified: (1) The board boots and passes the OS test
         with console output visible on UART0, and the NuttShell <a href="NuttShell.html">(NSH)</a>
         is fully functional with interrupt driven serial console.  An SPI driver is available
-        but untested (because the Olimex card slot appears to accept only MMC cards; I have
-        only SD cards).  Additional features are needed: USB driver, MMC integration, to name two.
+        but only partially tested.  Additional features are needed: USB driver, MMC/SD integration,
+        to name two.  And ENC29J60 Ethernet driver for add-on hardware is under development and
+        should be available in the NuttX 5.5 release.
       </p>
       <p>
         <b>Development Environments:</b>
diff --git a/configs/olimex-strp711/src/up_enc28j60.c b/configs/olimex-strp711/src/up_enc28j60.c
index 047d271cf80f79f92a4af4cfde3e4b334dbed359..63a21067f17ea232f181b538cfa4551e1f6f80d8 100755
--- a/configs/olimex-strp711/src/up_enc28j60.c
+++ b/configs/olimex-strp711/src/up_enc28j60.c
@@ -154,8 +154,6 @@ void up_netinitialize(void)
 
   /* Get the SPI port */
 
-  nllvdbg("Initializing SPI port %d\n", ENC28J60_SPI_PORTNO);
-
   spi = up_spiinitialize(ENC28J60_SPI_PORTNO);
   if (!spi)
     {
@@ -172,13 +170,8 @@ void up_netinitialize(void)
       return;
     }
 
-  nllvdbg("Successfully initialized SPI port %d\n", ENC28J60_SPI_PORTNO);
-
   /* Bind the SPI port to the ENC28J60 driver */
 
-  nllvdbg("Binding SPI port %d to ENC28J60 device %d\n",
-          ENC28J60_SPI_PORTNO, ENC28J60_DEVNO);
-
   ret = enc_initialize(spi, ENC28J60_DEVNO, ENC28J60_IRQ);
   if (ret < 0)
     {
@@ -187,7 +180,7 @@ void up_netinitialize(void)
       return;
     }
 
-  nllvdbg("Successfuly bound SPI port %d ENC28J60 device %d\n",
+  nllvdbg("Bound SPI port %d to ENC28J60 device %d\n",
         ENC28J60_SPI_PORTNO, ENC28J60_DEVNO);
 }
 #endif /* CONFIG_NET_ENC28J60 */
diff --git a/configs/olimex-strp711/src/up_spi.c b/configs/olimex-strp711/src/up_spi.c
index cfddffeeff48be6d463d6740d61c461015a5e488..3636bc8faf76d92ddf5f1adf0d694c75a5593a8b 100644
--- a/configs/olimex-strp711/src/up_spi.c
+++ b/configs/olimex-strp711/src/up_spi.c
@@ -42,6 +42,7 @@
 #include <sys/types.h>
 #include <stdint.h>
 #include <stdbool.h>
+#include <debug.h>
 
 #include <nuttx/spi.h>
 
@@ -525,7 +526,7 @@ static inline void spi_drain(FAR struct str71x_spidev_s *priv)
     {
       (void)spi_getreg(priv, STR71X_BSPI_RXR_OFFSET);
     }
-  while (spi_getreg(priv, STR71X_BSPI_CSR2_OFFSET & STR71X_BSPICSR2_RFNE) != 0);
+  while ((spi_getreg(priv, STR71X_BSPI_CSR2_OFFSET) & STR71X_BSPICSR2_RFNE) != 0);
 }
 
 /****************************************************************************
@@ -556,7 +557,7 @@ static void spi_select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool sel
   reg16 = spi_getreg(priv, STR71X_GPIO_PD_OFFSET);
   if (selected)
     {
-     /* Enable slave select (low enables) */
+      /* Enable slave select (low enables) */
 
       reg16 &= ~priv->csbit;
       spi_putreg(priv, STR71X_GPIO_PD_OFFSET, reg16);
@@ -565,12 +566,12 @@ static void spi_select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool sel
     {
       /* Disable slave select (low enables) */
 
-       reg16 |= priv->csbit;
-       spi_putreg(priv, STR71X_GPIO_PD_OFFSET, reg16);
+      reg16 |= priv->csbit;
+      spi_putreg(priv, STR71X_GPIO_PD_OFFSET, reg16);
 
-       /* And drain the FIFOs */
+      /* And drain the FIFOs */
 
-       spi_drain(priv);
+      spi_drain(priv);
     }
 }
 
diff --git a/drivers/net/enc28j60.c b/drivers/net/enc28j60.c
index 6be0e325f504f89c25bb92884dd778ef700bbedc..ad356a0afc7c548ddc73277330ef2e83581033cb 100755
--- a/drivers/net/enc28j60.c
+++ b/drivers/net/enc28j60.c
@@ -871,7 +871,7 @@ static int enc_transmit(FAR struct enc_driver_s *priv)
 #endif
 
   /* Verify that the hardware is ready to send another packet.  The driver
-   * start a transmission process by setting ECON1.TXRTS. When the packet is
+   * starts a transmission process by setting ECON1.TXRTS. When the packet is
    * finished transmitting or is aborted due to an error/cancellation, the
    * ECON1.TXRTS bit will be cleared.
    *
@@ -1620,9 +1620,9 @@ static int enc_ifup(struct uip_driver_s *dev)
   FAR struct enc_driver_s *priv = (FAR struct enc_driver_s *)dev->d_private;
   int ret;
 
-  ndbg("Bringing up: %d.%d.%d.%d\n",
-       dev->d_ipaddr & 0xff, (dev->d_ipaddr >> 8) & 0xff,
-       (dev->d_ipaddr >> 16) & 0xff, dev->d_ipaddr >> 24 );
+  nlldbg("Bringing up: %d.%d.%d.%d\n",
+         dev->d_ipaddr & 0xff, (dev->d_ipaddr >> 8) & 0xff,
+        (dev->d_ipaddr >> 16) & 0xff, dev->d_ipaddr >> 24 );
 
   /* Initialize Ethernet interface, set the MAC address, and make sure that
    * the ENC28J80 is not in power save mode.
@@ -1739,12 +1739,18 @@ static int enc_txavail(struct uip_driver_s *dev)
 
   if (priv->bifup)
     {
+      /* Check if the hardware is ready to send another packet.  The driver
+       * starts a transmission process by setting ECON1.TXRTS. When the packet is
+       * finished transmitting or is aborted due to an error/cancellation, the
+       * ECON1.TXRTS bit will be cleared.
+       */
 
-      /* Check if there is room in the hardware to hold another outgoing packet. */
-
-      /* If so, then poll uIP for new XMIT data */
+      if ((enc_rdgreg(priv, ENC_ECON1) & ECON1_TXRTS) == 0)
+        {
+          /* The interface is up and TX is idle; poll uIP for new XMIT data */
 
-      (void)uip_poll(&priv->dev, enc_uiptxpoll);
+          (void)uip_poll(&priv->dev, enc_uiptxpoll);
+        }
     }
 
   irqrestore(flags);
@@ -1786,6 +1792,8 @@ static int enc_txavail(struct uip_driver_s *dev)
 
 static void enc_pwrsave(FAR struct enc_driver_s *priv)
 {
+  nllvdbg("Set PWRSV\n");
+
   /* 1. Turn off packet reception by clearing ECON1.RXEN. */
 
   enc_bfcgreg(priv, ENC_ECON1, ECON1_RXEN);
@@ -1844,6 +1852,8 @@ static void enc_pwrsave(FAR struct enc_driver_s *priv)
  
 static void enc_pwrfull(FAR struct enc_driver_s *priv)
 {
+  nllvdbg("Clear PWRSV\n");
+
   /* 1. Wake-up by clearing ECON2.PWRSV. */
 
   enc_bfcgreg(priv, ENC_ECON2, ECON2_PWRSV);
@@ -1912,7 +1922,7 @@ static int enc_reset(FAR struct enc_driver_s *priv)
 {
   uint8_t regval;
 
-  ndbg("Entry\n");
+  nlldbg("Reset\n");
 
   /* Configure SPI for the ENC28J60 */
 
@@ -1971,10 +1981,10 @@ static int enc_reset(FAR struct enc_driver_s *priv)
   regval = enc_rdbreg(priv, ENC_EREVID);
   if (regval == 0x00 || regval == 0xff)
     {
-      ndbg("Bad Rev ID: %0x\n", regval);
+      nlldbg("Bad Rev ID: %0x\n", regval);
       return -ENODEV;
     }
-  nvdbg("Rev ID: %02x\n", regval);
+  nllvdbg("Rev ID: %02x\n", regval);
 
   /* Set filter mode: unicast OR broadcast AND crc valid */
 
@@ -2004,11 +2014,11 @@ static int enc_reset(FAR struct enc_driver_s *priv)
   enc_wrbreg(priv, ENC_MACON3,
              MACON3_PADCFG0 | MACON3_TXCRCEN | MACON3_FRMLNEN | MACON3_FULDPX);
 
-  /* set Non-Back-to-Back Inter-Packet Gap */
+  /* Set Non-Back-to-Back Inter-Packet Gap */
 
   enc_wrbreg(priv, ENC_MAIPGL, 0x12);
 
-  /* set ack-to-Back Inter-Packet Gap */
+  /* Set ack-to-Back Inter-Packet Gap */
 
   enc_wrbreg(priv, ENC_MABBIPG, 0x15);
 #endif