权智A133P 安卓10移植SPI转串WK2124驱动

硬件连接示意图

在这里插入图片描述
主控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://blog.csdn.net/qq_29890089/article/details/120064117

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/44084.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

精通正则表达式 - 打造高效正则表达式

目录 一、典型示例 1. 稍加修改——先迈最好使的腿 2. 效率 vs 准确性 3. 继续前进——限制匹配优先的作用范围 4. “指数级”匹配 二、全面考察回溯 1. 传统 NFA 的匹配过程 2. POSIX NFA 需要更多处理 3. 无法匹配时必须进行的工作 4. 看清楚一点 5. 多选结构的代…

Spring Boot日志:SLF4J和Logback

日志的分类 SpringBoot中的日志库分为两种&#xff1a; 实现库&#xff1a;提供具体的日志实现&#xff0c;例如日志级别的控制、打印格式、输出目标等。外观库&#xff1a;自身不提供日志实现&#xff0c;而是对其他日志库进行封装&#xff0c;从而方便使用。基于外观模式实…

Redis实战案例24-关注推送

1. Feed流实现方案 拉模式主要缺点&#xff0c;延迟问题&#xff0c;极端情况某个用户关注了成千上万的up主&#xff0c;每位up主又发布了十几条博客&#xff0c;此时拉模式的延迟就会很高&#xff1b; 推模式缺点也很明显&#xff0c;内存消耗太大&#xff0c;假设up主是千万级…

网络安全 Day20-计算机网络基础知识05(网络原理)

计算机网络基础知识05&#xff08;网络原理&#xff09; 1. OSI 模型2. VMware虚拟机NAT模式下上网原理3. 不能上网故障排查 1. OSI 模型 OSI 7层网络通信原理模型 OSI 国际网互联 OSI 数据包封装解封装过程 北京局域网主机A到深圳局域网主机B数据工作流程 2. VMware虚拟机N…

《零基础入门学习Python》第066讲:GUI的终极选择:Tkinter3

今天我们一起来学习三个组件&#xff1a;Checkbutton、Radiobutton 和 LabelFrame。 同样&#xff0c;我们还是通过案例来讲解。 一、Checkbutton Checkbutton&#xff08;多选框&#xff09;。大家都知道什么叫做“翻牌子”&#xff0c;今天的第一个例子就是来写一个翻牌子…

巅峰极客2023 hellosql

随便输一个payload&#xff0c;有waf 这题只有两个回显&#xff0c;分别是太酷啦和nonono&#xff0c;不显示报错、登录成功等各种信息&#xff0c;目前只能想到用时间盲注。 抓包fuzz&#xff0c;194都是被过滤的 不止这些&#xff0c;手工测出来if、sleep、benchmark、*、rp…

opencv-20 深入理解HSV 色彩空间(通过指定,标记颜色等来拓展ROI区域)

RGB 色彩空间是一种被广泛接受的色彩空间&#xff0c;但是该色彩空间过于抽象&#xff0c;我们不能够直接通过其值感知具体的色彩。 我们更习惯使用直观的方式来感知颜色&#xff0c;HSV 色彩空间提供了这样 的方式。 通过 HSV色彩空间&#xff0c;我们能够更加方便地通过色调、…

Keil系列教程08_Configuration(二)

1写在前面 本文接着上一篇文章《Keil系列教程07_Configuration&#xff08;一&#xff09;》讲述的工程目标选项的后三项配置&#xff1a;Shortcut Keys快捷键、Text Completion代码完形、Other其他。 这后面三部分内容在该系列教程其它也会牵涉&#xff0c;也是一些常用、重要…

idea中常用的快捷键

快捷键: 1.快速生成main方法 main/psvm public static void main(String[] args) {} 2.快速复制当前行的代码: ctrld 3.快速捕获异常: altctrlt 4.快速打印结果: sout/soutv System.out.println(s); System.out.println("s " s); 5.自动生成对象的返回值…

tinkerCAD案例:8.Cylinder Earrings 圆筒耳环

tinkerCAD案例&#xff1a;8.Cylinder Earrings 圆筒耳环 In this lesson you will learn how to create earrings using cylinder shapes. So let’s get started! 在本课中&#xff0c;您将学习如何使用圆柱形制作耳环。所以让我们开始吧&#xff01; 说明 Drag a Cylinder …

