58 #include "issdk_hal.h" 59 #include "gpio_driver.h" 66 #include "fsl_flash.h" 74 #define FXLS8471Q_SPI_CMD_LEN (2) 75 #define FXLS8471Q_SS_ACTIVE_VALUE SPI_SS_ACTIVE_LOW 80 #define FXLS8962_SPI_CMD_LEN (2) 81 #define FXLS8962_SS_ACTIVE_VALUE SPI_SS_ACTIVE_LOW 86 #define DIFF_P_SPI_CMD_LEN (1) 87 #define DIFF_P_SS_ACTIVE_VALUE SPI_SS_ACTIVE_LOW 92 #define MMA8491Q_WHO_AM_I (MMA8491Q_STATUS) 93 #define MMA8491Q_WHO_AM_I_VALUE \ 94 (MMA8491Q_STATUS_RESERVED_ZERO | MMA8491Q_STATUS_XDR_DRDY | MMA8491Q_STATUS_YDR_DRDY | MMA8491Q_STATUS_ZDR_DRDY | \ 95 MMA8491Q_STATUS_ZYXDR_DRDY) 97 #define ADS_QUERY_NUM (sizeof(ADS_SensorQueryList) / sizeof(sensorAccess_t)) 98 #define ADS_NUM_BOARDS (sizeof(gADS_QueryMap) / ADS_QUERY_NUM) 99 #define SPI_MAX_MSG_SIZE (64) 409 "FRDM-STBC-AGM01",
"FRDM-STBC-SA9500",
"FRDMSTBC-A8471",
"FRDMSTBC-A8491",
410 "FRDMSTBC-P3115",
"FRDMSTBI-DP300x",
"FRDMSTBI-DP300x",
"FRDMSTBC-B3115",
411 "FRDM-FXS-MULT2-B",
"FRDM-STBC-AGMP03",
"FRDM-STBC-AGMP03",
"FRDM-STBC-AGM04",
412 "OnBoard",
"OnBoard",
441 *(pWBuff) = offset & 0x7F;
442 *(pWBuff + 1) = offset & 0x80;
458 *(pWBuff) = offset | 0x80;
459 *(pWBuff + 1) = offset & 0x80;
462 memcpy(pWBuff + FXLS8471Q_SPI_CMD_LEN, pWritebuffer, size);
499 if ((ARM_DRIVER_OK != status) || (whoAmi != reg))
518 *(pWBuff) = offset | 0x80;
519 *(pWBuff + 1) = 0x00;
535 *(pWBuff) = offset & 0x7F;
536 *(pWBuff + 1) = 0x00;
539 memcpy(pWBuff + FXLS8962_SPI_CMD_LEN, pWritebuffer, size);
576 if ((ARM_DRIVER_OK != status) || (whoAmi != reg))
595 *(pWBuff) = offset & 0x7F;
611 *(pWBuff) = offset | 0x80;
614 memcpy(pWBuff + DIFF_P_SPI_CMD_LEN, pWritebuffer, size);
651 if ((ARM_DRIVER_OK != status) || (whoAmi != reg))
680 partNumber = (partNumber >> 8) | (partNumber << 8);
707 if (ARM_DRIVER_OK != status || (cmdRespHdr[1] & 0x80) != 0x80 || cmdRespHdr[2] !=
ReadVersionInfo_MMA9553[3] ||
724 if (ARM_DRIVER_OK != status)
726 return ARM_DRIVER_ERROR;
730 status =
I2CintDrv->PowerControl(ARM_POWER_FULL);
731 if (ARM_DRIVER_OK != status)
733 return ARM_DRIVER_ERROR;
737 status =
I2CintDrv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST);
738 if (ARM_DRIVER_OK != status)
740 return ARM_DRIVER_ERROR;
745 if (ARM_DRIVER_OK != status)
747 return ARM_DRIVER_ERROR;
751 status =
I2CextDrv->PowerControl(ARM_POWER_FULL);
752 if (ARM_DRIVER_OK != status)
754 return ARM_DRIVER_ERROR;
758 status =
I2CextDrv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST);
759 if (ARM_DRIVER_OK != status)
761 return ARM_DRIVER_ERROR;
773 if (ARM_DRIVER_OK != status)
775 return ARM_DRIVER_ERROR;
779 status =
SPIdrv->PowerControl(ARM_POWER_FULL);
780 if (ARM_DRIVER_OK != status)
782 return ARM_DRIVER_ERROR;
787 if (ARM_DRIVER_OK != status)
789 return ARM_DRIVER_ERROR;
801 if (ARM_DRIVER_OK != status)
803 return ARM_DRIVER_ERROR;
808 if (ARM_DRIVER_OK != status)
810 return ARM_DRIVER_ERROR;
821 status =
SPIdrv->Uninitialize();
822 if (ARM_DRIVER_OK != status)
824 return ARM_DRIVER_ERROR;
848 if (
FXLS8962 == ADS_SensorQueryList[i].slaveAddr)
852 ADS_FXLS8962Query(ADS_SensorQueryList[i].whoAmIAddr, ADS_SensorQueryList[i].whoAmIValue);
855 if (
FXLS8471 == ADS_SensorQueryList[i].slaveAddr)
859 ADS_FXLS8471Query(ADS_SensorQueryList[i].whoAmIAddr, ADS_SensorQueryList[i].whoAmIValue);
862 if (
DIFF_P == ADS_SensorQueryList[i].slaveAddr)
866 ADS_DIFF_PQuery(ADS_SensorQueryList[i].whoAmIAddr, ADS_SensorQueryList[i].whoAmIValue);
883 if (
FXLC95000 == ADS_SensorQueryList[i].slaveAddr)
888 if (
MMA9553 == ADS_SensorQueryList[i].slaveAddr)
902 ADS_SensorQueryList[i].whoAmIAddr, 1, ®);
903 if ((ARM_DRIVER_OK != status) ||
904 ((ADS_SensorQueryList[i].whoAmIValue & ADS_SensorQueryList[i].whoAmIMask) !=
905 (reg & ADS_SensorQueryList[i].whoAmIMask)))
924 ADS_SensorQueryList[i].whoAmIAddr, 1, ®);
925 if ((ARM_DRIVER_OK != status) || (ADS_SensorQueryList[i].whoAmIValue != reg))
966 status = ARM_DRIVER_OK;
970 status = ARM_DRIVER_ERROR;
989 if (pBoardString == NULL)
991 return ARM_DRIVER_ERROR_PARAMETER;
995 #ifdef SIM_SDID_FAMILYID 996 MCUInfo.
mcuFamilyId = ((SIM->SDID) & SIM_SDID_FAMILYID_MASK) >> SIM_SDID_FAMILYID_SHIFT;
999 #ifdef SIM_SDID_SUBFAMID 1000 MCUInfo.
mcuSubfamilyId = ((SIM->SDID) & SIM_SDID_SUBFAMID_MASK) >> SIM_SDID_SUBFAMID_SHIFT;
1003 #ifdef SIM_SDID_SERIESID 1004 MCUInfo.
mcuSeriesId = ((SIM->SDID) & SIM_SDID_SERIESID_MASK) >> SIM_SDID_SERIESID_SHIFT;
1007 #ifdef SIM_SDID_FAMID 1008 MCUInfo.
mcuFamId = ((SIM->SDID) & SIM_SDID_FAMID_MASK) >> SIM_SDID_FAMID_SHIFT;
1011 MCUInfo.
mcuPinId = ((SIM->SDID) & SIM_SDID_PINID_MASK) >> SIM_SDID_PINID_SHIFT;
1022 MCUInfo.
board = ADS_ValidSDIDValues[i].
board;
1027 status = ARM_DRIVER_OK;
1029 switch (MCUInfo.
board)
1032 strncpy(pBoardString,
"FRDM-KW41Z", bufferLength);
1035 strncpy(pBoardString,
"FRDM-KE15Z", bufferLength);
1038 strncpy(pBoardString,
"FRDM-KL25Z", bufferLength);
1041 strncpy(pBoardString,
"FRDM-KL27Z", bufferLength);
1044 strncpy(pBoardString,
"FRDM-K22F", bufferLength);
1047 strncpy(pBoardString,
"FRDM-K64F", bufferLength);
1050 strncpy(pBoardString,
"RD-KL25-AGMP01", bufferLength);
1053 status = ARM_DRIVER_ERROR;
1073 status = strncmp((
char *)pResultString, (
char *)pRecord->
ADSString, pRecord->
length);
1089 uint32_t pflashSectorSize = 0;
1092 flash_config_t s_flashDriver;
1096 flashRecord.
length = strlen((
char const *)pResultString);
1100 memset(&s_flashDriver, 0,
sizeof(flash_config_t));
1103 result = FLASH_Init(&s_flashDriver);
1104 if (kStatus_FLASH_Success == result)
1110 result = FLASH_Erase(&s_flashDriver,
ADS_NVM_ADDR, pflashSectorSize, kFLASH_ApiEraseKey);
1111 if (kStatus_FLASH_Success == result)
1114 result = FLASH_Program(&s_flashDriver,
ADS_NVM_ADDR, (uint32_t *)&flashRecord,
1115 sizeof(flashRecord));
1116 if (kStatus_FLASH_Success == result)
1133 if (ARM_DRIVER_ERROR == status)
1135 strncpy(boardString,
"NotDetected", bufferLength);
1140 if (ARM_DRIVER_ERROR == status)
1142 strncpy(shieldString,
"NotDetected", bufferLength);
1148 position = strlen(appName);
1150 finalString[position++] =
':';
1153 position += strlen(shieldString);
1162 strcpy(finalString, shieldString);
1163 snprintf(shieldString, bufferLength,
"Changed:%s", finalString);
ADS_Status_t ADS_FlashUpdate(char *pResultString)
The register_io_i2c.h file declares low-level interface functions for reading and writing sensor regi...
#define ADS_NVM_ADDR
start of the next to last 4K (sector size) of the 1M flash
void ADS_FXLS8962_SPI_WritePreprocess(void *pCmdOut, uint32_t offset, uint32_t size, void *pWritebuffer)
ARM_DRIVER_I2C * I2CextDrv
void ADS_DIFF_P_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size)
const ADS_Status_t gADS_QueryMap[][ADS_QUERY_NUM]
These are the expected query signatures for the shield boards.
fpSpiWritePreprocessFn_t pWritePreprocessFN
#define FXLC95000_I2C_ADDR
#define FXLC95000_PART_NUMBER_SIZE
The FXLC95000 Size of Part Number.
char ADSString[ADS_FLASH_STRING_LENGTH]
#define DIFF_P_SS_ACTIVE_VALUE
#define ADS_NO_SHIELD_DETECTED
char shieldString[ADS_MAX_STRING_LENGTH]
void(* pin_init)(pinID_t aPinId, gpio_direction_t dir, void *apPinConfig, gpio_isr_handler_t aIsrHandler, void *apUserData)
ADS_Status_t ADS_DIFF_PQuery(uint8_t whoAmiAddr, uint8_t whoAmi)
#define I2C_S1_SIGNAL_EVENT
#define FXLS8962_SPI_CMD_LEN
These variables are specific to SPI access to the FXLS8962 for ADS.
spiSlaveSpecificParams_t spiParams_8471
uint8_t spiWrite_CmdDataBuffer[SPI_MAX_MSG_SIZE]
void ADS_FXLS8962_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size)
uint8_t spiRead_CmdBuffer[SPI_MAX_MSG_SIZE]
void ADS_InitSPI_DIFF_P()
The mma865x.h contains the MMA865xFC Digital Accelerometer Sensor register definitions, access macros, and device access functions.
#define FXLS8471Q_SS_ACTIVE_VALUE
#define I2C_BB_DEVICE_INDEX
void BOARD_DELAY_ms(uint32_t delay_ms)
Function to insert delays.
int ADS_DetectShield(char *pShieldString, size_t bufferLength)
#define FXPQ3115_I2C_ADDR
ADS_SupportedBoards_t board
#define ADS_MAX_STRING_LENGTH
#define FXLS8471Q_WHO_AM_I_WHOAMI_VALUE
#define DIFF_P_SPI_CMD_LEN
These variables are specific to SPI access to the DIFF_P for ADS.
The fxos8700.h file contains the register definitions for FXOS8700 sensor driver. ...
const uint8_t ReadVersionInfo_MMA9553[4]
The Read Version Info Command for FXLC95000.
char boardString[ADS_MAX_STRING_LENGTH]
#define ADS_FLASH_STRING_LENGTH
The fxas21002.h contains the fxas21002 sensor register definitions and its bit mask.
#define FXPQ3115_WHOAMI_VALUE
This defines a record type to store ADS results string in Flash memory.
#define I2C_S1_DEVICE_INDEX
void ADS_DIFF_P_SPI_WritePreprocess(void *pCmdOut, uint32_t offset, uint32_t size, void *pWritebuffer)
const sensorAccess_t ADS_SensorQueryList[]
This constant data structure contains the expected valid comm/sensor/who_am_i combinations.
This defines a record type to store the communication channel info and WHO_AM_I address/value for var...
const mcuSDID_t ADS_ValidSDIDValues[]
This constant data structure contains the expected valid MCU SDID combinations.
#define MPL3115_WHOAMI_VALUE
The mma9553.h contains the MMA9553L Digital Pedometer command definitions and access macros...
ADS_Status_t ADS_MMA9553Query()
#define MMA8491Q_I2C_ADDRESS
#define FXOS8700_WHO_AM_I_PROD_VALUE
The mag3110.h contains the MAG3110 Magnetic sensor register definitions, access macros, and device access functions.
#define MMA8652_WHOAMI_VALUE
#define FXLS8962_I2C_ADDR
#define FXLC95000_PART_NUMBER
The FXLC95000 2-byte packed BCD encoded Part Number (BCD for Last 4 characters).
ADS_Status_t ADS_FXLC95000Query()
void ADS_InitSPI_FXLS8471()
The fxpq3115.h contains the FXPQ3115 Pressure sensor register definitions, access macros...
int32_t Register_I2C_BlockWrite(ARM_DRIVER_I2C *pCommDrv, registerDeviceInfo_t *devInfo, uint16_t slaveAddress, uint8_t offset, const uint8_t *pBuffer, uint8_t bytesToWrite)
The interface function to write a sensor register.
#define SPI_S_DEVICE_INDEX
This defines a record type to store the expected field values in the MCU SDID register word aligned...
void(* set_pin)(pinID_t aPinId)
ARM_DRIVER_SPI * SPIdrv
These values hold the ARM CMSIS Driver interface pointers.
#define MMA8491Q_WHO_AM_I_VALUE
registerDeviceInfo_t deviceInfo
I2C device context.
void(* clr_pin)(pinID_t aPinId)
int ADS_DetectFRDM(char *pBoardString, size_t bufferLength)
The mpl3115.h contains the MPL3115 Pressure sensor register definitions, access macros, and device access functions.
char ADS_ShieldList[][ADS_MAX_STRING_LENGTH]
The fxlc95000.h contains the FXLC95000L Digital Accelerometer command definitions and access macros...
The SPI Slave Transfer Command Params SDK2.0 Driver.
ADS_Status_t ADS_FXLS8471Query(uint8_t whoAmiAddr, uint8_t whoAmi)
#define SPI_SS_ACTIVE_LOW
spiSlaveSpecificParams_t spiParams_diff_p
The mma8491q.h contains the MMA8491Q Multifunction Digital Accelerometer register definitions...
void ADS_FXLS8471Q_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size)
The fxls8471q.h file contains the register definitions for fxls8471q sensor driver.
void ADS_InitSPI_FXLS8962()
#define FXAS21002_WHO_AM_I_WHOAMI_PROD_VALUE
#define DIFF_P_NPS3000VV_WHOAMI_VALUE
spiSlaveSpecificParams_t spiParams_8962
#define FXAS21002_I2C_ADDR
GENERIC_DRIVER_GPIO * pGPIODriver
The diff_p.h contains the DIFF_P Pressure sensor register definitions, access macros, and its bit mask.
GENERIC_DRIVER_GPIO Driver_GPIO_KSDK
This file contains the FXLS8962 Accelerometer register definitions, access macros, and device access functions.
#define MMA9553_HDR_SIZE
Size of fixed header bytes in sensor commands.
#define MMA8491Q_STATUS_RESERVED_MASK
#define FXLS8962_WHOAMI_VALUE
The mma845x.h contains the MMA845x sensor register definitions and its bit mask.
ADS_FlashStatus_t
This enumeration defines the ADS Flash storage status.
enum ADS_Status ADS_Status_t
This defines the return status.
void ADS_FXLS8471Q_SPI_WritePreprocess(void *pCmdOut, uint32_t offset, uint32_t size, void *pWritebuffer)
Access structure of the GPIO Driver.
int32_t Register_SPI_Read(ARM_DRIVER_SPI *pCommDrv, registerDeviceInfo_t *devInfo, void *pReadParams, uint8_t offset, uint8_t length, uint8_t *pOutBuffer)
The interface function to read a sensor register.
#define I2C_BB_SIGNAL_EVENT
int32_t Register_I2C_Read(ARM_DRIVER_I2C *pCommDrv, registerDeviceInfo_t *devInfo, uint16_t slaveAddress, uint8_t offset, uint8_t length, uint8_t *pOutBuffer)
The interface function to read a sensor register.
ADS_Status_t gADS_QueryResults[ADS_QUERY_NUM]
This global contains the results from the sensor query.
uint8_t spiRead_DataBuffer[SPI_MAX_MSG_SIZE]
void BOARD_RunADS(const char *appName, char *boardString, char *shieldString, size_t bufferLength)
The function to register Application Name and initialte ADS.
#define SPI_S_BAUDRATE
Transfer baudrate - 500k.
ARM_DRIVER_I2C * I2CintDrv
#define SPI_S_SIGNAL_EVENT
#define MMA8491Q_T_ON_TYPICAL
#define MAG3110_WHOAMI_VALUE
#define FXLC95000_PART_NUMBER_OFFSET
Offset of 2-Byte SA95000 Part Number in Device Info Response.
This structure defines the device specific info required by register I/O.
#define FXLS8471Q_SPI_CMD_LEN
These variables are specific to SPI access to the FXLS8471 for ADS.
#define FXLS8962_SS_ACTIVE_VALUE
#define FLASH_SECTOR_SIZE_PROPERTY
This structure defines the spi slave command format.
#define FXOS8700_I2C_ADDR
#define MMA8491Q_WHO_AM_I
These variables are specific to MMA8491Q which does not have a Who Am I register. ...
The register_io_spi.h file declares low-level interface functions for reading and writing sensor regi...
The auto_detection_shield.h file describes the definitions for Sensor I2C and SPI parameters required...
#define MMA8451_WHO_AM_I_WHOAMI_VALUE
ADS_Status_t ADS_FXLS8962Query(uint8_t whoAmiAddr, uint8_t whoAmi)
fpSpiReadPreprocessFn_t pReadPreprocessFN
ADS_FlashStatus_t ADS_FlashCompare(char *pResultString)