linux驱动-i2c子系统框架学习(2)

        linux驱动-i2c子系统框架学习(1)  在这篇博客里面已经交代了i2c设备驱动层,主要的功能就是编写具体i2c的外设驱动,和创建设备接点给上层使用 ,按之前学习的字符设备,有了设备节点,就可以对硬件操作了,在i2c子系统框架中,i2c设备驱动层并没有和硬件直接连接。是通过i2c核心层和i2c适配层才和硬件打交道。 为什么呢?

        了解之前,想看这里,看图,同一个i2c总线,是可以挂多个i2c外设,具体是 I2C使用7位地址空间,最多可寻址127个从设备。

        在处理器中,可以运行多个app应用程序,就好比如我们的手机,可以同时运行微信和qq,假设,外设是一个摄像头,微信和qq都想在同时使用摄像头,想操作这些外设,就必须先个给外设发一个起始信号,但是微信和qq都想用,都要发起起始信号,发信号就要通过SDA和SCL这两根线,这是后就有冲突了,怎么办?总不能微信跟qq说,你等一下我先用,协商一下,可能吗?并不能。

         那linux是怎么解决这个问题的?linux通过框架完美解决这个问题。

        假设应用层有三个app,同时访问一个硬件,他们就把数据交给核心层来安排,先处理谁,谁等待?完全是核心层说了算,就相当于一个大管家,不管是多少个应用想调用外设,都得听核心层安排,这个访问程序就不用应用程序去关心了,核心层就解决了冲突的问题。具体是怎么解决的,进行学习才行。

        i2c核心层拿到了这些数据,是不是要把它们发送出去,那么使用i2c进行通信,就要使用到SCL和SDA产生具体的时序,我的rk3568是有硬件产生的,就要用到i2c控制器,但是想要i2c能工作起来就要使用到了i2c适配层,因为i2c适配层的工作就是编写i2c控制器的驱动让i2c控制器工作起来。

        起始这个框架图可以分成三份。

i2c设备驱动层:

        在i2c设备驱动层,编写具体的i2c的驱动程序的时候,就不用相关时序相关的代码,比如产生一个起始信号的代码或者终止信号的代码。因为在linux框架中,是被放到了i2c适配器中。而框架中又把时序的代码拿了出去了,在不同的平台里面移植i2c外设驱动就简单了应该,因为不一样的已经被拿走了,通用性就高了。

i2c适配层: 

        i2c适配器是和硬件打交道的,让i2c控制器能正常工作,这就意味着,不同的平台硬件不一样比如NXP和RK的平台就不一样。这样的话i2c的适配层的代码不一样了,所以这一块东西就是原厂来编写的,但是未必能进原厂,但是时序这些东西还是需要懂的。

i2c核心层:   

        在编写具体的i2c驱动程序的时候我们要怎么弄i2c总线时序通信?时序相关的拿走了,那怎么通信?我在编写i2c具体程序的是对调用i2c核心层提供的函数就可以了

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

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

相关文章

Webserver(4.6)poll和epoll

目录 pollclient.cpoll.c epollepoll.cclient.c epoll的两种工作模式水平触发边沿触发 poll poll是对select的一个改进 select的缺点在于每次都需要将fd集合从用户态拷贝到内核态,开销很大。每次调用select都需要在内核遍历传递进来的所有fd,这个开销也…

Stable Diffusion的解读(一)

Stable Diffusion的解读(一) 文章目录 Stable Diffusion的解读(一)摘要Abstract一、机器学习部分1. Stable Diffusion的早期工作1.1 从编码器谈起1.2 第一条路线:VAE和DDPM1.3 第二条路线:VQVAE1.4 路线的交…

计算机网络——TCP篇

TCP篇 基本认知 TCP和UDP的区别? TCP 和 UDP 可以使用同一个端口吗? 可以的 传输层中 TCP 和 UDP在内核中是两个完全独立的软件模块。可以根据协议字段来选择不同的模块来处理。 TCP 连接建立 TCP 三次握手过程是怎样的? 一次握手:客户端发送带有 …

ROS话题通信机制理论模型的学习