el-Cascader 中div上绑定keyDown事件

keydown&#xff0c;keyup&#xff0c;keypress 事件默认是给页面上可以聚焦的元素绑定键盘事件&#xff0c;例如input输入框&#xff0c;点击输入框即代表聚焦在该元素上。那么想要给div或者其他不能聚焦的元素上使用键盘事件怎么处理呢&#xff1f;这里用到tabindex属性。 …

SWF格式视频怎么转换成AVI格式?简单的转换方法分享

当你想要在不同的设备上播放视频时&#xff0c;将SWF格式视频转换成AVI格式是非常有用的。因为SWF格式通常只能在特定的软件或网页上播放&#xff0c;而AVI格式则可以在更广泛的设备上播放&#xff0c;包括智能手机&#xff0c;平板电脑和电视机等。那么我们怎么将SWF转换成AVI…

关于Nginx的 location 配置各种情况转换后的样子记录

Nginx location 配置要代理的地址测试URL代理后的URL举例编号/test01http://127.0.0.1:8080/test01/abc/test/test01/abc/test01/test02http://127.0.0.1:8080//test02/abc/test//abc/test02/test03/http://127.0.0.1:8080/test03/abc/test/test03/abc/test03/test04/http://12…

Drools用户手册翻译——第四章 Drools规则引擎(六)执行控制

主要讲了规则匹配时的优先级设置的方式。 甩锅声明&#xff1a;本人英语一般&#xff0c;翻译只是为了做个笔记&#xff0c;所以有翻译错误的地方&#xff0c;错就错了&#xff0c;如果你想给我纠正&#xff0c;就给我留言&#xff0c;我会改过来&#xff0c;如果懒得理我&…

css终极方案PostCSS

一见如故 原理 所有的css框架都在一样的事&#xff0c;那就是由一个css生成一个新的css&#xff0c;那么postcss就来做了一个抽离&#xff1a; 1、将原有的css解析成抽象语法树 2、中间经过若干个插件 3、重新文本化&#xff0c;形成新的css postcss.config.js module.expor…

Spring Cloud 负载平衡的意义什么?

目录 一、什么是负载平衡 二、为什么需要负载平衡 三、Spring Cloud 如何实现负载平衡 四、负载平衡的nginx配置 一、什么是负载平衡 负载平衡是指将网络流量在多个服务器之间分布&#xff0c;以达到提高系统性能、增强可靠性和提供更好用户体验的目的。在负载平衡的架构中…

32位Cortex-M4 MCU:LPC54607J256ET180E、LPC54605J512BD100K 180MHz嵌入式微控制器

LPC546xx 32 位微控制器(MCU) 具有丰富的外设集、极低的功耗和增强的调试功能。 LPC546xx MCU系列采用ARM Cortex-M4内核&#xff0c;可提供以太网支持&#xff0c;并设有一个TFT LCD控制器和两个CAN FD模块。LPC546xx MCU旨在提高灵活性和性能可扩展性&#xff0c;可提供高达1…

Java - 泛型

泛型 1、 当我们ArrayList表示存放到ArrayList集合中的元素是Dog类型时 2、如果编译器发现添加的类型&#xff0c;不满足要求&#xff0c;就会报错。 3、遍历的时候直接取出Dog类型&#xff0c;而不是Object。 ArrayList<Week> weeks1 new ArrayList<>();好处…

科研院所用泛微搭建信创办公平台,统一办公,业务融合,安全便捷

国家全面推动重要领域的信创改造工作&#xff0c;要求到2027年底&#xff0c;对综合办公、经营管理、生产运营等系统实现“应替尽替、能替则替”。 科研机构作为智力、知识密集型机构&#xff0c;承载着大量数据、信息资产&#xff0c;数字化程度高&#xff0c;业务系统多样&a…

SpringBoot项目修改Tomcat版本号

SpringBoot项目修改Tomcat版本号 前言如果项目是以jar包形式打包部署如果项目是以war包形式打包部署示例 仰天大笑出门去&#xff0c;我辈岂是蓬蒿人 前言 Springboot项目,默认是使用内嵌Tomcat servlet容器形式打包部署。关于怎么修改默认的版本号&#xff0c;捣鼓了好久终于…
最新文章