MAXREFDES143#: DeepCover Embedded Security in IoT Authenticated Sensing & Notification

Dependencies:   MaximInterface mbed

The MAXREFDES143# is an Internet of Things (IoT) embedded security reference design, built to protect an industrial sensing node by means of authentication and notification to a web server. The hardware includes a peripheral module representing a protected sensor node monitoring operating temperature and remaining life of a filter (simulated through ambient light sensing) and an mbed shield representing a controller node responsible for monitoring one or more sensor nodes. The design is hierarchical with each controller node communicating data from connected sensor nodes to a web server that maintains a centralized log and dispatches notifications as necessary. The mbed shield contains a Wi-Fi module, a DS2465 coprocessor with 1-Wire® master function, an LCD, LEDs, and pushbuttons. The protected sensor node contains a DS28E15 authenticator, a DS7505 temperature sensor, and a MAX44009 light sensor. The mbed shield communicates to a web server by the onboard Wi-Fi module and to the protected sensor node with I2C and 1-Wire. The MAXREFDES143# is equipped with a standard shield connector for immediate testing using an mbed board such as the MAX32600MBED#. The simplicity of this design enables rapid integration into any star-topology IoT network requiring the heightened security with low overhead provided by the SHA-256 symmetric-key algorithm.

More information about the MAXREFDES143# is available on the Maxim Integrated website.

Files at this revision

API Documentation at this revision

Comitter:
IanBenzMaxim
Date:
Thu Jul 21 11:06:13 2016 -0500
Parent:
16:6bce01c1dd90
Child:
18:6fbf7e7b6ab6
Commit message:
Fixed issue with LCD controller initialization on some boards due to power instability. Updated following downstream restructuring in OneWire library.

Changed in this revision

Display.cpp Show annotated file Show diff for this revision Revisions of this file
OneWire.lib Show annotated file Show diff for this revision Revisions of this file
SensorNode.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Display.cpp	Wed Jun 15 15:16:15 2016 -0500
+++ b/Display.cpp	Thu Jul 21 11:06:13 2016 -0500
@@ -34,6 +34,7 @@
 #include <sstream>
 #include "Display.hpp"
 #include "I2C.h"
+#include "wait_api.h"
 
 //LCD Commands
 //If the RS bit is set to logic 1, these display bytes are stored in the display RAM at the address specified by the data pointer. The data pointer is
@@ -172,7 +173,6 @@
   m_I2C_intf.start();
   m_I2C_intf.write(m_LCD_I2C_addr);
   m_I2C_intf.write(ControlByte);    //No more control bytes will be sent
-  //************************************************************************************
   m_I2C_intf.write(0x38);               //Function Set IS[2:1] = 0,0 (&h38 = Single height font, 0x3C = double height font)
   m_I2C_intf.write(0x39);               //Function Set IS[2:1] = (0,1)
   //When IS[2:1]=(0,0): normal instruction be selected(refer instruction table 0)
@@ -182,10 +182,14 @@
   m_I2C_intf.write(0x70);               //CONTRAST (was 0x78)
   m_I2C_intf.write(0x5E);               //POWER/ICON CONTROL/CONTRAST (upper two bits)
   m_I2C_intf.write(0x6D);               //FOLLOWER CONTROL
-  m_I2C_intf.write(Display_ON);      //Display on, cursor on, cursor position on
-  m_I2C_intf.write(ClearDisplay);    //Clear Display
-  m_I2C_intf.write(0x06);            //ENTRY MODE
-  //************************************************************************************
+  m_I2C_intf.stop();
+  wait_ms(200);                         //Wait for power stable
+  m_I2C_intf.start();
+  m_I2C_intf.write(m_LCD_I2C_addr);
+  m_I2C_intf.write(ControlByte);        //No more control bytes will be sent
+  m_I2C_intf.write(Display_ON);         //Display on, cursor on, cursor position on
+  m_I2C_intf.write(ClearDisplay);       //Clear Display
+  m_I2C_intf.write(0x06);               //ENTRY MODE
   m_I2C_intf.stop();
 }
 
--- a/OneWire.lib	Wed Jun 15 15:16:15 2016 -0500
+++ b/OneWire.lib	Thu Jul 21 11:06:13 2016 -0500
@@ -1,1 +1,1 @@
-https://developer.mbed.org/teams/Maxim-Integrated/code/OneWire/#cac71903b1cd
+https://developer.mbed.org/teams/Maxim-Integrated/code/OneWire/#6dcbb5166da1
--- a/SensorNode.cpp	Wed Jun 15 15:16:15 2016 -0500
+++ b/SensorNode.cpp	Thu Jul 21 11:06:13 2016 -0500
@@ -34,6 +34,7 @@
 #include "SensorNode.hpp"
 #include "common.hpp"
 #include "Masters/DS2465/DS2465.h"
+#include "RomId/RomCommands.h"
 #include "I2C.h"
 
 #ifdef TARGET_MAX32600
@@ -45,6 +46,7 @@
 #endif
 
 using namespace OneWire;
+using namespace OneWire::RomCommands;
 
 bool SensorNode::rngInitialized = false;
 
@@ -205,7 +207,7 @@
   ds2465.OWSetSpeed(DS2465::OverdriveSpeed);
   
   RomId romId;
-  if (ds2465.OWReadRom(romId) != OneWireMaster::Success)
+  if (OWReadRom(ds2465, romId) != OneWireMaster::Success)
     return UnableToCommunicate;
   ds28e15_22_25.setRomId(romId);
   
--- a/main.cpp	Wed Jun 15 15:16:15 2016 -0500
+++ b/main.cpp	Thu Jul 21 11:06:13 2016 -0500
@@ -39,7 +39,7 @@
 #include "SensorNode.hpp"
 #include "Masters/DS2465/DS2465.h"
 #include "Display.hpp"
-#include "Slaves/RomId.h"
+#include "RomId/RomId.h"
 #include "ESP8266.hpp"
 #include "mbed.h"