Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

drivers/magnetometer/st/iis2mdc: refactor to monitor registers #24326

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

dagar
Copy link
Member

@dagar dagar commented Feb 12, 2025

  • driver now monitors sensor configuration, if there's anything incorrectly configured it automatically resets and reconfigures itself
  • sensor goes through full reboot & reset cycle
  • automatic offset cancellation (OFF_CAN) is now disabled

Copy link

github-actions bot commented Feb 12, 2025

🔎 FLASH Analysis

px4_fmu-v5x [Total VM Diff: 520 byte (0.03 %)]
    FILE SIZE        VM SIZE    
--------------  -------------- 
+0.0%    +520  +0.0%    +520    .text
  [NEW] +1.50Ki  [NEW] +1.50Ki    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  +0.0%     +24  +0.0%     +24    [section .text]
  -1.9%      -8  -1.9%      -8    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  [DEL]    -284  [DEL]    -284    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  [DEL]    -752  [DEL]    -752    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
-0.1% -1.90Ki  [ = ]       0    .debug_abbrev
  [NEW] +3.25Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL] -2.82Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL] -2.17Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -9.9%    -221  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
   +11%     +56  [ = ]       0    ../../src/lib/version/version.c
+0.0%      +8  [ = ]       0    .debug_aranges
  [NEW]    +392  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL]    -192  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL]    -184  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -5.0%      -8  [ = ]       0    ../../src/lib/version/version.c
+0.0%     +52  [ = ]       0    .debug_frame
-0.0% -11.9Ki  [ = ]       0    .debug_info
  [NEW] +28.7Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL] -22.8Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL] -16.9Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -6.1%   -1014  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  -0.2%      -4  [ = ]       0    ../../src/lib/version/version.c
-0.0%    -536  [ = ]       0    .debug_line
  [NEW] +4.89Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL] -2.98Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL] -2.35Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -2.4%     -52  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  -1.3%     -25  [ = ]       0    ../../src/lib/version/version.c
  -0.2%      -2  [ = ]       0    task/task_cancelpt.c
+0.0%   +1005  [ = ]       0    .debug_loc
  -0.1%      -2  [ = ]       0    ../../src/drivers/magnetometer/rm3100/rm3100_spi.cpp
  [NEW] +3.69Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL] -1.70Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL] -1.05Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -2.9%     -16  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  +0.0%     +61  [ = ]       0    [section .debug_loc]
+0.0%    +408  [ = ]       0    .debug_ranges
  [NEW]   +1016  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL]    -432  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL]    -168  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -2.6%      -8  [ = ]       0    ../../src/lib/version/version.c
-0.0%     -29  [ = ]       0    .debug_str
  -0.1%     -58  [ = ]       0    
  [NEW] +1.05Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL]    -694  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL]    -264  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
 -14.7%     -43  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  -1.4%      -7  [ = ]       0    ../../src/drivers/px4io/px4io_uploader.cpp
 -36.4%     -43  [ = ]       0    ../../src/lib/conversion/rotation.cpp
-0.0%     -52  [ = ]       0    .strtab
  [NEW]    +878  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL]    -591  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL]    -329  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
   +27%     +24  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  -8.1%     -32  [ = ]       0    ../../src/lib/version/version.c
  -0.0%      -2  [ = ]       0    [section .strtab]
-0.0%     -16  [ = ]       0    .symtab
  [NEW] +1.08Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL]    -656  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL]    -368  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -2.1%     -16  [ = ]       0    ../../src/lib/bezier/BezierN.cpp
  -7.0%     -64  [ = ]       0    ../../src/lib/version/version.c
  -2.8%     -16  [ = ]       0    ../../src/modules/commander/HomePosition.cpp
  +0.3%     +16  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  -0.0%     -16  [ = ]       0    src/modules/mavlink/modules__mavlink_unity.cpp
-5.1%    -520  [ = ]       0    [Unmapped]
-0.0% -13.0Ki  +0.0%    +520    TOTAL

px4_fmu-v6x [Total VM Diff: 520 byte (0.03 %)]
    FILE SIZE        VM SIZE    
--------------  -------------- 
+0.0%    +520  +0.0%    +520    .text
  [NEW] +1.50Ki  [NEW] +1.50Ki    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  +0.0%     +24  +0.0%     +24    [section .text]
  -1.9%      -8  -1.9%      -8    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  [DEL]    -284  [DEL]    -284    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  [DEL]    -752  [DEL]    -752    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
-0.1% -1.90Ki  [ = ]       0    .debug_abbrev
  [NEW] +3.25Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL] -2.82Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL] -2.17Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -9.9%    -221  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
   +11%     +56  [ = ]       0    ../../src/lib/version/version.c
+0.0%      +8  [ = ]       0    .debug_aranges
  [NEW]    +392  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL]    -192  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL]    -184  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -5.0%      -8  [ = ]       0    ../../src/lib/version/version.c
+0.0%     +52  [ = ]       0    .debug_frame
-0.0% -11.9Ki  [ = ]       0    .debug_info
  [NEW] +28.7Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL] -22.8Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL] -16.9Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -6.1%   -1014  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  -0.2%      -4  [ = ]       0    ../../src/lib/version/version.c
-0.0%    -535  [ = ]       0    .debug_line
  [NEW] +4.89Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL] -2.98Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL] -2.35Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -2.4%     -52  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  -1.3%     -25  [ = ]       0    ../../src/lib/version/version.c
  -0.1%      -1  [ = ]       0    task/task_cancelpt.c
