Host software for the MAX30001 ECG, PACE, biopotential, bioimpedance, R-to-R peak sensor. Hosted on the MAX32630FTHR.

Dependencies:   SDFileSystem USBDevice max32630fthr

Fork of MAX30001 SYS EvKit by Emre Eken

MAX30001-MAX32630FTHR ECG Evaluation System

The MAX30001 EVKIT SYS-MBED Evaluation System (EV System) is used to evaluates the MAX30001 sensor, which is an ECG (electrocardiogram), biopotential and bioimpedance analog front end solution for wearable applications. The full evaluation system consists of the MAX32630FTHR board, MAX30001 EVKIT sensor board and the evaluation software. The evaluation kit features ECG, PACE, R-to-R (R-peak timing) detection; bioimpedance (BioZ) AFE; and raw data logging.

The MAX30001 EVKIT evaluation system is assembled, tested and contains the necessary circuitry and connections to evaluate the MAX30001 ECG sensor.

When evaluated as an evaluation system, the MAX32630FTHR board provides the necessary logic rails, master clock, SPI, USB-to-Serial interfaces that are needed to evaluate the MAX30001 sensor board. MAX32630FTHR can be used as an independent development platform.

Communication between the PC and the MAX32630FTHR board is facilitated by a Windows 7, Windows 8 and Windows 10 compatible software that provides a simple and intuitive graphical user interface (GUI).

For more information, visit the wiki pages by clicking the wiki tab above and MAX30001EVSYS product page.

C++ source code, library for the MAX30001 ECG drivers are in the links at the bottom of this page. The sample code includes the ability to log data to the SD card of the MAX32630FTHR.

MAX30001 EVKIT Pinout Connections

/media/uploads/EmreE/max30001_sensor_board_connector_pinout.png

Where to Buy

MAX30001EVSYS-Buy

Committer:
Emre.Eken@IST-LT-35101.maxim-ic.internal
Date:
Thu Apr 05 10:53:26 2018 +0300
Revision:
0:8e4630a71eb1
mbed os 5.8.1 compatible

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 1 /*******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 3 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 4 * Permission is hereby granted, free of charge, to any person obtaining a
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 5 * copy of this software and associated documentation files (the "Software"),
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 6 * to deal in the Software without restriction, including without limitation
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 8 * and/or sell copies of the Software, and to permit persons to whom the
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 9 * Software is furnished to do so, subject to the following conditions:
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 10 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 11 * The above copyright notice and this permission notice shall be included
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 12 * in all copies or substantial portions of the Software.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 13 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 20 * OTHER DEALINGS IN THE SOFTWARE.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 21 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 22 * Except as contained in this notice, the name of Maxim Integrated
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 24 * Products, Inc. Branding Policy.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 25 *
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 26 * The mere transfer of this software does not imply any licenses
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 27 * of trade secrets, proprietary technology, copyrights, patents,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 28 * trademarks, maskwork rights, or any other form of intellectual
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 30 * ownership rights.
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 31 *******************************************************************************
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 32 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 33 #ifndef S25FS512_H_
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 34 #define S25FS512_H_
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 35
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 36 #include "mbed.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 37 #include "QuadSpiInterface.h"
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 38
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 39 class S25FS512 {
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 40 public:
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 41 S25FS512(QuadSpiInterface *_quadSpiInterface);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 42 ~S25FS512(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 43
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 44 QuadSpiInterface *quadSpiInterface;
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 45
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 46 /** Initialize the driver
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 47 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 48 int init(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 49
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 50 /** Detect the presence of the flash device
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 51 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 52 uint8_t detect(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 53
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 54 /** Read the identification of the flash
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 55 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 56 int8_t readIdentification(uint8_t *dataArray, uint8_t length);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 57
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 58 /** Bulk erase the flash device
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 59 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 60 int8_t bulkErase_Helper(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 61
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 62 /** Erase Parameter Sectors
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 63 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 64 int8_t parameterSectorErase_Helper(uint32_t address);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 65
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 66 /** Write a Page
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 67 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 68 int8_t writePage_Helper(uint32_t pageNumber, uint8_t *buffer,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 69 uint32_t offset);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 70
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 71 /** Read a Page
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 72 * @param
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 73 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 74 int8_t readPages_Helper(uint32_t startPageNumber, uint32_t endPageNumber,
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 75 uint8_t *buffer, uint32_t offset);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 76
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 77 /** Erase a Sector
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 78 @param address Address of sector to erase
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 79 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 80
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 81 int8_t sectorErase_Helper(uint32_t address);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 82 /** Scans through byte pointer for a page worth of data to see if the page is all FFs
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 83 @param ptr Byte pointer to buffer to scan
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 84 @return Returns a 1 if the page is empty, 0 if it is not all FFs
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 85 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 86 uint32_t isPageEmpty(uint8_t *ptr);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 87
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 88 /** Issue a software reset to the flash device
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 89 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 90
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 91 uint8_t reset(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 92 /** Enable a hardware reset
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 93 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 94
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 95 uint8_t enableHWReset(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 96 /** Read the id byte of this device
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 97 */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 98
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 99 void readID(uint8_t *id);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 100
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 101 private:
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 102 int8_t reg_write_read_multiple_quad_last(uint8_t *dataIn, uint8_t numberIn, uint8_t *dataOut, uint8_t numberOut, uint8_t last);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 103 int8_t reg_write_read_multiple_quad(uint8_t *dataIn, uint8_t numberIn, uint8_t *dataOut, uint8_t numberOut);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 104 int8_t reg_write_read_multiple_4Wire(uint8_t *bufferOut, uint8_t numberOut, uint8_t *bufferIn, uint8_t numberIn);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 105 uint8_t spiWriteRead (uint8_t writeNumber,uint8_t *writeData, uint8_t readNumber, uint8_t *readData);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 106 uint8_t spiWriteRead4Wire(uint8_t writeNumber,uint8_t *writeData, uint8_t readNumber, uint8_t *readData);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 107
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 108 int8_t writeAnyRegister(uint32_t address, uint8_t data);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 109 int8_t writeAnyRegister4Wire(uint32_t address, uint8_t data);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 110 int8_t writeRegisters(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 111 uint8_t wren(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 112 int setQuadMode(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 113 int wren4Wire(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 114 // int8_t setQuadMode();
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 115 int8_t readAnyRegister(uint32_t address, uint8_t *data, uint32_t length);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 116 int8_t bulkErase(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 117 int8_t pageProgram(uint32_t address, uint8_t *buffer);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 118 int8_t quadIoRead_Pages(uint32_t address, uint8_t *buffer, uint32_t numberOfPages);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 119 int8_t checkBusy(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 120 void waitTillNotBusy(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 121 int8_t sectorErase(uint32_t address);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 122 int8_t parameterSectorErase(uint32_t address);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 123 void wait_1mS(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 124 void wait_100uS(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 125 void wait_10mS(void);
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 126 };
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 127 #endif /* S25FS512_H_ */
Emre.Eken@IST-LT-35101.maxim-ic.internal 0:8e4630a71eb1 128