Personal tools

VisionSOM-STM32MP1 sensors demo

From SomLabs Wiki

Jump to: navigation, search

VisionSOM-STM32MP1 sensors demo


The SoMLabs sensors demo application for VisionSOM-STM32MP1 module and VisionCB-STM32MP1-STD board is the example of simple signal measurement and data presentation in a graphical user interface. The application reads the acceleration data from the LSM6DS3 sensor connected to the I2C bus and the analogue signal samples collected by the on-chip ADC. The results are presented on the Qt interface built with the QML and QtCharts libraries.


File:VisionSOM-STM32MP1 sensors demo.mp4

Hardware configuration

ADC

The ADC needs to be enabled in the device tree since it is not configured in the default system images for VisionSOM-STM32MP1. Moreover, the timer 2 is enabled and used later for the ADS triggering. The following files in the mx directory need to be modified:

  • kernel/stm32mp157a-visionsom-dsi-mx.dts
 &pinctrl {
 	u-boot,dm-pre-reloc;

	adc_pins_mx: adc_mx-0 {
		pins {
			pinmux = <STM32_PINMUX('B', 1, ANALOG)>; /* ADC1_INP5 */
		};
	};

	adc_sleep_pins_mx: adc_sleep_mx-0 {
		pins {
			pinmux = <STM32_PINMUX('B', 1, ANALOG)>; /* ADC1_INP5 */
		};
	};

&adc{
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&adc_pins_mx>;
	pinctrl-1 = <&adc_sleep_pins_mx>;
	status = "okay";

	/* USER CODE BEGIN adc */

	vref-supply = <&vdd>;
	status = "okay";
	adc1: adc@0 {
		st,adc-channels = <5>;
		st,min-sample-time-nsecs = <10000>;
		status = "okay";
	};

	/* USER CODE END adc */
};
&timers2{
	status = "okay";

	/* USER CODE BEGIN timers2 */

	/delete-property/dmas;
	/delete-property/dma-names;

	pwm {
		status = "okay";
	};

	timer@1 {
		status = "okay";
	};

	/* USER CODE END timers2 */
};
  • u-boot/stm32mp157a-visionsom-dsi-mx.dts
 &pinctrl {
 	u-boot,dm-pre-reloc;
 
	adc_pins_mx: adc_mx-0 {
		pins {
			pinmux = <STM32_PINMUX('B', 1, ANALOG)>; /* ADC1_INP5 */
		};
	};

	adc_sleep_pins_mx: adc_sleep_mx-0 {
		pins {
			pinmux = <STM32_PINMUX('B', 1, ANALOG)>; /* ADC1_INP5 */
		};
	};
&adc{
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&adc_pins_mx>;
	pinctrl-1 = <&adc_sleep_pins_mx>;
	status = "okay";

	/* USER CODE BEGIN adc */

	vref-supply = <&vdd>;
	status = "okay";
	adc1: adc@0 {
		st,adc-channels = <5>;
		st,min-sample-time-nsecs = <10000>;
		status = "okay";
	};

	/* USER CODE END adc */
};
&timers2{
	status = "okay";

	/* USER CODE BEGIN timers2 */

	trigger@0 {
		status = "okay";
	};

	/* USER CODE END timers2 */
};
  • u-boot/stm32mp157a-visionsom-dsi-mx-u-boot.dtsi


		CLK_ADC_PLL4R
 	pll4:st,pll@3 {
		cfg = < 3 98 5 7 7 PQR(1,1,1) >;
 	};
  • tf-a/stm32mp157a-visionsom-dsi-mx.dts
		CLK_ADC_PLL4R
 	pll4:st,pll@3 {
		cfg = < 3 98 5 7 7 PQR(1,1,1) >;
 	};
 &etzpc{
 	st,decprot = <
	DECPROT(STM32MP1_ETZPC_ADC_ID, DECPROT_NS_RW, DECPROT_UNLOCK)
	DECPROT(STM32MP1_ETZPC_TIM2_ID, DECPROT_NS_RW, DECPROT_UNLOCK)

LSM6DS3

The LSM6DS3 sensor is connected to the I2C4 bus which is already configured for the touchscreen. However a new subsection needs to be added to the &i2c4 device in order to register correct driver.

  • kernel/stm32mp157a-visionsom-dsi-mx.dts
	lsm6ds3@6a {
		compatible = "st,lsm6ds3";
		reg = <0x6a>;
	};

Finally, the driver needs to be compiled with the kernel (or as a module) in the kernel configuration file:

  • stm32mp157a_visionsom_mx_defconfig
CONFIG_IIO_ST_SENSORS_I2C=m
CONFIG_IIO_ST_SENSORS_SPI=m
CONFIG_IIO_ST_SENSORS_CORE=m
CONFIG_IIO_ST_LSM6DSX=m
CONFIG_IIO_ST_LSM6DSX_I2C=m
CONFIG_IIO_ST_LSM6DSX_SPI=m

ADC configuration

The ADC is configured within the application using the iio subsystem. The following values are written to the configuration files in order to obtain the 1kHz sampling frequency on channel 5 with 128 samples watermark:

echo 1000 > /sys/bus/iio/devices/trigger0/sampling_frequency
echo 1 > /sys/bus/iio/devices/iio:device0/scan_elements/in_voltage5_en
echo tim2_trgo > /sys/bus/iio/devices/iio:device0/trigger/current_trigger
echo 128 > /sys/bus/iio/devices/iio:device0/buffer/watermark
echo 256 > /sys/bus/iio/devices/iio:device0/buffer/length
echo 1 > /sys/bus/iio/devices/iio:device0/buffer/enable

The raw ADS readings are obtained from the file: /dev/iio:device0

LSM6DS3 configuration

The LSM6DS3 sensor is ready to use after system boot. The application configures the sampling frequency:

echo 416 > /sys/bus/iio/devices/iio:device0/sampling_frequency

The sensor raw readings can be obtained from the files:

  • /sys/bus/iio/devices/iio:device0/in_accel_x_raw
  • /sys/bus/iio/devices/iio:device0/in_accel_y_raw
  • /sys/bus/iio/devices/iio:device0/in_accel_z_raw


Application binary

The application compiled binary is available for download: VisionSOM-STM32MP1_sensors_demo.zip