话题通信是ROS(Robot Operating System,机器人操作系统)中使用频率最高的一种通信模式,其实现模型主要基于发布/订阅模式。 一、基本概念 话题通信模型中涉及三个主要角色: ROS Master(管理者&#xff0…

【Android】名不符实的Window类

1.“名不符实”的Window类 Window 是一个窗口的概念,是所有视图的载体,不管是 Activity,Dialog,还是 Toast,他们的视图都是附加在 Window 上面的。例如在桌面显示一个悬浮窗,就需要用到 Window 来实现。Wi…

后端java——如何为你的网页设置一个验证码

目录 1、工具的准备 2.基本方法 3.实现类 4.实践 HTML文件: Java文件1:创建验证码 Java文件2:验证验证码 本文通过HUTOOL实现:Hutool参考文档Hutool,Java工具集https://hutool.cn/docs/#/ 1、工具的准备 如果我们通过hutool来实现这个…

【go从零单排】Strings and Runes 字符串和字符

Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 概念 在Go语言中,rune 是一个内置的数据类型,用于表示一个Unicode字符。它实际上是一个别名…

如何在本地Linux服务器搭建WordPress网站结合内网穿透随时随地可访问

文章目录 前言1. 安装WordPress2. 创建WordPress数据库3. 安装相对URL插件4. 安装内网穿透发布网站4.1 命令行方式:4.2. 配置wordpress公网地址 5. 配置WordPress固定公网地址 前言 本文主要介绍如何在Linux Ubuntu系统上使用WordPress搭建一个本地网站&#xff0c…

vue data变量之间相互赋值或进行数据联动

摘要: 使用vue时开发会用到data中是数据是相互驱动,经常会想到watch,computed,总结一下! 直接赋值: 在 data 函数中定义的变量可以直接在方法中进行赋值。 export default {data() {return {a: 1,b: 2};},methods: {u…

在 Java 中使用脚本语言

在 Java 中使用脚本语言,特别是在 Java 平台上集成如 Python、JavaScript 或 Ruby 等语言,通常可以通过 Java 的 Scripting API 来实现。这个 API 基于 JSR 223(“Scripting for the Java Platform”),提供了一种标准方…

大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

微服务系列六:分布式事务与seata

目录 实验环境说明 前言 一、分布式事务问题与策略 1.1 分布式事务介绍 1.2 分布式事务解决策略分析 二、分布式事务解决方案 Seata 2.1 认识Seata 2.2 Seata的工作原理 2.3 部署Seata微服务 2.3.1 准备数据库表 2.3.2 准备配置文件 2.3.3 docker部署 2.4 微服务集…

Java 上机实践2(基础数据类型与数组)

(大家好,今天分享的是Java的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 实验一:输出希腊字母表 一、实验目的 二、实验要求 三、程序代码 四、实验结果 实验二:…

w024基于SpringBoot的企业客户管理系统的设计与实现

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文件&#xff0…

并发编程volatile精解

多线程下变量的不可见性 在多线程并发执行的情况下,多个线程修改共享的成员变量,会出现一个线程修改了共享变量的值后,另一个线程不能直接看到该线程修改后的变量最新值。(多线程下修改共享变量会出现变量修改值后的不可见性) 可见性问题…

十款外贸软件盘点,专注企业订单业务管理

在当今全球化的市场环境中,外贸企业的发展面临着诸多挑战与机遇。如何高效管理企业业务,提升运营效率,成为外贸企业在激烈竞争中脱颖而出的关键。外贸业务管理ERP软件作为一种强大的工具,能够整合企业资源、优化管理流程、实现数据…

yaml文件编写

Kubernetes 支持YAML和JSON格式管理资源 JSON 格式:主要用于 api 接口之间消息的传递 YAML 格式;用于配置和管理,YAML是一种简洁的非标记性语言,内容格式人性化容易读懂 一,yaml语法格式 1.1 基本语法规则 使用空格进行缩进(不使用制表符&#xff0…

Node.js 全栈开发进阶篇

​🌈个人主页:前端青山 🔥系列专栏:node.js篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:node.js- 全栈开发进阶篇 前言 大家好,我是青山。在上一篇文章中,…

Vue(JavaScript)读取csv表格并求某一列之和(大浮点数处理: decimal.js)

文章目录 想要读这个表格,并且求第二列所有价格的和方法一:通过添加文件输入元素上传csv完整(正确)代码之前的错误部分因为价格是小数,所以下面的代码出错。如果把parseFloat改成parseInt,那么求和没有意义…

C语言初阶必会的练习题(3)之位操作符(^ 、、>>等)的应用

C语言初阶必会的练习题(3) 放在最前面的1、不允许创建临时变量,交换两个整数的内容1.1、分析:见代码注释(a)方法 1(b)方法 2 1.2、结果展示方法 1 的 结果:方法 2 的 结果…