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

news2024/11/24 15:21:59

硬件连接示意图

在这里插入图片描述
主控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.coloradmin.cn/o/785554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytest 第三方插件

目录 前言&#xff1a; 顺序执行&#xff1a;pytest-ordering 失败重试&#xff1a;pytest-rerunfailures 并行执行&#xff1a;pytest-xdist 前言&#xff1a; pytest 是一个广泛使用的 Python 测试框架。它具有强大的测试运行器、测试驱动开发和测试结果可视化等功能。除…

《面试1v1》如何能从Kafka得到准确的信息

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…

对高校数字化转型的思考

数字新技术与国民经济各产业的融合深化&#xff0c;使行业产业数字化、网络化、全球化、知识化、智能化趋势愈发显著&#xff0c;深刻改变着人的职业生涯、现代社会对人才的需求和新型就业形式&#xff0c;引发教育资源、形态和范式的深刻变革。数字化转型对于提高学校管理效率…

Redis简介、常用命令

目录 一、​​关系数据库​​与非关系型数据库概述 1.1 关系型数据库 1.2 非关系型数据库 二、关系数据库与非关系型数据库区别 2.1 数据存储方式不同 2.2 扩展方式不同 2.3 对事务性的支持不同 三、非关系型数据库产生背景 四、Redis简介 4.1 Redis的单线程模式 4.…

Linux系列---【Ubuntu 20.04安装KVM】

Ubuntu 20.04安装KVM 一、安装kvm 1.安装kvm sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils 2. 将当前用户添加至libvirt 、 kvm组 sudo adduser $USER libvirt sudo adduser $USER kvm 3.验证安装 virsh list --all 4.启动libvert sudo syst…

Jmeter 压测实战:Jmeter 二次开发之自定义函数

目录 1 前言 2 开发准备 3 自定义函数核心实现 3.1 新建项目 3.2 继承实现 AbstractFunction 类 3.3 最终项目结构 4 Jmeter 加载扩展包 4.1 maven 构建配置 4.2 项目打包 4.3 Jmeter 加载扩展包 5 自定义函数调用调试 5.1 打开 Jmeter 函数助手&#xff0c;选择自…

0基础学习VR全景平台篇 第70篇:VR直播-如何设置付费观看、试看

对于拥有优质内容的VR直播&#xff0c;可以通过付费观看的方式进行内容变现&#xff0c;是当下非常流行的商业模式。 付费价格&#xff1e;0时便会自动弹出“试看时间”的设置项。试看时间&#xff1d;0秒时&#xff0c;用户进入直播间需要先付费才可观看&#xff1b;试看时间&…

【JVM】详解JVM的五大内存模型、可能出现的异常以及堆栈引用易错点

文章目录 1、堆(线程共享)2、方法区(线程共享)3、虚拟机栈&#xff08;线程私有&#xff09;4、本地方法栈(线程私有)5、程序计数器(线程私有)6、易错点 源自&#xff1a;深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践&#xff08;第3版&#xff09; 周志明 1、堆(线程…

Docker 镜像构建 搭建分布式LNMP论坛 实践

地址规划 nginx 172.18.0.10 mysql 172.18.0.20 php 172.18.0.30 宿主机准备 拉取镜像&#xff0c;下面以此镜像为基础 docker pull centos:7 创建自定义网段以便指定 IP 不变动 docker network create --subnet172.18.0.0/16 --opt "com.docker.network.bridge.na…

【计算机网络】计算机网络基础知识总结(秋招篇)

文章目录 前言计算机网络笔记TCP和UDP分别是什么 有什么区别基于TCP UDP这两个协议的上层协议有哪些&#xff1f;TCP和UDP分别在哪些领域被用的多&#xff1f;TCP实现可靠性传输用了哪些技术&#xff1f;&#xff08;TCP如何实现可靠性传输&#xff09;讲一下超时重传和超时定时…

