1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-28 22:29:45 +01:00
Commit Graph

43818 Commits

Author SHA1 Message Date
bors[bot]
561e19303d
Merge #19718 #19737 #19746
19718: drivers/dht: busy wait reimplementation r=benpicco a=hugueslarrive

### Contribution description

In PR #19674, I also provided quick and dirty fixes to restore functionality on esp8266 and enable operation on AVR. While reviewing PR #18591, it became apparent to me that this driver needed a refresh, particularly its migration to ztimer.

The cause of the malfunction on esp8266 was that since the default switch to ztimer as the backend for xtimer, XTIMER_BACKOFF was no longer taken into account. Therefore, the correction I provided in PR #19674 simply made explicit what was previously done implicitly with xtimer and now needs to be done explicitly with ztimer (spinning instead of sleeping).

Moreover, it was unnecessarily complex to measure the pulse duration in a busy-wait implementation, which required 2 calls to ztimer_now() and  32-bit operations expensive on 8-bit architecture. Instead, it is sufficient to read the state of the bus at the threshold moment.

Finally, in practice, it is possible to reduce the read interval (down to less than 0.5s for DHT22) by "harassing" the DHT with start signals until it responds.

This re-implementation brings the following improvements:
- Many backports from `@maribu's` IRQ based implementation (#18591):
  - Use of ztimer
  - Use of errno.h
  - Use of a dht_data structure to pass arguments, to facilitate integration
  - Adaptation of the bit parsing technique to parse bits into the data array
- Reintroduction of DHT11/DHT22 differentiation.
- Separation of `dht_read()` steps into functions for better readability and the ability to share certain functions among different implementations
- Sensor presence check in `dht_init()`
- ~~Automatic adjustment to a minimum data hold time~~
- Default input mode changed to open drain (a pull-up resistor should be placed close to the output if necessary but not close to the input)
- AVR support without platform-specific handling by avoiding  ztimer_spin() and using the overflow of an 8-bit variable as a pre-timeout to minimize time-consuming ztimer_now() calls

Regarding the changes in the start signal sequence and the removal of the `_reset()` function:
![nano_dht_read_2](https://github.com/RIOT-OS/RIOT/assets/67432403/95966813-2b5f-4a0f-a388-8ac630526ab2)

~~In the previous implementation, there was an unnecessary spike at the beginning of the signal sequence, corresponding to START_HIGH_TIME. This spike has been removed in the re-implementation, as it is unnecessary. Instead, the MCU now simply pulls the signal low for START_LOW_TIME and then releases the bus, which is sufficient for initiating communication with the DHT sensor.~~ Actually, it is necessary to raise the bus level; otherwise, the _wait_for_level() called immediately after to check the response of the DHT may read the port before the signal level is raised, resulting in a false positive.

Additionally, the previous implementation had an issue where the MCU switched back to output mode and went high immediately after reading the 40 bits of data. However, the DHT sensor was still transmitting 2 or 3 additional bytes of '0' at that point, causing a conflict. This issue has been resolved in the re-implementation:
![nano_dht_read_optimized](https://github.com/RIOT-OS/RIOT/assets/67432403/ff124839-5ec5-4df3-bab7-5348d8160a25)

~~Regarding the optimization for AVR, I have performed measurements of `_wait_for_level()` until timeout (85 loops):~~
~~- on esp8266-esp-12x: 264 µs, which is 3.11 µs per loop~~
~~- on nucleo-f303k8: 319 µs, which is 3.75 µs per loop~~
~~- on arduino-nano: 3608 µs, which is 42.45 µs per loop~~
~~Duration measurements on the Arduino Nano:~~


19737: dist/tools/openocd: start debug-server in background and wait r=benpicco a=fabian18



19746: buildsystem: Always expose CPU_RAM_BASE & SIZE flags r=benpicco a=Teufelchen1

### Contribution description

Hello 🐧 

This moves the definition of `CPU_RAM_BASE/SIZE` from being only available in certain situation to be always available.
Reason for change is to simplify common code in the cpu folder.

In cooperation with `@benpicco` 

### Testing procedure

Passing CI


### Issues/PRs references

First usage will be in the PMP driver. Although there is more code in RIOT that could be refactored to use these defines instead of hacks / hardcoded values.

Co-authored-by: Hugues Larrive <hlarrive@pm.me>
Co-authored-by: Fabian Hüßler <fabian.huessler@ml-pa.com>
Co-authored-by: Teufelchen1 <bennet.blischke@outlook.com>
2023-06-20 10:40:01 +00:00
Teufelchen1
791d4e3a4d buildsystem: Always expose CPU_RAM_BASE & SIZE flags 2023-06-20 12:16:06 +02:00
Hugues Larrive
a582da1f31 drivers/dht: busy wait reimplementation
- many backports from @maribu's IRQ based implementation (#18591)
- use of ztimer and errno.h
- separation of dht_read() steps into functions for better readability
- reintroduction of DHT11/DHT22 differentiation
- sensor presence checking in dht_init()
- default input mode changed to open drain
- AVR support without platform-specific handling by avoiding
  ztimer_spin() and using the overflow of an 8-bit variable as a
  pre-timeout to minimize time-consuming ztimer_now() calls
- add a new DHT11_2022 type for 0.01 °C resolution devices
- data caching removed
2023-06-20 12:07:48 +02:00
bors[bot]
4deca3dfd7
Merge #19743 #19744
19743: tests/unittests: improve int size detection r=maribu a=maribu

### Contribution description

Deduce from the value of `INT_MAX` whether `int` is 16 bit or 32 bit, rather than check CPU names.


19744: tests: update tests for MSP430 CPU r=maribu a=maribu

### Contribution description

Using the builtin `__MSP430__` macro is fool-proof and stable even if one would try to rename and reorganize the MSP430 cpu code.


Co-authored-by: Marian Buschsieweke <marian.buschsieweke@posteo.net>
2023-06-19 14:37:00 +00:00
Marian Buschsieweke
ee79bb7d68
tests: update tests for MSP430 CPU
Using the builtin `__MSP430__` macro is fool-proof and stable even
if one would try to rename and reorganize the MSP430 cpu code.
2023-06-19 14:49:55 +02:00
Marian Buschsieweke
e0b5d63021
tests/unittests: improve int size detection
Deduce from the value of `INT_MAX` whether `int` is 16 bit or 32 bit,
rather than check CPU names.
2023-06-19 14:01:56 +02:00
bors[bot]
ef82aa6acc
Merge #19651
19651: sys/stdio_semihosting: model in Kconfig r=MrKevinWeiss a=aabadie



Co-authored-by: Alexandre Abadie <alexandre.abadie@inria.fr>
2023-06-19 07:07:59 +00:00
bors[bot]
1bed7dde15
Merge #19739
19739: gnrc/rpl: fix incorrect addition overflow check r=maribu a=szsam




Co-authored-by: Mingjie Shen <shen497@purdue.edu>
2023-06-17 16:25:56 +00:00
d4b35ec172
boards: fix periph_uart_hw_fc dependency resolution 2023-06-17 15:13:19 +02:00
3b505a2883
pkg/tinyusb: sys: fix stdio buffered inclusion in Kconfig 2023-06-17 15:12:31 +02:00
Mingjie Shen
fe92f676b4 gnrc/rpl: fix incorrect addition overflow check
Checking for overflow of integer addition by comparing against one of
the arguments of the addition does not work when the result of the
addition is automatically promoted to a larger type.

Fix by using an explicit cast to make sure that the result of the
addition is not implicitly converted to a larger type.
2023-06-17 02:25:11 -04:00
a8ef65d139
tests/sys/stdio_semihosting: add Kconfig config 2023-06-16 11:36:43 +02:00
f72cb049eb
sys/Kconfig.stdio: model stdio_semihosting in Kconfig 2023-06-16 11:36:42 +02:00
Fabian Hüßler
1b93025ab1 dist/tools/openocd: start debug-server in background and wait 2023-06-15 19:27:15 +02:00
bors[bot]
5d32c95c16
Merge #19492
19492: sys: partly refactor make dependency resolution r=aabadie a=aabadie



Co-authored-by: Alexandre Abadie <alexandre.abadie@inria.fr>
2023-06-15 16:26:21 +00:00
1826331529
sys/usbus: move dependency resolution in its own Makefile.dep 2023-06-15 10:27:38 +02:00
03d2792f8b
sys/congure: move dependency resolution in its own Makefile.dep 2023-06-15 10:27:38 +02:00
d9047a063f
sys/ut_process: move dependency resolution in its own Makefile.dep 2023-06-15 10:27:38 +02:00
bec4c3e0b3
sys/evtimer: move dependency resolution in its own Makefile.dep 2023-06-15 10:27:37 +02:00
6cfafbde6c
sys/uri_parser: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:57 +02:00
ff4b2d1680
sys/fido2: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:57 +02:00
9bd7950a1a
sys/suit: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:57 +02:00
d617d864e6
sys/riotboot: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:56 +02:00
1f4adb2775
sys/uuid: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:56 +02:00
8256424480
sys/benchmark: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:55 +02:00
9386e08ecf
sys/event: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:55 +02:00
c164007425
sys/vfs*: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:54 +02:00
c8d4256c84
sys/random: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:54 +02:00
db19f6f546
sys/puf_sram: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:54 +02:00
50ed85a2fa
sys/entropy_source: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:53 +02:00
113200f9b2
sys/can: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:53 +02:00
9fb5708efe
sys/pm_layered: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:52 +02:00
643c239b27
sys/phydat: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:52 +02:00
1c57e7355d
sys/senml: cleanup dependency resolution 2023-06-15 10:24:52 +02:00
090ccc5d21
sys/saul_reg: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:51 +02:00
ab61a0f978
sys/sched_round_robin: move deps resolution in its own Makefile.dep 2023-06-15 10:24:51 +02:00
79207fa17b
sys/schedstatistics: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:50 +02:00
16b2606bac
sys/cpp11-compat: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:50 +02:00
cc27ff217b
sys/log_color: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:50 +02:00
2b658246b0
sys/luid: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:49 +02:00
fb167c7a9c
sys/sema*: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:49 +02:00
7ce942ab54
sys/isrpipe: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:48 +02:00
4e3290bece
sys/od: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:48 +02:00
1070a66ead
sys/trickle: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:48 +02:00
932ad3fc1f
sys/ssp: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:47 +02:00
85c640d415
sys/trace: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:47 +02:00
384469bc38
sys/eepreg: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:46 +02:00
f9bc119ac9
sys/coding: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:46 +02:00
a554738a0c
sys/arduino: move dependency resolution in its own Makefile.dep 2023-06-15 10:24:45 +02:00
9d58ff8ca2
sys: cleanup shell dependency resolution 2023-06-15 10:24:45 +02:00