# Glowforge I2C Overview

**URL:** https://community.openglow.org/t/glowforge-i2c-overview/689
**Category:** Technical
**Tags:** technical-document
**Created:** [March 5, 2020, 2:40pm UTC](https://community.openglow.org/t/glowforge-i2c-overview/689 "2020-03-05T14:40:47Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![ScottW514](https://community.openglow.org/user_avatar/community.openglow.org/scottw514/32/5_2.png) [@ScottW514](https://community.openglow.org/u/ScottW514)
#### Post date: [March 5, 2020, 2:40pm UTC](https://community.openglow.org/t/glowforge-i2c-overview/689/1 "2020-03-05T14:40:47Z")

</div>

There are three I2C buses on the Glowforge. Only two of these are in use.  
If you have [console access](https://community.openglow.org/t/serial-port-the-easy-way/668) to your unit, you can see what is attached to them:

```auto
root@gf-abc-123:/# i2cdetect -y 0
     0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- 36 -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
root@gf-abc-123:/# 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: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
root@gf-abc-123:/# i2cdetect -y 2
     0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- 1d 1e -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- 36 -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- 47 48 -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

```

Note: I unloaded the Glowforge drivers before running the above commands. If the drivers are loaded, most of these will report “UU”, which means they are being controlled by the driver.

# Bus Descriptions

### Bus 0x00: Lid - 400kHz

This bus runs to the LID.

- **Device 0x1E** : Lid accelerometer (NXP LIS2HH12 - [datasheet](https://www.st.com/resource/en/datasheet/dm00096789.pdf))
- **Device 0x36** : Lid camera (OmniVision OV5648 - you’ll have to find the datasheet yourself. It’s proprietary. A little Google goes a long way…)

### Bus 0x01: HDMI - 100kHz

This is unused in the Glowforge, and likely a relic from previous hardware they were developing on. This bus could be harnessed for external adapter board purposes…

- **Device 0x50** : HDMI EDID Slave Address

### Bus 0x02: Control / Interconnect / Head - 100kHz

This bus connects to devices on the Control, Interconnect and Head PCB’s. To reach the Interconnect and Head PCB’s, it utilizes an I2C bus extender, which is detailed below.

- **Device 0x10** : Head MCU Bootloader. Only active when MCU is in bootloader mode.
- **Device 0x1D** : Control PCB accelerometer (NXP LIS2HH12 - [datasheet](https://www.st.com/resource/en/datasheet/dm00096789.pdf))
- **Device 0x1E** : Head PCB accelerometer (NXP LIS2HH12 - [datasheet](https://www.st.com/resource/en/datasheet/dm00096789.pdf))
- **Device 0x36** : Head camera (OmniVision OV5648)
- **Device 0x47** : Head PCB MCU. Most head functions are controlled via this device. (See the source for my [kernel-module-glowforge](https://github.com/ScottW514/kernel-module-glowforge) fork for more details.)
- **Device 0x48** : Interconnect temperature sensor (NXP LM75B - [datasheet](https://www.nxp.com/docs/en/data-sheet/LM75B.pdf))

# Interconnect / Head Bus Extender

To extend the I2C bus over the long distances to the Interconnect and Head PCB’s, the Glowforge uses PCA9600 ([datasheet](https://www.nxp.com/docs/en/data-sheet/PCA9600.pdf)) bus extenders. The Glowforge implementation follows the recommendations in the datasheet. It essentially is this:

 ![I2C_DIAGRAM](https://community.openglow.org/uploads/default/original/1X/415bc8e2ae3536c8871c8ef600b58e1490e9eaad.png)  
The I2C data and clock lines are buffered and converted from 3.3V to 12V before being sent over the long flat ribbon cables that separate the boards, then buffered and converted back to 3.3V on the other end.

# Test Points

## Control PCB

 ![Control_PCB_TestPoints](https://community.openglow.org/uploads/default/original/1X/2bd41959ce96be8f3c8ef59303eb1a4da9780a69.jpeg)

- **Lid Bus:**  
TP-C6A: I2C-0 SDA  
TP-C6B: I2C-0 SCL
- **HDMI Bus (unused)**  
TP-D3G: I2C-1 SDA  
TP-D3E: I2C-1 SCL
- **Control / Interconnect / Head Bus**  
U40: PCA9600 located at grid C4  
TP-B4H and U40 pin 1: I2C-2 SDA (3.3V level)  
TP-B3A and U40 pin 7: I2C-2 SCL (3.3V level)  
TP-B4D and U40 pin 3: I2C-2 SDA (12V level)  
TP-B4C and U40 pin 5: I2C-2 SCL (12V level)

## Interconnect PCB

 ![Interconnect_PCB_TestPoints](https://community.openglow.org/uploads/default/original/1X/d796a748dfcbeb174bce640b1d17c780c31b9dc9.jpeg)

- **Control / Interconnect / Head Bus**  
U8: PCA9600 located at grid G2  
U8 pin 1: I2C-2 SDA (3.3V level)  
U8 pin 7: I2C-2 SCL (3.3V level)  
TP-J3B and U8 pin 3: I2C-2 SDA (12V level)  
TP-J3A and U8 pin 5: I2C-2 SCL (12V level)

## Head PCB

 ![Head_PCB_TestPoints](https://community.openglow.org/uploads/default/original/1X/89412a05518514cfc018b3d390cc7aa85fc43fec.jpeg)

- **Control / Interconnect / Head Bus**  
U19: PCA9600 located at grid T2 (underside of PCB)  
TP-P2E and U19 pin 1: I2C-2 SDA (3.3V level)  
TP-P2F and U19 pin 7: I2C-2 SCL (3.3V level)  
U19 pin 3: I2C-2 SDA (12V level)  
U19 pin 5: I2C-2 SCL (12V level)
