lis302dl: check WHO_AM_I register

This commit is contained in:
Andrey Gusakov 2024-02-11 14:42:08 +03:00
parent f2e4bcefef
commit 16394c1650
2 changed files with 22 additions and 8 deletions

View File

@ -441,8 +441,9 @@ void lis302dlObjectInit(LIS302DLDriver *devp) {
* *
* @api * @api
*/ */
void lis302dlStart(LIS302DLDriver *devp, const LIS302DLConfig *config) { msg_t lis302dlStart(LIS302DLDriver *devp, const LIS302DLConfig *config) {
uint32_t i; uint32_t i;
uint8_t devid;
uint8_t cr[2] = {0, 0}; uint8_t cr[2] = {0, 0};
osalDbgCheck((devp != NULL) && (config != NULL)); osalDbgCheck((devp != NULL) && (config != NULL));
@ -451,6 +452,23 @@ void lis302dlStart(LIS302DLDriver *devp, const LIS302DLConfig *config) {
devp->config = config; devp->config = config;
#if LIS302DL_USE_SPI
#if LIS302DL_SHARED_SPI
spiAcquireBus((devp)->config->spip);
#endif /* LIS302DL_SHARED_SPI */
spiStart((devp)->config->spip, (devp)->config->spicfg);
/* Check WHO_I_AM */
lis302dlSPIReadRegister(devp->config->spip, LIS302DL_AD_WHO_AM_I,
1, &devid);
if (devid != 0x3b)
{
#if LIS302DL_SHARED_SPI
spiReleaseBus((devp)->config->spip);
#endif /* LIS302DL_SHARED_SPI */
return MSG_RESET;
}
/* Control register 1 configuration block.*/ /* Control register 1 configuration block.*/
{ {
cr[0] = LIS302DL_CTRL_REG1_XEN | LIS302DL_CTRL_REG1_YEN | cr[0] = LIS302DL_CTRL_REG1_XEN | LIS302DL_CTRL_REG1_YEN |
@ -467,12 +485,6 @@ void lis302dlStart(LIS302DLDriver *devp, const LIS302DLConfig *config) {
#endif #endif
} }
#if LIS302DL_USE_SPI
#if LIS302DL_SHARED_SPI
spiAcquireBus((devp)->config->spip);
#endif /* LIS302DL_SHARED_SPI */
spiStart((devp)->config->spip, (devp)->config->spicfg);
lis302dlSPIWriteRegister(devp->config->spip, LIS302DL_AD_CTRL_REG1, lis302dlSPIWriteRegister(devp->config->spip, LIS302DL_AD_CTRL_REG1,
2, cr); 2, cr);
@ -516,6 +528,8 @@ void lis302dlStart(LIS302DLDriver *devp, const LIS302DLConfig *config) {
osalThreadSleepMilliseconds(10); osalThreadSleepMilliseconds(10);
devp->state = LIS302DL_READY; devp->state = LIS302DL_READY;
return MSG_OK;
} }
/** /**

View File

@ -554,7 +554,7 @@ struct LIS302DLDriver {
extern "C" { extern "C" {
#endif #endif
void lis302dlObjectInit(LIS302DLDriver *devp); void lis302dlObjectInit(LIS302DLDriver *devp);
void lis302dlStart(LIS302DLDriver *devp, const LIS302DLConfig *config); msg_t lis302dlStart(LIS302DLDriver *devp, const LIS302DLConfig *config);
void lis302dlStop(LIS302DLDriver *devp); void lis302dlStop(LIS302DLDriver *devp);
#ifdef __cplusplus #ifdef __cplusplus
} }