the_i2c_bus
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| the_i2c_bus [2020/01/15 22:51] – [What's this I²C Thing?] tell | the_i2c_bus [2022/02/03 09:06] (current) – tell | ||
|---|---|---|---|
| Line 8: | Line 8: | ||
| Those two wires are called " | Those two wires are called " | ||
| - | Some basic facts aboutI²C: | + | Some basic facts about I²C: |
| - | * It was originally intended to stay on the same PC board, but works over a few feet of cable | + | * It was originally intended to stay on the same PC board, but works over a few feet of cable |
| - | * It runs at 100Kbps or 400Kbps | + | * It runs at 100Kbps or 400Kbps |
| - | * Each " | + | * Devices only pull SDA and SCL low |
| - | * Some devices have pins that can chose from several addresses. | + | * Pullup resistors are required on SDA and SCL, but most boards have the installed already. |
| + | | ||
| + | * Addresses are 7 bits long, therefore there are only 128 possible addresses. | ||
| + | | ||
| - | ====== I²C in FRC ====== | + | ====== I²C Protocol |
| - | Since the introduction of the RoboRio, there has been an easy way to use I²C for FIRST robots. The connector on the Rio looks like this. | + | The I²C standard defines |
| + | * Claim the bus and start a transaction: | ||
| + | * Stop and release the bus: release SDA to go high, while leaving SCL high | ||
| + | * Send a byte (and get an acknowlegement) | ||
| + | * Read a byte | ||
| + | |||
| + | This figure shows the basic idea: start, write one byte, acknowledge, | ||
| + | {{ : | ||
| + | |||
| + | All transfers start as shown here, with the master sending one byte onto the bus containing the 7 bit address and one bit that indicates whether the next byte will be a write (master to slave) or a read (slave sends to master). | ||
| + | |||
| + | A good, relatively simple explanation of data transfer is https:// | ||
| + | |||
| + | These get combined in various ways depending on the device. | ||
| + | |||
| + | ====== I²C in FRC ====== | ||
| {{ : | {{ : | ||
| + | Since the introduction of the RoboRio, there has been an easy way to use I²C for FIRST robots. | ||
| + | It uses the same housings and headers that hold pins on 0.1 inch centers. | ||
| - | Around 2018-2019 we started to see packaged color and distance sensors from Rev Robotics and others, and for 2020 Rev introduced a cable to make using one of them easy with the RoboRio. | + | In addition to SCL and SDA, there is a pin for 3.3v power, and a pin for the common ground for signal and power. |
| + | |||
| + | Around 2018-2019 we started to see packaged color and distance sensors from Rev Robotics and others. | ||
| + | * http:// | ||
| + | * http:// | ||
| + | For 2020 Rev introduced a cable to make using one of them easy with the RoboRio. | ||
| + | * http:// | ||
| + | |||
| + | ====== Software for I²C devices: start with Arduino ====== | ||
| + | |||
| + | Nearly every I²C device has unique requirements from the software to communicate with it. Fortunately, | ||
| + | |||
| + | This is often the best place to find such examples. | ||
| + | |||
| + | By 2021 there appeared FRC Java libraries for some of the I²C sensors that we've used. But going back to the Arduino C code is necessary for some of the interesting ones that are less common in FRC. | ||
| ====== I²C in other maker/hobby wiring ====== | ====== I²C in other maker/hobby wiring ====== | ||
| + | |||
| ===== QWIIC ===== | ===== QWIIC ===== | ||
| Line 30: | Line 65: | ||
| [[http:// | [[http:// | ||
| - | (picture) | + | {{ : |
| Adafruit wants to call the same thing [[https:// | Adafruit wants to call the same thing [[https:// | ||
| + | |||
| + | ===== Eastbots I2C Tester ===== | ||
| + | |||
| + | In 2019 we had some flaky i2c operation, so we built this wiring tester | ||
| + | [[testing_i2c_wiring]] | ||
| + | |||
| + | |||
the_i2c_bus.1579146662.txt.gz · Last modified: 2020/01/15 22:51 by tell
