updating i2c and hadware page
This commit is contained in:
parent
5bf1281502
commit
523e9e8a0f
4 changed files with 127 additions and 4 deletions
|
@ -11,7 +11,7 @@ This block diagram is cited from the RK3399 website documentation. [1](http://op
|
||||||
## Connector / Interface List
|
## Connector / Interface List
|
||||||
|
|
||||||
|
|
||||||
![!Board Legend](/helios64/img/hardware/helios64_board_labeled.png)
|
![!Board Legend](/helios64/img/hardware/helios64_board_labeled.jpg)
|
||||||
|
|
||||||
Name |Peripheral Type|Connector Type|Details
|
Name |Peripheral Type|Connector Type|Details
|
||||||
-----|---------------|--------------|-------
|
-----|---------------|--------------|-------
|
||||||
|
|
|
@ -1,6 +1,124 @@
|
||||||
### Check I2C Communication
|
### I2C Overview
|
||||||
|
|
||||||
To check if the system can communicate with the I2C device, we should first scan the I2C bus to see if we can detect the device.
|
Helios64 support I2C bus for the low-speed communication between devices like microcontrollers, EEPROMs, A/D and D/A converters, I/O interface and other similar peripherals in embedded systems.
|
||||||
|
In order to communicate with each I2C slave device you will need an address and communication scenario.
|
||||||
|
|
||||||
|
Helios64 board exposes the SoC I2C Bus 1, on header **P1**. Below is the header pin-out.
|
||||||
|
|
||||||
|
### I2C bus on Helios64 / RK3399K
|
||||||
|
|
||||||
|
The I2C controller on RK3399K support 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.
|
||||||
|
|
||||||
|
|
||||||
|
### Internal Bus (system reserved, NOT for user application)
|
||||||
|
|
||||||
|
In the implementation, we divide the I2C controller into 2 category.
|
||||||
|
The first implementation is for system (internal bus) and the other one is for user application (external).
|
||||||
|
Below figure describe the I2C Map inside the board:
|
||||||
|
|
||||||
|
Bus 0:
|
||||||
|
|
||||||
|
Slave | Address | Description|
|
||||||
|
------- | ------ |------ |
|
||||||
|
RK808-D | 0x1b | |
|
||||||
|
SYR837 | 0x40 | |
|
||||||
|
SYR838 | 0x41 | |
|
||||||
|
|
||||||
|
|
||||||
|
Bus 2:
|
||||||
|
|
||||||
|
Slave | Address | Description|
|
||||||
|
------- | ------ |------ |
|
||||||
|
NCT75 | 0x4c | |
|
||||||
|
PCA9655 | 0x21 | |
|
||||||
|
|
||||||
|
Bus 4:
|
||||||
|
|
||||||
|
Slave | Address | Description|
|
||||||
|
------- | ------ |------ |
|
||||||
|
FUSB302 | 0x22 | |
|
||||||
|
|
||||||
|
Above bus number and also including bus number 1,3,5 are reserved for system use, therefore not accessible to the user.
|
||||||
|
|
||||||
|
!!! Warning
|
||||||
|
This bus number and address should not be accessed directly by user. Incorrect configuration can damaged the board!
|
||||||
|
|
||||||
|
### External Bus
|
||||||
|
|
||||||
|
Helios64 exposed Bus number 7 and 8 of the I2C in **P2** and **P1** pinout, respectively.
|
||||||
|
This I2C bus can be connected to the external devices.
|
||||||
|
|
||||||
|
As described on below figure of [I2C](/helios64/img/hardware/i2c_pinout.png) (pin header number *3* and *4*), user can access the device at bus number 7.
|
||||||
|
For the [UEXT](/helios64/img/hardware/UEXT_pinout.png) (pin header number *5* and *6*), user can access the device at bus number 8.
|
||||||
|
|
||||||
|
All the I2C bus in the board are using voltage level of 3.3V, please notice Helios64 is integrated with level translator and pull up resistor.
|
||||||
|
|
||||||
|
#### I2C at P1 Header
|
||||||
|
|
||||||
|
![I2C Pinout](/helios64/img/hardware/i2c_pinout.png)
|
||||||
|
|
||||||
|
This I2C device working with 3 pin bus (SDA, SCK, and GND), and also in band addressing.
|
||||||
|
We can use a 7 bit addressing to distinguish every device, but some address is reserved for the internal communication of the Helios64 board.
|
||||||
|
|
||||||
|
#### I2C at UEXT
|
||||||
|
|
||||||
|
The I2C header bus also can be found at UEXT connector (can be found at **P2** header at the the board [overview](/helios64/hardware/overview) page) on the header number 5 and 6.
|
||||||
|
Below is the detail description of the UEXT connector:
|
||||||
|
|
||||||
|
![I2C at UEXT](/helios64/img/i2c/UEXT_pinout.png)
|
||||||
|
|
||||||
|
Pin No | Description
|
||||||
|
--------|-------------
|
||||||
|
1|3.3V
|
||||||
|
2|GND
|
||||||
|
3|TXD (UART)
|
||||||
|
4|RXD (UART)
|
||||||
|
5|SCL (I2C)
|
||||||
|
6|SDA (I2C)
|
||||||
|
7|MISO (SPI)
|
||||||
|
8|MOSI (SPI)
|
||||||
|
9|SCK (SPI)
|
||||||
|
10|SSEL (SPI)
|
||||||
|
|
||||||
|
Please take caution of the reserved address when you use the I2C interface, below is the reseved address list:
|
||||||
|
|
||||||
|
Slave Address | R/W Bit | Description
|
||||||
|
--------------|---------|-------------------
|
||||||
|
000 0000 | 0 | General call address
|
||||||
|
000 0000 | 1 | START byte(1)
|
||||||
|
000 0001 | X | CBUS address(2)
|
||||||
|
000 0010 | X | Reserved for different bus format (3)
|
||||||
|
000 0011 | X | Reserved for future purposes
|
||||||
|
000 01XX | X | Hs-mode master code
|
||||||
|
111 10XX | X | 10-bit slave addressing
|
||||||
|
111 11XX | X | Reserved for future purposes
|
||||||
|
|
||||||
|
|
||||||
|
### Usage under Linux
|
||||||
|
|
||||||
|
#### External bus block device under linux
|
||||||
|
|
||||||
|
Below table describe the external bus of I2C under Linux,
|
||||||
|
|
||||||
|
Bus number | Device Block | Description |
|
||||||
|
-----------|--------------|--------------|
|
||||||
|
7 | /dev/i2c-0 | |
|
||||||
|
8 | /dev/i2c-1 | |
|
||||||
|
|
||||||
|
|
||||||
|
#### 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 wether system detect the devices.
|
||||||
|
|
||||||
|
We can follow this step to perform the scanning process:
|
||||||
|
|
||||||
1. Install the Linux i2c tools.
|
1. Install the Linux i2c tools.
|
||||||
|
|
||||||
|
@ -24,4 +142,9 @@ root@helios64:~# i2cdetect -y 1
|
||||||
70: -- -- -- -- -- -- -- --
|
70: -- -- -- -- -- -- -- --
|
||||||
```
|
```
|
||||||
|
|
||||||
Here we can see there is a device detected at the address 0x3c. We can conclude is our OLED screen, unless you have connected more than just one I2C device on the **J9** header.
|
Here we can see there is a device detected at the address 0x3c. We can conclude is our OLED screen, unless you have connected more than just one I2C device on the **J9** header.
|
||||||
|
|
||||||
|
|
||||||
|
#### Application example
|
||||||
|
|
||||||
|
We have demonstrated the use of I2C bus of our board in the OLED application, as shown in the [I2C(OLED)](/helios4/i2c/) page you can communicate to the external device by using the external I2C bus.
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 244 KiB |
BIN
docs/helios64/img/i2c/UEXT_pinout.png
Normal file
BIN
docs/helios64/img/i2c/UEXT_pinout.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Loading…
Reference in a new issue