GY-63_MS5611/libraries/TCA9548/README.md

155 lines
5.5 KiB
Markdown
Raw Normal View History

2021-05-26 06:09:27 -04:00
[![Arduino CI](https://github.com/RobTillaart/TCA9548/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
2021-11-19 07:21:54 -05:00
[![Arduino-lint](https://github.com/RobTillaart/TCA9548/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/TCA9548/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/TCA9548/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/TCA9548/actions/workflows/jsoncheck.yml)
2023-11-22 06:02:27 -05:00
[![GitHub issues](https://img.shields.io/github/issues/RobTillaart/TCA9548.svg)](https://github.com/RobTillaart/TCA9548/issues)
2021-05-26 06:09:27 -04:00
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/TCA9548/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/TCA9548.svg?maxAge=3600)](https://github.com/RobTillaart/TCA9548/releases)
2023-11-22 06:02:27 -05:00
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/TCA9548.svg)](https://registry.platformio.org/libraries/robtillaart/TCA9548)
2021-05-26 06:09:27 -04:00
2021-11-19 07:21:54 -05:00
2021-05-26 06:09:27 -04:00
# TCA9548
Arduino Library for TCA9548 I2C multiplexer.
2021-11-19 07:21:54 -05:00
2021-05-26 06:09:27 -04:00
## Description
2023-01-23 10:36:29 -05:00
Library for the TCA9548 and TCA9548a (PCA9548, PCA9548a) I2C multiplexer.
2021-05-26 06:09:27 -04:00
The library allows you to enable 0 to 7 I2C channels (ports) uniquely or simultaneously.
2021-11-19 07:21:54 -05:00
This is especially useful if you have multiple devices/sensors that have a fixed address,
or you have address conflicts between I2C devices
2021-05-26 06:09:27 -04:00
**Warning**
The library is not tested extensively.
2023-01-23 10:36:29 -05:00
I2C address of the device itself is 0x70 .. 0x77.
This address may not be used on any of the I2C channels of course.
2021-05-26 06:09:27 -04:00
2021-08-22 04:49:53 -04:00
The library caches the channels enabled, and if a channel is enabled,
2021-05-26 06:09:27 -04:00
it will not be enabled again (low level) to optimize performance.
2021-11-19 07:21:54 -05:00
2023-01-23 10:36:29 -05:00
#### Compatible devices
This library is expected to work for the PCA9548(a) too as the TCA is pin compatible newer version.
| Device | Tested | Notes |
|:-----------|:--------:|:-------:|
| TCA9548s | n |
| PCA9548 | n | see links below |
| PCA9548a | n |
2023-02-12 08:15:22 -05:00
There are however small differences, check the data sheets to see the details.
2023-01-23 10:36:29 -05:00
- [difference TCA PCA](https://e2e.ti.com/support/interface-group/interface/f/interface-forum/815758/faq-what-is-the-difference-between-an-i2c-device-with-the-family-name-pca-and-tca)
- https://electronics.stackexchange.com/questions/209616/is-nxps-pca9548a-compatible-with-tis-tca9548a
- https://www.nxp.com/docs/en/application-note/AN262.pdf
2021-05-26 06:09:27 -04:00
## Interface
2023-01-23 10:36:29 -05:00
```cpp
#include "TCA9548.h"
```
2021-11-19 07:21:54 -05:00
2023-01-23 10:36:29 -05:00
#### Constructor
2021-05-26 06:09:27 -04:00
2023-01-23 10:36:29 -05:00
- **TCA9548(const uint8_t deviceAddress, TwoWire \*wire = &Wire)** Constructor.
deviceAddress = 0x70 .. 0x77, wire = Wire or WireN.
- **bool begin(uint8_t dataPin, uint8_t clockPin, uint8_t mask = 0x00)** Set I2C pins for ESP32.
Set mask of channels to be enabled, default all disabled.
- **bool begin(uint8_t mask = 0x00)** set mask of channels to be enabled, default all disabled.
2021-11-19 07:21:54 -05:00
- **bool isConnected()** returns true if address of the multiplexer is found on I2C bus.
2021-05-26 06:09:27 -04:00
2023-01-23 10:36:29 -05:00
#### Find device
2021-05-26 06:09:27 -04:00
2021-11-19 07:21:54 -05:00
- **bool isConnected(uint8_t address)** returns true if arbitrary address is found on I2C bus.
2021-08-22 04:49:53 -04:00
This can be used to verify a certain device is available (or not) on an enabled channel.
2021-05-26 06:09:27 -04:00
2023-01-23 10:36:29 -05:00
#### Channel functions
All "channel functions" return true on success.
2021-05-26 06:09:27 -04:00
2023-01-23 10:36:29 -05:00
- **bool enableChannel(uint8_t channel)** enables channel 0 .. 7 non-exclusive.
2022-11-26 07:02:08 -05:00
Multiple channels can be enabled in parallel.
2023-01-23 10:36:29 -05:00
- **bool disableChannel(uint8_t channel)** disables channel 0 .. 7.
2022-11-26 07:02:08 -05:00
Will not disable other channels.
2023-01-23 10:36:29 -05:00
- **bool selectChannel(uint8_t channel)** enables a single channel 0 .. 7 exclusive.
2022-11-26 07:02:08 -05:00
All other channels will be disabled in the same call, so not before or after.
- **bool isEnabled(uint8_t channel)** returns true if the channel is enabled.
2023-01-23 10:36:29 -05:00
- **bool disableAllChannels()** fast way to disable all.
- **bool setChannelMask(uint8_t mask)** enables 0 or more channels simultaneously with a bit mask.
2021-11-19 07:21:54 -05:00
- **uint8_t getChannelMask()** reads back the bit mask of the channels enabled.
2023-01-23 10:36:29 -05:00
#### Reset
2021-05-26 06:09:27 -04:00
- **void setResetPin(uint8_t resetPin)** sets the pin to reset the chip. (Not tested)
- **void reset()** trigger the reset pin.
2021-11-19 07:21:54 -05:00
- **int getError()** returns the last I2C error.
2023-01-23 10:36:29 -05:00
#### Forced IO
2021-11-19 07:21:54 -05:00
When forced IO is set all writes and read - **getChannelMask()** - will go to the device.
If the flag is set to false it will cache the value of the channels enabled.
2023-01-23 10:36:29 -05:00
This will result in more responsive / faster calls.
2021-11-19 07:21:54 -05:00
Note that writes are only optimized if the channels are already set.
2022-11-26 07:02:08 -05:00
- **void setForced(bool forced = false)** set forced write, slower but more robust.
- forced == false == fast mode (default).
2023-02-12 08:15:22 -05:00
- forced == true == slower, robust mode.
2021-11-19 07:21:54 -05:00
- **bool getForced()** returns set flag.
2021-05-26 06:09:27 -04:00
2023-02-12 08:15:22 -05:00
## Error Codes
Not implemented yet, preparation for 0.2.0.
| name | value | description |
|:------------------------|:-------:|:------------------------|
| TCA9548_OK | 00 | no error |
| TCA9548_ERROR_I2C | -10 | detected an I2C error |
| TCA9548_ERROR_CHANNEL | -20 | channel out of range |
2023-01-23 10:36:29 -05:00
## Future
2021-05-26 06:09:27 -04:00
2023-01-23 10:36:29 -05:00
#### Must
2021-05-26 06:09:27 -04:00
2023-01-23 10:36:29 -05:00
- improve documentation.
2023-02-12 08:15:22 -05:00
- improve error handling.
2021-05-26 06:09:27 -04:00
2023-01-23 10:36:29 -05:00
#### Should
2022-11-26 07:02:08 -05:00
2023-02-12 08:15:22 -05:00
- add examples.
- test test and test.
- write unit test.
- create derived classes for compatible devices (0.2.0).
- see above PCA9548 and PCA9548a.
2023-11-22 06:02:27 -05:00
2023-01-23 10:36:29 -05:00
#### Could
2021-05-26 06:09:27 -04:00
2023-02-12 08:15:22 -05:00
- set an "always enabled" mask.
- investigate the consequences!
2023-01-23 10:36:29 -05:00
#### Wont
2021-05-26 06:09:27 -04:00
2023-11-22 06:02:27 -05:00
## Support
If you appreciate my libraries, you can support the development and maintenance.
Improve the quality of the libraries by providing issues and Pull Requests, or
donate through PayPal or GitHub sponsors.
Thank you,
2021-05-26 06:09:27 -04:00