Interrupt-driven mode so far pushes one uORB event per physical sample: one I2C burst read and one interrupt per sample, at whatever ODR the topic is running. That's the dominant power cost for a battery-constrained use case sampling continuously -- draining the chip's FIFO in batches cuts both by roughly the watermark size. The LSM6DS3TR-C's FIFO is the older ST "pattern" style (no per-sample tag byte, unlike LSM6DSO/ISM330): FIFO_CTRL3's per-sub-sensor decimation bits choose which of gyro/accel feed the FIFO (0 = excluded, 1 = no decimation -- only 0/1 are used here), FIFO_CTRL5 sets one shared FIFO-only ODR, and FIFO_STATUS1/2's DIFF_FIFO reports how many 16-bit words are waiting. Reused the existing INT1 wiring, but switched from DRDY (per-sample) to FTH (threshold reached) when CONFIG_SENSORS_LSM6DS3TRC_FIFO is on -- new bool that's a whole-driver mode switch, not a per-instance choice, so a board doesn't change; only its Kconfig does. lsm6ds3trc_fifo_configure() re-derives and writes the decimation bits, FIFO ODR, and watermark threshold (in words = watermark-in-samples * words-per-pattern, 3 with one sub-sensor active or 6 with both) from current dev->gyro/accel enabled+odr state; called from activate() and set_interval(). Both sub-sensors are forced to the same ODR while FIFO is on -- decimation factors > 1 for independent per-topic rates is real complexity (matching ODR ratios to decimation values) left for later. lsm6ds3trc_fifo_worker() replaces lsm6ds3trc_worker() under the Kconfig guard: reads DIFF_FIFO, bursts that many words (rounded down to a whole pattern chunk, capped at 2x the configured watermark so a late drain doesn't overflow the read buffer -- whatever's left over just waits in the chip's own FIFO for the next drain), then walks the buffer decoding each chunk into a push_event() same as before. FIFO entries don't carry their own timestamp, so each one is interpolated backwards from the ISR's timestamp by the configured ODR interval. Temperature isn't part of the FIFO pattern (FIFO_TEMP_EN stays off to keep the pattern width simple); one direct OUT_TEMP_L read per drain is applied to the whole batch instead. Validated on the bench, both pattern widths: with both topics subscribed (6-word pattern) and with only the accelerometer (3-word), samples arrive in watermark-sized bursts with interpolated timestamps spaced by the exact configured ODR interval (52Hz -> 19230us between every consecutive sample, matched exactly), sane accel/gyro values, no I2C errors, no overruns, sustained for 15+ seconds continuous. Assisted-by: Claude <noreply@anthropic.com> Signed-off-by: Felipe Moura <moura.fmo@gmail.com> |
||
|---|---|---|
| .github | ||
| arch | ||
| audio | ||
| binfmt | ||
| boards | ||
| cmake | ||
| crypto | ||
| Documentation | ||
| drivers | ||
| dummy | ||
| fs | ||
| graphics | ||
| include | ||
| libs | ||
| mm | ||
| net | ||
| openamp | ||
| pass1 | ||
| sched | ||
| syscall | ||
| tools | ||
| video | ||
| wireless | ||
| .asf.yaml | ||
| .codespell-ignore-lines | ||
| .codespellrc | ||
| .editorconfig | ||
| .gitignore | ||
| .gitmessage | ||
| .pre-commit-config.yaml | ||
| .yamllint | ||
| AUTHORS | ||
| CMakeLists.txt | ||
| CONTRIBUTING.md | ||
| INVIOLABLES.md | ||
| Kconfig | ||
| LICENSE | ||
| Makefile | ||
| NOTICE | ||
| README.md | ||
| ReleaseNotes | ||
Apache NuttX is a real-time operating system (RTOS) with an emphasis on standards compliance and small footprint. Scalable from 8-bit to 64-bit microcontroller environments, the primary governing standards in NuttX are POSIX and ANSI standards. Additional standard APIs from Unix and other common RTOSs (such as VxWorks) are adopted for functionality not available under these standards, or for functionality that is not appropriate for deeply-embedded environments (such as fork()).
For brevity, many parts of the documentation will refer to Apache NuttX as simply NuttX.
Getting Started
First time on NuttX? Read the Getting Started guide! If you don't have a board available, NuttX has its own simulator that you can run on terminal.
Documentation
You can find the current NuttX documentation on the Documentation Page.
Alternatively, you can build the documentation yourself by following the Documentation Build Instructions.
The old NuttX documentation is still available in the Apache wiki.
Supported Boards
NuttX supports a wide variety of platforms. See the full list on the Supported Platforms page.
Contributing
If you wish to contribute to the NuttX project, read the Contributing guidelines for information on Git usage, coding standard, workflow and the NuttX principles.
License
The code in this repository is under either the Apache 2 license, or a license compatible with the Apache 2 license. See the License Page for more information.