mraa
2.0.0
Low Level Skeleton Library for Communication on GNU/Linux platforms
|
This module allows one to use MRAA's UART support in order to interact with Dallas 1-wire compliant devices on a 1-wire bus. It makes use of the UART for timing purposes. The principle of operation is described here: https://www.maximintegrated.com/en/app-notes/index.mvp/id/214
It is important the you use a UART with CMOS/TTL level voltages (3.3v/5v) RX and TX lines. DO NOT use standard RS232 level voltages, or you are going to have a bad day.
In addition, a diode should be placed across the RX and TX lines like so:
-| U| A| TX—|<–+ R| | T| RX----—o-----—o 1-wire data bus -|
The diode on TX is a 1N4148 (cheap and common), with the cathode connected to TX, and the anode connected to RX and the rest of the 1-wire data line.
Go to the source code of this file.
Data Structures | |
struct | _mraa_uart_ow |
Functions | |
mraa_uart_ow_context | mraa_uart_ow_init (int uart) |
mraa_uart_ow_context | mraa_uart_ow_init_raw (const char *path) |
const char * | mraa_uart_ow_get_dev_path (mraa_uart_ow_context dev) |
mraa_result_t | mraa_uart_ow_stop (mraa_uart_ow_context dev) |
int | mraa_uart_ow_read_byte (mraa_uart_ow_context dev) |
int | mraa_uart_ow_write_byte (mraa_uart_ow_context dev, uint8_t byte) |
int | mraa_uart_ow_bit (mraa_uart_ow_context dev, uint8_t bit) |
mraa_result_t | mraa_uart_ow_reset (mraa_uart_ow_context dev) |
mraa_result_t | mraa_uart_ow_rom_search (mraa_uart_ow_context dev, mraa_boolean_t start, uint8_t *id) |
mraa_result_t | mraa_uart_ow_command (mraa_uart_ow_context dev, uint8_t command, uint8_t *id) |
uint8_t | mraa_uart_ow_crc8 (uint8_t *buffer, uint16_t length) |
Macros | |
#define | MRAA_UART_OW_ROMCODE_SIZE 8 |
Typedefs | |
typedef struct _mraa_uart_ow * | mraa_uart_ow_context |
Enumerations | |
enum | mraa_uart_ow_rom_cmd_t { MRAA_UART_OW_CMD_READ_ROM = 0x33, MRAA_UART_OW_CMD_MATCH_ROM = 0x55, MRAA_UART_OW_CMD_SKIP_ROM = 0xcc, MRAA_UART_OW_CMD_SEARCH_ROM_ALARM = 0xec, MRAA_UART_OW_CMD_SEARCH_ROM = 0xf0 } |
mraa_uart_ow_context mraa_uart_ow_init | ( | int | uart | ) |
Initialise uart_ow_context, uses UART board mapping
uart | the index of the uart set to use |
mraa_uart_ow_context mraa_uart_ow_init_raw | ( | const char * | path | ) |
Initialise a raw uart_ow_context. No board setup.
path | for example "/dev/ttyS0" |
const char* mraa_uart_ow_get_dev_path | ( | mraa_uart_ow_context | dev | ) |
Get char pointer with tty device path within Linux For example. Could point to "/dev/ttyS0"
dev | uart_ow context |
mraa_result_t mraa_uart_ow_stop | ( | mraa_uart_ow_context | dev | ) |
Destroy a mraa_uart_ow_context
dev | uart_ow context |
int mraa_uart_ow_read_byte | ( | mraa_uart_ow_context | dev | ) |
Read a byte from the 1-wire bus
dev | uart_ow context |
int mraa_uart_ow_write_byte | ( | mraa_uart_ow_context | dev, |
uint8_t | byte | ||
) |
Write a byte to a 1-wire bus
dev | uart_ow context |
byte | the byte to write to the bus |
int mraa_uart_ow_bit | ( | mraa_uart_ow_context | dev, |
uint8_t | bit | ||
) |
Write a bit to a 1-wire bus and read a bit corresponding to the time slot back. This is possible due to the way we wired the TX and RX together with a diode, forming a loopback.
dev | uart_ow context |
bit | the bit to write to the bus |
mraa_result_t mraa_uart_ow_reset | ( | mraa_uart_ow_context | dev | ) |
Send a reset pulse to the 1-wire bus and test for device presence
dev | uart_ow context |
mraa_result_t mraa_uart_ow_rom_search | ( | mraa_uart_ow_context | dev, |
mraa_boolean_t | start, | ||
uint8_t * | id | ||
) |
Begin a rom code search of the 1-wire bus. This function implements the 1-wire search algorithm. See the uart_ow.c example for an idea on how to use this function to identify all devices present on the bus.
dev | uart_ow context |
start | true to start a new search from scratch, false to continue an existing search |
id | the 8-byte rom code id of the current matched device when a device is found |
mraa_result_t mraa_uart_ow_command | ( | mraa_uart_ow_context | dev, |
uint8_t | command, | ||
uint8_t * | id | ||
) |
Send a command byte to a device on the 1-wire bus
dev | uart_ow context |
command | the command byte to send |
id | the rom code id of the device to receive the command, NULL for all devices on the bus |
uint8_t mraa_uart_ow_crc8 | ( | uint8_t * | buffer, |
uint16_t | length | ||
) |
Perform a Dallas 1-wire compliant CRC8 computation on a buffer
buffer | the buffer containing the data |
length | the length of the buffer |
#define MRAA_UART_OW_ROMCODE_SIZE 8 |
8 bytes (64 bits) for a device rom code
typedef struct _mraa_uart_ow * mraa_uart_ow_context |
for now, we simply use the normal MRAA UART context
UART One Wire ROM related Command bytes