硬件连接示意图
主控CPU通过SPI总线与WK2XXX芯相连接。WK2XXX控制4个UART的数据收发。
其中重要的参数有CS片选线和IRQ中断引脚。
LInux串口驱动框架
当WK2XXX驱动在内核注册成功后,会在/dev目录下面生成ttysWK0,ttysWK1,ttysWK2,ttysWK3节点。上层通过open,read,write调用ttysWK。
TTY驱动架构
一般来说 tty 架构可以分成两层:一层是下层我们的串口驱动层,直接操作
WK2XXX 芯片,同时向上提供一组标准的接口,这组接口通过结构体 struct uart_ops
来实现,该结构体涵盖了驱动对串口的所有操作。还有一层是上层 tty 层,包括
tty_core、line_discipline.他们各自实现实现一个 ops 结构,用户空间通过 tty 注册的字符设备节点来访问驱动。
用户空间与驱动层之间数据交互
用户空间和驱动层之间在数据传递上并不是直接传递的。当 write()写数据时,
用户空间仅仅是把数据传递给 tty 缓冲区,然后驱动程序收到发送数据的指令,
然后按照一定的流程去发送数据;当接收数据的时候,驱动层首先把接收的数
据放入 tty 缓冲区,用户空间 read()去读数据,那么就能从 tty 缓冲区读出子串
口接收的数据。
驱动层接收和发送数据都依赖于中断。
具体的示意图如下:
驱动移植
目录结构
modified: drivers/spi/Kconfig
modified: drivers/spi/Makefile
modified: drivers/spi/wk2xxx_spi.c
Makefile修改:
+++ b/arch/arm64/configs/a133p_common_defconfig
@@ -327,7 +327,7 @@ CONFIG_SENSORS_SC7A20=y
# CONFIG_LEGACY_PTYS is not set
+CONFIG_SPI_WK2124=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_GENERIC_PLATFORM=y
CONFIG_AXP803_POWER=y
将WK2124编译进内核
Kconfig修改:
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -761,6 +761,10 @@ config SPI_TLE62X0
sysfs interface, with each line presented as a kind of GPIO
exposing both switch control and diagnostic feedback.
+
+config SPI_WK2124
+ bool "wk2124 spi to uart"
+
#
# Add new SPI protocol masters in alphabetical order above this line
#
设备树修改:
设备树主要修改两个个GPIO,分别是cs-gpios和irq_gpio。
根据硬件原理图可以知道IRQ的GPIO为PH14。CS连接到SPI1_CS上面去了。
主控SPI_CS的GPIO为PD10。
设备树节点修改如下:
&spi1 {
status = "okay";
max-freq = <48000000>;
wk2xxx_spi: wk2xxx_spi@00{
status = "okay";
compatible = "wkmic,wk2xxx_spi";
reg = <0x00>;
spi-max-frequency = <10000000>;
reset_gpio = <&pio PB 3 1 1 1 1>;
irq_gpio = <&pio PH 14 6 0 0 0>;
cs-gpios = <&pio PD 10 1 1 0 0>;
};
};
1、status:如果要启用 SPI,那么设置为 okay,如不启用,设置为 disable
成都为开微电子
2、wk2xxx_spi@00:由于硬件使用的是 SPI1 的 cs0 引脚,所以设置为 00.如果使用
cs1,则设置为 01
3、compatible:这里的属性必须与驱动中的结构体:of_device_id 中的成员
compatible 保持一致。这个是 SPI 驱动匹配的关键。
4、reg:此处与 wk2xxx_spi@00:保持一致。此处设置为:00
5、spi-max-frequency:此处设置 spi 使用的最高频率。wk2xxx 芯片 spi 最高支
持 10000000。
6、reset_gpio:该选项在 SPI 驱动当中不是必须的。该 gpio 和 WK2xxx 芯片的复位
引脚相连,用于控制芯片的复位。根据实际使用的 gpio 去修改。
7、irq_gpio: 该 gpio 和 wk2xxx 芯片的 IRQ 引脚相连,用于接收 wk2xxx 芯片传递
来的中断信号。估计具体使用的 GPIO 去修改。
8、SPI 的工作模式设置,默认工作在 0 模式,所以在 dts 中没有单独设置。
驱动测试
在电脑上面用串口助手,通过RS232与开发板串口连接
然后打开串口,用echo发数据到串口,看串口工具能否收到,如果能正常收到则说明驱动已经移植成功。文章来源:https://www.toymoban.com/news/detail-603888.html
参考文档:https://blog.csdn.net/qq_29890089/article/details/120064117文章来源地址https://www.toymoban.com/news/detail-603888.html
到了这里,关于权智A133P 安卓10移植SPI转串WK2124驱动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!