Files
templates/c/can-sensor/README.md

54 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# can-sensor
Однокадровый транспорт SETCAN SETTINGS для привязки 64-битного ROM 1-Wire к
локации «номер сборки + позиция» по шине CAN.
Ядро на C99: не включает заголовки периферии, не обращается к регистрам,
не пользуется прерываниями. Обмен идёт через таблицу `CanSensor_Io`,
которую заполняет порт платы.
Сообщение помещается в один Extended CAN-кадр: локация находится в Body
29-битного ID, а ROM — в восьми байтах payload:
```
запрос 0x17FEZZYY: DLC=0 — GET, DLC=8 — WRITE/REPLACE/CLEAR
ответ 0x1FFEZZYY: DLC=8 — текущий ROM, DLC=1 — код ошибки
```
## Состав
| Файл | Что делает | Зависимости |
|---|---|---|
| `can_sensor.h`, `can_sensor.c` | сборка и разбор SETTINGS, повторы передачи, счётчики обмена | `stdint.h` |
`ZZ` — номер сборки, `YY` — позиция. Нулевой ROM с DLC=8 очищает локацию.
## Что нужно от платформы
```c
uint8_t send(void *ctx, const CanSensor_Frame *frame); /* 1 — кадр принят */
uint8_t receive(void *ctx, CanSensor_Frame *frame); /* 1 — кадр получен */
```
`receive` необязателен: с нулевым полем узел работает только на передачу.
## Быстрый старт
```c
CanSensor link;
CanSensor_Io io = { .send = bxcan_send, .receive = bxcan_receive, .context = &board };
CanSensor_Config config;
CanSensor_ConfigDefault(&config); /* TX 0x1FFE0000, RX 0x17FE0000 */
CanSensor_Init(&link, &io, &config);
CanSensor_SendId(&link, position, assembly_serial, rom);
CanSensor_Message message;
if (CanSensor_Poll(&link, &message)) { /* принят идентификатор */ }
```
## Проверено в проектах
`KONOR_ds18b20` — bxCAN на STM32F103C8T6. Естественная пара — [`ds18b20`](../ds18b20):
ROM-коды, найденные `DS18B20_Search()`, уходят в шину как есть.