Files
bizhang_-obav/ROMFS/px4fmu_common/init.d/rc.sensors
David Sidrane 102003c664 rc.sensors:Use HW type to refine startup / deprecate mpu9250 on PixhawkMini
Using the hwvercmp on FMUv2 HW derivatives built with px4fmu_v3_default
   to ues a more targeted startup approach:

  1) Detect V3 and V2M

  2) On V3 use the external mpu9250 to further discriminate between 2.0
     and 2.1. Then only start the devices that are on that version of
     the board.

 3) Due to HW errata on PixhawkMini deprecate mpu9250.
     The mpu9250 will not start reliably on the PixhawkMini
     Since we have an ICM20608 and an External Mag the
     mpu9250 is not to be used.
2017-08-05 19:26:20 +02:00

508 lines
7.2 KiB
Plaintext

#!nsh
#
# Standard startup script for PX4FMU v1, v2, v3, v4 onboard sensor drivers.
#
if ver hwcmp PX4FMU_V1
then
if ms5611 start
then
fi
else
if ver hwcmp AEROFC_V1
then
# Aero FC uses separate driver
else
if ver hwcmp CRAZYFLIE
then
# Crazyflie uses separate driver
else
# Configure all I2C buses to 100 KHz as they
# are all external or slow
fmu i2c 1 100000
fmu i2c 2 100000
fi
if ver hwcmp PX4FMU_V4
then
# We know there are sketchy boards out there
# as chinese companies produce Pixracers without
# fully understanding the critical parts of the
# schematic and BOM, leading to sensor brownouts
# on boot. Original Pixracers following the
# open hardware design do not require this.
fmu sensor_reset 50
fi
# External SPI
if ms5611 -S start
then
fi
# Internal SPI
if ms5611 -s start
then
fi
# Blacksheep telemetry
if bst start
then
fi
fi
fi
if ver hwcmp AEROFC_V1
then
# Aero FC uses separate driver
else
if adc start
then
fi
fi
if ver hwcmp AUAV_X21
then
# External I2C bus
if hmc5883 -C -T -X start
then
fi
# Internal SPI bus ICM-20608-G is rotated 90 deg yaw
if mpu6000 -R 2 -T 20608 start
then
fi
# Internal SPI bus mpu9250 is rotated 90 deg yaw
if mpu9250 -R 2 start
then
fi
fi
if ver hwcmp PX4FMU_V2
then
# External I2C bus
if hmc5883 -C -T -X start
then
fi
# External I2C bus
if lis3mdl -X start
then
fi
# Internal I2C bus
if hmc5883 -C -T -I -R 4 start
then
fi
# Internal SPI bus ICM-20608-G
if mpu6000 -T 20608 start
then
fi
# V2 build hwtypecmp is always false
set BOARD_FMUV3 0
# V3 build hwtypecmp supports V2|V2M|V30
if ver hwtypecmp V30
then
# Check for Pixhawk 2.0 cube
# external MPU6K is rotated 180 degrees yaw
if mpu6000 -S -R 4 start
then
set BOARD_FMUV3 20
else
# Check for Pixhawk 2.1 cube
# external MPU9250 is rotated 180 degrees yaw
if mpu9250 -S -R 4 start
then
set BOARD_FMUV3 21
fi
fi
fi
if [ $BOARD_FMUV3 != 0 ]
then
# sensor heating is available, but we disable it for now
param set SENS_EN_THERMAL 0
# external L3GD20H is rotated 180 degrees yaw
if l3gd20 -X -R 4 start
then
fi
# external LSM303D is rotated 270 degrees yaw
if lsm303d -X -R 6 start
then
fi
if [ $BOARD_FMUV3 == 20 ]
then
# v2.0 internal MPU6000 is rotated 180 deg roll, 270 deg yaw
if mpu6000 -R 14 start
then
fi
# v2.0 Has internal hmc5883 on SPI1
if hmc5883 -C -T -S -R 8 start
then
fi
fi
if [ $BOARD_FMUV3 == 21 ]
then
# v2.1 internal MPU9250 is rotated 180 deg roll, 270 deg yaw
if mpu9250 -R 14 start
then
fi
fi
else
# $BOARD_FMUV3 == 0 -> FMUv2
if mpu6000 start
then
fi
# As we will use the external mag and the ICM-20608-G
# V2 build hwtypecmp is always false
# V3 build hwtypecmp supports V2|V2M|V30
if ver hwtypecmp V2M
then
# On the PixhawkMini the mpu9250 has been disabled due to HW errata
else
if mpu9250 start
then
fi
fi
if l3gd20 start
then
fi
if lsm303d start
then
fi
fi
fi
if ver hwcmp PX4FMU_V4
then
# External I2C bus
if hmc5883 -C -T -X start
then
fi
if lis3mdl -R 2 start
then
fi
# Internal SPI bus is rotated 90 deg yaw
if hmc5883 -C -T -S -R 2 start
then
fi
# Internal SPI bus ICM-20608-G is rotated 90 deg yaw
if mpu6000 -R 2 -T 20608 start
then
fi
# Internal SPI bus ICM-20602-G is rotated 90 deg yaw
if mpu6000 -R 2 -T 20602 start
then
fi
# Start either MPU9250 or BMI160. They are both connected to the same SPI bus and use the same
# chip select pin. There are different boards with either one of them and the WHO_AM_I register
# will prevent the incorrect driver from a successful initialization.
# Internal SPI bus mpu9250 is rotated 90 deg yaw
if mpu9250 -R 2 start
then
fi
# Internal SPI bus BMI160
if bmi160 start
then
fi
# Start either ICM2060X or BMI055. They are both connected to the same SPI bus and use the same
# chip select pin. There are different boards with either one of them and the WHO_AM_I register
# will prevent the incorrect driver from a successful initialization.
# Internal SPI bus BMI055_ACC
if bmi055 -A start
then
fi
# Internal SPI bus BMI055_GYR
if bmi055 -G start
then
fi
# expansion i2c used for BMM150 rotated by 90deg
if bmm150 -R 2 start
then
fi
# expansion i2c used for BMP280
if bmp280 -I start
then
fi
fi
if ver hwcmp PX4FMU_V1
then
# FMUv1
if mpu6000 start
then
fi
if l3gd20 start
then
fi
# MAG selection
if param compare SENS_EXT_MAG 2
then
if hmc5883 -C -I start
then
fi
else
# Use only external as primary
if param compare SENS_EXT_MAG 1
then
if hmc5883 -C -X start
then
fi
else
# auto-detect the primary, prefer external
if hmc5883 start
then
fi
fi
fi
fi
if ver hwcmp MINDPX_V2
then
# External I2C bus
if hmc5883 -C -T -X start
then
fi
# Internal I2C bus
if hmc5883 -C -T -I -R 12 start
then
fi
if mpu6000 -s -R 8 start
then
fi
if mpu9250 -s -R 8 start
then
fi
if lsm303d -R 10 start
then
fi
if l3gd20 -R 14 start
then
fi
fi
if ver hwcmp CRAZYFLIE
then
# Onboard I2C
if mpu9250 -R 12 start
then
fi
# I2C bypass of mpu
if lps25h start
then
fi
fi
if ver hwcmp AEROFC_V1
then
if ms5611 -T 0 start
then
fi
if mpu9250 -s -R 14 start
then
fi
# Possible external compasses
if hmc5883 -X start
then
fi
if ist8310 -C -b 1 -R 4 start
then
fi
if aerofc_adc start
then
fi
if ll40ls start i2c
then
fi
fi
if ver hwcmp PX4FMU_V4PRO
then
# Internal SPI bus ICM-20608-G
if mpu6000 -R 2 -T 20608 start
then
fi
# Internal SPI bus ICM-20602
if mpu6000 -R 2 -T 20602 start
then
fi
# Internal SPI bus mpu9250
if mpu9250 -R 2 start
then
fi
# Internal SPI bus
if lis3mdl -R 0 start
then
fi
# Possible external compasses
if hmc5883 -C -T -X start
then
fi
fi
if ver hwcmp PX4FMU_V5
then
# Internal SPI bus ICM-20602
if mpu6000 -R 8 -s -T 20602 start
then
fi
# Internal SPI bus ICM-20689
if mpu6000 -R 8 -z -T 20689 start
then
fi
# Internal SPI bus BMI055 accel
if bmi055 -A -R 10 start
then
fi
# Internal SPI bus BMI055 gyro
if bmi055 -G -R 10 start
then
fi
# Possible external compasses
if hmc5883 -C -T -X start
then
fi
fi
if ver hwcmp AEROCORE2
then
l3gd20 -R 12 start
lsm303d start
fi
#
# Optional drivers
#
if sdp3x_airspeed start
then
fi
if ms5525_airspeed start
then
fi
if ms5525_airspeed start -b 2
then
fi
if ms4525_airspeed start
then
fi
if ms4525_airspeed start -b 2
then
fi
if ets_airspeed start
then
fi
if ets_airspeed start -b 1
then
fi
# Sensors on the PWM interface bank
if param compare SENS_EN_LL40LS 1
then
if pwm_input start
then
if ll40ls start pwm
then
fi
fi
fi
# Lidar-Lite on I2C
if param compare SENS_EN_LL40LS 2
then
if ll40ls start i2c
then
fi
fi
# lightware serial lidar sensor
if param compare SENS_EN_SF0X 0
then
else
if sf0x start
then
fi
fi
# lightware i2c lidar sensor
if param compare SENS_EN_SF1XX 0
then
else
if sf1xx start
then
fi
fi
# mb12xx sonar sensor
if param compare SENS_EN_MB12XX 1
then
if mb12xx start
then
fi
fi
# teraranger one tof sensor
if param compare SENS_EN_TRONE 1
then
if trone start
then
fi
fi
# Wait 20 ms for sensors (because we need to wait for the HRT and work queue callbacks to fire)
usleep 20000
if sensors start
then
fi