MAX32620HSP (MAXREFDES100) RPC Example for Graphical User Interface

Dependencies:   USBDevice

Fork of HSP_Release by Jerry Bradshaw

This is an example program for the MAX32620HSP (MAXREFDES100 Health Sensor Platform). It demonstrates all the features of the platform and works with a companion graphical user interface (GUI) to help evaluate/configure/monitor the board. Go to the MAXREFDES100 product page and click on "design resources" to download the companion software. The GUI connects to the board through an RPC interface on a virtual serial port over the USB interface.

The RPC interface provides access to all the features of the board and is available to interface with other development environments such Matlab. This firmware provides realtime data streaming through the RPC interface over USB, and also provides the ability to log the data to flash for untethered battery operation. The data logging settings are configured through the GUI, and the GUI also provides the interface to download logged data.

Details on the RPC interface can be found here: HSP RPC Interface Documentation

Windows

With this program loaded, the MAX32620HSP will appear on your computer as a serial port. On Mac and Linux, this will happen by default. For Windows, you need to install a driver: HSP serial port windows driver

For more details about this platform and how to use it, see the MAXREFDES100 product page.

Revision:
1:9490836294ea
Parent:
0:e4a10ed6eb92
Child:
3:8e9b9f5818aa
diff -r e4a10ed6eb92 -r 9490836294ea HSP/Devices/S25FS256/S25FS512.h
--- a/HSP/Devices/S25FS256/S25FS512.h	Tue Oct 25 15:22:11 2016 +0000
+++ b/HSP/Devices/S25FS256/S25FS512.h	Fri Apr 21 12:12:30 2017 -0500
@@ -36,75 +36,116 @@
 #include "mbed.h"
 #include "QuadSpiInterface.h"
 
+
+#define IOMUX_IO_ENABLE              1
+
+#define S25FS512_SPI_PORT            1
+#define S25FS512_CS_PIN              0
+#define S25FS512_CS_POLARITY         0
+#define S25FS512_CS_ACTIVITY_DELAY   0
+#define S25FS512_CS_INACTIVITY_DELAY 0
+#define S25FS512_CLK_HI              4
+#define S25FS512_CLK_LOW             4
+#define S25FS512_ALT_CLK             0
+#define S25FS512_CLK_POLARITY        0
+#define S25FS512_CLK_PHASE           0
+#define S25FS512_WRITE               1
+#define S25FS512_READ                0
+
+///< Byte addresses for flash configuration
+#define Address_CR1NV   0x00000002
+#define Address_CR1V    0x00800002
+#define Address_CR2NV   0x00000003
+#define Address_CR2V    0x00800003
+
+#define INT_PORT_B 3
+#define INT_PIN_B 6
+
+
 class S25FS512 {
 public:
+
+  ///< @detail S25FS512 Commands
+  typedef enum{ 
+    Write_Reg              = 0x01,
+    Read_Status_Reg1       = 0x05,
+    Write_Enable           = 0x06,
+    Erase_4k               = 0x20,
+    Bulk_Erase             = 0x60,
+    Read_Any_Reg           = 0x65,
+    Software_Reset_Enable  = 0x66,
+    Write_Any_Reg          = 0x71,
+    Software_Reset         = 0x99,
+    Read_Id                = 0x9F,
+    Erase_64k_256k         = 0xD8,
+    Quad_IO_Read           = 0xEB,
+  } S25FS512_Commands_t;
+
   S25FS512(QuadSpiInterface *_quadSpiInterface);
   ~S25FS512(void);
 
   QuadSpiInterface *quadSpiInterface;
 
-  /** Initialize the driver
+  /** @brief Initialize the driver
   */
-  int init(void);
+  void init(void);
 
-  /** Detect the presence of the flash device
+  /** @brief Detect the presence of the flash device
   */
   uint8_t detect(void);
 
-  /** Read the identification of the flash
+  /** @brief Read the identification of the flash
   */
   int8_t readIdentification(uint8_t *dataArray, uint8_t length);
 
-  /** Bulk erase the flash device
+  /** @brief Bulk erase the flash device
   */
   int8_t bulkErase_Helper(void);
 
-  /** Erase Parameter Sectors
+  /** @brief Erase Parameter Sectors
   */
   int8_t parameterSectorErase_Helper(uint32_t address);
 
-  /** Write a Page
+  /** @brief Write a Page
   */
-  int8_t writePage_Helper(uint32_t pageNumber, uint8_t *buffer,
-                          uint32_t offset);
+  int8_t writePage_Helper(uint32_t pageNumber, uint8_t *buffer, uint32_t offset);
+  
+  /** @brief Read a Page 
+  */
+  int8_t readPages_Helper(uint32_t startPageNumber,uint32_t endPageNumber, uint8_t *buffer, uint32_t offset);
 
-  /** Read a Page
-  * @param
-  */
-  int8_t readPages_Helper(uint32_t startPageNumber, uint32_t endPageNumber,
-                          uint8_t *buffer, uint32_t offset);
-
-  /** Erase a Sector
+  /** @brief Erase a Sector 
   @param address Address of sector to erase
   */
+  int8_t sectorErase_Helper(uint32_t address);
 
-  int8_t sectorErase_Helper(uint32_t address);
-  /** Scans through byte pointer for a page worth of data to see if the page is all FFs
+  /** @brief Scans through byte pointer for a page worth of data to see if the page is all FFs
   @param ptr Byte pointer to buffer to scan
   @return Returns a 1 if the page is empty, 0 if it is not all FFs
   */
-  uint32_t isPageEmpty(uint8_t *ptr);
-  
-  /** Issue a software reset to the flash device
+  bool isPageEmpty(uint8_t *ptr);
+
+  /** @brief Issue a software reset to the flash device 
   */
-
   uint8_t reset(void);
-  /** Enable a hardware reset
+
+  /** @brief Enable a hardware reset
   */
-
   uint8_t enableHWReset(void);
-  /** Read the id byte of this device
+  
+  /** @brief Read the id byte of this device 
   */
-
   void readID(uint8_t *id);
 
+  void test_verifyPage0Empty(uint8_t *ptr, int currentPage, int pagesWrittenTo);
+
 private:
+  void disableInterrupt(uint8_t state);
   int8_t reg_write_read_multiple_quad_last(uint8_t *dataIn, uint8_t numberIn, uint8_t *dataOut, uint8_t numberOut, uint8_t last);
   int8_t reg_write_read_multiple_quad(uint8_t *dataIn, uint8_t numberIn, uint8_t *dataOut, uint8_t numberOut);
   int8_t reg_write_read_multiple_4Wire(uint8_t *bufferOut, uint8_t numberOut, uint8_t *bufferIn, uint8_t numberIn);
   uint8_t spiWriteRead (uint8_t writeNumber,uint8_t *writeData, uint8_t readNumber, uint8_t *readData);
   uint8_t spiWriteRead4Wire(uint8_t writeNumber,uint8_t *writeData, uint8_t readNumber, uint8_t *readData);
-
   int8_t writeAnyRegister(uint32_t address, uint8_t data);
   int8_t writeAnyRegister4Wire(uint32_t address, uint8_t data);
   int8_t writeRegisters(void);
@@ -120,8 +161,7 @@
   void waitTillNotBusy(void);
   int8_t sectorErase(uint32_t address);
   int8_t parameterSectorErase(uint32_t address);
-  void wait_1mS(void);
-  void wait_100uS(void);
-  void wait_10mS(void);
+
+  uint8_t flashBuffer[257 + 10];
 };
 #endif /* S25FS512_H_ */