+0.0%   +1005  [ = ]       0    .debug_loc
  -0.1%      -2  [ = ]       0    ../../src/drivers/magnetometer/rm3100/rm3100_spi.cpp
  [NEW] +3.69Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL] -1.70Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL] -1.05Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -2.9%     -16  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  +0.0%     +61  [ = ]       0    [section .debug_loc]
+0.0%    +408  [ = ]       0    .debug_ranges
  [NEW]   +1016  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL]    -432  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL]    -168  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -2.6%      -8  [ = ]       0    ../../src/lib/version/version.c
-0.0%     -29  [ = ]       0    .debug_str
  -0.1%     -58  [ = ]       0    
  [NEW] +1.01Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL]    -694  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL]    -264  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
 -14.7%     -43  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  -1.4%      -7  [ = ]       0    ../../src/drivers/px4io/px4io_uploader.cpp
-0.0%     -52  [ = ]       0    .strtab
  [NEW]    +878  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL]    -591  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL]    -329  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
   +27%     +24  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_main.cpp
  -8.1%     -32  [ = ]       0    ../../src/lib/version/version.c
  -0.0%      -2  [ = ]       0    [section .strtab]
-0.0%     -16  [ = ]       0    .symtab
  -2.0%     -16  [ = ]       0    ../../platforms/nuttx/src/px4/stm/stm32_common/spi/spi.cpp
  [NEW] +1.06Ki  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/IIS2MDC.cpp
  [DEL]    -640  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc.cpp
  [DEL]    -368  [ = ]       0    ../../src/drivers/magnetometer/st/iis2mdc/iis2mdc_i2c.cpp
  -2.2%     -16  [ = ]       0    ../../src/lib/bezier/BezierN.cpp
  -7.0%     -64  [ = ]       0    ../../src/lib/version/version.c
  -2.8%     -16  [ = ]       0    ../../src/modules/commander/HomePosition.cpp
  +0.3%     +16  [ = ]       0    ../../src/modules/fw_pos_control/FixedwingPositionControl.cpp
  +0.0%     +16  [ = ]       0    [section .symtab]
  -0.0%     -16  [ = ]       0    src/modules/mavlink/modules__mavlink_unity.cpp
-0.7%    -520  [ = ]       0    [Unmapped]
-0.0% -13.0Ki  +0.0%    +520    TOTAL

Updated: 2025-02-14T21:14:09

@dagar dagar requested review from dakejahl and AlexKlimaj February 12, 2025 20:02
@AlexKlimaj
Copy link
Member

nsh> iis2mdc status
INFO  [SPI_I2C] Running on I2C Bus 4, Address 0x1E
iis2mdc: reboot: 1 events
iis2mdc: reset: 1 events
iis2mdc: bad register: 0 events
iis2mdc: bad transfer: 0 events
nsh> listener sensor_gyro

TOPIC: sensor_gyro
 sensor_gyro
    timestamp: 156757937 (0.000699 seconds ago)
    timestamp_sample: 156757708 (229 us before timestamp)
    device_id: 3014666 (Type: 0x2E, SPI:1 (0x00))
    x: -0.01446
    y: -0.00546
    z: 0.01169
    temperature: 29.31763
    error_count: 0
    clip_counter: [0, 0, 0]
    samples: 10

nsh>

update: 1s, topics: 121, total publications: 12037, 982.7 kB/s
TOPIC NAME                          INST #SUB RATE #Q SIZE
sensor_mag                             0    4   49  4   40

@AlexKlimaj
Copy link
Member

You can use this as a chance to combine the lis2mdl driver into this as well.

@AlexKlimaj
Copy link
Member

AlexKlimaj commented Feb 14, 2025

ARK FPV with the iis2mdc and an ARK RTK GPS L1 L5 with BMM150 calibration.

https://review.px4.io/plot_app?log=bcc9e917-9d91-421b-8315-836d6783fefd

image

@dakejahl
Copy link
Contributor

automatic offset cancellation (OFF_CAN) is now disabled

why?

@dagar
Copy link
Member Author

dagar commented Feb 14, 2025

automatic offset cancellation (OFF_CAN) is now disabled

why?

It was an unknown when we had unexplained calibration results, maybe better to turn it back on now.

@dagar
Copy link
Member Author

dagar commented Feb 14, 2025

You can use this as a chance to combine the lis2mdl driver into this as well.

Are you actually using it? I don't even have one and I'm only aware of it being used in a product that's not relevant for upstream.

So unless someone has one in hand I'd rather leave it be and drop it someday.

It also claims silicon bugs that don't seem to be present here.

/**
* Silicon Bug: the X axis will be read instead of the temperature registers if you do a sequential read through XYZ.
* The temperature registers must be addressed directly.
*/
ret = _interface->read(ADDR_OUT_T_L, (uint8_t *)&buf_rx, sizeof(buf_rx));

@AlexKlimaj
Copy link
Member

I don't know any product that uses it.

 - if there's any configuration error the driver is now able to
   reset/reconfigure itself
@dagar dagar force-pushed the pr-drivers_mag_iis2mdc_refactor branch from 8941e19 to 0b71aac Compare February 14, 2025 21:08
@dagar dagar marked this pull request as ready for review February 14, 2025 21:09
@dagar
Copy link
Member Author

dagar commented Feb 14, 2025

I've re-enabled offset cancellation.

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants