文章目录
前言
在RK3399平台开发过程中,经常需要用到串口扩展芯片。本文介绍一款SPI转串口的扩展芯片WK2124。
一、WK2124
1.概述
WK2124是SPI接口的4通道UART器件,实现了SPI扩展4个串口的功能。
WK2124有以下特性:
- 低功耗设计,可以配置自动休眠,自动唤醒模式(us级唤醒)
- SPI接口最高速度10M bit/s,模式0,仅支持SPI从模式,支持最长256字节连续收发
- 每个子串口为全双工,波特率可以独立设置,最高可以达到2Mbps
- 可以实现对单个子串口软件复位
2.源码下载
二、Linux 驱动
主控:RK3399.
系统:Android8.1
内核 : Kernel 4.4.167
1. 驱动简介
- 驱动向上使用串口驱动框架,注册四个串口设备节点供应用调用;
- 驱动向下使用SPI驱动框架,与WK2124进行通信。
2. 驱动源码修改
驱动源码使用官方提供的参考驱动,但由于官网驱动使用linux 5.4版本,直接用linux4.4 编译会报错,需要进行如下修改:
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. 其他部分与原厂参考程序保持一致。
3. 内核中设备树dts修改
&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>;
};
};
特别说明:
设备树dts中 .compatible 需与 wk2xxx_spi.c 中保持一致。
4. 驱动模块编译
开启调试日志:
/*************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
Makefile 文件修改:
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)
三、测试
1.重新编译并烧录
重新编译内核并烧录生效。
2.编译并加载驱动模块
1. 将编译好的驱动模块 wk2xxx_spi.ko push 到设备中:
adb push wk2xxx_spi.ko /data/local
2. 加载驱动模块到设备:
su root
cd /data/local
insmod wk2xxx_spi.ko
3. 加载成功后,出现以下log :
3.查看注册到内核的串口设备节点
1.查看串口设备节点:
rk3399_mid:/ $ ls /dev/
可以看出驱动生效,生成了4个串口节点:
ttysWK0
ttysWK1
ttysWK2
ttysWK3
2.可以通过相关串口工具对生成的串口节点进行测试
版权声明:本文为chenkanuo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。