INMYS WIKI

Инженерами для инженеров

Инструменты пользователя

Инструменты сайта


boards:nms-sm-rk3568:firmware_opensource:quick_start

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
boards:nms-sm-rk3568:firmware_opensource:quick_start [2024/04/22 11:58] – [Пример использования интерфейсного пина в качестве GPIO] Артем Слеповboards:nms-sm-rk3568:firmware_opensource:quick_start [2025/02/18 09:23] (текущий) – [Работа с GPIO] Артем Слепов
Строка 1: Строка 1:
 ===== RK3568 Quick Start Kernel 6.1 ===== ===== RK3568 Quick Start Kernel 6.1 =====
  
-==== CAN ====+===== CAN =====
  
 Для корректной работы шины CAN на отладочной плате NMS_SM_EVM необходимо подключить терминаторы - установить джамперы X13 и X14.\\  {{:boards:nms-sm-rk3568:firmware_opensource:2024-01-12_13-43-58.png?600&nolink}}\\  Драйвер CAN собирается как модуль ядра .ko с помощью buildroot-external. Исходники взяты из ядра 4.19, которое предоставляется Rockchip. Модуль ядра подгружается в **/etc/init.d/S49CANinit**. Для корректной работы шины CAN на отладочной плате NMS_SM_EVM необходимо подключить терминаторы - установить джамперы X13 и X14.\\  {{:boards:nms-sm-rk3568:firmware_opensource:2024-01-12_13-43-58.png?600&nolink}}\\  Драйвер CAN собирается как модуль ядра .ko с помощью buildroot-external. Исходники взяты из ядра 4.19, которое предоставляется Rockchip. Модуль ядра подгружается в **/etc/init.d/S49CANinit**.
Строка 17: Строка 17:
 candump -T 1000 can0 > /tmp/1.txt& candump -T 1000 can0 > /tmp/1.txt&
 sleep 1 sleep 1
-cansend can1 500+cansend can1 500#DEADBEEF
 sleep 2 sleep 2
  
Строка 29: Строка 29:
 **fd on**</note> **fd on**</note>
 {{:boards:nms-sm-rk3568:firmware_opensource:can_test.png}} {{:boards:nms-sm-rk3568:firmware_opensource:can_test.png}}
