linux下gpio模拟spi三线时序
目录
- 前言
- 一、配置内容
- 二、驱动代码实现
- 三、总结
前言
本笔记总结linux下使用gpio模拟spi时序的方法,基于arm64架构的一个SOC,linux内核版本为linux5.10.xxx,以驱动三线spi(时钟线sclk,片选cs,sdata数据读和写使用同一个数据线进行分时复用做半双工)的hmc704x为例;
一、配置内容
设备树配置
1.在芯片的引脚模式寄存器中配置 cs ,sclk , mosi ,miso为 gpio模式;
2.在spi控制器下添加pinctrl-x = 引脚引用,对引脚的模式进行生效
;
3.在spi控制器的节点下添加spi从设备节点,并定义cs,sclk,mosi,miso的gpio属性:
spics = <引用>;
spiclk = <引用>;
spimiso = <引用>;
spimosi = <引用>;
二、驱动代码实现
1、gpio请求
int spics_gpio = 0;
int spiclk_gpio = 0;
int spimiso_gpio = 0;
int spimosi_gpio = 0;
void xxx_probe(xxxx)
{spics_gpio = of_get_named_gpio(spi->dev.of_node,"spics",0);if(spics_gpio<0){printk("faild to request gpio!\n");}gpio_request(spics_gpio,NULL);gpio_direction_output(spics_gpio,0);spiclk_gpio = of_get_named_gpio(spi->dev.of_node,"spiclk",0);if(spics_gpio<0){printk("faild to request gpio!\n");}printk("get GPIO%d\n",spiclk_gpio);gpio_request(spiclk_gpio,NULL);gpio_direction_output(spiclk_gpio,0);spimiso_gpio = of_get_named_gpio(spi->dev.of_node,"spimiso",0);
if(spimiso_gpio<0){printk("faild to request gpio!\n");
}
gpio_request(spimiso_gpio,NULL);gpio_direction_output(spimiso_gpio,0);spimosi_gpio = of_get_named_gpio(spi->dev.of_node,"spimosi",0);if(spimosi_gpio<0){printk("faild to request gpio!\n");}
gpio_request(spimosi_gpio,NULL);gpio_direction_output(spimosi_gpio,0);
}
2、读写函数实现
读写时序
读函数
#define HMC7044_WRITE (0 << 15)
#define HMC7044_READ (1 << 15)
#define HMC7044_CNT(x) (((x) - 1) << 13)
#define HMC7044_ADDR(x) ((x) & 0xFFF)static int xxx_read(unsigned int reg,unsigned int *val)
{u16 cmd,i;u32 data,datatemp;uint8_t tempvalue = 0;cmd = HMC7044_READ | HMC7044_CNT(1) | HMC7044_ADDR(reg);data = cmd; gpio_direction_output(spimosi_gpio,0);gpio_set_value(spics_gpio,1);gpio_set_value(spiclk_gpio,0);gpio_set_value(spimosi_gpio,0);udelay(5);gpio_set_value(spics_gpio,0);for(i=0;i<16;i++){gpio_set_value(spiclk_gpio,0);datatemp = ((data>>(15-i)) & 0x1);if(datatemp>0) gpio_set_value(spimosi_gpio,1);else gpio_set_value(spimosi_gpio,0);udelay(5);gpio_set_value(spiclk_gpio,1);udelay(5);}gpio_direction_input(spimosi_gpio);for(i=0;i<8;i++){gpio_set_value(spiclk_gpio,0);udelay(5);tempvalue<<=1;gpio_set_value(spiclk_gpio,1);if(gpio_get_value(spimosi_gpio)){tempvalue++;}udelay(5);}gpio_set_value(spics_gpio,1);*val = tempvalue;return 0;
}
写函数
static int xxx_write(unsigned int reg,unsigned int val)
{ u16 cmd,i;u32 data,datatemp;cmd = HMC7044_WRITE | HMC7044_CNT(1) | HMC7044_ADDR(reg);data = (cmd << 8) | (val & 0xFF);gpio_direction_output(spimosi_gpio,0);gpio_set_value(spics_gpio,1); gpio_set_value(spiclk_gpio,0);gpio_set_value(spimosi_gpio,0);udelay(5);gpio_set_value(spics_gpio,0);for(i=0;i<24;i++){gpio_set_value(spiclk_gpio,0);datatemp = ((data>>(23-i)) & 0x1);if(datatemp>0) gpio_set_value(spimosi_gpio,1); else gpio_set_value(spimosi_gpio,0);udelay(5);gpio_set_value(spiclk_gpio,1);udelay(5);}gpio_set_value(spics_gpio,1);return 0;
}
三、总结
具体的芯片读写协议不一样,按具体spi时序协议做相应修改即可;
相关文章:
linux下gpio模拟spi三线时序
目录 前言一、配置内容二、驱动代码实现三、总结 前言 本笔记总结linux下使用gpio模拟spi时序的方法,基于arm64架构的一个SOC,linux内核版本为linux5.10.xxx,以驱动三线spi(时钟线sclk,片选cs,sdata数据读和写使用同一…...
makesense导出的压缩包是空的
md ,那些教程感觉都不是人写的,没说要在右边选标签,我本来就是一个标签,我以为他会自动识别打标,结果死活导出来空包 密码要在右边选标签,...
Spring Boot框架下的中小企业设备维护系统
5系统详细实现 5.1 用户信息管理 中小企业设备管理系统的系统管理员可以对用户信息添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.2 员工信息管理 管理员可以对员工信息进行添加修改删除操作。具体界面如图5.2所示。 图5.2 员工信息界面…...
处理文件上传和进度条的显示(进度条随文件上传进度值变化)
成品效果图: 解决问题:上传文件过大时,等待时间过长,但是进度条却不会动,只会在上传完成之后才会显示上传完成 上传文件的upload.component.html <nz-modal [(nzVisible)]"isVisible" [nzTitle]"文…...
【套题】大沥2019年真题——第5题
05.魔术数组 题目描述 一个 N 行 N 列的二维数组,如果它满足如下的特性,则成为“魔术数组”: 1、从二维数组任意选出 N 个整数。 2、选出的 N 个整数都是在不同的行且在不同的列。 3、在满足上述两个条件下,任意选出来的 N 个整…...
上传Gitee仓库流程图
推荐一个流程图工具 登录 | ProcessOnProcessOn是一个在线协作绘图平台,为用户提供强大、易用的作图工具!支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同时依托于互联网实现了人与人之间的…...
二叉树相关OJ题 — 第一弹
目录 1. 检验两棵树是否相同 编辑 1. 题目解析 2. 解题步骤 2.判断一棵大树中是否包含有和一棵小树具有相同结构和节点值的子树 1. 题目解析 2. 解题步骤 3. 翻转二叉树 1. 题目解析 2.解题步骤 4. 判断一颗二叉树是否是平衡二叉树 1. 题目解析 2. 解题步骤…...
【学习笔记】RFID
RFID 1、 概述 1.1、RFID 介绍 1.2、RFID 发展史 1.3、RFID 系统的构造 1.3.1、阅读器 Reader 和 天线 Antenna 1.3.3、电子标签 tag 1.4、电子标签按吐字率分类 1.5、电子标签按能量供应的方式划分 1.6、RFID 工作流程 …...
自动化部署-01-jenkins安装
文章目录 前言一、下载安装二、启动三、问题3.1 jdk版本问题3.2 端口冲突3.3 库文件加载问题3.4 系统字体配置问题 四、再次启动五、配置jenkins5.1 解锁5.2 安装插件5.3 创建管理员用户5.4 实例配置5.5 开始使用5.6 完成 总结 前言 spingcloud微服务等每次部署到服务器上&…...
AI工具大爆发,建议每个都使用收藏
2024年被誉为AI应用元年,这一年人们普遍意识到,未来占据主导地位的将是基于大模型的应用程序,而不仅仅是大模型本身。因此,在这一趋势的推动下,各式各样的AI应用如雨后春笋般涌现出来。 今天就聊聊这些好用的AI工具&a…...
Mybatis之参数处理
在MyBatis中,参数处理是非常关键的部分,它负责将传入的参数正确映射到SQL语句中 单个简单类型参数 简单类型对于mybatis来说都是可以自动类型识别的: 也就是说对于mybatis来说,它是可以自动推断出ps.setXxxx()方法的。ps.setSt…...
windows内核探索--打印windows的GDT表(全局描述符表)
x86 #include <windows.h> #include<stdio.h> #include "x86struct.h" void PrintSegmentDescriptor(ULONG64* sd, WORD Count); SegmentSelector GetSegmentSelector(USHORT Selector); int main() {printf("0环cs段寄存器 ");GetSegmentSel…...
【ChatGPT】让ChatGPT帮助进行头脑风暴与创意生成
让ChatGPT帮助进行头脑风暴与创意生成 在日常工作和生活中,创意和头脑风暴是解决问题、创新和推动项目的关键步骤。ChatGPT,作为一个强大的语言模型,不仅可以提供信息和答案,还可以成为强大的头脑风暴工具,帮助用户快…...
大数据处理随堂测试
HDFS MapReduce HBase Spark...
2024最新pycharm安装教程及基本使用(超详细,新手小白必看)
文章目录 前言一、官网下载二、安装步骤三、使用示范四、番外篇(汉)大纲 PythonPyCharm安装包领取方式戳‘这块里’ 前言 一、官网下载 1. 进入pycharm官网,点击下载 PyCharm: The Python IDE for data science and web development by J…...
三国杀钓鱼自动化
三国杀钓鱼脚本 前言 本来是想做必杀的,但是后来测试了大约400钓发现纯靠连点没有漏掉的鱼,所以必杀功能就舍弃了。 我pyinstaller打包后运行.exe居然黑屏了???可能是多进程报错处理没写好,反正还是用vsc…...
在pycharm中使用sqllite
在pycharm中使用sqllite sqllite 简介 SQLite 是一个开源的、轻量级的、关系型数据库管理系统(RDBMS),它设计用于嵌入到应用程序中,并且可以在无需外部服务器进程的情况下运行。SQLite 提供了完整的 SQL 语言支持,允…...
Linux——文件操作
前言 1)在Linux下面,一切皆文件,文件文件内容文件属性 2)在访问文件是,都得先将文件打开,修改文件的本质其实还是通过执行代码的形式修改。 3)文件是被进程打开的,一个进程可以打…...
数据结构 ——— 数组栈oj题:有效括号
目录 题目要求 代码实现 题目要求 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每…...
Character AI被起诉!14岁青少年自杀,AI陪伴何去何从
终于,AI在青少年心理问题方面,被推上了风口浪尖。 最近,美国佛罗里达州,一名14岁男孩Sewell Setzer的父母控告Character AI公司,声称孩子沉迷该公司的AI聊天机器人,最后走上了自杀的道路。 跟AI聊天还能致…...
vscode-drawio扩展依赖更新:安全高效地管理第三方库
vscode-drawio扩展依赖更新:安全高效地管理第三方库 【免费下载链接】vscode-drawio This unofficial extension integrates Draw.io (also known as diagrams.net) into VS Code. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-drawio vscode-drawio…...
NaViL-9B效果实测:支持中英文混排表格图像的行列结构识别与内容提取
NaViL-9B效果实测:支持中英文混排表格图像的行列结构识别与内容提取 1. 模型介绍 NaViL-9B是新一代原生多模态大语言模型,专为处理复杂视觉-语言任务设计。与常规视觉模型不同,它不仅能够理解图片内容,还能精准解析表格、文档等…...
物联网水产养殖监控系统:智能联动,实现养殖设备自动调控
一、应用背景 水产养殖是我国农业经济的重要组成部分,传统养殖模式长期依赖人工巡检、经验判断,存在诸多难以破解的行业痛点,严重制约养殖效益与产业可持续发展。随着物联网、大数据、边缘计算、无线通信技术的成熟,搭建智能化、数…...
IT 流程越来越完整,但管理反而变得更难了
在很多企业的 IT 管理过程中,一个非常明显的趋势是:流程在不断增加。 从最初的简单问题处理,到后来的事件管理、问题管理、变更管理,再到审批流程、发布流程,各类流程逐渐被建立起来。从管理角度看,这是一种…...
企业级React UI组件库实战指南:Element React深度解析与最佳实践
企业级React UI组件库实战指南:Element React深度解析与最佳实践 【免费下载链接】element-react Element UI 项目地址: https://gitcode.com/gh_mirrors/el/element-react Element React作为一款专业的企业级React UI组件库,为现代前端开发提供了…...
GLM-OCR在ComfyUI工作流中的应用:构建可视化OCR处理节点
GLM-OCR在ComfyUI工作流中的应用:构建可视化OCR处理节点 如果你经常用ComfyUI做图片生成或者编辑,可能会遇到一个挺麻烦的事儿:怎么把图片里的文字快速提取出来,然后用到下一步工作流里?比如,你想把一张海…...
合肥高中英语一对一辅导2026指南,突破听说读写全面提升路径
合肥高中英语一对一辅导2026指南,突破听说读写全面提升路径据《2026年中国基础教育课外辅导行业白皮书》数据显示,2026年高中阶段英语学科辅导需求同比增长23%,其中超过65%的学生家长明确表示,传统大班教学已无法满足孩子个性化提…...
SEO_详解SEO优化的完整工作流程与执行要点
<h2>SEO优化的重要性</h2> <p>在当前数字化时代,网站的可见度和流量直接关系到企业的市场竞争力。搜索引擎优化(SEO)作为提升网站在搜索引擎中排名的关键手段,其重要性不言而喻。SEO不仅能帮助企业吸引更多的自…...
保姆级教程:在NUC12Pro上配置Ego_planner无人机自主飞行系统(含D435i与Pixhawk 6C)
在NUC12Pro上构建Ego_planner无人机自主飞行系统的全流程指南 当硬件堆满工作台时,最令人兴奋的莫过于将它们组装成一个能自主思考的飞行系统。本文将带您完成从零搭建基于NUC12Pro、D435i深度相机和Pixhawk 6C飞控的完整解决方案,重点解决那些官方文档从…...
隔离变送器VS普通变送器:为什么你的PLC信号总受干扰?(实测XYS-5531抗干扰性能)
隔离变送器VS普通变送器:为什么你的PLC信号总受干扰?(实测XYS-5531抗干扰性能) 在工业自动化现场,信号干扰就像潜伏的"隐形杀手"——它不会直接摧毁设备,却能让控制系统频繁误动作、数据采集失真…...
