ODROID-N2/C4 I2C 控制器(設備節點)信息
在 ODROID-N2/C4 中,有兩個 I2C 控制器,I2C0和I2C1。
這是我們的 Ubuntu 映像的 I2C 控制器信息。
密碼 | SDA(#GPIO) | SCL(#GPIO) | 默認速度 | 最大速度 | 設備節點 |
---|---|---|---|---|---|
3(SDA), 5(SCL) | GPIOX.17(#493) | GPIOX.18(#494) | 400KHz | 2兆赫 | /dev/i2c-0 |
27(SDA), 28(SCL) | GPIOA.14(#474) | GPIOA.15(#475) | 100KHz | 2兆赫 | /dev/i2c-1 |
DTBO 已經在我們的 ubuntu 20.04 官方鏡像中引入。按照Ubuntu的20.04指南,如果你使用它,否則後續的Ubuntu 18.04的指南。
有關設備樹覆蓋的更多詳細信息,請參閱此鏈接。
Ubuntu 20.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
Ubuntu 18.04 或更低
檢查 I2C 節點號的內核版本
I2C 引腳信息
密碼 | SDA(#GPIO) | SCL(#GPIO) | 默認速度 | 最大速度 | 設備節點(內核 4.9.230-73 或更高版本) | 設備節點(內核 4.9.219-72 或更低) |
---|---|---|---|---|---|---|
3(SDA), 5(SCL) | GPIOX.17(#493) | GPIOX.18(#494) | 400KHz | 2兆赫 | /dev/i2c-0 | /dev/i2c-2 |
27(SDA), 28(SCL) | GPIOA.14(#474) | GPIOA.15(#475) | 100KHz | 2兆赫 | /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