revised vl53l0x XSHUT, GPIO setting for max 3 TOF sensors
This commit is contained in:
parent
02ba2481c7
commit
1c393d1043
|
@ -96,10 +96,21 @@ void MX_TOF_Init(void);
|
|||
#define TOF_C_INT_Pin GPIO_PIN_10
|
||||
#define TOF_C_INT_GPIO_Port GPIOA
|
||||
#define TOF_C_INT_EXTI_IRQn EXTI15_10_IRQn
|
||||
|
||||
#define TOF_C_XSHUT_Pin GPIO_PIN_3
|
||||
#define TOF_C_XSHUT_GPIO_Port GPIOB
|
||||
|
||||
#define TOF_L_INT_Pin GPIO_PIN_7
|
||||
#define TOF_L_INT_GPIO_Port GPIOC
|
||||
#define TOF_L_INT_EXTI_IRQn EXTI9_5_IRQn
|
||||
#define TOF_L_XSHUT_Pin GPIO_PIN_10
|
||||
#define TOF_L_XSHUT_GPIO_Port GPIOB
|
||||
|
||||
#define TOF_R_INT_Pin GPIO_PIN_10
|
||||
#define TOF_R_INT_GPIO_Port GPIOA
|
||||
#define TOF_R_INT_EXTI_IRQn EXTI15_10_IRQn
|
||||
#define TOF_R_XSHUT_Pin GPIO_PIN_5
|
||||
#define TOF_R_XSHUT_GPIO_Port GPIOB
|
||||
|
||||
#define STS_SERVICE_MASK_L0 (0) // Service normal , no mask off
|
||||
#define STS_SERVICE_MASK_L1 (1) // service mask level 1, sensing data upload in silence mode, node appearance silence (no LED, No display, no sound, no vibration)
|
||||
#define STS_SERVICE_MASK_L2 (2) // service mask level 2, NO sensing data upload (event or periodicity)
|
||||
|
|
|
@ -93,18 +93,41 @@ void MX_GPIO_Init(void)
|
|||
HAL_GPIO_Init(BUT1_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
|
||||
/*Configure GPIO pins : TOF_C_INT_Pin TOF_R_INT_Pin */
|
||||
/*Configure GPIO pins : TOF_C_INT_Pin */
|
||||
GPIO_InitStruct.Pin = TOF_C_INT_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(TOF_C_INT_GPIO_Port, &GPIO_InitStruct);
|
||||
/*Configure GPIO pins : TOF_L_INT_Pin */
|
||||
GPIO_InitStruct.Pin = TOF_L_INT_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(TOF_L_INT_GPIO_Port, &GPIO_InitStruct);
|
||||
/*Configure GPIO pins : TOF_R_INT_Pin */
|
||||
GPIO_InitStruct.Pin = TOF_R_INT_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
HAL_GPIO_Init(TOF_R_INT_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
/*Configure GPIO pins : TOF_C_XSHUT_Pin */
|
||||
/*Configure GPIO pins : TOF_C_XSHUT_Pin */
|
||||
GPIO_InitStruct.Pin = TOF_C_XSHUT_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(TOF_C_XSHUT_GPIO_Port, &GPIO_InitStruct);
|
||||
/*Configure GPIO pins : TOF_L_XSHUT_Pin */
|
||||
GPIO_InitStruct.Pin = TOF_L_XSHUT_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(TOF_L_XSHUT_GPIO_Port, &GPIO_InitStruct);
|
||||
/*Configure GPIO pins : TOF_R_XSHUT_Pin */
|
||||
GPIO_InitStruct.Pin = TOF_R_XSHUT_Pin;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
HAL_GPIO_Init(TOF_R_XSHUT_GPIO_Port, &GPIO_InitStruct);
|
||||
|
||||
|
||||
/* EXTI interrupt init*/
|
||||
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
|
||||
|
@ -115,7 +138,10 @@ void MX_GPIO_Init(void)
|
|||
|
||||
HAL_NVIC_SetPriority(TOF_C_INT_EXTI_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TOF_C_INT_EXTI_IRQn);
|
||||
|
||||
HAL_NVIC_SetPriority(TOF_L_INT_EXTI_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TOF_L_INT_EXTI_IRQn);
|
||||
HAL_NVIC_SetPriority(TOF_R_INT_EXTI_IRQn, 0, 0);
|
||||
HAL_NVIC_EnableIRQ(TOF_R_INT_EXTI_IRQn);
|
||||
}
|
||||
|
||||
/* USER CODE BEGIN 2 */
|
||||
|
|
|
@ -270,7 +270,7 @@ void STS_YunhornSTSEventP3_Process(void)
|
|||
void STS_YunhornSTSEventP4_Process(void)
|
||||
{
|
||||
STS_SENSOR_Power_ON(0);
|
||||
STS_SENSOR_Power_OFF(0);
|
||||
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "\r\n P4 Testing Process\r\n");
|
||||
STS_TOF_VL53L0X_Range_Process();
|
||||
|
||||
|
@ -450,9 +450,9 @@ void STS_SENSOR_Power_ON(uint8_t cnt)
|
|||
case 1:
|
||||
case 2:
|
||||
#if (defined(YUNHORN_STS_M7_ENABLED) || defined(YUNHORN_STS_R0_ENABLED))
|
||||
HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_SET);
|
||||
#endif
|
||||
HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_SET);
|
||||
#endif
|
||||
|
||||
|
||||
break;
|
||||
default:
|
||||
|
@ -469,7 +469,7 @@ void STS_SENSOR_Power_OFF(uint8_t cnt)
|
|||
#if (defined(YUNHORN_STS_M7_ENABLED) || defined(YUNHORN_STS_R0_ENABLED))
|
||||
HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET);
|
||||
#endif
|
||||
HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET);
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -196,13 +196,23 @@ int XWL55_WLE5_53L0X_Init(void)
|
|||
}
|
||||
|
||||
|
||||
void XWL55_WLE5_53L0X_Reset(void)
|
||||
void XWL55_WLE5_53L0X_ResetId(uint8_t DevNo, int state)
|
||||
{
|
||||
|
||||
HAL_GPIO_WritePin(TOF_C_XSHUT_GPIO_Port, TOF_C_XSHUT_Pin, GPIO_PIN_RESET);
|
||||
HAL_Delay(30);
|
||||
HAL_GPIO_WritePin(TOF_C_XSHUT_GPIO_Port, TOF_C_XSHUT_Pin, GPIO_PIN_SET);
|
||||
HAL_Delay(30);
|
||||
switch(DevNo) {
|
||||
case XNUCLEO53L0X_LEFT:
|
||||
HAL_GPIO_WritePin(TOF_L_XSHUT_GPIO_Port, TOF_L_XSHUT_Pin, ((state == 1)?GPIO_PIN_SET:GPIO_PIN_RESET));
|
||||
break;
|
||||
|
||||
case XNUCLEO53L0X_CENTER:
|
||||
HAL_GPIO_WritePin(TOF_C_XSHUT_GPIO_Port, TOF_C_XSHUT_Pin, ((state == 1)?GPIO_PIN_SET:GPIO_PIN_RESET)); break;
|
||||
|
||||
case XNUCLEO53L0X_RIGHT:
|
||||
HAL_GPIO_WritePin(TOF_R_XSHUT_GPIO_Port, TOF_R_XSHUT_Pin, ((state == 1)?GPIO_PIN_SET:GPIO_PIN_RESET)); break;
|
||||
default:
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
*
|
||||
* require @a VL53L0X_HAVE_UART
|
||||
*/
|
||||
# define VL53L0X_UART_DMA_RX 0
|
||||
#define VL53L0X_UART_DMA_RX 0
|
||||
#endif //VL53L0X_UART_DMA_RX
|
||||
|
||||
#ifndef VL53L0X_UART_DMA_TX
|
||||
|
@ -57,7 +57,7 @@
|
|||
*
|
||||
* require @a VL53L0X_HAVE_UART
|
||||
*/
|
||||
# define VL53L0X_UART_DMA_TX 1
|
||||
#define VL53L0X_UART_DMA_TX 1
|
||||
#endif //VL53L0X_UART_DMA_RX
|
||||
|
||||
|
||||
|
@ -77,7 +77,7 @@
|
|||
* @warning only F401
|
||||
*/
|
||||
|
||||
# define VL53L0X_UART_DMA_TX_IRQ_PRI 0
|
||||
#define VL53L0X_UART_DMA_TX_IRQ_PRI 0
|
||||
#endif
|
||||
|
||||
#ifndef VL53L0X_UART_IRQ_PRI
|
||||
|
@ -85,7 +85,7 @@
|
|||
* User override default uart irq priority 0 to fit application needs
|
||||
* @warning only supported for f401
|
||||
*/
|
||||
# define VL53L0X_UART_IRQ_PRI 0
|
||||
#define VL53L0X_UART_IRQ_PRI 0
|
||||
#endif
|
||||
|
||||
/* provided by MSP part */
|
||||
|
@ -119,7 +119,7 @@ extern void XNUCLEO53L1A1_USART2_UART_Init(void);
|
|||
* Must be set to non 0 for shared interrupt line
|
||||
* see @sa VL53L0X_GPIO1_C_OPTION
|
||||
*/
|
||||
# define VL53L0X_GPIO1_SHARED 0
|
||||
#define VL53L0X_GPIO1_SHARED 0
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -132,15 +132,15 @@ extern void XNUCLEO53L1A1_USART2_UART_Init(void);
|
|||
* @li not defined or 0 : U14=On and U17=off => GPIO1_C = PA4
|
||||
* @li defined and not 0 : U14=Off and U17=on => GPIO1_C = PC1
|
||||
*/
|
||||
# define VL53L0X_GPIO1_C_OPTION 1
|
||||
#define VL53L0X_GPIO1_C_OPTION 1
|
||||
#endif
|
||||
|
||||
|
||||
# define VL53L0X_GPIO1_C_GPIO_PORT GPIOA
|
||||
# define VL53L0X_GPIO1_C_CLK_ENABLE __GPIOA_CLK_ENABLE
|
||||
# define VL53L0X_GPIO1_C_GPIO_PIN GPIO_PIN_10
|
||||
#define VL53L0X_GPIO1_C_GPIO_PORT GPIOA
|
||||
#define VL53L0X_GPIO1_C_CLK_ENABLE __GPIOA_CLK_ENABLE
|
||||
#define VL53L0X_GPIO1_C_GPIO_PIN GPIO_PIN_10
|
||||
|
||||
# define VL53L0X_GPIO1_C_INTx EXTI15_10_IRQn
|
||||
#define VL53L0X_GPIO1_C_INTx EXTI15_10_IRQn
|
||||
|
||||
|
||||
/** @} */ /* defgroup L53L1A1_GPIO1_MAP */
|
||||
|
@ -154,7 +154,7 @@ extern void XNUCLEO53L1A1_USART2_UART_Init(void);
|
|||
*
|
||||
* Traces formating and output is end user defined via #trace_printf
|
||||
*/
|
||||
# define XNUCLEO53L1A1_TRACE TRACE_UART
|
||||
#define XNUCLEO53L1A1_TRACE TRACE_UART
|
||||
#endif // XNUCLEO53L1A1_TRACE
|
||||
|
||||
|
||||
|
@ -228,10 +228,8 @@ int XWL55_WLE5_53L0X_Init(void);
|
|||
* @param state State of the device reset (xsdn) pin @warning reset pin is active low
|
||||
* @return 0 on success
|
||||
*/
|
||||
int XNUCLEO53L1A1_ResetId(int DevNo, int state );
|
||||
|
||||
|
||||
void XWL55_WLE5_53L0X_Reset(void);
|
||||
void XWL55_WLE5_53L0X_ResetId(uint8_t DevNo, int state);
|
||||
|
||||
/**
|
||||
* Enable Disable interrupt at MCU level (MSP)
|
||||
|
@ -254,6 +252,7 @@ void XWL55_WLE5_53L0X_Reset(void);
|
|||
* >0 interrupt configured but with potential sharing on EXTI groups see @ref VL53L0X_GPIO1_MAP
|
||||
*/
|
||||
int XNUCLEO53L1A1_SetIntrStateId(int EnableIntr, int DevNo);
|
||||
int XWL55_WLE5_53L0X_SetIntrStateId(int EnableIntr, int DevNo);
|
||||
int sts_tof_vl53l0x_DetectSensors(void);
|
||||
|
||||
#endif /* _X_WL55_WLE5_53L0X_H_ */
|
||||
|
|
|
@ -131,68 +131,73 @@ int sts_tof_vl53l0x_DetectSensors(void)
|
|||
int FinalAddress;
|
||||
nDevPresent = 0;
|
||||
|
||||
XWL55_WLE5_53L0X_Reset();
|
||||
//HAL_GPIO_WritePin(TOF_C_XSHUT_GPIO_Port, TOF_C_XSHUT_Pin, GPIO_PIN_SET);
|
||||
//HAL_Delay(100);
|
||||
for (i=0; i < MAX_TOF_COUNT; i++) {
|
||||
XWL55_WLE5_53L0X_ResetId(i,0);
|
||||
}
|
||||
|
||||
//XWL55_WLE5_53L0X_SetIntrStateId(0,0);
|
||||
|
||||
/* detect all sensors (even on-board)*/
|
||||
for (i=0; i < MAX_TOF_COUNT; i++)
|
||||
{
|
||||
VL53L0X_Dev_t *pDev;
|
||||
pDev = &VL53L0XDevs[i];
|
||||
pDev->I2cDevAddr = 0x52;//+(i*2);
|
||||
pDev->Present = 0;
|
||||
//status = XNUCLEO53L0A1_ResetId(pDev->Id, 1);
|
||||
//HAL_Delay(2);
|
||||
FinalAddress=0x52 +(i+1)*2;
|
||||
VL53L0X_Dev_t *pDev;
|
||||
pDev = &VL53L0XDevs[i];
|
||||
pDev->I2cDevAddr = 0x52;
|
||||
pDev->Present = 0;
|
||||
XWL55_WLE5_53L0X_ResetId(pDev->Id, 1);
|
||||
HAL_Delay(2);
|
||||
FinalAddress = 0x52+(i+1)*2;
|
||||
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "\r\n Detect TOF sensors #%u with I2CDevAddr=0x%02x \r\n", i, pDev->I2cDevAddr);
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "\r\n Detect TOF sensors #%u with I2CDevAddr=0x%02x \r\n", i, pDev->I2cDevAddr);
|
||||
|
||||
do {
|
||||
/* Set I2C standard mode (400 KHz) before doing the first register access */
|
||||
//if (status == VL53L0X_ERROR_NONE)
|
||||
status = VL53L0X_WrByte(pDev, 0x88, 0x00);
|
||||
|
||||
/* Try to read one register using default 0x52 address */
|
||||
status = VL53L0X_RdWord(pDev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id);
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "#%u read id = %04x I2C ADDR=0x%2X\r\n",i, Id, pDev->I2cDevAddr);
|
||||
if (status) {
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "# Read id fail\n");
|
||||
break;
|
||||
}
|
||||
if (Id == 0xEEAA) {
|
||||
/* Sensor is found => Change its I2C address to final one */
|
||||
status = VL53L0X_SetDeviceAddress(pDev,FinalAddress);
|
||||
if (status != 0) {
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "#i VL53L0X_SetDeviceAddress fail\n");
|
||||
break;
|
||||
}
|
||||
pDev->I2cDevAddr = FinalAddress;
|
||||
/* Check all is OK with the new I2C address and initialize the sensor */
|
||||
status = VL53L0X_RdWord(pDev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id);
|
||||
status = VL53L0X_DataInit(pDev);
|
||||
if( status == 0 ){
|
||||
pDev->Present = 1;
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "#%u VL53L0X_SetDeviceAddress to 0x%02x\r\n",i, pDev->I2cDevAddr);
|
||||
do {
|
||||
/* Set I2C standard mode (400 KHz) before doing the first register access */
|
||||
//if (status == VL53L0X_ERROR_NONE)
|
||||
status = VL53L0X_WrByte(pDev, 0x88, 0x00);
|
||||
|
||||
nDevPresent++;
|
||||
nDevMask |= 1 << i;
|
||||
pDev->Present = 1;
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "VL53L0X %d Present and initiated to final 0x%2x, Position Mask=0x%02x\r\n", pDev->Id, pDev->I2cDevAddr, nDevMask);
|
||||
/* Try to read one register using default 0x52 address */
|
||||
status = VL53L0X_RdWord(pDev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id);
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "#%u read id = %04x I2C ADDR=0x%2X\r\n",i, Id, pDev->I2cDevAddr);
|
||||
if (status) {
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "# Read id fail\n");
|
||||
break;
|
||||
}
|
||||
if (Id == 0xEEAA) {
|
||||
/* Sensor is found => Change its I2C address to final one */
|
||||
status = VL53L0X_SetDeviceAddress(pDev,FinalAddress);
|
||||
if (status != 0) {
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "#i VL53L0X_SetDeviceAddress fail\n");
|
||||
break;
|
||||
}
|
||||
pDev->I2cDevAddr = FinalAddress;
|
||||
/* Check all is OK with the new I2C address and initialize the sensor */
|
||||
status = VL53L0X_RdWord(pDev, VL53L0X_REG_IDENTIFICATION_MODEL_ID, &Id);
|
||||
status = VL53L0X_DataInit(pDev);
|
||||
if( status == 0 ){
|
||||
pDev->Present = 1;
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "#%u VL53L0X_SetDeviceAddress to 0x%02x\r\n",i, pDev->I2cDevAddr);
|
||||
|
||||
}
|
||||
else{
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "VL53L0X_DataInit %d fail\n");
|
||||
break;
|
||||
}
|
||||
nDevPresent++;
|
||||
nDevMask |= 1 << i;
|
||||
pDev->Present = 1;
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "VL53L0X %d Present and initiated to final 0x%2x, Position Mask=0x%02x\r\n", pDev->Id, pDev->I2cDevAddr, nDevMask);
|
||||
|
||||
} else {
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "# unknown ID %x\n", Id);
|
||||
status = 1;
|
||||
}
|
||||
} while(0);
|
||||
/* Display detected sensor(s) */
|
||||
}
|
||||
}
|
||||
else{
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "VL53L0X_DataInit %d fail\n");
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
APP_LOG(TS_OFF, VLEVEL_L, "# unknown ID %x\n", Id);
|
||||
status = 1;
|
||||
}
|
||||
} while(0);
|
||||
/* Display detected sensor(s) */
|
||||
if (status) {
|
||||
XWL55_WLE5_53L0X_ResetId(i,0);
|
||||
}
|
||||
}
|
||||
|
||||
return nDevPresent;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue