Difference between revisions of "RPI-I2C-HUB"
Jump to navigation
Jump to search
Blwikiadmin (talk | contribs) |
Blwikiadmin (talk | contribs) |
||
Line 25: | Line 25: | ||
* Interrupt controller on each channel and host 100KHz/400KHz operation | * Interrupt controller on each channel and host 100KHz/400KHz operation | ||
* On-board termination resistors | * On-board termination resistors | ||
+ | |||
+ | == Testing == | ||
+ | |||
+ | * PCA9544 Programming | ||
+ | * Run with DigIO16-I2C card on Hub Port #0 | ||
+ | * Verify that the Hub is seen from the Raspberry Pi | ||
+ | * Note should be -y 0 for the older revision Raspberry Pis | ||
+ | <pre> | ||
+ | pi@raspi3 ~ $ sudo i2cdetect -y 1 | ||
+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | ||
+ | 00: -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 70: -- 71 -- -- -- -- -- -- | ||
+ | </pre> | ||
+ | * Shows that there is an I2C part at 0x71 | ||
+ | * Next, set the mux to channel #0 | ||
+ | <pre> | ||
+ | pi@raspi3 ~ $ sudo i2cset -y 1 0x71 0x04 0x04 | ||
+ | </pre> | ||
+ | * Verify that the hub is set to the port | ||
+ | <pre> | ||
+ | pi@raspi3 ~ $ sudo i2cdetect -y 1 | ||
+ | 0 1 2 3 4 5 6 7 8 9 a b c d e f | ||
+ | 00: -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 70: -- 71 -- -- -- -- -- -- | ||
+ | </pre> | ||
+ | * This shows the two addresses of the DigIO16-I2C | ||
+ | |||
+ | * [https://github.com/land-boards/RasPi/blob/master/RPI-I2C-Hub/RPI-I2C-Hub.py Raspberry Pi Code] - Bounce a light across 8 LEDs on a MCP23017 | ||
+ | |||
+ | === Interrupts === | ||
+ | |||
+ | (4) Active Low Inputs | ||
+ | 3.3K pullups | ||
+ | Active Low Output | ||
+ | 3.3K pullup | ||
+ | On Raspberry Pi GPIO_17 | ||
+ | Per Raspberry Pi > GPIO | ||
+ | Each GPIO pin, when configured as a general-purpose input, | ||
+ | can be configured as an interrupt source to the ARM. | ||
+ | Test code is here | ||
== Schematic == | == Schematic == |
Revision as of 20:18, 26 January 2020
Contents
I2C Hub for the Raspberry Pi
Features
- I2C Hub / Repeater / Replicator / Multiplexer / De-multiplexer
- PCA9544A IC
- Controlled via I2C
- Multiple part vendors
- Devices with the same address can be attached to different ports
- Host I2 port goes to Raspberry Pi I2C lines
- 3.3V host operation
- Four I2C slave ports
- I2C ports can use the Raspberry Pi or have their own power (power source select jumper)
- A Raspberry PI which runs 3.3V can control an I2C device which runs at 5V
- Voltage translation between the ports
- I2C ports can be 3.3V or 5V
- Fits in any Raspberry Pi model
- Cutout for Model B RCA video jack
- Interrupt controller on each channel and host 100KHz/400KHz operation
- On-board termination resistors
Testing
- PCA9544 Programming
- Run with DigIO16-I2C card on Hub Port #0
- Verify that the Hub is seen from the Raspberry Pi
- Note should be -y 0 for the older revision Raspberry Pis
pi@raspi3 ~ $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- 71 -- -- -- -- -- --
- Shows that there is an I2C part at 0x71
- Next, set the mux to channel #0
pi@raspi3 ~ $ sudo i2cset -y 1 0x71 0x04 0x04
- Verify that the hub is set to the port
pi@raspi3 ~ $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- 71 -- -- -- -- -- --
- This shows the two addresses of the DigIO16-I2C
- Raspberry Pi Code - Bounce a light across 8 LEDs on a MCP23017
Interrupts
(4) Active Low Inputs 3.3K pullups Active Low Output 3.3K pullup On Raspberry Pi GPIO_17 Per Raspberry Pi > GPIO Each GPIO pin, when configured as a general-purpose input, can be configured as an interrupt source to the ARM. Test code is here