This is an overview of the SCA3300-D01 and the OSS-ECAL offering for the SCA3300-D01. The SCA3300-D01 is a high-performance 3-axis acceleration sensor for industrial use manufactured by Murata Manufacturing Co., Ltd.
MCU interface : SPI
CAUTION:Please be sure to refer to the latest version of the Datasheet prior to actual design.
SCA3300-D01
Overview
The SCA3300-D01 is a high performance accelerometer sensor component. It is a three-axis accelerometer sensor based on Murata’s proven capacitive 3D-MEMS technology. Signal processing is done in mixed signal ASIC with flexible SPI digital interface. Sensor element and ASIC are packaged into 12 pin pre-molded plastic housing that guarantees reliable operation over product’s lifetime.
The SCA3300-D01 is designed, manufactured and tested for high stability, reliability and quality requirements. The component has extremely stable output over wide range of temperature and vibration. The component has several advanced self-diagnostics features, is suitable for SMD mounting and is compatible with RoHS and ELV directives.
Feature
- 3-axis (XYZ) accelerometer
- User selectable measurement modes:
± 1.5g, ± 3g , ± 6g with 70 Hz LPF
± 1.5g with 10 Hz LPF - −40°C to +125°C operating range
- 3.0V to 3.6V supply voltage
- SPI digital interface
- Extensive self-diagnostics features
- Ultra-low 37 μg/√Hz noise density
- Excellent offset stability
- Size 8.6 x 7.6 x 3.3 mm (l × w × h)
- RoHS compliant robust DFL plastic package
suitable for lead free soldering process and SMD mounting - Proven capacitive 3D-MEMS technology
Application
SCA3300-D01 is targeted at applications demanding high stability with tough environmental requirements.
Typical applications include:
- Leveling
- Angle measurement
- Tilt Compensation
- Inertial Measurement Units (IMUs)
- Motion analysis and control
- Navigation systems
OSS-ECAL specification
API Function
OSS-ECAL API functions are basically assumed to be function calls from a periodic Thread (TASK).
etSTS oSCA3300_CONFIG( void )
oSCA3300_CONFIG function is an API function to set the SPI communication of MCU according to SCA3300-D01. This API function is not available in the AUTOSAR version.
Return value | etSTS | OSS-ECAL status code | |
eSTS_FIN | Completed successfully | ||
eSTS_ERR_HAL_OTHERS_RUN | Other application is running HAL | ||
eSTS_ERR_SPI_OBJECT | SPI object selection error |
etSTS oSCA3300_START_UP( uint16* status )
oSCA3300_START_UP function is an API function that sets SCA3300-D01, reads the values of Register STATUS[Bank0] and STATUS[Bank1], and stores the read values in status[0] and status[1].
The SCA3300-D01 is configured in the following steps.
– Step1 SW Reset
– Step2 1ms wait*
– Step3 Set Measurement mode
– Step4 15ms wait(Mode1, Mode2 and Mode3) or 100ms wait(Mode4)*
– Step5 Clear status summary
– Step6 Read status summary
– Step7 Ensure successful start-up
* The wait measurement is calculated from the Thread period that calls this function, so set THREAD_OSS_ECAL_PERIOD [ms] to the Thread period.
The Measurement mode setting is based on the OP_MODE setting in oSCA3300.h. In this example, it is set to Mode2.
– Mode1 = iMODE1
– Mode2 = iMODE2
– Mode3 = iMODE3
– Mode4 = iMODE4
/* Select operation mode */
#define OP_MODE iMODE2
Return value | etSTS | OSS-ECAL status code | |
eSTS_FIN | Completed successfully | ||
eSTS_EXE | During execution | ||
eSTS_ERR_DIAG | Step1 to Step5 CRC check error or Step3 Return Status RS[1]:RS[0] != 1:1 Step5 Return Status RS[1]:RS[0] != 1:1 Step6 Return Status RS[1]:RS[0] != 1:1 Step7 Return Status RS[1]:RS[0] != 0:1 | ||
eSTS_ERR_SPI_OBJECT | SPI object selection error | ||
eSTS_ERR_HAL_SPI | HAL SPI error | ||
eSTS_ERR_HAL_OTHERS_RUN | Other application is running HAL | ||
Parameter OUT | uint16* status | Register STATUS value | Save the values [23:8] read from Register STATUS[Bank0] and STATUS[Bank1] to status[0] and status[1]. |
etSTS oSCA3300_READ_ACC( etBANK bank, stSCA3300_ACC* acc )
The oSCA3300_READ_ACC function is an API function that reads the Register ACC_X[bank], ACC_Y[bank], and ACC_Z[bank] values of the specified bank, converts the read values [23:8] to acceleration based on the Mode setting, and stores them in acc.acc_x[bank], acc. acc.acc_y[bank], acc.acc_z[bank].
Return value | etSTS | OSS-ECAL status code | |
eSTS_FIN | Completed successfully | ||
eSTS_ERR_MIN | Minimum acceleration error (returns minimum acceleration) | ||
eSTS_ERR_MAX | Maximum acceleration error (returns maximum acceleration) | ||
eSTS_ERR_DIAG | Return Status RS[1]:RS[0] != 0:1(Normal operation) or CRC check error | ||
eSTS_ERR_SPI_OBJECT | SPI object selection error | ||
eSTS_ERR_HAL_SPI | HAL SPI error | ||
eSTS_ERR_HAL_OTHERS_RUN | Other application is running HAL | ||
Parameter IN | etBANK bank | Set value of Register Bank | typedef enum { eBANK0 = 0x01, /* Bank #0 */ eBANK1 = 0x02, /* Bank #1 */ eBANK01 = 0x03 /* Bank #0,1 */ }etBANK; |
Parameter OUT | stSCA3300_ACC* acc | Register ACC_X[bank], ACC_Y[bank], ACC_Z[bank] acceleration | Converts values [23:8] read from Register ACC_X[bank], ACC_Y[bank], ACC_Z[bank] into acceleration based on Mode setting and stores them in acc.acc_x[bank], acc. acc.acc_y[bank], acc.acc_z[bank]. typedef struct { float32 acc_x[iSCA3300_BANK_NUM]; /* ACC_X */ float32 acc_y[iSCA3300_BANK_NUM]; /* ACC_Y */ float32 acc_z[iSCA3300_BANK_NUM]; /* ACC_Z */ }stSCA3300_ACC; |
etSTS oSCA3300_READ_STO( etBANK bank, float32* sto )
The oSCA3300_READ_STO function is an API function that reads the Register STO[bank] value of the specified bank, converts the read value [23:8] to acceleration and stores it in sto[bank].
Return value | etSTS | OSS-ECAL status code | |
eSTS_FIN | Completed successfully | ||
eSTS_ERR_DIAG | Return Status RS[1]:RS[0] != 0:1(Normal operation) or CRC check error | ||
eSTS_ERR_SPI_OBJECT | SPI object selection error | ||
eSTS_ERR_HAL_SPI | HAL SPI error | ||
eSTS_ERR_HAL_OTHERS_RUN | Other application is running HAL | ||
Parameter IN | etBANK bank | Set value of Register Bank | typedef enum { eBANK0 = 0x01, /* Bank #0 */ eBANK1 = 0x02, /* Bank #1 */ eBANK01 = 0x03 /* Bank #0,1 */ }etBANK; |
Parameter OUT | float32* sto | Register STO[bank] acceleration | Converts values [23:8] read from Register STO[bank] into acceleration from Mode setting and stores them in sto[bank]. |
etSTS oSCA3300_READ_TEMP( etBANK bank, float32* temp )
The oSCA3300_READ_TEMP function is an API function that reads the Register TEMPERATURE[bank] value of the specified bank, converts the read value [23:8] to a temperature and stores it in temp[bank].
Return value | etSTS | OSS-ECAL status code | |
eSTS_FIN | Completed successfully | ||
eSTS_ERR_MIN | Minimum temperature error (returns minimum temperature) | ||
eSTS_ERR_MAX | Maximum temperature error (returns maximum temperature) | ||
eSTS_ERR_DIAG | Return Status RS[1]:RS[0] != 0:1(Normal operation) or CRC check error | ||
eSTS_ERR_SPI_OBJECT | SPI object selection error | ||
eSTS_ERR_HAL_SPI | HAL SPI error | ||
eSTS_ERR_HAL_OTHERS_RUN | Other application is running HAL | ||
Parameter IN | etBANK bank | Set value of Register Bank | typedef enum { eBANK0 = 0x01, /* Bank #0 */ eBANK1 = 0x02, /* Bank #1 */ eBANK01 = 0x03 /* Bank #0,1 */ }etBANK; |
Parameter OUT | float32* temp | Register TEMPERATURE[bank] temperature | Converts the value [23:8] read from Register TEMPERATURE[bank] to temperature and stores it in temp[bank]. |
etSTS oSCA3300_READ_STATUS( etBANK bank, uint16* status )
The oSCA3300_READ_STATUS function is an API function that reads the Register STATUS[bank] value of the specified bank and stores the read value [23:8] in status[bank].
Return value | etSTS | OSS-ECAL status code | |
eSTS_FIN | Completed successfully | ||
eSTS_ERR_DIAG | Return Status RS[1]:RS[0] != 0:1(Normal operation) or CRC check error | ||
eSTS_ERR_SPI_OBJECT | SPI object selection error | ||
eSTS_ERR_HAL_SPI | HAL SPI error | ||
eSTS_ERR_HAL_OTHERS_RUN | Other application is running HAL | ||
Parameter IN | etBANK bank | Set value of Register Bank | typedef enum { eBANK0 = 0x01, /* Bank #0 */ eBANK1 = 0x02, /* Bank #1 */ eBANK01 = 0x03 /* Bank #0,1 */ }etBANK; |
Parameter OUT | uint16* status | Register STATUS[bank] value | Stores the value [23:8] read from Register STATUS[bank] in status[bank]. |
etSTS oSCA3300_READ_CMD( uint16* command )
The oSCA3300_READ_CMD function is an API function that reads the Register CMD value and stores the read value [23:8] in command.
Return value | etSTS | OSS-ECAL status code | |
eSTS_FIN | Completed successfully | ||
eSTS_ERR_DIAG | Return Status RS[1]:RS[0] != 0:1(Normal operation) or CRC check error | ||
eSTS_ERR_SPI_OBJECT | SPI object selection error | ||
eSTS_ERR_HAL_SPI | HAL SPI error | ||
eSTS_ERR_HAL_OTHERS_RUN | Other application is running HAL | ||
Parameter OUT | uint16* command | Register CMD value | Stores the value [23:8] read from Register CMD in command. |
etSTS oSCA3300_WRITE_CMD( stSCA3300_CMD command )
The oSCA3300_WRITE_CMD function is an API function that writes the value of command to Register CMD [23:8].
Return value | etSTS | OSS-ECAL status code | |
eSTS_FIN | Completed successfully | ||
eSTS_ERR_DIAG | Return Status RS[1]:RS[0] != 0:1(Normal operation) or CRC check error | ||
eSTS_ERR_SPI_OBJECT | SPI object selection error | ||
eSTS_ERR_HAL_SPI | HAL SPI error | ||
eSTS_ERR_HAL_OTHERS_RUN | Other application is running HAL | ||
Parameter IN | stSCA3300_CMD command | Set value of Register CMD | typedef enum { eSCA3300_CMD_RD_ACC_X = 0x040000F7 /* Read ACC_X */ eSCA3300_CMD_RD_ACC_Y = 0x080000FD /* Read ACC_Y */ eSCA3300_CMD_RD_ACC_Z = 0x0C0000FB /* Read ACC_Z */ eSCA3300_CMD_RD_STO = 0x100000E9 /* Read STO (self-test output) */ eSCA3300_CMD_RD_TEMP = 0x140000EF /* Read Temperature */ eSCA3300_CMD_RD_STATUS = 0x180000E5 /* Read Status Summary */ eSCA3300_CMD_RD_CMD = 0x340000DF /* Read CMD*/ if( OP_MODE == iMODE1 ) eSCA3300_CMD_WR_MODE = 0xB400001F /* Change to mode1 */ elif( OP_MODE == iMODE2 ) eSCA3300_CMD_WR_MODE = 0xB4000102 /* Change to mode2 */ elif( OP_MODE == iMODE3 ) eSCA3300_CMD_WR_MODE = 0xB4000225 /* Change to mode3 */ else eSCA3300_CMD_WR_MODE = 0xB4000338 /* Change to mode4 */ endif eSCA3300_CMD_WR_PWD = 0xB400046B /* Set power down mode */ eSCA3300_CMD_WR_WU = 0xB400001F /* Wake up from power down mode */ eSCA3300_CMD_WR_SWR = 0xB4002098 /* SW Reset */ eSCA3300_CMD_RD_WHOAMI = 0x40000091 /* Read WHOAMI */ eSCA3300_CMD_RD_SERIAl1 = 0x640000A7 /* Read SERIAL1 */ eSCA3300_CMD_RD_SERIAl2 = 0x680000AD /* Read SERIAL2 */ eSCA3300_CMD_RD_BANK = 0x7C0000B3 /* Read current bank*/ eSCA3300_CMD_SW_BANK0 = 0xFC000073 /* Switch to bank #0 */ eSCA3300_CMD_SW_BANK1 = 0xFC00016E /* Switch to bank #1 */ }stSCA3300_CMD; |
etSTS oSCA3300_READ_WHOAMI( uint8* whoami )
The oSCA3300_READ_WHOAMI function is an API function that reads Register WHOAMI value and stores the read value [16:8] in whoami.
Return value | etSTS | OSS-ECAL status code | |
eSTS_FIN | Completed successfully | ||
eSTS_ERR_DIAG | Return Status RS[1]:RS[0] != 0:1(Normal operation) or CRC check error | ||
eSTS_ERR_SPI_OBJECT | SPI object selection error | ||
eSTS_ERR_HAL_SPI | HAL SPI error | ||
eSTS_ERR_HAL_OTHERS_RUN | Other application is running HAL | ||
Parameter OUT | uint8* whoami | Register WHOAMI value | Stores the value [16:8] read from Register WHOAMI in whoami. |
etSTS oSCA3300_READ_SERIAL( uint32* serial )
The oSCA3300_READ_SERIAL function is an API function that reads the values of Register SERIAL1 and SERIAL2 and stores the read value of SERIAL1 [23:8] in serial[15:0] and the read value of SERIAL2 [23:8] in serial[31:16].
Return value | etSTS | OSS-ECAL status code | |
eSTS_FIN | Completed successfully | ||
eSTS_ERR_DIAG | Return Status RS[1]:RS[0] != 0:1(Normal operation) or CRC check error | ||
eSTS_ERR_SPI_OBJECT | SPI object selection error | ||
eSTS_ERR_HAL_SPI | HAL SPI error | ||
eSTS_ERR_HAL_OTHERS_RUN | Other application is running HAL | ||
Parameter OUT | uint32* serial | Register SERIAL1 and SERIAL2 value | Reads the values of Register SERIAL1 and SERIAL2, and stores the read value of SERIAL1[23:8] in serial[15:0] and the read value of SERIAL2[23:8] in serial[31:16]. |
Sample application
OSS-ECAL contains sample applications in the sample folder. Here is an overview of the application. Please use it as a reference material when incorporating OSS-ECAL into your product programs.
State | vgSCA3300_COMMAND | state transition condition | Process Overview | API Function |
---|---|---|---|---|
Start-up | iSCA3300_STARTUP | 1. First time | Initial Settings for SCA3300-D01 | oSCA3300_START_UP |
Measure | iSCA3300_MEASUREMENT | 1. State Start up completed 2. vgSCA3300_COMMAND=iSCA3300_MEASUREMENT | 3-axis acceleration measurement | oSCA3300_READ_ACC |
Self-test | iSCA3300_SELF_TEST | 1. vgSCA3300_COMMAND = iSCA3300_SELF_TEST | Do the next Step iPRC_SELF_TEST times Step1 3-axis acceleration measurement Step2 Self test output Step3 User application* Step4 wait* | oSCA3300_READ_ACC oSCA3300_READ_STO |
Power down | iSCA3300_POWER_DOWN | 1. vgSCA3300_COMMAND = iSCA3300_POWER_DOWN | Power down | oSCA3300_WRITE_CMD |
Error | iSCA3300_ERROR | 1. Return value of API function is an error value 2. Register STATUS[bank0] != 0 3. Register STATUS[bank1] != 0 | Error process* | -* |
* Please address this in your product program.
HAL Support
OSS-ECAL’s HAL support is as follows (expanding sequentially). Please check each electronic component’s OSS-ECAL page for HAL support. Please note that even the same HAL may not work with different versions, MCUs, or development environments.
Manufacturer | SDK/IDE Tool | HAL Name | Ver | Support |
---|---|---|---|---|
Arduino | Arduino IDE | Arduino | 1.8.6 | X |
Arm | Keil MDK v6 | Mbed OS | 6.17.0 | X |
Debian | – | GNU/Linux | 10.3 | X |
Infineon | ModusToolbox | mtb-hal-cat1 | 2.4.3 | X |
NXP | MCUXpresso SDK | SDK_2.x_EVKB-IMXRT1050 | 2.16 | X |
NXP | PlatformSDK_S32K1_2022_02 | AUTOSAR MCAL | 4.4 | X |
Renesas | Synergy Software Package | HAL | 2.6.0 | X |
STMicroelectronics | STM32Cube | STM32CubeF4 | V1.28.1 | X |
Development environment
The MCU and development environment during development are as follows.
HAL Name | Manufacturer | Board | MCU | IDE |
---|---|---|---|---|
ARDUINO | Arduino | 1.Mega 2560 Rev3 2.Arduino Pro Mini 3.3V | ATmega2560 ATmega328P | Arduino IDE 2.3.3 |
MBED | STMicroelectronics | STM32 Nucleo-64 boards | STM32F401RETx | Arm Keil Studio Cloud |
Linux | BeagleBoard | BeagleBone Black | TI AM335x | – |
ModusToolbox | Infineon | CY8CPROTO-063-BLE PSoC 6 BLE Prototyping Kit | CYBLE-416045-02 | ModusToolbox |
iMXRT1051B1052B | NXP | IMXRT1050-EVKB | i.MX RT1050 | MCUXpresso IDE |
MCAL | STMicroelectronics | S32K144EVB-Q100 | S32K144 | S32 Design Studio for S32 Platform |
SSP | Renesas | S7G2 SK | R7FS7G27H3A01CFC | e² studio for Renesas Synergy |
STM32F4 | STMicroelectronics | STM32 Nucleo-64 boards | STM32F401RETx | STM32CubeIDE |
File configuration
Folder | File | Summary |
---|---|---|
SCA3300_HALNAME_010000/sample | sample.c (.cpp) | Sample application program |
sample.h | Sample application header | |
SCA3300_HALNAME_010000 | oSCA3300.c (.cpp) | OSS-ECAL program for SCA3300-D01 |
oSCA3300.h | OSS-ECAL header for SCA3300-D01 | |
oss_ecal.h | OSS-ECAL common header | |
SCA3300_ARDUINO.ino | Sample application programs for Arduino | |
oTypes.h | Typedef header for AUTOSAR | |
user_setting.c (.cpp) | User configured constants and tables | |
user_setting.h | User configuration Header | |
oHAL_i2c_stm32f4.c | HAL Program for STM32Cube FW_F4 | |
oHAL_i2c_stm32f4.h | HAL Header for STM32Cube FW_F4 | |
readme.md | Readme | |
OSS-ECAL Terms of Use.txt | OSS-ECAL Terms of Use |
* For HALNAME, please refer to HAL Support.
OSS-ECAL Download Contact
Please login before contacting us for downloads.
To register as a new user, click here.
Built-in How to
How to incorporate OSS-ECAL into user programs
How to incorporate multiple OSS-ECALs in a user program (same MCU function)
How to incorporate multiple OSS-ECALs in a user program (different MCU function)
How to incorporate multiple identical electronic components into a user program
How to reduce the impact on user programs by replacing electronic components
CAUTION
The sample version of OSS-ECAL is not intended to be used with Threads (Tasks) or interrupts of different priority. Please do not use it as in the example below.
Example: If each sensor is assigned to the same ADC group and the OSS-ECAL API is executed in processes with different priorities, correct values may not be obtained.
ADC Gr0 Ch0 Temperature sensor AD22100A 100ms cycle Thread (low priority) to take in temperature
ADC Gr0 Ch1 Pressure sensor MPX5999D Event interrupts (high priority) to take pressure