Alex Borisevich
/
OpenBCI
OpenBCI 32bit board variation with STM32L476 mircocontroller and mbed support
Diff: Definitions.h
- Revision:
- 1:4683702d7ad8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Definitions.h Sun Jan 22 04:10:11 2017 +0000 @@ -0,0 +1,383 @@ +// +// Definitions_32.h +// +// +// Created by Conor Russomanno, Luke Travis, and Joel Murphy. Summer 2013. +// Modified by Joel Murphy, Summer 2014 +// Joel Added Daisy Functionality Fall 2014 +// + +#ifndef _____OpenBCI_32bit_Library_Definitions_h +#define _____OpenBCI_32bit_Library_Definitions_h + +// The default baud rate +#define OPENBCI_BAUD_RATE 115200 + +// File transmissions +#define OPENBCI_BOP 'A' // Begining of stream packet +#define OPENBCI_EOP_STND_ACCEL 0xC0 // End of standard stream packet +#define OPENBCI_EOP_STND_RAW_AUX 0xC1 // End of stream packet with raw packet +#define OPENBCI_EOP_USER_DEFINED 0xC2 // End of stream packet, user defined +#define OPENBCI_EOP_ACCEL_TIME_SET 0xC3 // End of time sync up with accel stream packet +#define OPENBCI_EOP_ACCEL_TIME_SYNCED 0xC4 // End of time synced stream packet +#define OPENBCI_EOP_RAW_AUX_TIME_SET 0xC5 // End of time sync up stream packet +#define OPENBCI_EOP_RAW_AUX_TIME_SYNCED 0xC6 // End of time synced stream packet + +//PIN CONNECTIONS +/* +// MBED: pin definitions are in PlatformDefs.h +#define ADS_DRDY 9 // ADS data ready pin +#define ADS_RST 4 // ADS reset pin +#define BOARD_ADS 8 // ADS chip select +#define DAISY_ADS 3 // ADS Daisy chip select +#define BOTH_ADS 5 // Slave Select Both ADS chips +#define SD_SS 2 // SD card chip select +#define LIS3DH_SS 1 // LIS3DH chip select +#define LIS3DH_DRDY 0 // LIS3DH data ready pin +#define OPENBCI_PIN_LED 11 +#define OPENBCI_PIN_PGC 12 +*/ +#define BOTH_ADS 5 // Slave Select Both ADS chips + +//ADS1299 SPI Command Definition Byte Assignments +#define _WAKEUP 0x02 // Wake-up from standby mode +#define _STANDBY 0x04 // Enter Standby mode +#define _RESET 0x06 // Reset the device registers to default +#define _START 0x08 // Start and restart (synchronize) conversions +#define _STOP 0x0A // Stop conversion +#define _RDATAC 0x10 // Enable Read Data Continuous mode (default mode at power-up) +#define _SDATAC 0x11 // Stop Read Data Continuous mode +#define _RDATA 0x12 // Read data by command supports multiple read back + +//ASD1299 Register Addresses +#define ADS_ID 0x3E // product ID for ADS1299 +#define ID_REG 0x00 // this register contains ADS_ID +#define CONFIG1 0x01 +#define CONFIG2 0x02 +#define CONFIG3 0x03 +#define LOFF 0x04 +#define CH1SET 0x05 +#define CH2SET 0x06 +#define CH3SET 0x07 +#define CH4SET 0x08 +#define CH5SET 0x09 +#define CH6SET 0x0A +#define CH7SET 0x0B +#define CH8SET 0x0C +#define BIAS_SENSP 0x0D +#define BIAS_SENSN 0x0E +#define LOFF_SENSP 0x0F +#define LOFF_SENSN 0x10 +#define LOFF_FLIP 0x11 +#define LOFF_STATP 0x12 +#define LOFF_STATN 0x13 +//#define GPIO 0x14 // MBED: interfere with STM32 library +static const int GPIO = 0x14; +#define MISC1 0x15 +#define MISC2 0x16 +#define CONFIG4 0x17 + +#define OUTPUT_NOTHING (0) // quiet +#define OUTPUT_8_CHAN (1) // not using Daisy module +#define OUTPUT_16_CHAN (2) // using Daisy module +#define ON_BOARD (BOARD_ADS) // slave address for on board ADS +#define ON_DAISY (DAISY_ADS) // slave address for daisy ADS +// CHANNEL SETTINGS +#define POWER_DOWN (0) +#define GAIN_SET (1) +#define INPUT_TYPE_SET (2) +#define BIAS_SET (3) +#define SRB2_SET (4) +#define SRB1_SET (5) +#define YES (0x01) +#define NO (0x00) + +//gainCode choices +#define ADS_GAIN01 (0b00000000) // 0x00 +#define ADS_GAIN02 (0b00010000) // 0x10 +#define ADS_GAIN04 (0b00100000) // 0x20 +#define ADS_GAIN06 (0b00110000) // 0x30 +#define ADS_GAIN08 (0b01000000) // 0x40 +#define ADS_GAIN12 (0b01010000) // 0x50 +#define ADS_GAIN24 (0b01100000) // 0x60 + +//inputType choices +#define ADSINPUT_NORMAL (0b00000000) +#define ADSINPUT_SHORTED (0b00000001) +#define ADSINPUT_BIAS_MEAS (0b00000010) +#define ADSINPUT_MVDD (0b00000011) +#define ADSINPUT_TEMP (0b00000100) +#define ADSINPUT_TESTSIG (0b00000101) +#define ADSINPUT_BIAS_DRP (0b00000110) +#define ADSINPUT_BIAL_DRN (0b00000111) + +//test signal choices...ADS1299 datasheet page 41 +#define ADSTESTSIG_AMP_1X (0b00000000) +#define ADSTESTSIG_AMP_2X (0b00000100) +#define ADSTESTSIG_PULSE_SLOW (0b00000000) +#define ADSTESTSIG_PULSE_FAST (0b00000001) +#define ADSTESTSIG_DCSIG (0b00000011) +#define ADSTESTSIG_NOCHANGE (0b11111111) + +//Lead-off signal choices +#define LOFF_MAG_6NA (0b00000000) +#define LOFF_MAG_24NA (0b00000100) +#define LOFF_MAG_6UA (0b00001000) +#define LOFF_MAG_24UA (0b00001100) +#define LOFF_FREQ_DC (0b00000000) +#define LOFF_FREQ_7p8HZ (0b00000001) +#define LOFF_FREQ_31p2HZ (0b00000010) +#define LOFF_FREQ_FS_4 (0b00000011) +#define PCHAN (0) +#define NCHAN (1) +#define OFF (0) +#define ON (1) + +// used for channel settings +#define ACTIVATE_SHORTED (2) +#define ACTIVATE (1) +#define DEACTIVATE (0) + +#define PCKT_START 0xA0 // prefix for data packet error checking +#define PCKT_END 0xC0 // postfix for data packet error checking + +// daisy module +#define CLK_EN 5 + +//LIS3DH +//#define READ_REG 0x80 // MBED: interfere with STM32 library +static const int READ_REG = 0x80; + +#define READ_MULTI 0x40 + +#define STATUS_REG_AUX 0x07 // axis over-run and data available flags (see 0x27) +#define OUT_ADC1_L 0x08 // +#define OUT_ADC1_H 0x09 // +#define OUT_ADC2_L 0x0A // ADC input values (check DS) +#define OUT_ADC2_H 0x0B // +#define OUT_ADC3_L 0x0C // +#define OUT_ADC3_H 0x0D // +#define INT_COUNTER_REG 0x0E // ?? +#define WHO_AM_I 0x0F // DEVICE ID 0x33 +#define TMP_CFG_REG 0x1F // ADC enable (0x80) Temperature sensor enable (0x40) +#define CTRL_REG1 0x20 // Data Rate Power Mode X enable Y enable Z enable (on >0x10) +#define CTRL_REG2 0x21 // High Pass Filter Stuph +#define CTRL_REG3 0x22 // INT1 select register +#define CTRL_REG4 0x23 // Block update timing endian G-force resolution self test SPI pins +#define CTRL_REG5 0x24 // reboot FIFO enable latch 4D detection +#define CTRL_REG6 0x25 // ?? +#define REFERENCE 0x26 // interrupt reference +#define STATUS_REG2 0x27 // axis overrun and availale flags (see 0x07) +#define OUT_X_L 0x28 // +#define OUT_X_H 0x29 // +#define OUT_Y_L 0x2A // tripple axis values (see 0x0A) +#define OUT_Y_H 0x2B // +#define OUT_Z_L 0x2C // +#define OUT_Z_H 0x2D // +#define FIFO_CTRL_REG 0x2E // FIFO mode trigger output pin select (?) +#define FIFO_SRC_REG 0x2F // ?? +#define INT1_CFG 0x30 // 6 degree control register +#define INT1_SOURCE 0x31 // axis threshold interrupt control +#define INT1_THS 0x32 // INT1 threshold +#define INT1_DURATION 0x33 // INT1 duration +#define CLICK_CFG 0x38 // click on axis +#define CLICK_SRC 0x39 // other click +#define CLICK_THS 0x3A // more click +#define TIME_LIMIT 0x3B // click related +#define TIME_LATENCY 0x3C // and so on +#define TIME_WINDOW 0x3D // contined click + +#define SCALE_2G 0x00 //(b00000000) // +/- 2G sensitivity +#define SCALE_4G 0x10 //(b00010000) // +/- 4G sensitivity +#define SCALE_8G 0x20 //(b00100000) // +/- 8G sensitivity +#define SCALE_16G 0x30 //(b00110000) // +/- 16G sensitivity +#define RATE_1HZ 0x10 //(b00010000) // 1Hz sample rate in normal or low-power mode +#define RATE_10HZ 0x20 //(b00100000) // 10Hz sample rate in normal or low-power mode +#define RATE_25HZ 0x30 //(b00110000) // 25Hz sample rate in normal or low-power mode +#define RATE_50HZ 0x40 //(b01000000) // 50Hz sample rate in normal or low-power mode +#define RATE_100HZ 0x50 //(b01010000) // 100Hz sample rate in normal or low-power mode +#define RATE_200HZ 0x60 //(b01100000) // 200Hz sample rate in normal or low-power mode +#define RATE_400HZ 0x70 //(b01110000) // 400Hz sample rate in normal or low-power mode +#define RATE_1600HZ_LP 0x80 //(b10000000) // 1600Hz sample rate in low-power mode +#define RATE_1250HZ_N 0x90 //(b10010000) // 1250Hz sample rate in normal mode +#define RATE_5000HZ_LP 0x90 //(b10010000) // 5000Hz sample rate in low-power mode +#define ACCEL_AXIS_X 0x07 // x axis +#define ACCEL_AXIS_Y 0x08 // y axis +#define ACCEL_AXIS_Z 0x09 // z axis + +// OPENBCI_COMMANDS +/** Turning channels off */ +#define OPENBCI_CHANNEL_OFF_1 '1' +#define OPENBCI_CHANNEL_OFF_2 '2' +#define OPENBCI_CHANNEL_OFF_3 '3' +#define OPENBCI_CHANNEL_OFF_4 '4' +#define OPENBCI_CHANNEL_OFF_5 '5' +#define OPENBCI_CHANNEL_OFF_6 '6' +#define OPENBCI_CHANNEL_OFF_7 '7' +#define OPENBCI_CHANNEL_OFF_8 '8' +#define OPENBCI_CHANNEL_OFF_9 'q' +#define OPENBCI_CHANNEL_OFF_10 'w' +#define OPENBCI_CHANNEL_OFF_11 'e' +#define OPENBCI_CHANNEL_OFF_12 'r' +#define OPENBCI_CHANNEL_OFF_13 't' +#define OPENBCI_CHANNEL_OFF_14 'y' +#define OPENBCI_CHANNEL_OFF_15 'u' +#define OPENBCI_CHANNEL_OFF_16 'i' + +/** Turn channels on */ +#define OPENBCI_CHANNEL_ON_1 '!' +#define OPENBCI_CHANNEL_ON_2 '@' +#define OPENBCI_CHANNEL_ON_3 '#' +#define OPENBCI_CHANNEL_ON_4 '$' +#define OPENBCI_CHANNEL_ON_5 '%' +#define OPENBCI_CHANNEL_ON_6 '^' +#define OPENBCI_CHANNEL_ON_7 '&' +#define OPENBCI_CHANNEL_ON_8 '*' +#define OPENBCI_CHANNEL_ON_9 'Q' +#define OPENBCI_CHANNEL_ON_10 'W' +#define OPENBCI_CHANNEL_ON_11 'E' +#define OPENBCI_CHANNEL_ON_12 'R' +#define OPENBCI_CHANNEL_ON_13 'T' +#define OPENBCI_CHANNEL_ON_14 'Y' +#define OPENBCI_CHANNEL_ON_15 'U' +#define OPENBCI_CHANNEL_ON_16 'I' + +/** Test Signal Control Commands + * 1x - Voltage will be 1 * (VREFP - VREFN) / 2.4 mV + * 2x - Voltage will be 2 * (VREFP - VREFN) / 2.4 mV + */ +#define OPENBCI_TEST_SIGNAL_CONNECT_TO_DC 'p' +#define OPENBCI_TEST_SIGNAL_CONNECT_TO_GROUND '0' +#define OPENBCI_TEST_SIGNAL_CONNECT_TO_PULSE_1X_FAST '=' +#define OPENBCI_TEST_SIGNAL_CONNECT_TO_PULSE_1X_SLOW '-' +#define OPENBCI_TEST_SIGNAL_CONNECT_TO_PULSE_2X_FAST ']' +#define OPENBCI_TEST_SIGNAL_CONNECT_TO_PULSE_2X_SLOW '[' + +/** Channel Setting Commands */ +#define OPENBCI_CHANNEL_CMD_ADC_Normal '0' +#define OPENBCI_CHANNEL_CMD_ADC_Shorted '1' +#define OPENBCI_CHANNEL_CMD_ADC_BiasDRP '6' +#define OPENBCI_CHANNEL_CMD_ADC_BiasDRN '7' +#define OPENBCI_CHANNEL_CMD_ADC_BiasMethod '2' +#define OPENBCI_CHANNEL_CMD_ADC_MVDD '3' +#define OPENBCI_CHANNEL_CMD_ADC_Temp '4' +#define OPENBCI_CHANNEL_CMD_ADC_TestSig '5' +#define OPENBCI_CHANNEL_CMD_BIAS_INCLUDE '1' +#define OPENBCI_CHANNEL_CMD_BIAS_REMOVE '0' +#define OPENBCI_CHANNEL_CMD_CHANNEL_1 '1' +#define OPENBCI_CHANNEL_CMD_CHANNEL_2 '2' +#define OPENBCI_CHANNEL_CMD_CHANNEL_3 '3' +#define OPENBCI_CHANNEL_CMD_CHANNEL_4 '4' +#define OPENBCI_CHANNEL_CMD_CHANNEL_5 '5' +#define OPENBCI_CHANNEL_CMD_CHANNEL_6 '6' +#define OPENBCI_CHANNEL_CMD_CHANNEL_7 '7' +#define OPENBCI_CHANNEL_CMD_CHANNEL_8 '8' +#define OPENBCI_CHANNEL_CMD_CHANNEL_9 'Q' +#define OPENBCI_CHANNEL_CMD_CHANNEL_10 'W' +#define OPENBCI_CHANNEL_CMD_CHANNEL_11 'E' +#define OPENBCI_CHANNEL_CMD_CHANNEL_12 'R' +#define OPENBCI_CHANNEL_CMD_CHANNEL_13 'T' +#define OPENBCI_CHANNEL_CMD_CHANNEL_14 'Y' +#define OPENBCI_CHANNEL_CMD_CHANNEL_15 'U' +#define OPENBCI_CHANNEL_CMD_CHANNEL_16 'I' +#define OPENBCI_CHANNEL_CMD_GAIN_1 '0' +#define OPENBCI_CHANNEL_CMD_GAIN_2 '1' +#define OPENBCI_CHANNEL_CMD_GAIN_4 '2' +#define OPENBCI_CHANNEL_CMD_GAIN_6 '3' +#define OPENBCI_CHANNEL_CMD_GAIN_8 '4' +#define OPENBCI_CHANNEL_CMD_GAIN_12 '5' +#define OPENBCI_CHANNEL_CMD_GAIN_24 '6' +#define OPENBCI_CHANNEL_CMD_LATCH 'X' +#define OPENBCI_CHANNEL_CMD_POWER_OFF '1' +#define OPENBCI_CHANNEL_CMD_POWER_ON '0' +#define OPENBCI_CHANNEL_CMD_SET 'x' +#define OPENBCI_CHANNEL_CMD_SRB1_CONNECT '1' +#define OPENBCI_CHANNEL_CMD_SRB1_DISCONNECT '0' +#define OPENBCI_CHANNEL_CMD_SRB2_CONNECT '1' +#define OPENBCI_CHANNEL_CMD_SRB2_DISCONNECT '0' + +/** Default Channel Settings */ +#define OPENBCI_CHANNEL_DEFAULT_ALL_SET 'd' +#define OPENBCI_CHANNEL_DEFAULT_ALL_REPORT 'D' + +/** LeadOff Impedance Commands */ +#define OPENBCI_CHANNEL_IMPEDANCE_LATCH 'Z' +#define OPENBCI_CHANNEL_IMPEDANCE_SET 'z' +#define OPENBCI_CHANNEL_IMPEDANCE_TEST_SIGNAL_APPLIED '1' +#define OPENBCI_CHANNEL_IMPEDANCE_TEST_SIGNAL_APPLIED_NOT '0' + +/** SD card Commands */ +#define OPENBCI_SD_LOG_FOR_HOUR_1 'G' +#define OPENBCI_SD_LOG_FOR_HOUR_2 'H' +#define OPENBCI_SD_LOG_FOR_HOUR_4 'J' +#define OPENBCI_SD_LOG_FOR_HOUR_12 'K' +#define OPENBCI_SD_LOG_FOR_HOUR_24 'L' +#define OPENBCI_SD_LOG_FOR_MIN_5 'A' +#define OPENBCI_SD_LOG_FOR_MIN_15 'S' +#define OPENBCI_SD_LOG_FOR_MIN_30 'F' +#define OPENBCI_SD_LOG_FOR_SEC_14 'a' +#define OPENBCI_SD_LOG_STOP 'j' + +/** Stream Data Commands */ +#define OPENBCI_STREAM_START 'b' +#define OPENBCI_STREAM_STOP 's' + +/** Miscellaneous */ +#define OPENBCI_MISC_QUERY_REGISTER_SETTINGS '?' +#define OPENBCI_MISC_SOFT_RESET 'v' + +/** 16 Channel Commands */ +#define OPENBCI_CHANNEL_MAX_NUMBER_8 'c' +#define OPENBCI_CHANNEL_MAX_NUMBER_16 'C' + +/** Set Packet Type */ +#define OPENBCI_BOARD_MODE_SET '/' +#define OPENBCI_BOARD_MODE_DEFAULT '0' +#define OPENBCI_BOARD_MODE_DEBUG '1' +#define OPENBCI_BOARD_MODE_WIFI '2' +#define OPENBCI_BOARD_MODE_INPUT_ANALOG '3' +#define OPENBCI_BOARD_MODE_INPUT_DIGITAL '4' + +/** Sync Clocks */ +#define OPENBCI_TIME_SET '<' +#define OPENBCI_TIME_STOP '>' + +/** Possible number of channels */ +#define OPENBCI_NUMBER_OF_CHANNELS_DAISY 16 +#define OPENBCI_NUMBER_OF_CHANNELS_DEFAULT 8 + +/** Helpful numbers */ +#define OPENBCI_NUMBER_OF_BOARD_SETTINGS 1 +#define OPENBCI_NUMBER_OF_CHANNEL_SETTINGS 6 +#define OPENBCI_NUMBER_OF_LEAD_OFF_SETTINGS 2 + +/** Possible Sample Rates*/ +#define OPENBCI_SAMPLE_RATE_125 125 +#define OPENBCI_SAMPLE_RATE_250 250 + +/** Packet Size */ +#define OPENBCI_PACKET_SIZE 33 + +/** Impedance Calculation Variables */ +#define OPENBCI_LEAD_OFF_DRIVE_AMPS 0.000000006 +#define OPENBCI_LEAD_OFF_FREQUENCY_HZ 31 + +/** Raw data packet types/codes */ +#define OPENBCI_PACKET_TYPE_V3 0 // 0000 +#define OPENBCI_PACKET_TYPE_TIME_SYNCED 1 // 0001 +#define OPENBCI_PACKET_TYPE_TIME_SET 2 // 0010 +#define OPENBCI_PACKET_TYPE_USER_DEFINED 3 // 0011 +#define OPENBCI_PACKET_TYPE_RAW_AUX 4 // 0100 + +#define OPENBCI_TIME_OUT_MS_1 1 +#define OPENBCI_TIME_OUT_MS_3 3 + +#define OPENBCI_NUMBER_OF_BYTES_SETTINGS_CHANNEL 9 +#define OPENBCI_NUMBER_OF_BYTES_SETTINGS_LEAD_OFF 5 + +#define OPENBCI_NUMBER_OF_BYTES_AUX 6 + +#define OPENBCI_FIRMWARE_VERSION_V1 1 +#define OPENBCI_FIRMWARE_VERSION_V2 1 + +#endif