-==== ETH LED configuration ====+===== ETH LED configuration =====
  
 Светодиоды Ethernet управляются [[https://doc.inmys.ru/open?hash=6676d0c51e40251e92242df2ca3afc1e&fn=PHY-DAP8211R-Full%2BV1.2-20220531.pdf|PHY DAP8211]]. Описания регистров п. 4.3.10 - 4.3.14 Светодиоды Ethernet управляются [[https://doc.inmys.ru/open?hash=6676d0c51e40251e92242df2ca3afc1e&fn=PHY-DAP8211R-Full%2BV1.2-20220531.pdf|PHY DAP8211]]. Описания регистров п. 4.3.10 - 4.3.14
Строка 73: Строка 73:
  
  
-==== Работа с GPIO ====+===== Работа с GPIO =====
  
 Стандарт модулей SMARC предусматривает GPIO0-GPIO13, но не все они имплементированы в модулях NMS-SM-RK3568: Стандарт модулей SMARC предусматривает GPIO0-GPIO13, но не все они имплементированы в модулях NMS-SM-RK3568:
   * В [[https://wiki.inmys.ru/doku.php?id=boards:nms-sm-rk3568:v1_ru:start|ревизии 1]] реализованы GPIO0-GPIO3   * В [[https://wiki.inmys.ru/doku.php?id=boards:nms-sm-rk3568:v1_ru:start|ревизии 1]] реализованы GPIO0-GPIO3
-  * В [[https://wiki.inmys.ru/doku.php?id=boards:nms-sm-rk3568:v1_ru:start|ревизии 2]] реализованы GPIO0-GPIO3, GPIO10, GPIO11+  * В [[https://wiki.inmys.ru/doku.php?id=boards:nms-sm-rk3568:v2_ru:start|ревизии 2]] реализованы GPIO0-GPIO3, GPIO10, GPIO11 
 +  * В [[https://wiki.inmys.ru/doku.php?id=boards:nms-sm-rk3568:v3_ru:start|ревизии 3]] реализованы все GPIO стандарта SMARC. ([[https://gitlab.inmys.online/rk3568-kernel-5.10/kernel/-/blob/main/arch/arm64/boot/dts/rockchip/rk3568-inmys-smarc-som_v3.dtsi#L1287|ссылка на dts]])
  
 Также при необходимости некоторые интерфейсные пины(в соответвии с таблицей "Распиновка разъема") можно переопределить как GPIO. Также при необходимости некоторые интерфейсные пины(в соответвии с таблицей "Распиновка разъема") можно переопределить как GPIO.
  
-Все GPIO прописаны dts и видны ///sys/kernel/debug/gpio//. Для управления состоянием пина по имени (имя во 2 столбце)  можно использовать скрипт {{ :boards:nms-sm-rk3568:firmware_opensource:gpio.sh |gpio.sh}}+Процессор содержит 5 банков по 32 пина. Все GPIO прописаны dts и видны ///sys/kernel/debug/gpio//. Для управления состоянием пина по имени (имя во 2 столбце)  можно использовать скрипт {{ :boards:nms-sm-rk3568:firmware_opensource:gpio.sh |gpio.sh}}
 <code> <code>
 root@192-168-1-101:~# cat /sys/kernel/debug/gpio  root@192-168-1-101:~# cat /sys/kernel/debug/gpio 
Строка 88: Строка 89:
  gpio-1   (GPIO0_A1            )  gpio-1   (GPIO0_A1            )
  gpio-2   (GPIO0_A2            )  gpio-2   (GPIO0_A2            )
- gpio-3   (GPIO0_A3            ) + .......
- gpio-4   (GPIO0_A4            |cd                  ) in  hi IRQ ACTIVE LOW +
- gpio-5   (GPIO0_A5            ) +
- gpio-6   (GPIO0_A6            ) +
- gpio-7   (GPIO0_A7            ) +
- gpio-8   (GPIO0_B0            ) +
- gpio-9   (GPIO0_B1            ) +
- gpio-10  (GPIO0_B2            ) +
- gpio-11  (GPIO0_B3            ) +
- gpio-12  (GPIO0_B4            ) +
- gpio-13  (GPIO0_B5            ) +
- gpio-14  (GPIO0_B6            ) +
- gpio-15  (GPIO0_B7            ) +
- gpio-16  (GPIO0_C0            ) +
- gpio-17  (GPIO0_C1            ) +
- gpio-18  (GPIO0_C2            ) +
- gpio-19  (GPIO0_C3            ) +
- gpio-20  (GPIO0_C4            ) +
- gpio-21  (GPIO0_C5            ) +
- gpio-22  (GPIO0_C6            ) +
- gpio-23  (GPIO0_C7            ) +
- gpio-24  (GPIO0_D0            ) +
- gpio-25  (GPIO0_D1            ) +
- gpio-26  (GPIO0_D2            ) +
- gpio-27  (GPIO0_D3            ) +
- gpio-28  (GPIO0_D4            ) +
- gpio-29  (GPIO0_D5            )+
  gpio-30  (GPIO0_D6            )  gpio-30  (GPIO0_D6            )
  gpio-31  (GPIO0_D7            )  gpio-31  (GPIO0_D7            )
Строка 122: Строка 97:
  gpio-33  (GPIO1_A1            )  gpio-33  (GPIO1_A1            )
  gpio-34  (GPIO1_A2            )  gpio-34  (GPIO1_A2            )
- gpio-35  (GPIO1_A3            ) + ........
- gpio-36  (GPIO1_A4            ) +
- gpio-37  (GPIO1_A5            ) +
- gpio-38  (GPIO1_A6            ) +
- gpio-39  (GPIO1_A7            ) +
- gpio-40  (GPIO1_B0            ) +
- gpio-41  (GPIO1_B1            ) +
- gpio-42  (GPIO1_B2            ) +
- gpio-43  (GPIO1_B3            ) +
- gpio-44  (GPIO1_B4            ) +
- gpio-45  (GPIO1_B5            ) +
- gpio-46  (GPIO1_B6            ) +
- gpio-47  (GPIO1_B7            ) +
- gpio-48  (GPIO1_C0            ) +
- gpio-49  (GPIO1_C1            ) +
- gpio-50  (GPIO1_C2            ) +
- gpio-51  (GPIO1_C3            ) +
- gpio-52  (GPIO1_C4            ) +
- gpio-53  (GPIO1_C5            ) +
- gpio-54  (GPIO1_C6            ) +
- gpio-55  (GPIO1_C7            ) +
- gpio-56  (GPIO1_D0            ) +
- gpio-57  (GPIO1_D1            ) +
- gpio-58  (SMARC_GPIO10        ) +
- gpio-59  (GPIO1_D3            ) +
- gpio-60  (SMARC_GPIO11        ) +
- gpio-61  (GPIO1_D5            )+
  gpio-62  (GPIO1_D6            )  gpio-62  (GPIO1_D6            )
  gpio-63  (GPIO1_D7            )  gpio-63  (GPIO1_D7            )
Строка 156: Строка 105:
  gpio-65  (GPIO2_A1            )  gpio-65  (GPIO2_A1            )
  gpio-66  (GPIO2_A2            )  gpio-66  (GPIO2_A2            )
- gpio-67  (GPIO2_A3            ) + .........
- gpio-68  (GPIO2_A4            ) +
- gpio-69  (GPIO2_A5            ) +
- gpio-70  (GPIO2_A6            ) +
- gpio-71  (GPIO2_A7            ) +
- gpio-72  (GPIO2_B0            ) +
- gpio-73  (GPIO2_B1            ) +
- gpio-74  (GPIO2_B2            ) +
- gpio-75  (GPIO2_B3            ) +
- gpio-76  (GPIO2_B4            ) +
- gpio-77  (GPIO2_B5            ) +
- gpio-78  (GPIO2_B6            ) +
- gpio-79  (GPIO2_B7            ) +
- gpio-80  (GPIO2_C0            ) +
- gpio-81  (GPIO2_C1            ) +
- gpio-82  (GPIO2_C2            |led_user            ) out lo  +
- gpio-83  (GPIO2_C3            ) +
- gpio-84  (GPIO2_C4            ) +
- gpio-85  (GPIO2_C5            ) +
- gpio-86  (GPIO2_C6            ) +
- gpio-87  (GPIO2_C7            ) +
- gpio-88  (GPIO2_D0            ) +
- gpio-89  (GPIO2_D1            ) +
- gpio-90  (GPIO2_D2            ) +
- gpio-91  (GPIO2_D3            ) +
- gpio-92  (GPIO2_D4            ) +
- gpio-93  (GPIO2_D5            ) +
- gpio-94  (GPIO2_D6            ) +
- gpio-95  (GPIO2_D7            )+
 gpiochip3: GPIOs 96-127, parent: platform/fe760000.gpio, gpio3: gpiochip3: GPIOs 96-127, parent: platform/fe760000.gpio, gpio3:
  gpio-96  (GPIO3_A0            )  gpio-96  (GPIO3_A0            )
  gpio-97  (GPIO3_A1            |reset               ) out hi   gpio-97  (GPIO3_A1            |reset               ) out hi 
  gpio-98  (GPIO3_A2            )  gpio-98  (GPIO3_A2            )
- gpio-99  (GPIO3_A3            ) + .....
- gpio-100 (GPIO3_A4            ) +
- gpio-101 (GPIO3_A5            ) +
- gpio-102 (GPIO3_A6            ) +
- gpio-103 (GPIO3_A7            |snps,reset          ) out hi ACTIVE LOW +
- gpio-104 (GPIO3_B0            |snps,reset          ) out hi ACTIVE LOW +
- gpio-105 (GPIO3_B1            ) +
- gpio-106 (GPIO3_B2            ) +
- gpio-107 (GPIO3_B3            ) +
- gpio-108 (GPIO3_B4            ) +
- gpio-109 (GPIO3_B5            |sata_usb3_mux_hog   ) out lo  +
- gpio-110 (GPIO3_B6            ) +
- gpio-111 (GPIO3_B7            ) +
- gpio-112 (GPIO3_C0            ) +
- gpio-113 (GPIO3_C1            |reset               ) out hi  +
- gpio-114 (GPIO3_C2            ) +
- gpio-115 (GPIO3_C3            ) +
- gpio-116 (GPIO3_C4            ) +
- gpio-117 (GPIO3_C5            ) +
- gpio-118 (GPIO3_C6            ) +
- gpio-119 (GPIO3_C7            ) +
- gpio-120 (GPIO3_D0            ) +
- gpio-121 (GPIO3_D1            |can_i2c2_mux_hog    ) out lo  +
- gpio-122 (SMARC_GPIO3         |sysfs               ) out hi  +
- gpio-123 (SMARC_GPIO1         ) +
- gpio-124 (SMARC_GPIO2         ) +
- gpio-125 (SMARC_GPIO0         |reset               ) out lo +
  gpio-126 (GPIO3_D6            )  gpio-126 (GPIO3_D6            )
  gpio-127 (GPIO3_D7            )  gpio-127 (GPIO3_D7            )
Строка 223: Строка 118:
  gpio-129 (GPIO4_A1            )  gpio-129 (GPIO4_A1            )
  gpio-130 (GPIO4_A2            )  gpio-130 (GPIO4_A2            )
- gpio-131 (GPIO4_A3            ) + ........
- gpio-132 (GPIO4_A4            ) +
- gpio-133 (GPIO4_A5            ) +
- gpio-134 (GPIO4_A6            ) +
- gpio-135 (GPIO4_A7            ) +
- gpio-136 (GPIO4_B0            ) +
- gpio-137 (GPIO4_B1            ) +
- gpio-138 (GPIO4_B2            ) +
- gpio-139 (GPIO4_B3            ) +
- gpio-140 (GPIO4_B4            ) +
- gpio-141 (GPIO4_B5            ) +
- gpio-142 (GPIO4_B6            ) +
- gpio-143 (GPIO4_B7            ) +
- gpio-144 (GPIO4_C0            ) +
- gpio-145 (GPIO4_C1            ) +
- gpio-146 (GPIO4_C2            ) +
- gpio-147 (GPIO4_C3            ) +
- gpio-148 (GPIO4_C4            ) +
- gpio-149 (GPIO4_C5            ) +
- gpio-150 (GPIO4_C6            |sysfs               ) out lo  +
- gpio-151 (GPIO4_C7            ) +
- gpio-152 (GPIO4_D0            ) +
- gpio-153 (GPIO4_D1            ) +
- gpio-154 (GPIO4_D2            ) +
- gpio-155 (GPIO4_D3            ) +
- gpio-156 (GPIO4_D4            ) +
- gpio-157 (GPIO4_D5            )+
  gpio-158 (GPIO4_D6            )  gpio-158 (GPIO4_D6            )
  gpio-159 (GPIO4_D7            )  gpio-159 (GPIO4_D7            )
  
 +</code>
 +
 +
 +=== Пример использования интерфейсного пина в качестве GPIO ===
 +Например, переопределим SPI0_CS как GPIO: 
 +
 +{{:boards:nms-sm-rk3568:firmware_opensource:header_pinout.png?1000}} 
 +
 +Необходимо в таблице "Распиновка разъема" узнать, доступна ли функция GPIO в качестве альтернативной:
 +
 +{{:boards:nms-sm-rk3568:firmware_opensource:spi_gpio.png?1000}}
 +
 +Управление пином: 
 +<code>
 +root@192-168-1-101:~# cat /sys/kernel/debug/gpio | grep 4_C6 #проверка наличия 
 + gpio-150 (GPIO4_C6            ) 
 +root@192-168-1-101:~# ./gpio.sh GPIO4_C6 1 #запись в единицу
 +root@192-168-1-101:~# cat /sys/kernel/debug/gpio | grep 4_C6
 + gpio-150 (GPIO4_C6            |sysfs               ) out hi 
 +root@192-168-1-101:~# ./gpio.sh GPIO4_C6 0 #запипсь в ноль
 +root@192-168-1-101:~# cat /sys/kernel/debug/gpio | grep 4_C6
 + gpio-150 (GPIO4_C6            |sysfs               ) out lo 
 +</code>
 +=== I2C-GPIO расширитель на отладочной плате  SM_EVM ===
 +
 +Отладочная плата содержит PCA9535PW расширитель на адресе 0x20, подключенный к i2c-контроллеру с адресом fe5c0000. В {{ :boards:nms-sm-rk3568:firmware_opensource:rk3568-inmys-smarc-evm.dtb | этой dtb}} прописаны I2C-GPIO в соответвии со схемой. [[https://wiki.inmys.ru/doku.php?id=boards:nms-sm-rk3568:firmware_opensource:start|Исходники dtb и инструкция по сборке]]
 +
 +<code>
 gpiochip5: GPIOs 496-511, parent: i2c/3-0020, 3-0020, can sleep: gpiochip5: GPIOs 496-511, parent: i2c/3-0020, 3-0020, can sleep:
  gpio-496 (DSI0_TP_RST_N       )  gpio-496 (DSI0_TP_RST_N       )
Строка 270: Строка 167:
  gpio-510 (I2C_GPIO16          )  gpio-510 (I2C_GPIO16          )
  gpio-511 (I2C_GPIO17          )  gpio-511 (I2C_GPIO17          )
-root@192-168-1-101:~+</code> 
 + 
 +Фрагмент dts с описание gpio-line-names: 
 +<code> 
 +        i2cgpio: pca9535@20 { 
 +                compatible = "nxp,pca9535"; 
 +                /* vcc-supply = <&regulator_i2c_1v8 */ 
 +                reg = <0x20>; 
 +                /*GPIO.3 -> P111 (som) -> gpio3_d2*/ 
 +                interrupt-parent = <&gpio3>; 
 +                interrupts = <27 IRQ_TYPE_LEVEL_LOW>; 
 +                interrupt-controller; 
 +                #interrupt-cells = <2>; 
 + 
 +                gpio-controller; 
 +                #gpio-cells = <2>; 
 +                gpio-line-names = 
 +                        "DSI0_TP_RST_N","DSI1_TP_RST_N","DSI0_RST_N","DSI1_RST_N","CAM0_PWDN","I2C_GPIO05","I2C_GPIO06","I2C_GPIO07", 
 +                        "I2C_GPIO10","I2C_GPIO11","I2C_GPIO12","I2C_GPIO13","I2C_GPIO14","I2C_GPIO15","I2C_GPIO16","I2C_GPIO17"; 
 +        };
  
-=== Пример использования интерфейсного пина в качестве GPIO === 
-Например, переопределим SPI0_CS как GPIO:  
-{{:boards:nms-sm-rk3568:firmware_opensource:header_pinout.png}}  
 </code> </code>
  
 +Выводы GPIO на headers: 
  
-=== Пример использования интерфейсного пина в качестве GPIO === +{{:boards:nms-sm-rk3568:firmware_opensource:gpio_headers.png?700}}
-Например, переопределим SPI0_CS как GPIO+
  
-{{:boards:nms-sm-rk3568:firmware_opensource:header_pinout.png?600}} +Пример управления I2C_GPIO5: 
 +<code> 
 +root@192-168-1-101:~# ./gpio.sh I2C_GPIO05 1 #записать единицу 
 +root@192-168-1-101:~# ./gpio.sh I2C_GPIO05 0 #записать ноль 
 +</code>
  
-Необходимо в таблице распиновка разъема узнатьдоступна ли функция GPIO в качестве альтернтивной: +===== I2C в Debian ===== 
-{{:boards:nms-sm-rk3568:firmware_opensource:spi_gpio.png?600}} +Если в Debian при попытке //i2cdetect// шин выходит ошибка, то нужно подгрузить Kernel Module //i2c-dev//
-=== I2C-GPIO расширитель на отладочной плате  SM_EVM ===+<code> 
 +root@192-168-1-101:~# i2cdetect -y 0 
 +Error: Could not open file `/dev/i2c-0' or `/dev/i2c/0': No such file or directory 
 +</code> 
 + 
 +Для этого необходимо в ///etc/modules// добавить имя модуля и перезагрузить устройство: 
 + 
 +{{:boards:nms-sm-rk3568:firmware_opensource:modules.png}} 
 + 
 +После перезагрузки в dev появятся i2c-линии: 
 +<code> 
 +root@192-168-1-101:~# i2cdetect -y 0 
 +      1  2  3  4  5  6  7  8  9  a  b  c  d  e  f 
 +00:                         -- -- -- -- -- -- -- --  
 +10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
 +20: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
 +30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
 +40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
 +50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
 +60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --  
 +70: -- -- -- -- -- -- -- --     
 +</code> 
 + 
 +===== SPI в Debian ===== 
 +Для общения с SPI устройствами в ядре должен быть модуль spidev. 
 + 
 +В качестве примера в ///root/// лежит программа //run_spi// и ее исходный код //spi.c// (либо на [[https://github.com/inmys/SPI-Example-W25Q128FV/blob/main/spi.c|github]])которые реализуют коммуникацию с SPI устройством на примере SPI FLASH W25Q128FV. 
 + 
 +Инструкция JEDEC ID для данного устройства имеет вид: 0x9F [MF7-MF0] [ID15-ID8] [ID7-ID0]. 
 + 
 +То есть, первый байт последовательности указывается нами - 0x9F. Далее получаем 3 оставшихся байта. 
 + 
 +Скриншот выполнения инструкции JEDEC ID для SPI FLASH: 
 + 
 +{{:boards:nms-sm-rk3568:firmware_opensource:run_spi.jpeg|}} 
 + 
 +Как видно на скриншоте, вводить байты можно как с 0x, так и без. 
 + 
 +Если использовать несколько байт подряд, то указывать их оптимально через пробел (другие разделители не использовать)
boards/nms-sm-rk3568/firmware_opensource/quick_start.1713787123.txt.gz · Последнее изменение: 2024/04/22 11:58 — Артем Слепов