快速瀏覽

ODROID-N2/C4 I2C 控制器(設備節點)信息


 

在 ODROID-N2/C4 中,有兩個 I2C 控制器,I2C0I2C1

這是我們的 Ubuntu 映像的 I2C 控制器信息。

密碼SDA(#GPIO)SCL(#GPIO)默認速度最大速度設備節點
3(SDA), 5(SCL)GPIOX.17(#493)GPIOX.18(#494)400KHz2兆赫/dev/i2c-0
27(SDA), 28(SCL)GPIOA.14(#474)GPIOA.15(#475)100KHz2兆赫/dev/i2c-1

DTBO 已經在我們的 ubuntu 20.04 官方鏡像中引入。按照Ubuntu的20.04指南,如果你使用它,否則後續的Ubuntu 18.04的指南。
有關設備樹覆蓋的更多詳細信息,請參閱此鏈接。


如果您使用的是 ODROID-C4 和圖像“ubuntu-20.04-4.9-minimal-odroid-c4-20200526.img.xz”或之前的版本,您應該按照以下步驟進行升級。

odroid@odroid:~$ uname -r
4.9.218-25
odroid@odroid:~$ sudo sed -i 's/bionic/focal/g' /etc/apt/sources.list.d/odroid.list
odroid@odroid:~$ cat /etc/apt/sources.list.d/odroid.list
deb http://deb.odroid.in/c4/ 焦點主
odroid@odroid:~$ sudo apt update && sudo apt upgrade

完成所有升級後重新啟動。

odroid@odroid:~$ sudo reboot
odroid@odroid:~$ uname -r
4.9.230-32
使用 DT Overlays 啟用 I2C

如果您使用的是 Ubuntu 18.04 或更低版本,則必須點擊此鏈接。

默認情況下,兩條 I2C 總線已啟用,無需任何編輯。
檢查“/media/boot/config.ini”中的 DT Overlays 文件

odroid@odroid:~$ sudo vi /media/boot/config.ini
; Device Tree Overlay
overlay_resize=16384
overlay_profile=hktft32
overlays="spi0 i2c0 i2c1 uart0"

如果沒有的話,在“overlays=”中添加你想要的“i2c0”或“i2c1”。
重啟後,您可以使用此命令找到 I2C 節點。

odroid@odroid:~$ ls /dev/i2c* 
/dev/i2c-0 /dev/i2c-1
使用 DT Overlays 啟用 I2C

如果要將 40Pin 中的 Pin #3、#5、#27、#28 用作 GPIO,則必須先禁用 I2C 功能。
打開“/media/boot”中的“config.ini”文件。

odroid@odroid:~$ sudo vi /media/boot/config.ini

然後,刪除要禁用的 i2c。
這個 config.ini 意味著 i2c0 被禁用。

; Device Tree Overlay
overlay_resize=16384
overlay_profile=hktft32
overlays="spi0 i2c1 uart0"

重啟後,可以查看“/dev/”節點。

odroid@odroid:~$ ls /dev/i2c* 
/dev/i2c-1
更改 I2C 速度

您可以通過編輯/sys/bus/i2c/devices/i2c-{0,1}/device/speed文件來更改每個 I2C 節點的速度

# Change user to root
odroid@odroid:~$ su root
 
# To change I2C0 clock from 400KHz to 100KHz
root@odroid:~# cat /sys/bus/i2c/devices/i2c-0/device/speed
400000
root@odroid:~# echo 100000 > /sys/bus/i2c/devices/i2c-0/device/speed
root@odroid:~# cat /sys/bus/i2c/devices/i2c-0/device/speed
100000
# To change I2C1 clock from 100KHz to 400KHz
root@odroid:~# cat /sys/bus/i2c/devices/i2c-1/device/speed
100000
root@odroid:~# echo 400000 > /sys/bus/i2c/devices/i2c-1/device/speed
root@odroid:~# cat /sys/bus/i2c/devices/i2c-1/device/speed
400000

檢查 I2C 節點號的內核版本

請注意,設備節點編號因內核版本而異。
請確保您使用的內核版本。

odroid@odroid:~$ uname -r 
4.9.230-89

然後,參考“I2C Pin信息表”的節點號

I2C 引腳信息
密碼SDA(#GPIO)SCL(#GPIO)默認速度最大速度設備節點(內核 4.9.230-73 或更高版本)設備節點(內核 4.9.219-72 或更低)
3(SDA), 5(SCL)GPIOX.17(#493)GPIOX.18(#494)400KHz2兆赫/dev/i2c-0/dev/i2c-2
27(SDA), 28(SCL)GPIOA.14(#474)GPIOA.15(#475)100KHz2兆赫/dev/i2c-1/dev/i2c-3

 

使用設備樹編譯器啟用 I2C

默認情況下,ODROID-N2/C4 被配置為加載 I2C 驅動程序,你可以找到兩條 I2C 總線,I2C0 和 I2C1,為了將它們切換到通用 GPIO,需要fdtput命令,該命令可以與包設備一起安裝 –樹編譯器

root@odroid:~# apt install device-tree-compiler
檢查當前模式

默認配置用於 I2C 總線,可以使用fdtget命令進行檢查。為了應用更改,更改的設備樹文件必須位於引導目錄中,並且必須重新啟動 ODROID-N2/C4。

I2C0
root@odroid:~# fdtget /media/boot/meson64_odroidc4.dtb /soc/cbus@ffd00000/i2c@1d000 status 
OK
I2C1
root@odroid:~# fdtget /media/boot/meson64_odroidc4.dtb /soc/cbus@ffd00000/i2c@1c000 status
okay
I2C 總線 -> GPIO 引腳
I2C0
root@odroid:~# fdtput -ts /media/boot/meson64_odroidc4.dtb /soc/cbus@ffd00000/i2c@1d000 狀態禁用
I2C1
root@odroid:~# fdtput -ts /media/boot/meson64_odroidc4.dtb /soc/cbus@ffd00000/i2c@1c000 狀態禁用
GPIO 引腳 -> I2C 總線
I2C0
root@odroid:~# fdtput -ts /media/boot/meson64_odroidc4.dtb /soc/cbus@ffd00000/i2c@1d000 status OK
I2C1
root@odroid:~# fdtput -ts /media/boot/meson64_odroidc4.dtb /soc/cbus@ffd00000/i2c@1c000 status OK

重新啟動後,您的更改將被應用,如果i2c_meson_master已加載,則 I2C 總線 0 或 1 作為 I2C 總線運行,可以使用命令lsmod命令進行檢查。

root@odroid:~# lsmod | grep i2c 
i2c_meson_master 20480 0

如果您想在 GPIO 模式下使用 I2C 固定引腳,您可以卸載模塊。

# Unload
root@odroid:~# modprobe -r i2c_meson_master
root@odroid:~# ll /dev/i2c*
ls: cannot access '/dev/i2c*': No such file or directory
 
# Load
root@odroid:~# modprobe i2c_meson_master
root@odroid:~# ll /dev/i2c*
crw-rw---- 1 root i2c 89, 2 Jan 11 12:09 /dev/i2c-0
crw-rw---- 1 root i2c 89, 3 Jan 11 12:09 /dev/i2c-1
設備節點

根據您的內核版本檢查您的 I2C 節點編號。
checking_kernel_version_for_i2c_node_number

在 ODROID-N2/C4 中,I2C 設備映射在/sys/bus/i2c/devices目錄中。

root@odroid:~# ll /sys/bus/i2c/devices
total 0
drwxr-xr-x 2 root root 0 Jan  1  1970 ./
drwxr-xr-x 4 root root 0 Jan  1  1970 ../
lrwxrwxrwx 1 root root 0 Jan 29  2018 1-0051 -> ../../../devices/platform/soc/ffd00000.cbus/ffd1c000.i2c/i2c-1/1-0051/
lrwxrwxrwx 1 root root 0 Jan 11 10:00 i2c-0 -> ../../../devices/platform/soc/ffd00000.cbus/ffd1d000.i2c/i2c-0/
lrwxrwxrwx 1 root root 0 Jan 11 10:01 i2c-1 -> ../../../devices/platform/soc/ffd00000.cbus/ffd1c000.i2c/i2c-1/

例如,請參見/sys/bus/i2c/devices/i2c-0目錄中的文件。

root@odroid:~# ll /sys/bus/i2c/devices/i2c-0/
total 0
drwxr-xr-x 4 root root    0 Jan 29  2018 ./
drwxr-xr-x 4 root root    0 Jan  1  1970 ../
--w------- 1 root root 4096 Jan 11 10:01 delete_device
lrwxrwxrwx 1 root root    0 Jan 11 10:00 device -> ../../ffd1d000.i2c/
drwxr-xr-x 3 root root    0 Jan 29  2018 i2c-dev/
-r--r--r-- 1 root root 4096 Jan 10 15:52 name
--w------- 1 root root 4096 Jan 11 10:01 new_device
lrwxrwxrwx 1 root root    0 Jan 11 10:01 of_node -> '../../../../../../firmware/devicetree/base/soc/cbus@ffd00000/i2c@1d000'/
drwxr-xr-x 2 root root    0 Jan 11 10:01 power/
lrwxrwxrwx 1 root root    0 Jan 29  2018 subsystem -> ../../../../../../bus/i2c/
-rw-r--r-- 1 root root 4096 Jan 29  2018 uevent

要了解其在設備樹中的屬性,請參閱of_node目錄。

root@odroid:~# ll /sys/bus/i2c/devices/i2c-0/of_node/
total 0
-r--r--r--  1 root root  4 Jan 11 10:07 '#address-cells'
-r--r--r--  1 root root  4 Jan 11 10:07 '#size-cells'
drwxr-xr-x  2 root root  0 Jan 11 10:01  ./
drwxr-xr-x 13 root root  0 Jan 11 10:01  ../
-r--r--r--  1 root root  4 Jan 11 10:07  clock-frequency
-r--r--r--  1 root root  8 Jan 11 10:07  clock-names
-r--r--r--  1 root root  8 Jan 11 10:07  clocks
-r--r--r--  1 root root 23 Jan 11 10:07  compatible
-r--r--r--  1 root root 24 Jan 11 10:07  interrupts
-r--r--r--  1 root root  4 Jan 11 10:07  name
-r--r--r--  1 root root  4 Jan 11 10:07  phandle
-r--r--r--  1 root root  4 Jan 11 10:07  pinctrl-0
-r--r--r--  1 root root  4 Jan 11 10:07  pinctrl-1
-r--r--r--  1 root root 21 Jan 11 10:07  pinctrl-names
-r--r--r--  1 root root 16 Jan 11 10:07  reg
-r--r--r--  1 root root  5 Jan 11 10:07  status
更改 I2C 速度

根據您的內核版本檢查您的 I2C 節點編號。
checking_kernel_version_for_i2c_node_number

您可以通過編輯/sys/bus/i2c/devices/i2c-{0,1}/device/speed文件來更改每個 I2C 節點的速度

# To change I2C0 clock from 400KHz to 100KHz
root@odroid:~# cat /sys/bus/i2c/devices/i2c-0/device/speed
400000
root@odroid:~# echo 100000 > /sys/bus/i2c/devices/i2c-0/device/speed
root@odroid:~# cat /sys/bus/i2c/devices/i2c-0/device/speed
100000
# To change I2C1 clock from 100KHz to 400KHz
root@odroid:~# cat /sys/bus/i2c/devices/i2c-1/device/speed
100000
root@odroid:~# echo 400000 > /sys/bus/i2c/devices/i2c-1/device/speed
root@odroid:~# cat /sys/bus/i2c/devices/i2c-1/device/speed
400000
快速瀏覽

ODROID-C4

四核ARM CORTEX-A55 |4GB RAM |4 USB3 PORTS