Desarrollo del controlador RK3399_ 06 - desarrollo del controlador del puerto serie wk2124


prefacio

En el proceso de desarrollo de la plataforma RK3399, a menudo se necesita un chip de expansión de puerto serie. Este artículo presenta un chip de expansión de SPI a serie WK2124.


1. WK2124

1. Información general

WK2124 es un dispositivo UART de 4 canales con interfaz SPI, que realiza la función de SPI para expandir 4 puertos serie.

WK2124 tiene las siguientes características:

  • Diseño de bajo consumo de energía, puede configurar el modo de suspensión automática, modo de activación automática (activación a nivel de EE. UU.)
  • La velocidad máxima de la interfaz SPI es de 10 Mbit/s, modo 0, solo admite el modo esclavo SPI y admite hasta 256 bytes de envío y recepción continuos
  • Cada puerto subserie es dúplex completo y la velocidad en baudios se puede configurar de forma independiente, hasta 2Mbps
  • Puede realizar el reinicio de software de un solo puerto sub-serie

2. Descarga del código fuente

descarga del código fuente del controlador wk2124 spi
inserte la descripción de la imagen aquí

2. Controlador Linux

主控:RK3399.
系统:Android8.1
内核 : Kernel 4.4.167

1. Introducción al controlador

  • El controlador utiliza el marco del controlador del puerto serie para registrar cuatro nodos de dispositivos serie para llamadas de aplicaciones;
  • El controlador utiliza el marco del controlador SPI para comunicarse con WK2124.

2. Modificación del código fuente del controlador

El código fuente del controlador usa el controlador de referencia oficial, pero dado que el controlador del sitio web oficial usa la versión 5.4 de Linux, se informará un error al compilar directamente con linux4.4, y es necesario realizar las siguientes modificaciones:

1. 屏蔽 uapi/linux/sched/types.h 头文件
// #include <uapi/linux/sched/types.h>

2. 设置晶振,由于本人设备使用24M 晶振,故:
#define WK_CRASTAL_CLK (24000000)

3. 设置 RST 和CS 宏定义,设备实际硬件使用了RST和CS引脚,故需打开相关宏定义:
#define WK_RSTGPIO_FUNCTION
#define WK_CSGPIO_FUNCTION

4. 其他部分与原厂参考程序保持一致。

Enlace de descarga del código fuente del controlador optimizado

3. Modificación del dts del árbol de dispositivos en el kernel

&spi2 {
    
    
	status = "okay";

	spi_wk2xxx: spi_wk2xxx@00{
    
    
		status = "okay";
		compatible = "wkmic,spi-wk2xxx";
		reg = <0x00>;
		spi-max-frequency = <10000000>;
		reset_gpio = <&gpio2 6 GPIO_ACTIVE_HIGH>;
		irq_gpio = <&gpio1 4 IRQ_TYPE_EDGE_FALLING>;
		cs-gpios = <&gpio2 12 GPIO_ACTIVE_HIGH>;
	};
};

Nota especial:
.compatible en el árbol de dispositivos dts debe ser consistente con wk2xxx_spi.c.
inserte la descripción de la imagen aquí

4. Compilación del módulo del controlador

Habilite el registro de depuración:

/*************The debug control **********************************/
#define _DEBUG_WK_FUNCTION
//#define _DEBUG_WK_RX
//#define _DEBUG_WK_TX
#define _DEBUG_WK_IRQ
//#define _DEBUG_WK_VALUE
//#define _DEBUG_WK_TEST

Modificación del archivo MAKE:

ARCH:= arm64
MVTOOL_PREFIX = sdk/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
CROSS_COMPILE= $(MVTOOL_PREFIX)
KDIR := sdk/kernel/

TARGET				=wk2xxx_spi
EXEC = $(TARGET)
obj-m :=$(TARGET).o
PWD :=$(shell pwd)
all:
	$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
	rm -rf *.o *~core.depend.*.cmd *.ko *.mod.c .tmp_versions Module.symvers  modules.order $(TARGET) 

3. prueba

1. Recompilar y grabar

Vuelva a compilar el kernel y grábelo para que surta efecto.

2. Compile y cargue el módulo del controlador

1. 将编译好的驱动模块 wk2xxx_spi.ko push 到设备中:
adb push wk2xxx_spi.ko /data/local

2. 加载驱动模块到设备:
su root
cd /data/local
insmod wk2xxx_spi.ko

3. 加载成功后,出现以下log :

inserte la descripción de la imagen aquí

3. Ver los nodos de dispositivos seriales registrados en el kernel

1.查看串口设备节点:
rk3399_mid:/ $ ls /dev/
可以看出驱动生效,生成了4个串口节点:
ttysWK0
ttysWK1
ttysWK2
ttysWK3

2.可以通过相关串口工具对生成的串口节点进行测试

inserte la descripción de la imagen aquí


Supongo que te gusta

Origin blog.csdn.net/chenkanuo/article/details/131293603
Recomendado
Clasificación