T3/A40i支持Linux-5.10新内核啦,Docker、Qt、Python统统升级!

自2021年创龙科技推出全志国产化率100%的T3/A40i工业核心板后&#xff0c;不到两年时间已超过800家工业客户选择创龙科技T3/A40i平台。随着客户产品的不断升级与迭代&#xff0c;部分“能源电力”、“工业自动化”行业客户对T3/A40i的Linux版本提出了更高要求&#xff0c;主要涉…

Jmeter查看结果树之查看响应的13种详解方法

Jmeter查看结果树查看响应有哪几种方法&#xff0c;可通过左侧面板底部的下拉框选择: 01 Text 查看结果树中请求的默认格式为Text&#xff0c;显示取样器结果、请求、响应数据3个部分内容。 取样器结果&#xff1a; 默认Raw展示&#xff0c;可以切换为Parsed视图&#xff0c…

用i18next使你的应用国际化-Next.js(App router)

安装插件 npm install i18next react-i18next i18next-resources-to-backend1. 目录结构 . └── app└── [lng]├── second-page| └── page.js├── layout.js└── page.jsapp/[lng]/page.js文件&#xff1a; import Link from next/linkexport default funct…

新增WebDB和ChatGPT组件,支持对ChatGPT资产进行纳管,JumpServer堡垒机v3.5.0发布

2023年7月24日&#xff0c;JumpServer开源堡垒机正式发布v3.5.0版本。在这一版本中&#xff0c;新生代数据库连接组件——问题终结者Chen强势来袭&#xff0c;替代原有的OmniDB组件&#xff0c;在兼容旧版本的同时&#xff0c;解决了旧组件性能不足的问题&#xff0c;为用户提供…

Matlab进阶绘图第23期—密度散点图

密度散点图本质上是一种特征渲染的散点图&#xff0c;其颜色表示某一点所在区域的密度信息。 除了作图&#xff0c;密度散点图绘制的关键还在于密度的计算。 当然&#xff0c;不管是作图还是密度的计算&#xff0c;这些在《Matlab论文插图绘制模板》和《Matlab点云处理及可视…

什么是PostgreSQL?简要介绍其主要特点和用途

PostgreSQL是一种开源的关系型数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;它是最强大和广泛使用的开源数据库之一。PostgreSQL的名称起源于其前身&#xff0c;称为"Ingres"项目&#xff0c;后来被命名为Postgres&#xff0c;而PostgreSQL则是它的进一步…

tinkerCAD案例:7.Skull Button 骷髅纽扣

tinkerCAD案例&#xff1a;7.Skull Button 骷髅纽扣 In this lesson you will learn to make a skull shaped button. Let’s get started! 在本课中&#xff0c;您将学习制作一个骷髅形按钮。让我们开始吧&#xff01; 说明 Drag a Cylinder shape to the workplane. 将“圆柱…

ABAP中截取字符串中间位数常规方法

问题&#xff1a;截取字符串“SNTY2TI 071082241AF”中07108&#xff0c;常规字符串截取方法。 这里直接上代码&#xff1a; REPORT zsy_zm_test19. DATA:lv_datum TYPE sy-datum VALUE 20230428,lv_datum2 TYPE sy-datum VALUE 20220522. DATA:lv_num TYPE i. DATA:lv_strin…

Python基于PyTorch实现卷积神经网络分类模型(CNN分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 卷积神经网络&#xff0c;简称为卷积网络&#xff0c;与普通神经网络的区别是它的卷积层内的神经元只覆…

三个月诞生79个基础大模型,企业选用大模型需要注意些什么?

自从ChatGPT横空出世&#xff0c;各类大模型层出不穷&#xff0c;竞争也日渐激烈&#xff0c;可谓“乱花渐欲迷人眼”。 随着大公司的入场&#xff0c;无疑给创业公司带来了降维打击&#xff0c;创业公司随时可能倒掉&#xff0c;造成项目烂尾。 我也一直在关注大模型领域的最…