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方法就会被调用。也就是如下函数会被调用:

如果没有匹配成功,可能的问题:

  1. DTS和驱动中的compatible 名字不一致
  2. DTS修改以后没有重新编译更新到开发板
  3. 其他原因

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 驱动移植相关推荐

  1. 正点原子Linux阿尔法开发板4.3 寸多点电容触摸屏测试问题和gt9xx系列linux驱动移植

    正点原子Linux阿尔法开发板4.3 寸多点电容触摸屏测试问题和gt9xx系列linux驱动移植 正点原子官方CSDN 4.3 寸多点电容触摸屏测试问题 正点原子gt9xx系列linux驱动移植 1. ...

  2. rtl8188eus Linux驱动移植

    rtl8188eus Linux驱动移植 rlt8188eus作为无线USB网卡,可以给我们的Linux设备提供无线上网能力,也能配置为AP,给其它无线设备提供上网能力.在使用较低版本的内核时,内核中 ...

  3. Linux驱动移植USB网卡r8156驱动(详细)总结

    目录 一.简介 二.驱动移植 2.1 驱动源码解压 2.2 驱动Kconfig和Makefile配置 2.2.1 驱动上层目录识别驱动文件 2.2.2 驱动目录新建驱动Kconfig和Makefile ...

  4. 正点原子gt9xx系列linux驱动移植

    写这个博客的前景: 正点原子的RGB电容触摸屏触摸芯片系列: 4.3 寸屏  480x272分辨率 使用的触摸芯片是gt9xx系列 4.3寸屏 800x480分辨率 使用的触摸芯片是gt9xx系列 7 ...

  5. rt3070网卡 linux驱动,移植rt3070芯片网卡驱动到dm365全过程---yingru

    #History:2011-05-18 #Author:yingru 新增: 在内核添加对设置雷凌网卡参数的wireless tools的支持: Make menuconfig: Device Dri ...

  6. RTL系列WIFI模组Linux驱动移植

    文章目录 1 驱动源码下载 2 驱动移植 2.1 源码的拷贝 2.2 源代码的修改 2.3 将wifi 驱动添加到内核中 2.3.1 修改 Kconfig 文件 2.3.2 修改Makefile 2. ...

  7. RTL8188 Linux驱动移植

    折腾了好几天,系统的Wifi总算是跑起来了. 总结下来,刚开始应该犯了好多系统性的错误.例如,以为在menuconfig中,将RTL8188对应的选项选中,就可以了,但是后来才知道事实并非如此.主要还 ...

  8. ds3231 linux驱动移植

    一.需求分析:     二.驱动移植     2.1驱动分析:     2.2 修改驱动     三.驱动移植中遇到的问题和解决方法     3.1 发现问题     3.2 问题分析 一.需求分析: ...

  9. S3C2440 Linux驱动移植——SD卡驱动

    开发板:TQ2440 内核:Linux 2.6.32 PC OS:Ubuntu 11.04 本文将对SD卡驱动的移植做简要介绍. 1.  添加板级信息 打开arch/arm/mach-s3c2440/ ...

最新文章

  1. phoenix 开发API系列(二)phoenix 各类 api 实现方式
  2. juniper M320路由器基本配置
  3. php libmysqlclient,什么是php?以及mysqlnd与libmysqlclient
  4. vue 虚拟服务器,vue+webpack项目中使用dev-server搭建虚拟服务器,请求json文件数据,实现先后台分离开发...
  5. vos3000落地网关对接教学_跨国合作:Serverless Components 在腾讯云的落地和实践
  6. 设计模式-行为型模式-责任链模式
  7. 对flashsky印象最深的一段话
  8. 实验二线性表的链式存储结构
  9. Ignite基础知识原理
  10. C语言程序设计——计算图形面积(圆形,矩形,三角形,梯形)
  11. 企业信息安全————3、如何建立企业安全框架
  12. 个人财务管理系统beancount-gs
  13. Unity 分辨率框Config Dialog Banner尺寸要求
  14. Go strings.ToLower函数
  15. PMP 易错题汇总(二)
  16. 未来10年什么行业发展比较好?
  17. 激光雷达:905与1550的战争
  18. matlab中diag什么,线性代数里的“diag”是什么意思?
  19. Allegro_根据已有BRD绘制新的BRD那些事
  20. 计算机论文100,硕士论文选题100题(计 算 机)

热门文章

  1. 在知乎逮到一个腾讯10年老测试开发,聊过之后收益良多...
  2. myCobot pro 机械臂(5)Robotics Toolbox for MATLA(开发环境:matlab)
  3. 数据分析、数据挖掘、数据运营有啥区别?
  4. 基于simulink的无刷直流电动机性能仿真
  5. 携号转网手机号归属地查询
  6. 利用python批量合并手机哔哩哔哩下载的视频各分段
  7. 图片分类网络ViT、MobileViT、Swin-Transformer、MobileNetV3、ConvNeXt、EfficientNetV2
  8. 磁盘恢复工具OO DiskRecovery的使用
  9. 北航程序设计决赛(虽然。。。。但是)补题。
  10. java正则校验-密码至少要由包括大小写字母、数字、标点符号的其中两项,共计8-16位编码组成