feat(ds18b20): термометры DS18B20 поверх программной 1-Wire

Перенесён из репозитория ds18b20, который подключался сабмодулем в
KONOR_ds18b20. История библиотеки осталась там; сюда пришло состояние
на момент переезда.

Ядро на C99 без stm32f10x.h и динамической памяти. Порт — пять функций
(Init, DelayUs, Reset, WriteBit, ReadBit); реализация для STM32F1 идёт
в комплекте в ports/stm32f1. Хостовые тесты на модели шины с виртуальными
датчиками проходят: tests/test_ds18b20.c.
This commit is contained in:
2026-08-23 01:15:34 +03:00
parent 13f2c8fe64
commit 873ac438f3
11 changed files with 1701 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
/**
* @file fake_onewire.h
* @brief Модель шины 1-Wire с виртуальными датчиками для host-тестов.
*/
#ifndef FAKE_ONEWIRE_H
#define FAKE_ONEWIRE_H
#include <stdint.h>
#define FAKE_MAX_DEVICES 8U
/** Виртуальный датчик: ROM, scratchpad и управляемые отказы. */
typedef struct {
uint8_t rom[8];
uint8_t scratchpad[9];
uint8_t present; /**< 0 - датчик снят с шины. */
uint8_t parasite; /**< 1 - отвечает как паразитно питаемый. */
uint8_t accept_writes; /**< 0 - молча игнорирует запись. */
uint8_t corrupt_crc; /**< 1 - портит CRC8 scratchpad. */
} fake_device_t;
typedef struct {
fake_device_t devices[FAKE_MAX_DEVICES];
uint8_t count;
uint32_t reset_count;
uint32_t convert_count;
uint32_t copy_count;
uint32_t delay_us_total;
} fake_bus_t;
/** Подключает модель к порту; после вызова работают функции OneWire_*. */
void fake_bus_attach(fake_bus_t *bus);
/** Заполняет датчик: семь байт ROM без CRC, температура и тип питания. */
void fake_device_init(fake_device_t *device, const uint8_t rom7[7],
int16_t raw, uint8_t parasite);
uint8_t fake_bus_crc8(const uint8_t *data, uint32_t size);
#endif /* FAKE_ONEWIRE_H */