Helios64 supports I2C bus for low-speed communication between devices like microcontrollers, EEPROMs, A/D and D/A converters, I/O interfaces and other similar peripherals. In order to communicate with each I2C slave device you will need an address and communication scenario.
## I2C bus on Helios64 / RK3399
The I2C controller on RK3399 supports following features:
- 9 on-chip I2C controllers
- Multi-master I2C operation
- Support 7bits and 10bits address mode
- Serial 8bits oriented and bidirectional data transfers can be made
- Software programmable clock frequency
- Data on the I2C-bus can be transferred at rates of up to 100 kbit/s in the Standardmode, up to 400 kbit/s in the Fast-mode or up to 1 Mbit/s in Fast-mode Plus
**Note:** In the implementation we divided the I2C controller into 2 categories:
* Internal Bus, reserved for the system
* Externel Bus, allocated for user application
## Internal Bus
!!! Warning
Theses buses and addresses should not be accessed directly by user. Incorrect configuration can damage the board.
Below table list the I2C external bus device name as detected under Linux:
Bus number | Device Block | Description |
-----------|--------------|--------------|
7 | /dev/i2c-7 | |
8 | /dev/i2c-8 | |
### Checking the I2C Communication under linux
In order to communicate with the I2C devices, first we need to identify the I2C bus. By performing scan you can see whether the system can detect device.
Here we can see there is a device detected at the address 0x3c. If you have connected more than just one I2C device on the **P1** header, there will be more devices with different addresses detected on the bus.