Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
boards:nms-sm-rk3568:firmware_opensource:quick_start [2024/01/29 15:41] – [CAN] Артем Слепов | 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.\\ | + | |
- | {{: | + | Для корректной работы шины CAN на отладочной плате NMS_SM_EVM необходимо подключить терминаторы - установить джамперы X13 и X14.\\ |
- | Драйвер CAN собирается как модуль ядра .ko с помощью buildroot-external. Исходники взяты из ядра 4.19, которое предоставляется Rockchip. | + | |
- | Модуль ядра подгружается в **/ | + | |
Пример настройки интерфейса и проверки в режиме loopback CAN0< | Пример настройки интерфейса и проверки в режиме loopback CAN0< | ||
- | < | + | |
+ | < | ||
#configure | #configure | ||
ip link set dev can0 down | ip link set dev can0 down | ||
Строка 18: | Строка 17: | ||
candump -T 1000 can0 > / | candump -T 1000 can0 > / | ||
sleep 1 | sleep 1 | ||
- | cansend can1 500 | + | cansend can1 500#DEADBEEF |
sleep 2 | sleep 2 | ||
Строка 24: | Строка 23: | ||
</ | </ | ||
- | < | + | < |
+ | CAN в ядре 6.1 работает только в режиме | ||
+ | |||
+ | **fd on**</ | ||
{{: | {{: | ||
+ | ===== ETH LED configuration ===== | ||
+ | |||
+ | Светодиоды Ethernet управляются [[https:// | ||
+ | |||
+ | PHY управляется через MDIO регистры. Для доступа к регистрам используется утилита [[https:// | ||
+ | |||
+ | Связь SMARC-пинов и регистров | ||
+ | |||
+ | < | ||
+ | ^ SMARC Pin ^ SMARC Name ^ PHY LED ^ PHY Reg ^ | ||
+ | | P21 | GBE0_LINK100# | ||
+ | | P22 | GBE0_LINK1000# | ||
+ | | P25 | GBE0_LINK_ACT# | ||
+ | | S19 | GBE1_LINK100# | ||
+ | | S22 | GBE1_LINK1000# | ||
+ | | S31 | GBE1_LINK_ACT# | ||
+ | </ | ||
+ | |||
+ | Для работы с регистрами светодиодов используется General Extend Mapping: | ||
+ | |||
+ | |||
+ | ^ Offset | ||
+ | | 0x1E | EXT_ADD | ||
+ | | 0x1F | EXT_DATA | ||
+ | |||
+ | |||
+ | В EXT_ADD требуется записать адрес желаемого Extended Register, в/из EXT_DATA можно писать/ | ||
+ | |||
+ | |||
+ | ** Пример настройки на [[https:// | ||
+ | |||
+ | На отладочной плате на ETH заведены GBE0_LINK1000 - на YELLOW LED, GBE1_LINK_ACT - на GREEN | ||
+ | |||
+ | По умолчанию PHY настроен на режим 0x0620 - Yellow ACT 1Gbit/s; Green ACT 100Mbit/s; | ||
+ | |||
+ | Пример настройки, | ||
+ | <code -> | ||
+ | ./mdio-tool w eth0 0x1e 0xA00D #set EXT reg | ||
+ | ./mdio-tool r eth0 0x1f #read EXT reg | ||
+ | ./mdio-tool w eth0 0x1f 0x0660 #write new value | ||
+ | ./mdio-tool w eth0 0x1e 0x0 #set EXT_ADDR reg to default | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Работа с GPIO ===== | ||
+ | |||
+ | Стандарт модулей SMARC предусматривает GPIO0-GPIO13, | ||
+ | * В [[https:// | ||
+ | * В [[https:// | ||
+ | * В [[https:// | ||
+ | |||
+ | Также при необходимости некоторые интерфейсные пины(в соответвии с таблицей " | ||
+ | |||
+ | Процессор содержит 5 банков по 32 пина. Все GPIO прописаны dts и видны /// | ||
+ | < | ||
+ | root@192-168-1-101: | ||
+ | gpiochip0: GPIOs 0-31, parent: platform/ | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | gpiochip1: GPIOs 32-63, parent: platform/ | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | gpiochip2: GPIOs 64-95, parent: platform/ | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | gpiochip3: GPIOs 96-127, parent: platform/ | ||
+ | | ||
+ | | ||
+ | | ||
+ | ..... | ||
+ | | ||
+ | | ||
+ | |||
+ | gpiochip4: GPIOs 128-159, parent: platform/ | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | === Пример использования интерфейсного пина в качестве GPIO === | ||
+ | Например, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Необходимо в таблице " | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Управление пином: | ||
+ | < | ||
+ | root@192-168-1-101: | ||
+ | | ||
+ | root@192-168-1-101: | ||
+ | root@192-168-1-101: | ||
+ | | ||
+ | root@192-168-1-101: | ||
+ | root@192-168-1-101: | ||
+ | | ||
+ | </ | ||
+ | === I2C-GPIO расширитель на отладочной плате | ||
+ | |||
+ | Отладочная плата содержит PCA9535PW расширитель на адресе 0x20, подключенный к i2c-контроллеру с адресом fe5c0000. В {{ : | ||
+ | |||
+ | < | ||
+ | gpiochip5: GPIOs 496-511, parent: i2c/3-0020, 3-0020, can sleep: | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Фрагмент dts с описание gpio-line-names: | ||
+ | < | ||
+ | i2cgpio: pca9535@20 { | ||
+ | compatible = " | ||
+ | /* vcc-supply = <& | ||
+ | reg = < | ||
+ | /*GPIO.3 -> P111 (som) -> gpio3_d2*/ | ||
+ | interrupt-parent = <& | ||
+ | interrupts = <27 IRQ_TYPE_LEVEL_LOW>; | ||
+ | interrupt-controller; | ||
+ | # | ||
+ | |||
+ | gpio-controller; | ||
+ | #gpio-cells = <2>; | ||
+ | gpio-line-names = | ||
+ | " | ||
+ | " | ||
+ | }; | ||
+ | |||
+ | </ | ||
+ | |||
+ | Выводы GPIO на headers: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Пример управления I2C_GPIO5: | ||
+ | < | ||
+ | root@192-168-1-101: | ||
+ | root@192-168-1-101: | ||
+ | </ | ||
+ | |||
+ | ===== I2C в Debian ===== | ||
+ | Если в Debian при попытке // | ||
+ | < | ||
+ | root@192-168-1-101: | ||
+ | Error: Could not open file `/ | ||
+ | </ | ||
+ | |||
+ | Для этого необходимо в /// | ||
+ | |||
+ | {{: | ||
+ | |||
+ | После перезагрузки в dev появятся i2c-линии: | ||
+ | < | ||
+ | root@192-168-1-101: | ||
+ | | ||
+ | 00: -- -- -- -- -- -- -- -- | ||
+ | 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 20: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 60: 60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- | ||
+ | 70: -- -- -- -- -- -- -- -- | ||
+ | </ | ||
+ | |||
+ | ===== SPI в Debian ===== | ||
+ | Для общения с SPI устройствами в ядре должен быть модуль spidev. | ||
+ | |||
+ | В качестве примера в ///root/// лежит программа //run_spi// и ее исходный код //spi.c// (либо на [[https:// | ||
+ | |||
+ | Инструкция JEDEC ID для данного устройства имеет вид: 0x9F [MF7-MF0] [ID15-ID8] [ID7-ID0]. | ||
+ | |||
+ | То есть, первый байт последовательности указывается нами - 0x9F. Далее получаем 3 оставшихся байта. | ||
+ | |||
+ | Скриншот выполнения инструкции JEDEC ID для SPI FLASH: | ||
+ | |||
+ | {{: | ||
+ | Как видно на скриншоте, | ||
+ | Если использовать несколько байт подряд, |