地平线X3model通过WK2124实现SPI转UART

1,首先WK2124模块

WK 系列串口扩展芯片简介 目前 WK 系列能实现 SPI 扩展 UART 的芯片包括 WK2124、WK2204、WK2168、 WK2132。目前 WK2124、WK2204、WK2168 能实现 SPI 扩展 4 路 UART,WK2132 能实现扩展 2 路 UART。

目前这几款芯片使用的都是相同的 linux 驱动。 WK 系列扩展的子通道的 UART 具备如下功能特点: 每个子通道 UART 的波特率、字长、校验格式可以独立设置,最高可以提供 2Mbps 的通信速率。 每个子通道具备收/发独立的 256 级 FIFO,FIFO 的中断可按用户需求进行编程触 发点且具备超时中断功能。

这里可以参考https://blog.csdn.net/David_oneone/article/details/133267956

2,配置X3模块的SPI设备树,找到X3模块的DTS路径(/rdkgen/source/kernel/arch/arm64/boot/dts/hobot)找到hobot-x3-cm.dts在里面找到&spi1,

通过WK2124给的代码,添加进去

&spi1 {
	
		status ="okay";
		//fsl,spi-num-chipselects =<1>;
		pinctrl-names ="default";
		//pinctrl-0 =<&pinctrl spi1 sso gpio &pinctrl ecspi1 ecspi1>;
		//pinctrl-0 =<&pinctrl_spi1_spi1>;
		//cs-gpios =<&gpi05 9 GPIO ACTIVE LOW>;
		wk2xxx_spi1@0{
		status ="okay";
		compatible ="wkmic,wk2xxx_spi"; //注意这里的命名要和驱动代码里的一致
		reg = <0>;
		spi-max-frequency=<10000000>;
		reset_gpio=<&gpios 16 GPIO_ACTIVE_HIGH>;
		irq_gpio=<&gpios 12 IRQ_TYPE_LEVEL_LOW>;
		//cs-gpios =<&gpios 9 GPI_ACTIVE_LOW>;
	};
};

3,编译驱动代码模块,通过交叉编译环境,编译WK的源码WKxxx_spi.c,给的有Makefiel,这里Makerfiel需要修改一下

ARCH:= arm64
MVTOOL_PREFIX =  /home/wang/rdk-gen/gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- //这里换成自己的编译工具路径
CROSS_COMPILE= $(MVTOOL_PREFIX)
KDIR := /home/wang/rdk-gen/source/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 $(TARGET)

make后在当前文件夹会生成一个wkxxx_spi.ko文件这个就是我们要放到X3系统里面要加载的模块

还需要修改地平线X3moudle dts中的hobot-pinctrl-xj3中的复用管脚,这里要参考X3模块的PIN_MUX在文档中找到中断和复位所用的GPIO口,在代码中设置他们所使用的功能。

4,X3模块的内核编译,修改完dts,把驱动代码wkxxx_spi.c放进内核源码的(/rdk-gen/source/kernel/drivers/spi )目录下,然后就可以对内核进行编译了。

先编译内核参考地平线官方文档https://developer.horizon.cc/documents_rdk/linux_development/environment_build

内核源码在 source/kernel,为方便内核的编译,提供mk_kernel.sh程序给用户使用。

执行以下命令编译linux内核:

sudo ./mk_kernel.sh

编译完成后,会在deploy/kernel目录下生成内核镜像、驱动模块、设备树、内核头文件。

dtb  Image  Image.lz4  kernel_headers  modules

这些内容会被hobot-boot、hobot-dtb和hobot-kernel-headers三个debian包所使用,
所以如果想要自定义修改这三个软件包,需要先编译内核。

再编译hobot-dtb软件包,

mk_debs.sh 支持单独构建指定的软件包,在执行时带包名参数即可,例如:

./mk_debs.sh hobot-dtb

最后编译系统镜像

sudo ./pack_image.sh c

编译完成生成的新镜像在(/rdk-gen/deploy)目录下

把镜像重新烧录到X3,通过Ctrl+鼠标右键,在Mobaxter中拉取wkxxx_spi.ko文件,然后

模块签名
编译好的驱动模块文件,需要进行签名后才能加载到RDK X3的内核里,命令如下:

root@ubuntu:~# hobot-sign-file wkxxx_spi.ko

加载模块
加载ko:insmod wkxxx_spi.ko

加载成功会出现

然后就可以在、dev/目录下看到生成的四个串口节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值