WK2124 linux 驱动移植
WK系列 SPI扩展 UART驱动移植参考
1、WK系列SPI扩展UART芯片简介
1.1 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的中断可按用户需求进行编程触发点且具备超时中断功能。
1.2 WK SPI拓展串口驱动简介
硬件连接示意图
A、 WK芯片作SPI从设备和CPU端的主SPI需要连接的信号有CS信号(此信号不能一直拉低,需要用主spi的cs信号控制)、CLK信号、MOSI信号、MISO信号,具体连接方式如上图。
B、IRQ信号为WK芯片的中断输出信号,需要连接到CPU具有外部中断功能的GPIO上。
1.3 驱动基本框架
如下图为WK驱动和系统之间关系示意图。
A、WK驱动工作在linux 内核层,向上提供4个串口设备节点供应用层用户调用。也就是说WK驱动注册成功以后,在/dev/ 目录下会生成 ttysWK0、ttysWK1、ttysWK2、ttysWK3 共4个串口设备节点,应用层就可以按照操作普通串口节点的方式操作。
B、WK驱动需要和WK芯片进行数据交互,数据交互是通过SPI总线进行的,所以WK驱动会调用SPI总线驱动接口进行数据收发。
2、WK SPI拓展UART驱动移植
2.1 准备工作
A 、硬件平台简介
目前我司采用Rockchip的RK3288/RK3399作为我们驱动的开发平台。
B、 软件平台介绍
目前我们是在ubuntu (内核3.1)上做的驱动调试和测试。该驱动也适用于3.1-到4.0内核,基本上不用怎么修改。
C、驱动文件介绍
驱动的主要文件包括:
Wk2xxx_spi.c wk2xxx.h Makefile
2.2 驱动移植
A 、修改DTS
由于驱动需要用到SPI和中断资源,所以修改DTS的时候,主要是修改和SPI和中断相关的部分。
WK芯片作为SPI从设置,只支持SPI的0模式,其次SPI总线最高速率不要超过10M。
如图 DTS 项目1 compatible 选项主要实现驱动中SPI总线的匹配
这个地方设置的名字,是需要和驱动中图片中的地方保持一致。
如图DTS 项目2 设置SPI的最高速率10Mhz
如图DTS 项目3 设置驱动会用到的中断引脚
B、驱动编译
目前测试的时候,我们是直接把驱动编译为模块,然后加载的。
把驱动程序放到对应交叉编译环境,直接make一下(Makefile需要修改对应的编译器)。然后会生成对应的wk2xxx_spi.ko文件。
C、加载驱动
把驱动放到RK3288的开发板上,并加载驱动。如图:
驱动加载成功以后,可以在/dev下生成几个串口设备ttysWK0/ ttysWK1 ttysWK2 /ttysWK3
D 、 通过串口发送数据
我们使用扩展出来的串口ttysWK0发送数据,测试驱动是否可以正常运行。
命令如下:
那么这个时候在TX1引脚上会输出相应的数据,我们可以用usb转串口把TX1输出的传输到PC上显示出来,如下图所示。
3、驱动调试与修改
在驱动的移植过程中,通常都不是一帆风顺的,都会遇见各种问题,那么下面我把经常遇见的问题列出来,供大家参考。
3.1 SPI总线设备和设备驱动匹配问题。
SPI驱动在注册的过程中,需要实现spi驱动和设备之间的匹配,spi_bus_type总线匹配的依据是名字,也就是我们之前提到的DTS和驱动中需要保持一致的
,在匹配成功以后,spi_driver的probe方法就会被调用。也就是如下函数会被调用:
如果没有匹配成功,可能的问题:
- DTS和驱动中的compatible 名字不一致
- DTS修改以后没有重新编译更新到开发板
- 其他原因
3.2 、SPI接口与WK2124之间的通信
前面说的SPI总线匹配成功了,但是不同平台之间可能还是会存在差异,所以我们还要进一步确认SPI和WK2124之间的通信是否正常。通常我们是通过读写WK2124的寄存器来判断的,可以读GENA这个寄存器。这个寄存器的高4位固定为0011,低4位可编程。
我们在static int wk2xxx_probe(struct spi_device *spi)函数中加入一段测试程序,如下图:
正确情况下对应的打印:
如果出现高4位不是0X3X,那么可能是以下原因:
A 、SPI接口时序问题,包括cs信号控制、SPI模式等,正确的读GENA时序如下图:
B 、 SPI接口连接问题,MOSI和MISO信号接反了。
C、芯片电源不正常或者引脚虚焊等。
3.3 子串口波特率问题
WK芯片子串口的波特率是由芯片外部晶振分频而来,也就是说,外部晶振不一样,那么WK芯片相同波特率的寄存器配置值是不一样的。目前驱动中的波特率寄存器配置值都是按照11.0592Mhz的时钟计算的配置值,如果晶体不一样,那么是需要修改波特率寄存器的配置值的。
修改函数是:如下图中红色框中的寄存器配置值。
static void wk2xxx_termios( struct uart_port *port, struct ktermios *termios,
struct ktermios *old)
3.4 中断信号 IRQ
驱动收发数据依赖于中断信号,如果中断信号没有连接或者连接错误,那么子串口是不能进行数据收发。
WK2124 linux 驱动移植相关推荐
- 正点原子Linux阿尔法开发板4.3 寸多点电容触摸屏测试问题和gt9xx系列linux驱动移植
正点原子Linux阿尔法开发板4.3 寸多点电容触摸屏测试问题和gt9xx系列linux驱动移植 正点原子官方CSDN 4.3 寸多点电容触摸屏测试问题 正点原子gt9xx系列linux驱动移植 1. ...
- rtl8188eus Linux驱动移植
rtl8188eus Linux驱动移植 rlt8188eus作为无线USB网卡,可以给我们的Linux设备提供无线上网能力,也能配置为AP,给其它无线设备提供上网能力.在使用较低版本的内核时,内核中 ...
- Linux驱动移植USB网卡r8156驱动(详细)总结
目录 一.简介 二.驱动移植 2.1 驱动源码解压 2.2 驱动Kconfig和Makefile配置 2.2.1 驱动上层目录识别驱动文件 2.2.2 驱动目录新建驱动Kconfig和Makefile ...
- 正点原子gt9xx系列linux驱动移植
写这个博客的前景: 正点原子的RGB电容触摸屏触摸芯片系列: 4.3 寸屏 480x272分辨率 使用的触摸芯片是gt9xx系列 4.3寸屏 800x480分辨率 使用的触摸芯片是gt9xx系列 7 ...
- rt3070网卡 linux驱动,移植rt3070芯片网卡驱动到dm365全过程---yingru
#History:2011-05-18 #Author:yingru 新增: 在内核添加对设置雷凌网卡参数的wireless tools的支持: Make menuconfig: Device Dri ...
- RTL系列WIFI模组Linux驱动移植
文章目录 1 驱动源码下载 2 驱动移植 2.1 源码的拷贝 2.2 源代码的修改 2.3 将wifi 驱动添加到内核中 2.3.1 修改 Kconfig 文件 2.3.2 修改Makefile 2. ...
- RTL8188 Linux驱动移植
折腾了好几天,系统的Wifi总算是跑起来了. 总结下来,刚开始应该犯了好多系统性的错误.例如,以为在menuconfig中,将RTL8188对应的选项选中,就可以了,但是后来才知道事实并非如此.主要还 ...
- ds3231 linux驱动移植
一.需求分析: 二.驱动移植 2.1驱动分析: 2.2 修改驱动 三.驱动移植中遇到的问题和解决方法 3.1 发现问题 3.2 问题分析 一.需求分析: ...
- S3C2440 Linux驱动移植——SD卡驱动
开发板:TQ2440 内核:Linux 2.6.32 PC OS:Ubuntu 11.04 本文将对SD卡驱动的移植做简要介绍. 1. 添加板级信息 打开arch/arm/mach-s3c2440/ ...
最新文章
- phoenix 开发API系列(二)phoenix 各类 api 实现方式
- juniper M320路由器基本配置
- php libmysqlclient,什么是php?以及mysqlnd与libmysqlclient
- vue 虚拟服务器,vue+webpack项目中使用dev-server搭建虚拟服务器,请求json文件数据,实现先后台分离开发...
- vos3000落地网关对接教学_跨国合作:Serverless Components 在腾讯云的落地和实践
- 设计模式-行为型模式-责任链模式
- 对flashsky印象最深的一段话
- 实验二线性表的链式存储结构
- Ignite基础知识原理
- C语言程序设计——计算图形面积(圆形,矩形,三角形,梯形)
- 企业信息安全————3、如何建立企业安全框架
- 个人财务管理系统beancount-gs
- Unity 分辨率框Config Dialog Banner尺寸要求
- Go strings.ToLower函数
- PMP 易错题汇总(二)
- 未来10年什么行业发展比较好?
- 激光雷达:905与1550的战争
- matlab中diag什么,线性代数里的“diag”是什么意思?
- Allegro_根据已有BRD绘制新的BRD那些事
- 计算机论文100,硕士论文选题100题(计 算 机)
热门文章
- 在知乎逮到一个腾讯10年老测试开发,聊过之后收益良多...
- myCobot pro 机械臂(5)Robotics Toolbox for MATLA(开发环境:matlab)
- 数据分析、数据挖掘、数据运营有啥区别?
- 基于simulink的无刷直流电动机性能仿真
- 携号转网手机号归属地查询
- 利用python批量合并手机哔哩哔哩下载的视频各分段
- 图片分类网络ViT、MobileViT、Swin-Transformer、MobileNetV3、ConvNeXt、EfficientNetV2
- 磁盘恢复工具OO DiskRecovery的使用
- 北航程序设计决赛(虽然。。。。但是)补题。
- java正则校验-密码至少要由包括大小写字母、数字、标点符号的其中两项,共计8-16位编码组成